Skip to content
  • commit-queue@webkit.org's avatar
    [WK2] Add support for Web Intents MessagePorts · 6ff3153f
    commit-queue@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=89072
    
    Patch by Christophe Dumez <christophe.dumez@intel.com> on 2012-08-15
    Reviewed by Kenneth Rohde Christiansen.
    
    Source/WebKit2:
    
    Add support for WebIntents MessagePorts in WebKit2.
    MessagePorts can be passed with a Web Intent in
    order to open a direct communication channel
    between the Web application and the intent service.
    
    This functionality is already supported by WebKit 1.
    
    This patch introduces a new InjectedBundleIntent
    class which wraps a WebCore::Intent. This way
    information regarding the MessagePorts in a Web
    Intent is kept when using an injected bundle.
    
    For the UIProcess, WebIntentData now carries
    identifiers for the MessagePorts which can go over
    IPC. Those identifiers map to actual MessagePorts
    stored in the Web process. This way, when the UI
    delivers an intent to a frame, we can get back the
    corresponding MessagePorts from the Web process
    before delivering the intent to the DOMWindow.
    
    This functionality is already tested by:
    
    - webintents/web-intents-invoke-port.html
    - webintents/web-intents-obj-constructor.html
    
    * CMakeLists.txt:
    * GNUmakefile.list.am:
    * Shared/API/c/WKBase.h:
    * Shared/APIObject.h:
    * Shared/IntentData.cpp: Add MessagePort identifiers.
    (WebKit::IntentData::IntentData):
    (WebKit::IntentData::encode):
    (WebKit::IntentData::decode):
    * Shared/IntentData.h:
    (IntentData):
    * Target.pri:
    * UIProcess/API/C/WKIntentData.cpp: Rename WKIntentDataCopyExtra() to
    WKIntentDataCopyExtraValue() for clarity.
    (WKIntentDataCopyExtraValue):
    * UIProcess/API/C/WKIntentData.h: Remove WKIntentDataCreate() function now
    that WTR uses WKBundleIntentCreate() instead.
    * UIProcess/API/efl/ewk_intent.cpp:
    (ewk_intent_extra_get): Use WKIntentDataCopyExtraValue() instead of
    WKIntentDataCopyExtra() since it was renamed.
    * UIProcess/WebIntentData.cpp:
    (WebKit::WebIntentData::WebIntentData):
    (WebKit::WebIntentData::~WebIntentData): Remove MessagePorts from WebProcess upon
    WebIntentData destruction.
    (WebKit):
    (WebKit::WebIntentData::extras):
    * UIProcess/WebIntentData.h:
    (WebKit):
    (WebKit::WebIntentData::create):
    (WebIntentData):
    * UIProcess/WebPageProxy.cpp:
    (WebKit::WebPageProxy::didReceiveIntentForFrame):
    * UIProcess/WebProcessProxy.cpp:
    (WebKit):
    (WebKit::WebProcessProxy::removeMessagePortChannel):
    * UIProcess/WebProcessProxy.h:
    (WebProcessProxy):
    * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
    (WebKit):
    * WebProcess/InjectedBundle/API/c/WKBundleIntent.cpp: Copied from Source/WebKit2/UIProcess/API/C/WKIntentData.cpp.
    (WKBundleIntentGetTypeID):
    (WKBundleIntentCreate):
    (WKBundleIntentCopyAction):
    (WKBundleIntentCopyType):
    (WKBundleIntentCopyService):
    (WKBundleIntentCopySuggestions):
    (WKBundleIntentCopyExtraValue):
    (WKBundleIntentCopyExtras):
    (WKBundleIntentMessagePortCount):
    * WebProcess/InjectedBundle/API/c/WKBundleIntent.h: Copied from Source/WebKit2/UIProcess/API/C/WKIntentData.h.
    * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.cpp:
    (WKBundleIntentRequestCopyIntent):
    * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.h:
    * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
    (WKBundlePageDeliverIntentToFrame):
    * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
    * WebProcess/InjectedBundle/InjectedBundleIntent.cpp: Copied from Source/WebKit2/UIProcess/WebIntentData.cpp.
    (WebKit):
    (WebKit::InjectedBundleIntent::create):
    (WebKit::InjectedBundleIntent::InjectedBundleIntent):
    (WebKit::InjectedBundleIntent::action):
    (WebKit::InjectedBundleIntent::payloadType):
    (WebKit::InjectedBundleIntent::service):
    (WebKit::InjectedBundleIntent::data):
    (WebKit::InjectedBundleIntent::extra):
    (WebKit::InjectedBundleIntent::extras):
    (WebKit::InjectedBundleIntent::suggestions):
    * WebProcess/InjectedBundle/InjectedBundleIntent.h: Copied from Source/WebKit2/UIProcess/WebIntentData.h.
    (WebKit):
    (InjectedBundleIntent):
    (WebKit::InjectedBundleIntent::coreIntent):
    (WebKit::InjectedBundleIntent::type):
    * WebProcess/InjectedBundle/InjectedBundleIntentRequest.cpp:
    (WebKit::InjectedBundleIntentRequest::intent):
    * WebProcess/InjectedBundle/InjectedBundleIntentRequest.h:
    (WebKit):
    (InjectedBundleIntentRequest):
    * WebProcess/WebPage/WebFrame.cpp:
    (WebKit::WebFrame::deliverIntent):
    (WebKit):
    * WebProcess/WebPage/WebFrame.h:
    (WebCore):
    (WebFrame):
    * WebProcess/WebPage/WebPage.cpp:
    (WebKit):
    (WebKit::WebPage::deliverCoreIntentToFrame):
    * WebProcess/WebPage/WebPage.h:
    (WebCore):
    (WebPage):
    * WebProcess/WebProcess.cpp: Store MessagePorts in WebProcess and keep mapping with
    their identifiers.
    (WebKit):
    (WebKit::WebProcess::addMessagePortChannel):
    (WebKit::WebProcess::messagePortChannel):
    (WebKit::WebProcess::removeMessagePortChannel):
    * WebProcess/WebProcess.h:
    (WebCore):
    (WebProcess):
    * WebProcess/WebProcess.messages.in:
    
    Tools:
    
    Use WKBundleIntent instead of WebIntentData in
    WebKitTestRunner. WTR now prints the number of
    MessagePorts in received Web intents as
    expected by the following layout tests:
    webintents/web-intents-invoke-port.html
    webintents/web-intents-obj-constructor.html
    
    * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
    (WTR::InjectedBundlePage::didReceiveIntentForFrame):
    * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
    (WTR::LayoutTestController::deliverWebIntent):
    
    LayoutTests:
    
    Unskip webintents/web-intents-invoke-port.html and
    webintents/web-intents-obj-constructor.html for
    WebKit2 EFL now that information about message ports
    is correctly displayed by WebKitTestRunner.
    
    * platform/efl-wk2/TestExpectations:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@125670 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    6ff3153f