From 273080edc49219a9e61c66ef0bb71748294d29fc Mon Sep 17 00:00:00 2001 From: "andersca@apple.com" Date: Tue, 28 Jan 2014 21:15:23 +0000 Subject: [PATCH] Add a NavigationActionData object for easy storage of navigation action data https://bugs.webkit.org/show_bug.cgi?id=127787 Reviewed by Tim Horton. * Scripts/webkit2/messages.py: (struct_or_class): * Shared/NavigationActionData.cpp: Added. (WebKit::NavigationActionData::NavigationActionData): (WebKit::NavigationActionData::encode): (WebKit::NavigationActionData::decode): * Shared/NavigationActionData.h: Added. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@162951 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit2/ChangeLog | 24 +++++++++ Source/WebKit2/Scripts/webkit2/messages.py | 1 + Source/WebKit2/Shared/NavigationActionData.cpp | 60 ++++++++++++++++++++++ Source/WebKit2/Shared/NavigationActionData.h | 52 +++++++++++++++++++ Source/WebKit2/UIProcess/WebPageProxy.cpp | 16 ++---- Source/WebKit2/UIProcess/WebPageProxy.h | 4 +- Source/WebKit2/UIProcess/WebPageProxy.messages.in | 4 +- Source/WebKit2/WebKit2.xcodeproj/project.pbxproj | 8 +++ .../WebCoreSupport/WebFrameLoaderClient.cpp | 16 ++++-- 9 files changed, 167 insertions(+), 18 deletions(-) create mode 100644 Source/WebKit2/Shared/NavigationActionData.cpp create mode 100644 Source/WebKit2/Shared/NavigationActionData.h diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index 8a805f0..4e6d309 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,27 @@ +2014-01-28 Anders Carlsson + + Add a NavigationActionData object for easy storage of navigation action data + https://bugs.webkit.org/show_bug.cgi?id=127787 + + Reviewed by Tim Horton. + + * Scripts/webkit2/messages.py: + (struct_or_class): + * Shared/NavigationActionData.cpp: Added. + (WebKit::NavigationActionData::NavigationActionData): + (WebKit::NavigationActionData::encode): + (WebKit::NavigationActionData::decode): + * Shared/NavigationActionData.h: Added. + * UIProcess/WebPageProxy.cpp: + (WebKit::WebPageProxy::decidePolicyForNavigationAction): + (WebKit::WebPageProxy::decidePolicyForNewWindowAction): + * UIProcess/WebPageProxy.h: + * UIProcess/WebPageProxy.messages.in: + * WebKit2.xcodeproj/project.pbxproj: + * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: + (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): + (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): + 2014-01-28 Tim Horton Fix the Mountain Lion build. diff --git a/Source/WebKit2/Scripts/webkit2/messages.py b/Source/WebKit2/Scripts/webkit2/messages.py index 0f6b2eb..6190eb0 100644 --- a/Source/WebKit2/Scripts/webkit2/messages.py +++ b/Source/WebKit2/Scripts/webkit2/messages.py @@ -212,6 +212,7 @@ def struct_or_class(namespace, type): 'WebKit::DrawingAreaInfo', 'WebKit::EditorState', 'WebKit::InteractionInformationAtPosition', + 'WebKit::NavigationActionData', 'WebKit::NetworkProcessCreationParameters', 'WebKit::PlatformPopupMenuData', 'WebKit::PluginCreationParameters', diff --git a/Source/WebKit2/Shared/NavigationActionData.cpp b/Source/WebKit2/Shared/NavigationActionData.cpp new file mode 100644 index 0000000..2c37e63 --- /dev/null +++ b/Source/WebKit2/Shared/NavigationActionData.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2014 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "NavigationActionData.h" + +#include "ArgumentDecoder.h" +#include "ArgumentEncoder.h" + +using namespace WebCore; + +namespace WebKit { + +NavigationActionData::NavigationActionData() + : navigationType(NavigationTypeOther) +{ +} + +void NavigationActionData::encode(IPC::ArgumentEncoder& encoder) const +{ + encoder.encodeEnum(navigationType); + encoder.encodeEnum(modifiers); + encoder.encodeEnum(mouseButton); +} + +bool NavigationActionData::decode(IPC::ArgumentDecoder& decoder, NavigationActionData& result) +{ + if (!decoder.decodeEnum(result.navigationType)) + return false; + if (!decoder.decodeEnum(result.modifiers)) + return false; + if (!decoder.decodeEnum(result.mouseButton)) + return false; + + return true; +} + +} // namespace WebKit diff --git a/Source/WebKit2/Shared/NavigationActionData.h b/Source/WebKit2/Shared/NavigationActionData.h new file mode 100644 index 0000000..61cb5c2 --- /dev/null +++ b/Source/WebKit2/Shared/NavigationActionData.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2014 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef NavigationActionData_h +#define NavigationActionData_h + +#include "WebEvent.h" +#include + +namespace IPC { +class ArgumentDecoder; +class ArgumentEncoder; +} + +namespace WebKit { + +struct NavigationActionData { + NavigationActionData(); + + void encode(IPC::ArgumentEncoder&) const; + static bool decode(IPC::ArgumentDecoder&, NavigationActionData&); + + WebCore::NavigationType navigationType; + WebEvent::Modifiers modifiers; + WebMouseEvent::Button mouseButton; +}; + +} + +#endif // NavigationActionData_h diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp index 714b72f..beeba70 100644 --- a/Source/WebKit2/UIProcess/WebPageProxy.cpp +++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp @@ -43,6 +43,7 @@ #include "NativeWebKeyboardEvent.h" #include "NativeWebMouseEvent.h" #include "NativeWebWheelEvent.h" +#include "NavigationActionData.h" #include "NotificationPermissionRequest.h" #include "NotificationPermissionRequestManager.h" #include "PageClient.h" @@ -2442,8 +2443,7 @@ void WebPageProxy::frameDidBecomeFrameSet(uint64_t frameID, bool value) m_frameSetLargestFrame = value ? m_mainFrame : 0; } -// PolicyClient -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, IPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID) +void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const NavigationActionData& navigationActionData, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, IPC::MessageDecoder& decoder, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID) { RefPtr userData; WebContextUserMessageDecoder messageDecoder(userData, process()); @@ -2460,9 +2460,6 @@ void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t op MESSAGE_CHECK_URL(request.url()); MESSAGE_CHECK_URL(originalRequest.url()); - NavigationType navigationType = static_cast(opaqueNavigationType); - WebEvent::Modifiers modifiers = static_cast(opaqueModifiers); - WebMouseEvent::Button mouseButton = static_cast(opaqueMouseButton); WebFrameProxy* originatingFrame = m_process->webFrame(originatingFrameID); RefPtr listener = frame->setUpPolicyListenerProxy(listenerID); @@ -2472,7 +2469,7 @@ void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t op m_inDecidePolicyForNavigationAction = true; m_syncNavigationActionPolicyActionIsValid = false; - m_policyClient->decidePolicyForNavigationAction(this, frame, navigationType, modifiers, mouseButton, originatingFrame, originalRequest, request, listener.get(), userData.get()); + m_policyClient->decidePolicyForNavigationAction(this, frame, navigationActionData.navigationType, navigationActionData.modifiers, navigationActionData.mouseButton, originatingFrame, originalRequest, request, listener.get(), userData.get()); m_inDecidePolicyForNavigationAction = false; @@ -2484,7 +2481,7 @@ void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t op } } -void WebPageProxy::decidePolicyForNewWindowAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const ResourceRequest& request, const String& frameName, uint64_t listenerID, IPC::MessageDecoder& decoder) +void WebPageProxy::decidePolicyForNewWindowAction(uint64_t frameID, const NavigationActionData& navigationActionData, const ResourceRequest& request, const String& frameName, uint64_t listenerID, IPC::MessageDecoder& decoder) { RefPtr userData; WebContextUserMessageDecoder messageDecoder(userData, process()); @@ -2495,12 +2492,9 @@ void WebPageProxy::decidePolicyForNewWindowAction(uint64_t frameID, uint32_t opa MESSAGE_CHECK(frame); MESSAGE_CHECK_URL(request.url()); - NavigationType navigationType = static_cast(opaqueNavigationType); - WebEvent::Modifiers modifiers = static_cast(opaqueModifiers); - WebMouseEvent::Button mouseButton = static_cast(opaqueMouseButton); RefPtr listener = frame->setUpPolicyListenerProxy(listenerID); - m_policyClient->decidePolicyForNewWindowAction(this, frame, navigationType, modifiers, mouseButton, request, frameName, listener.get(), userData.get()); + m_policyClient->decidePolicyForNewWindowAction(this, frame, navigationActionData.navigationType, navigationActionData.modifiers, navigationActionData.mouseButton, request, frameName, listener.get(), userData.get()); } void WebPageProxy::decidePolicyForResponse(uint64_t frameID, const ResourceResponse& response, const ResourceRequest& request, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder& decoder) diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h index edeaebc..4991f8d 100644 --- a/Source/WebKit2/UIProcess/WebPageProxy.h +++ b/Source/WebKit2/UIProcess/WebPageProxy.h @@ -920,8 +920,8 @@ private: void didChangeProgress(double); void didFinishProgress(); - 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, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID); - void decidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, IPC::MessageDecoder&); + void decidePolicyForNavigationAction(uint64_t frameID, const NavigationActionData&, uint64_t originatingFrameID, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID); + void decidePolicyForNewWindowAction(uint64_t frameID, const NavigationActionData&, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, IPC::MessageDecoder&); void decidePolicyForResponse(uint64_t frameID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder&); void decidePolicyForResponseSync(uint64_t frameID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, IPC::MessageDecoder&, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID); void unableToImplementPolicy(uint64_t frameID, const WebCore::ResourceError&, IPC::MessageDecoder&); diff --git a/Source/WebKit2/UIProcess/WebPageProxy.messages.in b/Source/WebKit2/UIProcess/WebPageProxy.messages.in index eb8b3ed..2c0e1ab 100644 --- a/Source/WebKit2/UIProcess/WebPageProxy.messages.in +++ b/Source/WebKit2/UIProcess/WebPageProxy.messages.in @@ -106,8 +106,8 @@ messages -> WebPageProxy { # Policy messages 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 - 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 - 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 + DecidePolicyForNavigationAction(uint64_t frameID, WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) -> (bool receivedPolicyAction, uint64_t policyAction, uint64_t downloadID) Variadic + DecidePolicyForNewWindowAction(uint64_t frameID, WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::InjectedBundleUserMessageEncoder userData) Variadic UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::InjectedBundleUserMessageEncoder userData) Variadic # Progress messages diff --git a/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj b/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj index 28f131a..2d3d596 100644 --- a/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj +++ b/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj @@ -316,6 +316,8 @@ 1AD25E96167AB08100EA9BCD /* DownloadProxyMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD25E94167AB08100EA9BCD /* DownloadProxyMap.h */; }; 1AD3306E16B1D991004F60E7 /* StorageAreaImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3306C16B1D991004F60E7 /* StorageAreaImpl.cpp */; }; 1AD3306F16B1D991004F60E7 /* StorageAreaImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD3306D16B1D991004F60E7 /* StorageAreaImpl.h */; }; + 1ADCB86A189831B30022EE5A /* NavigationActionData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADCB868189831B30022EE5A /* NavigationActionData.cpp */; }; + 1ADCB86B189831B30022EE5A /* NavigationActionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADCB869189831B30022EE5A /* NavigationActionData.h */; }; 1ADF591A1890528E0043C145 /* WKWebViewConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1ADF59181890528E0043C145 /* WKWebViewConfiguration.mm */; }; 1ADF591B1890528E0043C145 /* WKWebViewConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADF59191890528E0043C145 /* WKWebViewConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1AE00D4C182D6EB000087DD7 /* WKBrowsingContextHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AE00D4A182D6EB000087DD7 /* WKBrowsingContextHandle.mm */; }; @@ -1958,6 +1960,8 @@ 1AD25E94167AB08100EA9BCD /* DownloadProxyMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DownloadProxyMap.h; sourceTree = ""; }; 1AD3306C16B1D991004F60E7 /* StorageAreaImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageAreaImpl.cpp; sourceTree = ""; }; 1AD3306D16B1D991004F60E7 /* StorageAreaImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageAreaImpl.h; sourceTree = ""; }; + 1ADCB868189831B30022EE5A /* NavigationActionData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NavigationActionData.cpp; sourceTree = ""; }; + 1ADCB869189831B30022EE5A /* NavigationActionData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigationActionData.h; sourceTree = ""; }; 1ADF59181890528E0043C145 /* WKWebViewConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewConfiguration.mm; sourceTree = ""; }; 1ADF59191890528E0043C145 /* WKWebViewConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewConfiguration.h; sourceTree = ""; }; 1AE00D4A182D6EB000087DD7 /* WKBrowsingContextHandle.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKBrowsingContextHandle.mm; sourceTree = ""; }; @@ -3782,6 +3786,8 @@ 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */, BCB0AEE8122F53E300B1341E /* MutableDictionary.cpp */, BCB0AEE7122F53E300B1341E /* MutableDictionary.h */, + 1ADCB868189831B30022EE5A /* NavigationActionData.cpp */, + 1ADCB869189831B30022EE5A /* NavigationActionData.h */, C02BFF1512514FD8009CCBEA /* NativeWebKeyboardEvent.h */, 31EA25D3134F78D6005B1452 /* NativeWebMouseEvent.h */, DF58C6311371AC5800F9A37C /* NativeWebWheelEvent.h */, @@ -6175,6 +6181,7 @@ BC64697011DBE603006455B0 /* APIArray.h in Headers */, BCBCB0CB1215E32100DE59CA /* ImmutableDictionary.h in Headers */, BC204EE311C83E98008F3375 /* InjectedBundle.h in Headers */, + 1ADCB86B189831B30022EE5A /* NavigationActionData.h in Headers */, 935EEBA2127761D0003322B8 /* InjectedBundleBackForwardList.h in Headers */, 935EEBA4127761D6003322B8 /* InjectedBundleBackForwardListItem.h in Headers */, BCEE7DC5128B645D009827DA /* InjectedBundleClient.h in Headers */, @@ -8071,6 +8078,7 @@ BC40762A124FF0400068F20A /* WKURLRequestNS.mm in Sources */, 512A9760180E031D0039A149 /* DatabaseProcessMessageReceiver.cpp in Sources */, BC40760D124FF0270068F20A /* WKURLResponse.cpp in Sources */, + 1ADCB86A189831B30022EE5A /* NavigationActionData.cpp in Sources */, BC40762C124FF0400068F20A /* WKURLResponseNS.mm in Sources */, 2D819B9E18627EE9001F03D1 /* ViewGestureGeometryCollector.cpp in Sources */, F6113E28126CE19B0057D0A7 /* WKUserContentURLPattern.cpp in Sources */, diff --git a/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp b/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp index 94c9627..0d87596 100644 --- a/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp +++ b/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp @@ -33,6 +33,7 @@ #include "InjectedBundleDOMWindowExtension.h" #include "InjectedBundleNavigationAction.h" #include "InjectedBundleUserMessageCoders.h" +#include "NavigationActionData.h" #include "PluginView.h" #include "WebBackForwardListProxy.h" #include "WebContextMessages.h" @@ -678,8 +679,12 @@ void WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(const Navigati uint64_t listenerID = m_frame->setUpPolicyListener(std::move(function)); - // Notify the UIProcess. - webPage->send(Messages::WebPageProxy::DecidePolicyForNewWindowAction(m_frame->frameID(), action->navigationType(), action->modifiers(), action->mouseButton(), request, frameName, listenerID, InjectedBundleUserMessageEncoder(userData.get()))); + NavigationActionData navigationActionData; + navigationActionData.navigationType = action->navigationType(); + navigationActionData.modifiers = action->modifiers(); + navigationActionData.mouseButton = action->mouseButton(); + + webPage->send(Messages::WebPageProxy::DecidePolicyForNewWindowAction(m_frame->frameID(), navigationActionData, request, frameName, listenerID, InjectedBundleUserMessageEncoder(userData.get()))); } void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr prpFormState, FramePolicyFunction function) @@ -729,8 +734,13 @@ void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const Navigat break; } + NavigationActionData navigationActionData; + navigationActionData.navigationType = action->navigationType(); + navigationActionData.modifiers = action->modifiers(); + navigationActionData.mouseButton = action->mouseButton(); + // Notify the UIProcess. - 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))) + if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), navigationActionData, originatingFrame ? originatingFrame->frameID() : 0, navigationAction.resourceRequest(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction, downloadID))) return; // We call this synchronously because WebCore cannot gracefully handle a frame load without a synchronous navigation policy reply. -- 1.8.3.1