Guest User

Untitled

a guest
Jan 21st, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.20 KB | None | 0 0
  1. From 768d5fda2fd7eb80d4e7c258b311125953e6206e Mon Sep 17 00:00:00 2001
  2. From: Igor Trindade Oliveira <igor@Cygnus.(none)>
  3. Date: Wed, 14 Sep 2011 14:50:44 -0400
  4. Subject: [PATCH] [WK2] WebProcess needs to send HitTestResult information to UiProcess
  5.  
  6. ---
  7. Source/WebKit2/Shared/API/c/WKBase.h | 1 +
  8. Source/WebKit2/Shared/APIObject.h | 1 +
  9. Source/WebKit2/Shared/WebHitTestResult.cpp | 58 +++++++++++++++
  10. Source/WebKit2/Shared/WebHitTestResult.h | 78 ++++++++++++++++++++
  11. Source/WebKit2/UIProcess/API/C/WKAPICast.h | 2 +
  12. Source/WebKit2/UIProcess/API/C/WKPage.h | 2 +-
  13. Source/WebKit2/UIProcess/WebPageProxy.cpp | 4 +-
  14. Source/WebKit2/UIProcess/WebPageProxy.h | 4 +-
  15. Source/WebKit2/UIProcess/WebPageProxy.messages.in | 2 +-
  16. Source/WebKit2/UIProcess/WebUIClient.cpp | 5 +-
  17. Source/WebKit2/UIProcess/WebUIClient.h | 3 +-
  18. Source/WebKit2/WebKit2.pro | 2 +
  19. .../WebProcess/WebCoreSupport/WebChromeClient.cpp | 9 ++-
  20. 13 files changed, 162 insertions(+), 9 deletions(-)
  21. create mode 100644 Source/WebKit2/Shared/WebHitTestResult.cpp
  22. create mode 100644 Source/WebKit2/Shared/WebHitTestResult.h
  23.  
  24. diff --git a/Source/WebKit2/Shared/API/c/WKBase.h b/Source/WebKit2/Shared/API/c/WKBase.h
  25. index 1baa872..e89504e 100644
  26. --- a/Source/WebKit2/Shared/API/c/WKBase.h
  27. +++ b/Source/WebKit2/Shared/API/c/WKBase.h
  28. @@ -84,6 +84,7 @@ typedef const struct OpaqueWKFramePolicyListener* WKFramePolicyListenerRef;
  29. typedef const struct OpaqueWKGeolocationManager* WKGeolocationManagerRef;
  30. typedef const struct OpaqueWKGeolocationPermissionRequest* WKGeolocationPermissionRequestRef;
  31. typedef const struct OpaqueWKGeolocationPosition* WKGeolocationPositionRef;
  32. +typedef const struct OpaqueWKHitTestResult* WKHitTestResultRef;
  33. typedef const struct OpaqueWKIconDatabase* WKIconDatabaseRef;
  34. typedef const struct OpaqueWKInspector* WKInspectorRef;
  35. typedef const struct OpaqueWKKeyValueStorageManager* WKKeyValueStorageManagerRef;
  36. diff --git a/Source/WebKit2/Shared/APIObject.h b/Source/WebKit2/Shared/APIObject.h
  37. index e5a7eed..7916bf4 100644
  38. --- a/Source/WebKit2/Shared/APIObject.h
  39. +++ b/Source/WebKit2/Shared/APIObject.h
  40. @@ -75,6 +75,7 @@ public:
  41. TypeFullScreenManager,
  42. TypeGeolocationManager,
  43. TypeGeolocationPermissionRequest,
  44. + TypeHitTestResult,
  45. TypeGeolocationPosition,
  46. TypeIconDatabase,
  47. TypeInspector,
  48. diff --git a/Source/WebKit2/Shared/WebHitTestResult.cpp b/Source/WebKit2/Shared/WebHitTestResult.cpp
  49. new file mode 100644
  50. index 0000000..f04b847
  51. --- /dev/null
  52. +++ b/Source/WebKit2/Shared/WebHitTestResult.cpp
  53. @@ -0,0 +1,58 @@
  54. +/*
  55. + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
  56. + *
  57. + * This library is free software; you can redistribute it and/or
  58. + * modify it under the terms of the GNU Library General Public
  59. + * License as published by the Free Software Foundation; either
  60. + * version 2 of the License, or (at your option) any later version.
  61. + *
  62. + * This library is distributed in the hope that it will be useful,
  63. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  64. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  65. + * Library General Public License for more details.
  66. + *
  67. + * You should have received a copy of the GNU Library General Public License
  68. + * along with this library; see the file COPYING.LIB. If not, write to
  69. + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  70. + * Boston, MA 02110-1301, USA.
  71. + */
  72. +
  73. +#include "config.h"
  74. +#include "WebHitTestResult.h"
  75. +
  76. +#include "WebCoreArgumentCoders.h"
  77. +
  78. +#include <WebCore/KURL.h>
  79. +#include <wtf/text/WTFString.h>
  80. +
  81. +using namespace WebCore;
  82. +
  83. +namespace WebKit {
  84. +
  85. +PassRefPtr<WebHitTestResult> WebHitTestResult::create(const WebHitTestResult::Data& hitTestResultData)
  86. +{
  87. + return adoptRef(new WebHitTestResult(hitTestResultData));
  88. +}
  89. +
  90. +void WebHitTestResult::Data::encode(CoreIPC::ArgumentEncoder* encoder) const
  91. +{
  92. + encoder->encode(absoluteImageURL);
  93. + encoder->encode(absoluteLinkURL);
  94. + encoder->encode(absoluteMediaURL);
  95. + encoder->encode(linkLabel);
  96. + encoder->encode(linkTitle);
  97. +}
  98. +
  99. +bool WebHitTestResult::Data::decode(CoreIPC::ArgumentDecoder* decoder, WebHitTestResult::Data& hitTestResultData)
  100. +{
  101. + if (!decoder->decode(hitTestResultData.absoluteImageURL)
  102. + || !decoder->decode(hitTestResultData.absoluteLinkURL)
  103. + || !decoder->decode(hitTestResultData.absoluteMediaURL)
  104. + || !decoder->decode(hitTestResultData.linkLabel)
  105. + || !decoder->decode(hitTestResultData.linkTitle))
  106. + return false;
  107. +
  108. + return true;
  109. +}
  110. +
  111. +} // WebKit
  112. diff --git a/Source/WebKit2/Shared/WebHitTestResult.h b/Source/WebKit2/Shared/WebHitTestResult.h
  113. new file mode 100644
  114. index 0000000..1d010a6
  115. --- /dev/null
  116. +++ b/Source/WebKit2/Shared/WebHitTestResult.h
  117. @@ -0,0 +1,78 @@
  118. +/*
  119. + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
  120. + *
  121. + * This library is free software; you can redistribute it and/or
  122. + * modify it under the terms of the GNU Library General Public
  123. + * License as published by the Free Software Foundation; either
  124. + * version 2 of the License, or (at your option) any later version.
  125. + *
  126. + * This library is distributed in the hope that it will be useful,
  127. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  128. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  129. + * Library General Public License for more details.
  130. + *
  131. + * You should have received a copy of the GNU Library General Public License
  132. + * along with this library; see the file COPYING.LIB. If not, write to
  133. + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  134. + * Boston, MA 02110-1301, USA.
  135. + */
  136. +
  137. +#ifndef WebHitTestResult_h
  138. +#define WebHitTestResult_h
  139. +
  140. +#include "APIObject.h"
  141. +#include <WebCore/HitTestResult.h>
  142. +#include <WebCore/KURL.h>
  143. +#include <wtf/Forward.h>
  144. +#include <wtf/PassRefPtr.h>
  145. +#include <wtf/RefPtr.h>
  146. +#include <wtf/text/WTFString.h>
  147. +
  148. +namespace CoreIPC {
  149. +class ArgumentDecoder;
  150. +class ArgumentEncoder;
  151. +}
  152. +
  153. +namespace WebKit {
  154. +
  155. +class WebFrame;
  156. +
  157. +class WebHitTestResult : public APIObject {
  158. +public:
  159. + static const Type APIType = TypeHitTestResult;
  160. +
  161. + struct Data {
  162. + String absoluteImageURL;
  163. + String absoluteLinkURL;
  164. + String absoluteMediaURL;
  165. + String linkLabel;
  166. + String linkTitle;
  167. +
  168. + void encode(CoreIPC::ArgumentEncoder*) const;
  169. + static bool decode(CoreIPC::ArgumentDecoder*, WebHitTestResult::Data&);
  170. + };
  171. +
  172. + static PassRefPtr<WebHitTestResult> create(const WebHitTestResult::Data&);
  173. +
  174. + String absoluteImageURL() const { return m_data.absoluteImageURL; }
  175. + String absoluteLinkURL() const { return m_data.absoluteLinkURL; }
  176. + String absoluteMediaURL() const { return m_data.absoluteMediaURL; }
  177. +
  178. + String linkLabel() const { return m_data.linkLabel; }
  179. + String linkTitle() const { return m_data.linkTitle; }
  180. +
  181. +
  182. +private:
  183. + explicit WebHitTestResult(const WebHitTestResult::Data& hitTestResultData)
  184. + : m_data(hitTestResultData)
  185. + {
  186. + }
  187. +
  188. + virtual Type type() const { return APIType; }
  189. +
  190. + Data m_data;
  191. +};
  192. +
  193. +} // namespace WebKit
  194. +
  195. +#endif // WebHitTestResult_h
  196. diff --git a/Source/WebKit2/UIProcess/API/C/WKAPICast.h b/Source/WebKit2/UIProcess/API/C/WKAPICast.h
  197. index 81c2f5f..c634f55 100644
  198. --- a/Source/WebKit2/UIProcess/API/C/WKAPICast.h
  199. +++ b/Source/WebKit2/UIProcess/API/C/WKAPICast.h
  200. @@ -64,6 +64,7 @@ class WebFramePolicyListenerProxy;
  201. class WebFrameProxy;
  202. class WebGeolocationManagerProxy;
  203. class WebGeolocationPosition;
  204. +class WebHitTestResult;
  205. class WebIconDatabase;
  206. class WebInspectorProxy;
  207. class WebKeyValueStorageManagerProxy;
  208. @@ -94,6 +95,7 @@ WK_ADD_API_MAPPING(WKFrameRef, WebFrameProxy)
  209. WK_ADD_API_MAPPING(WKGeolocationManagerRef, WebGeolocationManagerProxy)
  210. WK_ADD_API_MAPPING(WKGeolocationPermissionRequestRef, GeolocationPermissionRequestProxy)
  211. WK_ADD_API_MAPPING(WKGeolocationPositionRef, WebGeolocationPosition)
  212. +WK_ADD_API_MAPPING(WKHitTestResultRef, WebHitTestResult)
  213. WK_ADD_API_MAPPING(WKIconDatabaseRef, WebIconDatabase)
  214. WK_ADD_API_MAPPING(WKKeyValueStorageManagerRef, WebKeyValueStorageManagerProxy)
  215. WK_ADD_API_MAPPING(WKMediaCacheManagerRef, WebMediaCacheManagerProxy)
  216. diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.h b/Source/WebKit2/UIProcess/API/C/WKPage.h
  217. index bffb96a..67bfb64 100644
  218. --- a/Source/WebKit2/UIProcess/API/C/WKPage.h
  219. +++ b/Source/WebKit2/UIProcess/API/C/WKPage.h
  220. @@ -168,7 +168,7 @@ typedef void (*WKPageTakeFocusCallback)(WKPageRef page, WKFocusDirection directi
  221. typedef void (*WKPageFocusCallback)(WKPageRef page, const void *clientInfo);
  222. typedef void (*WKPageUnfocusCallback)(WKPageRef page, const void *clientInfo);
  223. typedef void (*WKPageSetStatusTextCallback)(WKPageRef page, WKStringRef text, const void *clientInfo);
  224. -typedef void (*WKPageMouseDidMoveOverElementCallback)(WKPageRef page, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo);
  225. +typedef void (*WKPageMouseDidMoveOverElementCallback)(WKPageRef page, WKHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo);
  226. typedef void (*WKPageMissingPluginButtonClickedCallback)(WKPageRef page, WKStringRef mimeType, WKStringRef url, WKStringRef pluginsPageURL, const void* clientInfo);
  227. typedef void (*WKPageDidNotHandleKeyEventCallback)(WKPageRef page, WKNativeEventPtr event, const void *clientInfo);
  228. typedef void (*WKPageDidNotHandleWheelEventCallback)(WKPageRef page, WKNativeEventPtr event, const void *clientInfo);
  229. diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
  230. index de491d8..2928735 100644
  231. --- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
  232. +++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
  233. @@ -1991,7 +1991,7 @@ void WebPageProxy::setStatusText(const String& text)
  234. m_uiClient.setStatusText(this, text);
  235. }
  236.  
  237. -void WebPageProxy::mouseDidMoveOverElement(uint32_t opaqueModifiers, CoreIPC::ArgumentDecoder* arguments)
  238. +void WebPageProxy::mouseDidMoveOverElement(const WebHitTestResult::Data& hitTestResultData, uint32_t opaqueModifiers, CoreIPC::ArgumentDecoder* arguments)
  239. {
  240. RefPtr<APIObject> userData;
  241. WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
  242. @@ -2000,7 +2000,7 @@ void WebPageProxy::mouseDidMoveOverElement(uint32_t opaqueModifiers, CoreIPC::Ar
  243.  
  244. WebEvent::Modifiers modifiers = static_cast<WebEvent::Modifiers>(opaqueModifiers);
  245.  
  246. - m_uiClient.mouseDidMoveOverElement(this, modifiers, userData.get());
  247. + m_uiClient.mouseDidMoveOverElement(this, hitTestResultData, modifiers, userData.get());
  248. }
  249.  
  250. void WebPageProxy::missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL)
  251. diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h
  252. index ccde647..d5e9e9a 100644
  253. --- a/Source/WebKit2/UIProcess/WebPageProxy.h
  254. +++ b/Source/WebKit2/UIProcess/WebPageProxy.h
  255. @@ -46,6 +46,7 @@
  256. #include "WebFormClient.h"
  257. #include "WebFrameProxy.h"
  258. #include "WebHistoryClient.h"
  259. +#include "WebHitTestResult.h"
  260. #include "WebLoaderClient.h"
  261. #include "WebPageContextMenuClient.h"
  262. #include "WebPolicyClient.h"
  263. @@ -53,6 +54,7 @@
  264. #include "WebResourceLoadClient.h"
  265. #include "WebUIClient.h"
  266. #include <WebCore/DragActions.h>
  267. +#include <WebCore/HitTestResult.h>
  268. #include <WebCore/ScrollTypes.h>
  269. #include <WebCore/TextChecking.h>
  270. #include <wtf/HashMap.h>
  271. @@ -623,7 +625,7 @@ private:
  272. void runJavaScriptPrompt(uint64_t frameID, const String&, const String&, String& result);
  273. void shouldInterruptJavaScript(bool& result);
  274. void setStatusText(const String&);
  275. - void mouseDidMoveOverElement(uint32_t modifiers, CoreIPC::ArgumentDecoder*);
  276. + void mouseDidMoveOverElement(const WebHitTestResult::Data& hitTestResultData, uint32_t modifiers, CoreIPC::ArgumentDecoder*);
  277. void missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL);
  278. void setToolbarsAreVisible(bool toolbarsAreVisible);
  279. void getToolbarsAreVisible(bool& toolbarsAreVisible);
  280. diff --git a/Source/WebKit2/UIProcess/WebPageProxy.messages.in b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
  281. index bd8ff1b..cd3922d 100644
  282. --- a/Source/WebKit2/UIProcess/WebPageProxy.messages.in
  283. +++ b/Source/WebKit2/UIProcess/WebPageProxy.messages.in
  284. @@ -29,7 +29,7 @@ messages -> WebPageProxy {
  285. RunJavaScriptConfirm(uint64_t frameID, WTF::String message) -> (bool result)
  286. RunJavaScriptPrompt(uint64_t frameID, WTF::String message, WTF::String defaultValue) -> (WTF::String result)
  287. ShouldInterruptJavaScript() -> (bool shouldInterupt)
  288. - MouseDidMoveOverElement(uint32_t modifiers, WebKit::InjectedBundleUserMessageEncoder userData);
  289. + MouseDidMoveOverElement(WebKit::WebHitTestResult::Data hitTestResultData, uint32_t modifiers, WebKit::InjectedBundleUserMessageEncoder userData);
  290. MissingPluginButtonClicked(WTF::String mimeType, WTF::String url, WTF::String pluginsPageURL)
  291. DidChangeViewportData(WebCore::ViewportArguments arguments)
  292. DidReceiveEvent(uint32_t type, bool handled)
  293. diff --git a/Source/WebKit2/UIProcess/WebUIClient.cpp b/Source/WebKit2/UIProcess/WebUIClient.cpp
  294. index 326e2f0..0cbb05d 100644
  295. --- a/Source/WebKit2/UIProcess/WebUIClient.cpp
  296. +++ b/Source/WebKit2/UIProcess/WebUIClient.cpp
  297. @@ -155,12 +155,13 @@ void WebUIClient::setStatusText(WebPageProxy* page, const String& text)
  298. m_client.setStatusText(toAPI(page), toAPI(text.impl()), m_client.clientInfo);
  299. }
  300.  
  301. -void WebUIClient::mouseDidMoveOverElement(WebPageProxy* page, WebEvent::Modifiers modifiers, APIObject* userData)
  302. +void WebUIClient::mouseDidMoveOverElement(WebPageProxy* page, const WebHitTestResult::Data& data, WebEvent::Modifiers modifiers, APIObject* userData)
  303. {
  304. if (!m_client.mouseDidMoveOverElement)
  305. return;
  306.  
  307. - m_client.mouseDidMoveOverElement(toAPI(page), toAPI(modifiers), toAPI(userData), m_client.clientInfo);
  308. + RefPtr<WebHitTestResult> webHitTestResult = WebHitTestResult::create(data);
  309. + m_client.mouseDidMoveOverElement(toAPI(page), toAPI(webHitTestResult.get()), toAPI(modifiers), toAPI(userData), m_client.clientInfo);
  310. }
  311.  
  312. void WebUIClient::missingPluginButtonClicked(WebPageProxy* page, const String& mimeType, const String& url, const String& pluginsPageURL)
  313. diff --git a/Source/WebKit2/UIProcess/WebUIClient.h b/Source/WebKit2/UIProcess/WebUIClient.h
  314. index 470c61a..6df9b0f 100644
  315. --- a/Source/WebKit2/UIProcess/WebUIClient.h
  316. +++ b/Source/WebKit2/UIProcess/WebUIClient.h
  317. @@ -29,6 +29,7 @@
  318. #include "APIClient.h"
  319. #include "WKPage.h"
  320. #include "WebEvent.h"
  321. +#include "WebHitTestResult.h"
  322. #include "WebOpenPanelParameters.h"
  323. #include <wtf/Forward.h>
  324. #include <wtf/PassRefPtr.h>
  325. @@ -67,7 +68,7 @@ public:
  326. String runJavaScriptPrompt(WebPageProxy*, const String&, const String&, WebFrameProxy*);
  327.  
  328. void setStatusText(WebPageProxy*, const String&);
  329. - void mouseDidMoveOverElement(WebPageProxy*, WebEvent::Modifiers, APIObject*);
  330. + void mouseDidMoveOverElement(WebPageProxy*, const WebHitTestResult::Data&, WebEvent::Modifiers, APIObject*);
  331. void missingPluginButtonClicked(WebPageProxy*, const String& mimeType, const String& url, const String& pluginsPageURL);
  332.  
  333. bool implementsDidNotHandleKeyEvent() const;
  334. diff --git a/Source/WebKit2/WebKit2.pro b/Source/WebKit2/WebKit2.pro
  335. index 2d0e6dd..96b210d 100644
  336. --- a/Source/WebKit2/WebKit2.pro
  337. +++ b/Source/WebKit2/WebKit2.pro
  338. @@ -153,6 +153,7 @@ HEADERS += \
  339. Shared/WebFindOptions.h \
  340. Shared/WebGeolocationPosition.h \
  341. Shared/WebGraphicsContext.h \
  342. + Shared/WebHitTestResult.h \
  343. Shared/WebImage.h \
  344. Shared/WebNavigationDataStore.h \
  345. Shared/WebNumber.h \
  346. @@ -383,6 +384,7 @@ SOURCES += \
  347. Shared/WebEventConversion.cpp \
  348. Shared/WebGeolocationPosition.cpp \
  349. Shared/WebGraphicsContext.cpp \
  350. + Shared/WebHitTestResult.cpp \
  351. Shared/WebKeyboardEvent.cpp \
  352. Shared/WebImage.cpp \
  353. Shared/WebMouseEvent.cpp \
  354. diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
  355. index 80d8922..abf6f7a 100644
  356. --- a/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
  357. +++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
  358. @@ -496,8 +496,15 @@ void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& hitTestResult
  359. // Notify the bundle client.
  360. m_page->injectedBundleUIClient().mouseDidMoveOverElement(m_page, hitTestResult, static_cast<WebEvent::Modifiers>(modifierFlags), userData);
  361.  
  362. + WebHitTestResult::Data webHitTestResultData;
  363. + webHitTestResultData.absoluteImageURL = hitTestResult.absoluteImageURL().string();
  364. + webHitTestResultData.absoluteLinkURL = hitTestResult.absoluteLinkURL().string();
  365. + webHitTestResultData.absoluteMediaURL = hitTestResult.absoluteMediaURL().string();
  366. + webHitTestResultData.linkLabel = hitTestResult.textContent();
  367. + webHitTestResultData.linkTitle = hitTestResult.titleDisplayString();
  368. +
  369. // Notify the UIProcess.
  370. - m_page->send(Messages::WebPageProxy::MouseDidMoveOverElement(modifierFlags, InjectedBundleUserMessageEncoder(userData.get())));
  371. + m_page->send(Messages::WebPageProxy::MouseDidMoveOverElement(webHitTestResultData, modifierFlags, InjectedBundleUserMessageEncoder(userData.get())));
  372. }
  373.  
  374. void WebChromeClient::setToolTip(const String& toolTip, TextDirection)
  375. --
  376. 1.7.4.1
Add Comment
Please, Sign In to add comment