Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 768d5fda2fd7eb80d4e7c258b311125953e6206e Mon Sep 17 00:00:00 2001
- From: Igor Trindade Oliveira <igor@Cygnus.(none)>
- Date: Wed, 14 Sep 2011 14:50:44 -0400
- Subject: [PATCH] [WK2] WebProcess needs to send HitTestResult information to UiProcess
- ---
- Source/WebKit2/Shared/API/c/WKBase.h | 1 +
- Source/WebKit2/Shared/APIObject.h | 1 +
- Source/WebKit2/Shared/WebHitTestResult.cpp | 58 +++++++++++++++
- Source/WebKit2/Shared/WebHitTestResult.h | 78 ++++++++++++++++++++
- Source/WebKit2/UIProcess/API/C/WKAPICast.h | 2 +
- Source/WebKit2/UIProcess/API/C/WKPage.h | 2 +-
- Source/WebKit2/UIProcess/WebPageProxy.cpp | 4 +-
- Source/WebKit2/UIProcess/WebPageProxy.h | 4 +-
- Source/WebKit2/UIProcess/WebPageProxy.messages.in | 2 +-
- Source/WebKit2/UIProcess/WebUIClient.cpp | 5 +-
- Source/WebKit2/UIProcess/WebUIClient.h | 3 +-
- Source/WebKit2/WebKit2.pro | 2 +
- .../WebProcess/WebCoreSupport/WebChromeClient.cpp | 9 ++-
- 13 files changed, 162 insertions(+), 9 deletions(-)
- create mode 100644 Source/WebKit2/Shared/WebHitTestResult.cpp
- create mode 100644 Source/WebKit2/Shared/WebHitTestResult.h
- diff --git a/Source/WebKit2/Shared/API/c/WKBase.h b/Source/WebKit2/Shared/API/c/WKBase.h
- index 1baa872..e89504e 100644
- --- a/Source/WebKit2/Shared/API/c/WKBase.h
- +++ b/Source/WebKit2/Shared/API/c/WKBase.h
- @@ -84,6 +84,7 @@ typedef const struct OpaqueWKFramePolicyListener* WKFramePolicyListenerRef;
- typedef const struct OpaqueWKGeolocationManager* WKGeolocationManagerRef;
- typedef const struct OpaqueWKGeolocationPermissionRequest* WKGeolocationPermissionRequestRef;
- typedef const struct OpaqueWKGeolocationPosition* WKGeolocationPositionRef;
- +typedef const struct OpaqueWKHitTestResult* WKHitTestResultRef;
- typedef const struct OpaqueWKIconDatabase* WKIconDatabaseRef;
- typedef const struct OpaqueWKInspector* WKInspectorRef;
- typedef const struct OpaqueWKKeyValueStorageManager* WKKeyValueStorageManagerRef;
- diff --git a/Source/WebKit2/Shared/APIObject.h b/Source/WebKit2/Shared/APIObject.h
- index e5a7eed..7916bf4 100644
- --- a/Source/WebKit2/Shared/APIObject.h
- +++ b/Source/WebKit2/Shared/APIObject.h
- @@ -75,6 +75,7 @@ public:
- TypeFullScreenManager,
- TypeGeolocationManager,
- TypeGeolocationPermissionRequest,
- + TypeHitTestResult,
- TypeGeolocationPosition,
- TypeIconDatabase,
- TypeInspector,
- diff --git a/Source/WebKit2/Shared/WebHitTestResult.cpp b/Source/WebKit2/Shared/WebHitTestResult.cpp
- new file mode 100644
- index 0000000..f04b847
- --- /dev/null
- +++ b/Source/WebKit2/Shared/WebHitTestResult.cpp
- @@ -0,0 +1,58 @@
- +/*
- + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
- + *
- + * This library is free software; you can redistribute it and/or
- + * modify it under the terms of the GNU Library General Public
- + * License as published by the Free Software Foundation; either
- + * version 2 of the License, or (at your option) any later version.
- + *
- + * This library is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * Library General Public License for more details.
- + *
- + * You should have received a copy of the GNU Library General Public License
- + * along with this library; see the file COPYING.LIB. If not, write to
- + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- + * Boston, MA 02110-1301, USA.
- + */
- +
- +#include "config.h"
- +#include "WebHitTestResult.h"
- +
- +#include "WebCoreArgumentCoders.h"
- +
- +#include <WebCore/KURL.h>
- +#include <wtf/text/WTFString.h>
- +
- +using namespace WebCore;
- +
- +namespace WebKit {
- +
- +PassRefPtr<WebHitTestResult> WebHitTestResult::create(const WebHitTestResult::Data& hitTestResultData)
- +{
- + return adoptRef(new WebHitTestResult(hitTestResultData));
- +}
- +
- +void WebHitTestResult::Data::encode(CoreIPC::ArgumentEncoder* encoder) const
- +{
- + encoder->encode(absoluteImageURL);
- + encoder->encode(absoluteLinkURL);
- + encoder->encode(absoluteMediaURL);
- + encoder->encode(linkLabel);
- + encoder->encode(linkTitle);
- +}
- +
- +bool WebHitTestResult::Data::decode(CoreIPC::ArgumentDecoder* decoder, WebHitTestResult::Data& hitTestResultData)
- +{
- + if (!decoder->decode(hitTestResultData.absoluteImageURL)
- + || !decoder->decode(hitTestResultData.absoluteLinkURL)
- + || !decoder->decode(hitTestResultData.absoluteMediaURL)
- + || !decoder->decode(hitTestResultData.linkLabel)
- + || !decoder->decode(hitTestResultData.linkTitle))
- + return false;
- +
- + return true;
- +}
- +
- +} // WebKit
- diff --git a/Source/WebKit2/Shared/WebHitTestResult.h b/Source/WebKit2/Shared/WebHitTestResult.h
- new file mode 100644
- index 0000000..1d010a6
- --- /dev/null
- +++ b/Source/WebKit2/Shared/WebHitTestResult.h
- @@ -0,0 +1,78 @@
- +/*
- + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
- + *
- + * This library is free software; you can redistribute it and/or
- + * modify it under the terms of the GNU Library General Public
- + * License as published by the Free Software Foundation; either
- + * version 2 of the License, or (at your option) any later version.
- + *
- + * This library is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * Library General Public License for more details.
- + *
- + * You should have received a copy of the GNU Library General Public License
- + * along with this library; see the file COPYING.LIB. If not, write to
- + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- + * Boston, MA 02110-1301, USA.
- + */
- +
- +#ifndef WebHitTestResult_h
- +#define WebHitTestResult_h
- +
- +#include "APIObject.h"
- +#include <WebCore/HitTestResult.h>
- +#include <WebCore/KURL.h>
- +#include <wtf/Forward.h>
- +#include <wtf/PassRefPtr.h>
- +#include <wtf/RefPtr.h>
- +#include <wtf/text/WTFString.h>
- +
- +namespace CoreIPC {
- +class ArgumentDecoder;
- +class ArgumentEncoder;
- +}
- +
- +namespace WebKit {
- +
- +class WebFrame;
- +
- +class WebHitTestResult : public APIObject {
- +public:
- + static const Type APIType = TypeHitTestResult;
- +
- + struct Data {
- + String absoluteImageURL;
- + String absoluteLinkURL;
- + String absoluteMediaURL;
- + String linkLabel;
- + String linkTitle;
- +
- + void encode(CoreIPC::ArgumentEncoder*) const;
- + static bool decode(CoreIPC::ArgumentDecoder*, WebHitTestResult::Data&);
- + };
- +
- + static PassRefPtr<WebHitTestResult> create(const WebHitTestResult::Data&);
- +
- + String absoluteImageURL() const { return m_data.absoluteImageURL; }
- + String absoluteLinkURL() const { return m_data.absoluteLinkURL; }
- + String absoluteMediaURL() const { return m_data.absoluteMediaURL; }
- +
- + String linkLabel() const { return m_data.linkLabel; }
- + String linkTitle() const { return m_data.linkTitle; }
- +
- +
- +private:
- + explicit WebHitTestResult(const WebHitTestResult::Data& hitTestResultData)
- + : m_data(hitTestResultData)
- + {
- + }
- +
- + virtual Type type() const { return APIType; }
- +
- + Data m_data;
- +};
- +
- +} // namespace WebKit
- +
- +#endif // WebHitTestResult_h
- diff --git a/Source/WebKit2/UIProcess/API/C/WKAPICast.h b/Source/WebKit2/UIProcess/API/C/WKAPICast.h
- index 81c2f5f..c634f55 100644
- --- a/Source/WebKit2/UIProcess/API/C/WKAPICast.h
- +++ b/Source/WebKit2/UIProcess/API/C/WKAPICast.h
- @@ -64,6 +64,7 @@ class WebFramePolicyListenerProxy;
- class WebFrameProxy;
- class WebGeolocationManagerProxy;
- class WebGeolocationPosition;
- +class WebHitTestResult;
- class WebIconDatabase;
- class WebInspectorProxy;
- class WebKeyValueStorageManagerProxy;
- @@ -94,6 +95,7 @@ WK_ADD_API_MAPPING(WKFrameRef, WebFrameProxy)
- WK_ADD_API_MAPPING(WKGeolocationManagerRef, WebGeolocationManagerProxy)
- WK_ADD_API_MAPPING(WKGeolocationPermissionRequestRef, GeolocationPermissionRequestProxy)
- WK_ADD_API_MAPPING(WKGeolocationPositionRef, WebGeolocationPosition)
- +WK_ADD_API_MAPPING(WKHitTestResultRef, WebHitTestResult)
- WK_ADD_API_MAPPING(WKIconDatabaseRef, WebIconDatabase)
- WK_ADD_API_MAPPING(WKKeyValueStorageManagerRef, WebKeyValueStorageManagerProxy)
- WK_ADD_API_MAPPING(WKMediaCacheManagerRef, WebMediaCacheManagerProxy)
- diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.h b/Source/WebKit2/UIProcess/API/C/WKPage.h
- index bffb96a..67bfb64 100644
- --- a/Source/WebKit2/UIProcess/API/C/WKPage.h
- +++ b/Source/WebKit2/UIProcess/API/C/WKPage.h
- @@ -168,7 +168,7 @@ typedef void (*WKPageTakeFocusCallback)(WKPageRef page, WKFocusDirection directi
- typedef void (*WKPageFocusCallback)(WKPageRef page, const void *clientInfo);
- typedef void (*WKPageUnfocusCallback)(WKPageRef page, const void *clientInfo);
- typedef void (*WKPageSetStatusTextCallback)(WKPageRef page, WKStringRef text, const void *clientInfo);
- -typedef void (*WKPageMouseDidMoveOverElementCallback)(WKPageRef page, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo);
- +typedef void (*WKPageMouseDidMoveOverElementCallback)(WKPageRef page, WKHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo);
- typedef void (*WKPageMissingPluginButtonClickedCallback)(WKPageRef page, WKStringRef mimeType, WKStringRef url, WKStringRef pluginsPageURL, const void* clientInfo);
- typedef void (*WKPageDidNotHandleKeyEventCallback)(WKPageRef page, WKNativeEventPtr event, const void *clientInfo);
- typedef void (*WKPageDidNotHandleWheelEventCallback)(WKPageRef page, WKNativeEventPtr event, const void *clientInfo);
- diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
- index de491d8..2928735 100644
- --- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
- +++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
- @@ -1991,7 +1991,7 @@ void WebPageProxy::setStatusText(const String& text)
- m_uiClient.setStatusText(this, text);
- }
- -void WebPageProxy::mouseDidMoveOverElement(uint32_t opaqueModifiers, CoreIPC::ArgumentDecoder* arguments)
- +void WebPageProxy::mouseDidMoveOverElement(const WebHitTestResult::Data& hitTestResultData, uint32_t opaqueModifiers, CoreIPC::ArgumentDecoder* arguments)
- {
- RefPtr<APIObject> userData;
- WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
- @@ -2000,7 +2000,7 @@ void WebPageProxy::mouseDidMoveOverElement(uint32_t opaqueModifiers, CoreIPC::Ar
- WebEvent::Modifiers modifiers = static_cast<WebEvent::Modifiers>(opaqueModifiers);
- - m_uiClient.mouseDidMoveOverElement(this, modifiers, userData.get());
- + m_uiClient.mouseDidMoveOverElement(this, hitTestResultData, modifiers, userData.get());
- }
- void WebPageProxy::missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL)
- diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h
- index ccde647..d5e9e9a 100644
- --- a/Source/WebKit2/UIProcess/WebPageProxy.h
- +++ b/Source/WebKit2/UIProcess/WebPageProxy.h
- @@ -46,6 +46,7 @@
- #include "WebFormClient.h"
- #include "WebFrameProxy.h"
- #include "WebHistoryClient.h"
- +#include "WebHitTestResult.h"
- #include "WebLoaderClient.h"
- #include "WebPageContextMenuClient.h"
- #include "WebPolicyClient.h"
- @@ -53,6 +54,7 @@
- #include "WebResourceLoadClient.h"
- #include "WebUIClient.h"
- #include <WebCore/DragActions.h>
- +#include <WebCore/HitTestResult.h>
- #include <WebCore/ScrollTypes.h>
- #include <WebCore/TextChecking.h>
- #include <wtf/HashMap.h>
- @@ -623,7 +625,7 @@ private:
- void runJavaScriptPrompt(uint64_t frameID, const String&, const String&, String& result);
- void shouldInterruptJavaScript(bool& result);
- void setStatusText(const String&);
- - void mouseDidMoveOverElement(uint32_t modifiers, CoreIPC::ArgumentDecoder*);
- + void mouseDidMoveOverElement(const WebHitTestResult::Data& hitTestResultData, uint32_t modifiers, CoreIPC::ArgumentDecoder*);
- void missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL);
- void setToolbarsAreVisible(bool toolbarsAreVisible);
- void getToolbarsAreVisible(bool& toolbarsAreVisible);
- diff --git a/Source/WebKit2/UIProcess/WebPageProxy.messages.in b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
- index bd8ff1b..cd3922d 100644
- --- a/Source/WebKit2/UIProcess/WebPageProxy.messages.in
- +++ b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
- @@ -29,7 +29,7 @@ messages -> WebPageProxy {
- RunJavaScriptConfirm(uint64_t frameID, WTF::String message) -> (bool result)
- RunJavaScriptPrompt(uint64_t frameID, WTF::String message, WTF::String defaultValue) -> (WTF::String result)
- ShouldInterruptJavaScript() -> (bool shouldInterupt)
- - MouseDidMoveOverElement(uint32_t modifiers, WebKit::InjectedBundleUserMessageEncoder userData);
- + MouseDidMoveOverElement(WebKit::WebHitTestResult::Data hitTestResultData, uint32_t modifiers, WebKit::InjectedBundleUserMessageEncoder userData);
- MissingPluginButtonClicked(WTF::String mimeType, WTF::String url, WTF::String pluginsPageURL)
- DidChangeViewportData(WebCore::ViewportArguments arguments)
- DidReceiveEvent(uint32_t type, bool handled)
- diff --git a/Source/WebKit2/UIProcess/WebUIClient.cpp b/Source/WebKit2/UIProcess/WebUIClient.cpp
- index 326e2f0..0cbb05d 100644
- --- a/Source/WebKit2/UIProcess/WebUIClient.cpp
- +++ b/Source/WebKit2/UIProcess/WebUIClient.cpp
- @@ -155,12 +155,13 @@ void WebUIClient::setStatusText(WebPageProxy* page, const String& text)
- m_client.setStatusText(toAPI(page), toAPI(text.impl()), m_client.clientInfo);
- }
- -void WebUIClient::mouseDidMoveOverElement(WebPageProxy* page, WebEvent::Modifiers modifiers, APIObject* userData)
- +void WebUIClient::mouseDidMoveOverElement(WebPageProxy* page, const WebHitTestResult::Data& data, WebEvent::Modifiers modifiers, APIObject* userData)
- {
- if (!m_client.mouseDidMoveOverElement)
- return;
- - m_client.mouseDidMoveOverElement(toAPI(page), toAPI(modifiers), toAPI(userData), m_client.clientInfo);
- + RefPtr<WebHitTestResult> webHitTestResult = WebHitTestResult::create(data);
- + m_client.mouseDidMoveOverElement(toAPI(page), toAPI(webHitTestResult.get()), toAPI(modifiers), toAPI(userData), m_client.clientInfo);
- }
- void WebUIClient::missingPluginButtonClicked(WebPageProxy* page, const String& mimeType, const String& url, const String& pluginsPageURL)
- diff --git a/Source/WebKit2/UIProcess/WebUIClient.h b/Source/WebKit2/UIProcess/WebUIClient.h
- index 470c61a..6df9b0f 100644
- --- a/Source/WebKit2/UIProcess/WebUIClient.h
- +++ b/Source/WebKit2/UIProcess/WebUIClient.h
- @@ -29,6 +29,7 @@
- #include "APIClient.h"
- #include "WKPage.h"
- #include "WebEvent.h"
- +#include "WebHitTestResult.h"
- #include "WebOpenPanelParameters.h"
- #include <wtf/Forward.h>
- #include <wtf/PassRefPtr.h>
- @@ -67,7 +68,7 @@ public:
- String runJavaScriptPrompt(WebPageProxy*, const String&, const String&, WebFrameProxy*);
- void setStatusText(WebPageProxy*, const String&);
- - void mouseDidMoveOverElement(WebPageProxy*, WebEvent::Modifiers, APIObject*);
- + void mouseDidMoveOverElement(WebPageProxy*, const WebHitTestResult::Data&, WebEvent::Modifiers, APIObject*);
- void missingPluginButtonClicked(WebPageProxy*, const String& mimeType, const String& url, const String& pluginsPageURL);
- bool implementsDidNotHandleKeyEvent() const;
- diff --git a/Source/WebKit2/WebKit2.pro b/Source/WebKit2/WebKit2.pro
- index 2d0e6dd..96b210d 100644
- --- a/Source/WebKit2/WebKit2.pro
- +++ b/Source/WebKit2/WebKit2.pro
- @@ -153,6 +153,7 @@ HEADERS += \
- Shared/WebFindOptions.h \
- Shared/WebGeolocationPosition.h \
- Shared/WebGraphicsContext.h \
- + Shared/WebHitTestResult.h \
- Shared/WebImage.h \
- Shared/WebNavigationDataStore.h \
- Shared/WebNumber.h \
- @@ -383,6 +384,7 @@ SOURCES += \
- Shared/WebEventConversion.cpp \
- Shared/WebGeolocationPosition.cpp \
- Shared/WebGraphicsContext.cpp \
- + Shared/WebHitTestResult.cpp \
- Shared/WebKeyboardEvent.cpp \
- Shared/WebImage.cpp \
- Shared/WebMouseEvent.cpp \
- diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
- index 80d8922..abf6f7a 100644
- --- a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
- +++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
- @@ -496,8 +496,15 @@ void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& hitTestResult
- // Notify the bundle client.
- m_page->injectedBundleUIClient().mouseDidMoveOverElement(m_page, hitTestResult, static_cast<WebEvent::Modifiers>(modifierFlags), userData);
- + WebHitTestResult::Data webHitTestResultData;
- + webHitTestResultData.absoluteImageURL = hitTestResult.absoluteImageURL().string();
- + webHitTestResultData.absoluteLinkURL = hitTestResult.absoluteLinkURL().string();
- + webHitTestResultData.absoluteMediaURL = hitTestResult.absoluteMediaURL().string();
- + webHitTestResultData.linkLabel = hitTestResult.textContent();
- + webHitTestResultData.linkTitle = hitTestResult.titleDisplayString();
- +
- // Notify the UIProcess.
- - m_page->send(Messages::WebPageProxy::MouseDidMoveOverElement(modifierFlags, InjectedBundleUserMessageEncoder(userData.get())));
- + m_page->send(Messages::WebPageProxy::MouseDidMoveOverElement(webHitTestResultData, modifierFlags, InjectedBundleUserMessageEncoder(userData.get())));
- }
- void WebChromeClient::setToolTip(const String& toolTip, TextDirection)
- --
- 1.7.4.1
Add Comment
Please, Sign In to add comment