Changeset 160495 in webkit
- Timestamp:
- Dec 12, 2013, 10:41:55 AM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r160490 r160495 1 2013-12-12 Dan Bernstein <mitz@apple.com> 2 3 [Cocoa] Navigation action information for policy decisions is missing the original request 4 https://bugs.webkit.org/show_bug.cgi?id=125612 5 6 Reviewed by Anders Carlsson. 7 8 * Platform/CoreIPC/HandleMessage.h: 9 (CoreIPC::callMemberFunction): Added template with additional message parameter. 10 * UIProcess/API/C/WKPagePolicyClientInternal.h: Added. Defines a new version of the client 11 interface with a new version of the policy decision callback. 12 * UIProcess/API/Cocoa/WKBrowsingContextController.mm: 13 (setUpPagePolicyClient): Use the new internal version of the client. Pass the original 14 request in the action information dictionary under a new key. 15 * UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h: Declared new action information 16 key. 17 * UIProcess/WebPageProxy.cpp: 18 (WebKit::WebPageProxy::decidePolicyForNavigationAction): Added originalRequest parameter, 19 which is passed to the policy client. 20 * UIProcess/WebPageProxy.h: 21 * UIProcess/WebPageProxy.messages.in: Added originalRequest parameter in 22 DecidePolicyForNavigationAction. 23 * UIProcess/WebPolicyClient.cpp: 24 (WebKit::WebPolicyClient::decidePolicyForNavigationAction): Pass the original request to 25 the client. 26 * UIProcess/WebPolicyClient.h: 27 * WebKit2.xcodeproj/project.pbxproj: Added reference to new file. 28 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 29 (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Send the original 30 request from the navigation action to the UI process. 31 1 32 2013-12-12 Zan Dobersek <zdobersek@igalia.com> 2 33 -
trunk/Source/WebKit2/Platform/CoreIPC/HandleMessage.h
r159387 r160495 365 365 } 366 366 367 template<typename C, typename MF, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename R1, typename R2, typename R3> 368 void callMemberFunction(std::tuple<P1, P2, P3, P4, P5, P6, P7, P8>&& args, MessageDecoder& decoder, std::tuple<R1, R2, R3>& replyArgs, C* object, MF function) 369 { 370 (object->*function)(std::get<0>(args), std::get<1>(args), std::get<2>(args), std::get<3>(args), std::get<4>(args), std::get<5>(args), std::get<6>(args), std::get<7>(args), decoder, std::get<0>(replyArgs), std::get<1>(replyArgs), std::get<2>(replyArgs)); 371 } 372 367 373 // Main dispatch functions 368 374 template<typename T, typename C, typename MF> -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm
r160405 r160495 112 112 NSString * const WKActionMouseButtonKey = @"WKActionMouseButtonKey"; 113 113 NSString * const WKActionModifierFlagsKey = @"WKActionModifierFlagsKey"; 114 NSString * const WKActionOriginalURLRequestKey = @"WKActionOriginalURLRequestKey"; 114 115 NSString * const WKActionURLRequestKey = @"WKActionURLRequestKey"; 115 116 NSString * const WKActionURLResponseKey = @"WKActionURLResponseKey"; … … 562 563 static void setUpPagePolicyClient(WKBrowsingContextController *browsingContext, WebPageProxy& page) 563 564 { 564 WKPagePolicyClient V1policyClient;565 WKPagePolicyClientInternal policyClient; 565 566 memset(&policyClient, 0, sizeof(policyClient)); 566 567 567 policyClient.base.version = 1;568 policyClient.base.version = 2; 568 569 policyClient.base.clientInfo = browsingContext; 569 570 570 policyClient.decidePolicyForNavigationAction = [](WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKFrameRef originatingFrame, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)571 policyClient.decidePolicyForNavigationAction = [](WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKFrameRef originatingFrame, WKURLRequestRef originalRequest, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo) 571 572 { 572 573 WKBrowsingContextController *browsingContext = (WKBrowsingContextController *)clientInfo; … … 579 580 WKActionModifierFlagsKey: @(modifiers), 580 581 WKActionMouseButtonKey: @(mouseButton), 582 WKActionOriginalURLRequestKey: adoptNS(WKURLRequestCopyNSURLRequest(originalRequest)).get(), 581 583 WKActionURLRequestKey: adoptNS(WKURLRequestCopyNSURLRequest(request)).get() 582 584 }; -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h
r159874 r160495 34 34 WK_EXPORT extern NSString * const WKActionMouseButtonKey; // NSNumber (0 for left button, 1 for middle button, 2 for right button) 35 35 WK_EXPORT extern NSString * const WKActionModifierFlagsKey; // NSNumber (unsigned) 36 WK_EXPORT extern NSString * const WKActionOriginalURLRequestKey; // NSURLRequest 36 37 WK_EXPORT extern NSString * const WKActionURLRequestKey; // NSURLRequest 37 38 WK_EXPORT extern NSString * const WKActionURLResponseKey; // NSURLResponse -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r160487 r160495 2425 2425 2426 2426 // PolicyClient 2427 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, uint64_t originatingFrameID, const ResourceRequest& request, uint64_t listenerID, CoreIPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID)2427 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, CoreIPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID) 2428 2428 { 2429 2429 RefPtr<API::Object> userData; … … 2440 2440 MESSAGE_CHECK(frame); 2441 2441 MESSAGE_CHECK_URL(request.url()); 2442 MESSAGE_CHECK_URL(originalRequest.url()); 2442 2443 2443 2444 NavigationType navigationType = static_cast<NavigationType>(opaqueNavigationType); … … 2453 2454 m_syncNavigationActionPolicyActionIsValid = false; 2454 2455 2455 if (!m_policyClient.decidePolicyForNavigationAction(this, frame, navigationType, modifiers, mouseButton, originatingFrame, request, listener.get(), userData.get()))2456 if (!m_policyClient.decidePolicyForNavigationAction(this, frame, navigationType, modifiers, mouseButton, originatingFrame, originalRequest, request, listener.get(), userData.get())) 2456 2457 listener->use(); 2457 2458 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r160487 r160495 899 899 void didFinishProgress(); 900 900 901 void decidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, uint64_t originatingFrameID, const WebCore::ResourceRequest& , uint64_t listenerID, CoreIPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID);901 void decidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest& request, uint64_t listenerID, CoreIPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID); 902 902 void decidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, CoreIPC::MessageDecoder&); 903 903 void decidePolicyForResponse(uint64_t frameID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, CoreIPC::MessageDecoder&); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r160487 r160495 104 104 # Policy messages 105 105 DecidePolicyForResponseSync(uint64_t frameID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic 106 DecidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, uint64_t originatingFrameID, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic106 DecidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, uint64_t originatingFrameID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic 107 107 DecidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic 108 108 UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::InjectedBundleUserMessageEncoder userData) Variadic -
trunk/Source/WebKit2/UIProcess/WebPolicyClient.cpp
r159988 r160495 35 35 namespace WebKit { 36 36 37 bool WebPolicyClient::decidePolicyForNavigationAction(WebPageProxy* page, WebFrameProxy* frame, NavigationType type, WebEvent::Modifiers modifiers, WebMouseEvent::Button mouseButton, WebFrameProxy* originatingFrame, const ResourceRequest& resourceRequest, WebFramePolicyListenerProxy* listener, API::Object* userData)37 bool WebPolicyClient::decidePolicyForNavigationAction(WebPageProxy* page, WebFrameProxy* frame, NavigationType type, WebEvent::Modifiers modifiers, WebMouseEvent::Button mouseButton, WebFrameProxy* originatingFrame, const ResourceRequest& originalResourceRequest, const ResourceRequest& resourceRequest, WebFramePolicyListenerProxy* listener, API::Object* userData) 38 38 { 39 if (!m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0 && !m_client.decidePolicyForNavigationAction )39 if (!m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0 && !m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1 && !m_client.decidePolicyForNavigationAction) 40 40 return false; 41 41 42 RefPtr<WebURLRequest> originalRequest = WebURLRequest::create(originalResourceRequest); 42 43 RefPtr<WebURLRequest> request = WebURLRequest::create(resourceRequest); 43 44 44 45 if (m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0) 45 46 m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0(toAPI(page), toAPI(frame), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toAPI(request.get()), toAPI(listener), toAPI(userData), m_client.base.clientInfo); 47 else if (m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1) 48 m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1(toAPI(page), toAPI(frame), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toAPI(originatingFrame), toAPI(request.get()), toAPI(listener), toAPI(userData), m_client.base.clientInfo); 46 49 else 47 m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toAPI(originatingFrame), toAPI( request.get()), toAPI(listener), toAPI(userData), m_client.base.clientInfo);50 m_client.decidePolicyForNavigationAction(toAPI(page), toAPI(frame), toAPI(type), toAPI(modifiers), toAPI(mouseButton), toAPI(originatingFrame), toAPI(originalRequest.get()), toAPI(request.get()), toAPI(listener), toAPI(userData), m_client.base.clientInfo); 48 51 49 52 return true; -
trunk/Source/WebKit2/UIProcess/WebPolicyClient.h
r159994 r160495 29 29 #include "APIClient.h" 30 30 #include "WKPage.h" 31 #include "WKPagePolicyClientInternal.h" 31 32 #include "WebEvent.h" 32 33 #include <WebCore/FrameLoaderTypes.h> … … 37 38 38 39 template<> struct ClientTraits<WKPagePolicyClientBase> { 39 typedef std::tuple<WKPagePolicyClientV0, WKPagePolicyClientV1 > Versions;40 typedef std::tuple<WKPagePolicyClientV0, WKPagePolicyClientV1, WKPagePolicyClientInternal> Versions; 40 41 }; 41 42 } … … 55 56 class WebPolicyClient : public API::Client<WKPagePolicyClientBase> { 56 57 public: 57 bool decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy*, WebCore::NavigationType, WebEvent::Modifiers, WebMouseEvent::Button, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& , WebFramePolicyListenerProxy*, API::Object* userData);58 bool decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy*, WebCore::NavigationType, WebEvent::Modifiers, WebMouseEvent::Button, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, WebFramePolicyListenerProxy*, API::Object* userData); 58 59 bool decidePolicyForNewWindowAction(WebPageProxy*, WebFrameProxy*, WebCore::NavigationType, WebEvent::Modifiers, WebMouseEvent::Button, const WebCore::ResourceRequest&, const String& frameName, WebFramePolicyListenerProxy*, API::Object* userData); 59 60 bool decidePolicyForResponse(WebPageProxy*, WebFrameProxy*, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, WebFramePolicyListenerProxy*, API::Object* userData); -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r160487 r160495 451 451 373CEAD5185417AE008C363D /* WKNSData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 373CEAD3185417AE008C363D /* WKNSData.mm */; }; 452 452 373CEAD6185417AE008C363D /* WKNSData.h in Headers */ = {isa = PBXBuildFile; fileRef = 373CEAD4185417AE008C363D /* WKNSData.h */; }; 453 373CEAD81859553F008C363D /* WKPagePolicyClientInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 373CEAD71859553F008C363D /* WKPagePolicyClientInternal.h */; }; 453 454 374436881820E7240049579F /* WKObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = 374436871820E7240049579F /* WKObject.mm */; }; 454 455 3760881E150413E900FC82C7 /* WebRenderObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3760881C150413E900FC82C7 /* WebRenderObject.cpp */; }; … … 2003 2004 373CEAD3185417AE008C363D /* WKNSData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKNSData.mm; sourceTree = "<group>"; }; 2004 2005 373CEAD4185417AE008C363D /* WKNSData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKNSData.h; sourceTree = "<group>"; }; 2006 373CEAD71859553F008C363D /* WKPagePolicyClientInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPagePolicyClientInternal.h; sourceTree = "<group>"; }; 2005 2007 374436871820E7240049579F /* WKObject.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKObject.mm; sourceTree = "<group>"; }; 2006 2008 3760881C150413E900FC82C7 /* WebRenderObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebRenderObject.cpp; sourceTree = "<group>"; }; … … 4662 4664 1AB8A1EB1840080900E9AE69 /* WKPageLoaderClient.h */, 4663 4665 1AB8A1ED18400ACB00E9AE69 /* WKPagePolicyClient.h */, 4666 373CEAD71859553F008C363D /* WKPagePolicyClientInternal.h */, 4664 4667 BC177464118B9FF4007D9E9A /* WKPagePrivate.h */, 4665 4668 1AB8A1F118400B6200E9AE69 /* WKPageUIClient.h */, … … 6185 6188 BC407606124FF0270068F20A /* WKString.h in Headers */, 6186 6189 7C9D1537184584DA009D3918 /* WKBrowsingContextGroupInternal.h in Headers */, 6190 373CEAD81859553F008C363D /* WKPagePolicyClientInternal.h in Headers */, 6187 6191 BC40761A124FF0370068F20A /* WKStringCF.h in Headers */, 6188 6192 759CCD591808F1690078E8A8 /* WebOriginDataManagerProxyChangeClient.h in Headers */, -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r160487 r160495 729 729 730 730 // Notify the UIProcess. 731 if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), action->navigationType(), action->modifiers(), action->mouseButton(), originatingFrame ? originatingFrame->frameID() : 0, request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction, downloadID)))731 if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), action->navigationType(), action->modifiers(), action->mouseButton(), originatingFrame ? originatingFrame->frameID() : 0, navigationAction.resourceRequest(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction, downloadID))) 732 732 return; 733 733
Note:
See TracChangeset
for help on using the changeset viewer.