Diff
Modified: trunk/Source/WebKit2/CMakeLists.txt (209557 => 209558)
--- trunk/Source/WebKit2/CMakeLists.txt 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/CMakeLists.txt 2016-12-08 20:52:35 UTC (rev 209558)
@@ -433,6 +433,7 @@
UIProcess/API/APIUserScript.cpp
UIProcess/API/APIUserStyleSheet.cpp
UIProcess/API/APIWebsiteDataStore.cpp
+ UIProcess/API/APIWebsitePolicies.cpp
UIProcess/API/APIWindowFeatures.cpp
UIProcess/API/C/WKApplicationCacheManager.cpp
@@ -482,6 +483,7 @@
UIProcess/API/C/WKVibration.cpp
UIProcess/API/C/WKViewportAttributes.cpp
UIProcess/API/C/WKWebsiteDataStoreRef.cpp
+ UIProcess/API/C/WKWebsitePolicies.cpp
UIProcess/API/C/WKWindowFeaturesRef.cpp
UIProcess/Authentication/AuthenticationChallengeProxy.cpp
Modified: trunk/Source/WebKit2/ChangeLog (209557 => 209558)
--- trunk/Source/WebKit2/ChangeLog 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/ChangeLog 2016-12-08 20:52:35 UTC (rev 209558)
@@ -1,3 +1,91 @@
+2016-12-08 Alex Christensen <achristen...@webkit.org>
+
+ Add SPI for sending WebsiteSettings to WebProcess during navigation
+ https://bugs.webkit.org/show_bug.cgi?id=165517
+ <rdar://29341068>
+
+ We add the ability for the navigation client to send settings to the WebProcess
+ based on the URL of the document being navigated to. This approach adds no new IPC
+ messages and allows the application to decide what settings to use during navigation
+ instead of declaratively before navigation. Right now there is only one setting,
+ whether to disable content blockers, but this infrastructure can be used for more settings.
+
+ Reviewed by Anders Carlsson.
+
+ * CMakeLists.txt:
+ * PlatformMac.cmake:
+ * Shared/API/APIObject.h:
+ * Shared/API/c/WKBase.h:
+ * Shared/WebsitePolicies.h: Added.
+ (WebKit::WebsitePolicies::encode):
+ (WebKit::WebsitePolicies::decode):
+ * UIProcess/API/APINavigationClient.h:
+ (API::NavigationClient::decidePolicyForNavigationAction):
+ (API::NavigationClient::decidePolicyForNavigationResponse):
+ * UIProcess/API/APIPolicyClient.h:
+ (API::PolicyClient::decidePolicyForNavigationAction):
+ (API::PolicyClient::decidePolicyForNewWindowAction):
+ (API::PolicyClient::decidePolicyForResponse):
+ * UIProcess/API/APIWebsitePolicies.cpp: Added.
+ (API::WebsitePolicies::create):
+ * UIProcess/API/APIWebsitePolicies.h: Added.
+ * UIProcess/API/C/WKAPICast.h:
+ * UIProcess/API/C/WKFramePolicyListener.cpp:
+ (WKFramePolicyListenerUse):
+ (WKFramePolicyListenerUseWithPolicies):
+ * UIProcess/API/C/WKFramePolicyListener.h:
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageSetPagePolicyClient):
+ * UIProcess/API/C/WKWebsitePolicies.cpp: Added.
+ (WKWebsitePoliciesGetTypeID):
+ (WKWebsitePoliciesCreate):
+ (WKWebsitePoliciesSetContentBlockersEnabled):
+ (WKWebsitePoliciesGetContentBlockersEnabled):
+ * UIProcess/API/C/WKWebsitePolicies.h: Added.
+ * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
+ * UIProcess/API/Cocoa/_WKWebsitePolicies.h: Added.
+ * UIProcess/API/Cocoa/_WKWebsitePolicies.mm: Added.
+ (-[_WKWebsitePolicies dealloc]):
+ (-[_WKWebsitePolicies init]):
+ (-[_WKWebsitePolicies setContentBlockersEnabled:]):
+ (-[_WKWebsitePolicies contentBlockersEnabled]):
+ (-[_WKWebsitePolicies description]):
+ (-[_WKWebsitePolicies _apiObject]):
+ * UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h: Added.
+ (WebKit::wrapper):
+ * UIProcess/Automation/WebAutomationSession.cpp:
+ (WebKit::WebAutomationSession::reloadBrowsingContext):
+ * UIProcess/Cocoa/NavigationState.h:
+ * UIProcess/Cocoa/NavigationState.mm:
+ (WebKit::NavigationState::setNavigationDelegate):
+ (WebKit::tryAppLink):
+ (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
+ (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):
+ * UIProcess/WebFormSubmissionListenerProxy.cpp:
+ (WebKit::WebFormSubmissionListenerProxy::continueSubmission):
+ * UIProcess/WebFrameListenerProxy.cpp:
+ (WebKit::WebFrameListenerProxy::receivedPolicyDecision):
+ * UIProcess/WebFrameListenerProxy.h:
+ * UIProcess/WebFramePolicyListenerProxy.cpp:
+ (WebKit::WebFramePolicyListenerProxy::use):
+ (WebKit::WebFramePolicyListenerProxy::download):
+ (WebKit::WebFramePolicyListenerProxy::ignore):
+ * UIProcess/WebFramePolicyListenerProxy.h:
+ (WebKit::WebFramePolicyListenerProxy::create):
+ * UIProcess/WebFrameProxy.cpp:
+ (WebKit::WebFrameProxy::receivedPolicyDecision):
+ * UIProcess/WebFrameProxy.h:
+ * UIProcess/WebInspectorProxy.cpp:
+ (WebKit::decidePolicyForNavigationAction):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::receivedPolicyDecision):
+ (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+
2016-12-08 Antti Koivisto <an...@apple.com>
Salt network cache hashes
Modified: trunk/Source/WebKit2/PlatformMac.cmake (209557 => 209558)
--- trunk/Source/WebKit2/PlatformMac.cmake 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/PlatformMac.cmake 2016-12-08 20:52:35 UTC (rev 209558)
@@ -223,6 +223,7 @@
UIProcess/API/Cocoa/_WKVisitedLinkStore.mm
UIProcess/API/Cocoa/_WKWebsiteDataSize.mm
UIProcess/API/Cocoa/_WKWebsiteDataStore.mm
+ UIProcess/API/Cocoa/_WKWebsitePolicies.mm
UIProcess/API/mac/WKView.mm
Modified: trunk/Source/WebKit2/Shared/API/APIObject.h (209557 => 209558)
--- trunk/Source/WebKit2/Shared/API/APIObject.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/Shared/API/APIObject.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -156,6 +156,7 @@
VisitedLinkStore,
WebsiteDataRecord,
WebsiteDataStore,
+ WebsitePolicies,
WindowFeatures,
#if ENABLE(MEDIA_SESSION)
Modified: trunk/Source/WebKit2/Shared/API/c/WKBase.h (209557 => 209558)
--- trunk/Source/WebKit2/Shared/API/c/WKBase.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/Shared/API/c/WKBase.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -139,6 +139,7 @@
typedef const struct OpaqueWKVibration* WKVibrationRef;
typedef const struct OpaqueWKViewportAttributes* WKViewportAttributesRef;
typedef const struct OpaqueWKWebsiteDataStore* WKWebsiteDataStoreRef;
+typedef const struct OpaqueWKWebsitePolicies* WKWebsitePoliciesRef;
typedef const struct OpaqueWKWindowFeatures* WKWindowFeaturesRef;
/* WebKit2 Bundle types */
Added: trunk/Source/WebKit2/Shared/WebsitePolicies.h (0 => 209558)
--- trunk/Source/WebKit2/Shared/WebsitePolicies.h (rev 0)
+++ trunk/Source/WebKit2/Shared/WebsitePolicies.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#pragma once
+
+namespace WebKit {
+
+struct WebsitePolicies {
+
+ bool contentBlockersEnabled { true };
+
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static bool decode(Decoder&, WebsitePolicies&);
+};
+
+template<class Encoder> void WebsitePolicies::encode(Encoder& encoder) const
+{
+ encoder << contentBlockersEnabled;
+}
+
+template<class Decoder> bool WebsitePolicies::decode(Decoder& decoder, WebsitePolicies& result)
+{
+ if (!decoder.decode(result.contentBlockersEnabled))
+ return false;
+ return true;
+}
+
+} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/API/APINavigationClient.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/APINavigationClient.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/API/APINavigationClient.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -23,8 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef APINavigationClient_h
-#define APINavigationClient_h
+#pragma once
#include "APIData.h"
#include "PluginModuleInfo.h"
@@ -31,6 +30,7 @@
#include "SameDocumentNavigationType.h"
#include "WebEvent.h"
#include "WebFramePolicyListenerProxy.h"
+#include "WebsitePolicies.h"
#include <WebCore/FrameLoaderTypes.h>
#include <WebCore/LayoutMilestones.h>
#include <wtf/Forward.h>
@@ -95,12 +95,12 @@
virtual void decidePolicyForNavigationAction(WebKit::WebPageProxy&, API::NavigationAction&, Ref<WebKit::WebFramePolicyListenerProxy>&& listener, API::Object*)
{
- listener->use();
+ listener->use({ });
}
virtual void decidePolicyForNavigationResponse(WebKit::WebPageProxy&, API::NavigationResponse&, Ref<WebKit::WebFramePolicyListenerProxy>&& listener, API::Object*)
{
- listener->use();
+ listener->use({ });
}
#if ENABLE(NETSCAPE_PLUGIN_API)
@@ -117,5 +117,3 @@
};
} // namespace API
-
-#endif // APINavigationClient_h
Modified: trunk/Source/WebKit2/UIProcess/API/APIPolicyClient.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/APIPolicyClient.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/API/APIPolicyClient.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -53,15 +53,15 @@
virtual void decidePolicyForNavigationAction(WebKit::WebPageProxy&, WebKit::WebFrameProxy*, const WebKit::NavigationActionData&, WebKit::WebFrameProxy*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, Ref<WebKit::WebFramePolicyListenerProxy>&& listener, API::Object*)
{
- listener->use();
+ listener->use({ });
}
virtual void decidePolicyForNewWindowAction(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, const WebKit::NavigationActionData&, const WebCore::ResourceRequest&, const WTF::String&, Ref<WebKit::WebFramePolicyListenerProxy>&& listener, API::Object*)
{
- listener->use();
+ listener->use({ });
}
virtual void decidePolicyForResponse(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool, Ref<WebKit::WebFramePolicyListenerProxy>&& listener, API::Object*)
{
- listener->use();
+ listener->use({ });
}
virtual void unableToImplementPolicy(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, const WebCore::ResourceError&, API::Object*) { }
};
Added: trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.cpp (0 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.cpp (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2016 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 "APIWebsitePolicies.h"
+
+namespace API {
+
+Ref<WebsitePolicies> WebsitePolicies::create()
+{
+ return adoptRef(*new WebsitePolicies());
+}
+
+WebsitePolicies::WebsitePolicies()
+{
+}
+
+WebsitePolicies::~WebsitePolicies()
+{
+}
+
+}
Added: trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.h (0 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.h (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#pragma once
+
+#include "APIObject.h"
+#include "WebsitePolicies.h"
+
+namespace API {
+
+class WebsitePolicies final : public ObjectImpl<Object::Type::WebsitePolicies> {
+public:
+ static Ref<WebsitePolicies> create();
+ explicit WebsitePolicies();
+ virtual ~WebsitePolicies();
+
+ bool contentBlockersEnabled() const { return m_websitePolicies.contentBlockersEnabled; }
+ void setContentBlockersEnabled(bool enabled) { m_websitePolicies.contentBlockersEnabled = enabled; }
+
+ const WebKit::WebsitePolicies& websitePolicies() { return m_websitePolicies; }
+
+private:
+ WebKit::WebsitePolicies m_websitePolicies;
+};
+
+}
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -67,6 +67,7 @@
class UserContentExtensionStore;
class UserScript;
class WebsiteDataStore;
+class WebsitePolicies;
class WindowFeatures;
}
@@ -110,6 +111,7 @@
class WebUserContentControllerProxy;
class WebVibrationProxy;
class WebViewportAttributes;
+struct WebsitePolicies;
WK_ADD_API_MAPPING(WKAuthenticationChallengeRef, AuthenticationChallengeProxy)
WK_ADD_API_MAPPING(WKAuthenticationDecisionListenerRef, AuthenticationDecisionListener)
@@ -165,6 +167,7 @@
WK_ADD_API_MAPPING(WKVibrationRef, WebVibrationProxy)
WK_ADD_API_MAPPING(WKViewportAttributesRef, WebViewportAttributes)
WK_ADD_API_MAPPING(WKWebsiteDataStoreRef, API::WebsiteDataStore)
+WK_ADD_API_MAPPING(WKWebsitePoliciesRef, API::WebsitePolicies)
WK_ADD_API_MAPPING(WKWindowFeaturesRef, API::WindowFeatures)
/* Enum conversions */
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,9 +26,11 @@
#include "config.h"
#include "WKFramePolicyListener.h"
+#include "APIWebsitePolicies.h"
#include "WKAPICast.h"
#include "WebFramePolicyListenerProxy.h"
#include "WebFrameProxy.h"
+#include "WebsitePolicies.h"
using namespace WebKit;
@@ -39,9 +41,14 @@
void WKFramePolicyListenerUse(WKFramePolicyListenerRef policyListenerRef)
{
- toImpl(policyListenerRef)->use();
+ toImpl(policyListenerRef)->use({ });
}
+void WKFramePolicyListenerUseWithPolicies(WKFramePolicyListenerRef policyListenerRef, WKWebsitePoliciesRef websitePolicies)
+{
+ toImpl(policyListenerRef)->use(toImpl(websitePolicies)->websitePolicies());
+}
+
void WKFramePolicyListenerDownload(WKFramePolicyListenerRef policyListenerRef)
{
toImpl(policyListenerRef)->download();
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,8 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WKFramePolicyListener_h
-#define WKFramePolicyListener_h
+#pragma once
#include <WebKit/WKBase.h>
@@ -34,12 +33,11 @@
WK_EXPORT WKTypeID WKFramePolicyListenerGetTypeID();
-WK_EXPORT void WKFramePolicyListenerUse(WKFramePolicyListenerRef policyListener);
-WK_EXPORT void WKFramePolicyListenerDownload(WKFramePolicyListenerRef policyListener);
-WK_EXPORT void WKFramePolicyListenerIgnore(WKFramePolicyListenerRef policyListener);
+WK_EXPORT void WKFramePolicyListenerUse(WKFramePolicyListenerRef);
+WK_EXPORT void WKFramePolicyListenerDownload(WKFramePolicyListenerRef);
+WK_EXPORT void WKFramePolicyListenerIgnore(WKFramePolicyListenerRef);
+WK_EXPORT void WKFramePolicyListenerUseWithPolicies(WKFramePolicyListenerRef, WKWebsitePoliciesRef);
#ifdef __cplusplus
}
#endif
-
-#endif /* WKFramePolicyListener_h */
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -1348,7 +1348,7 @@
void decidePolicyForNavigationAction(WebPageProxy& page, WebFrameProxy* frame, const NavigationActionData& navigationActionData, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalResourceRequest, const WebCore::ResourceRequest& resourceRequest, Ref<WebFramePolicyListenerProxy>&& listener, API::Object* userData) override
{
if (!m_client.decidePolicyForNavigationAction_deprecatedForUseWithV0 && !m_client.decidePolicyForNavigationAction_deprecatedForUseWithV1 && !m_client.decidePolicyForNavigationAction) {
- listener->use();
+ listener->use({ });
return;
}
@@ -1366,7 +1366,7 @@
void decidePolicyForNewWindowAction(WebPageProxy& page, WebFrameProxy& frame, const NavigationActionData& navigationActionData, const ResourceRequest& resourceRequest, const String& frameName, Ref<WebFramePolicyListenerProxy>&& listener, API::Object* userData) override
{
if (!m_client.decidePolicyForNewWindowAction) {
- listener->use();
+ listener->use({ });
return;
}
@@ -1378,7 +1378,7 @@
void decidePolicyForResponse(WebPageProxy& page, WebFrameProxy& frame, const ResourceResponse& resourceResponse, const ResourceRequest& resourceRequest, bool canShowMIMEType, Ref<WebFramePolicyListenerProxy>&& listener, API::Object* userData) override
{
if (!m_client.decidePolicyForResponse_deprecatedForUseWithV0 && !m_client.decidePolicyForResponse) {
- listener->use();
+ listener->use({ });
return;
}
Added: trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.cpp (0 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.cpp (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2016 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 "WKWebsitePolicies.h"
+
+#include "APIWebsitePolicies.h"
+#include "WKAPICast.h"
+#include "WebsitePolicies.h"
+
+using namespace WebKit;
+
+WKTypeID WKWebsitePoliciesGetTypeID()
+{
+ return toAPI(API::WebsitePolicies::APIType);
+}
+
+WKWebsitePoliciesRef WKWebsitePoliciesCreate()
+{
+ return toAPI(&API::WebsitePolicies::create().leakRef());
+}
+
+void WKWebsitePoliciesSetContentBlockersEnabled(WKWebsitePoliciesRef websitePolicies, bool enabled)
+{
+ toImpl(websitePolicies)->setContentBlockersEnabled(enabled);
+}
+
+bool WKWebsitePoliciesGetContentBlockersEnabled(WKWebsitePoliciesRef websitePolicies)
+{
+ return toImpl(websitePolicies)->contentBlockersEnabled();
+}
Added: trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.h (0 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.h (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#pragma once
+
+#include <WebKit/WKBase.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+WK_EXPORT WKTypeID WKWebsitePoliciesGetTypeID();
+
+WK_EXPORT WKWebsitePoliciesRef WKWebsitePoliciesCreate();
+
+WK_EXPORT bool WKWebsitePoliciesGetContentBlockersEnabled(WKWebsitePoliciesRef);
+WK_EXPORT void WKWebsitePoliciesSetContentBlockersEnabled(WKWebsitePoliciesRef, bool);
+
+#ifdef __cplusplus
+}
+#endif
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -31,6 +31,8 @@
#if WK_API_ENABLED
+@class _WKWebsitePolicies;
+
static const WKNavigationActionPolicy _WKNavigationActionPolicyDownload = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 1);
static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);
@@ -63,6 +65,7 @@
- (void)_webViewWillEndNavigationGesture:(WKWebView *)webView withNavigationToBackForwardListItem:(WKBackForwardListItem *)item;
- (void)_webView:(WKWebView *)webView willSnapshotBackForwardListItem:(WKBackForwardListItem *)item;
- (void)_webViewDidRemoveNavigationGestureSnapshot:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12), ios(10.0));
+- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
#if TARGET_OS_IPHONE
- (void)_webView:(WKWebView *)webView didStartLoadForQuickLookDocumentInMainFrameWithFileName:(NSString *)fileName uti:(NSString *)uti;
Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.h (0 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.h (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#import <WebKit/WKFoundation.h>
+
+#if WK_API_ENABLED
+
+WK_CLASS_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKWebsitePolicies : NSObject
+
+@property (nonatomic) BOOL contentBlockersEnabled;
+
+@end
+
+#endif // WK_API_ENABLED
Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.mm (0 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.mm (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.mm 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#import "config.h"
+#import "_WKWebsitePoliciesInternal.h"
+
+#if WK_API_ENABLED
+
+@implementation _WKWebsitePolicies
+
+- (void)dealloc
+{
+ _websitePolicies->API::WebsitePolicies::~WebsitePolicies();
+
+ [super dealloc];
+}
+
+- (instancetype)init
+{
+ if (!(self = [super init]))
+ return nil;
+
+ API::Object::constructInWrapper<API::WebsitePolicies>(self);
+
+ return self;
+}
+
+- (void)setContentBlockersEnabled:(BOOL)contentBlockersEnabled
+{
+ _websitePolicies->setContentBlockersEnabled(contentBlockersEnabled);
+}
+
+- (BOOL)contentBlockersEnabled
+{
+ return _websitePolicies->contentBlockersEnabled();
+}
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p; contentBlockersEnabled = %d>", NSStringFromClass(self.class), self, self.contentBlockersEnabled];
+}
+
+- (API::Object&)_apiObject
+{
+ return *_websitePolicies;
+}
+
+@end
+
+#endif
Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h (0 => 209558)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+#import "_WKWebsitePolicies.h"
+
+#if WK_API_ENABLED
+
+#import "APIWebsitePolicies.h"
+#import "WKObject.h"
+
+namespace WebKit {
+
+inline _WKWebsitePolicies *wrapper(API::WebsitePolicies& websitePolicies)
+{
+ ASSERT([websitePolicies.wrapper() isKindOfClass:[_WKWebsitePolicies class]]);
+ return (_WKWebsitePolicies *)websitePolicies.wrapper();
+}
+
+}
+
+@interface _WKWebsitePolicies () <WKObject> {
+@package
+ API::ObjectStorage<API::WebsitePolicies> _websitePolicies;
+}
+@end
+
+#endif
Modified: trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -435,8 +435,7 @@
m_pendingNavigationInBrowsingContextCallbacksPerPage.set(page->pageID(), WTFMove(callback));
const bool reloadFromOrigin = false;
- const bool contentBlockersEnabled = true;
- page->reload(reloadFromOrigin, contentBlockersEnabled);
+ page->reload(reloadFromOrigin, { });
}
void WebAutomationSession::inspectBrowsingContext(Inspector::ErrorString& errorString, const String& handle, const bool* optionalEnableAutoCapturing, Ref<InspectBrowsingContextCallback>&& callback)
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -162,6 +162,7 @@
struct {
bool webViewDecidePolicyForNavigationActionDecisionHandler : 1;
+ bool webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies : 1;
bool webViewDecidePolicyForNavigationResponseDecisionHandler : 1;
bool webViewDidStartProvisionalNavigation : 1;
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm 2016-12-08 20:52:35 UTC (rev 209558)
@@ -62,6 +62,7 @@
#import "_WKFrameHandleInternal.h"
#import "_WKRenderingProgressEventsInternal.h"
#import "_WKSameDocumentNavigationTypeInternal.h"
+#import "_WKWebsitePoliciesInternal.h"
#import <WebCore/Credential.h>
#import <WebCore/SecurityOriginData.h>
#import <WebCore/SerializedCryptoKeyWrap.h>
@@ -137,6 +138,7 @@
m_navigationDelegate = delegate;
m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)];
+ m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies = [delegate respondsToSelector:@selector(_webView:decidePolicyForNavigationAction:decisionHandler:)];
m_navigationDelegateMethods.webViewDecidePolicyForNavigationResponseDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationResponse:decisionHandler:)];
m_navigationDelegateMethods.webViewDidStartProvisionalNavigation = [delegate respondsToSelector:@selector(webView:didStartProvisionalNavigation:)];
@@ -265,7 +267,7 @@
{
}
-static void tryAppLink(RefPtr<API::NavigationAction> navigationAction, const String& currentMainFrameURL, std::function<void (bool)> completionHandler)
+static void tryAppLink(RefPtr<API::NavigationAction>&& navigationAction, const String& currentMainFrameURL, std::function<void(bool)> completionHandler)
{
#if HAVE(APP_LINKS)
if (!navigationAction->shouldOpenAppLinks()) {
@@ -289,11 +291,12 @@
{
String mainFrameURLString = webPageProxy.mainFrame()->url();
- if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler) {
+ if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler
+ && !m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies) {
RefPtr<API::NavigationAction> localNavigationAction = &navigationAction;
RefPtr<WebFramePolicyListenerProxy> localListener = WTFMove(listener);
- tryAppLink(localNavigationAction, mainFrameURLString, [localListener, localNavigationAction] (bool followedLinkToApp) {
+ tryAppLink(WTFMove(localNavigationAction), mainFrameURLString, [localListener, localNavigationAction = RefPtr<API::NavigationAction>(&navigationAction)] (bool followedLinkToApp) {
if (followedLinkToApp) {
localListener->ignore();
return;
@@ -300,7 +303,7 @@
}
if (!localNavigationAction->targetFrame()) {
- localListener->use();
+ localListener->use({ });
return;
}
@@ -309,7 +312,7 @@
if (localNavigationAction->shouldPerformDownload())
localListener->download();
else
- localListener->use();
+ localListener->use({ });
return;
}
@@ -329,21 +332,26 @@
if (!navigationDelegate)
return;
- RefPtr<API::NavigationAction> localNavigationAction = &navigationAction;
- RefPtr<WebFramePolicyListenerProxy> localListener = WTFMove(listener);
- RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), @selector(webView:decidePolicyForNavigationAction:decisionHandler:));
- [navigationDelegate webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) decisionHandler:[localListener, localNavigationAction, checker, mainFrameURLString](WKNavigationActionPolicy actionPolicy) {
+ bool delegateHasWebsitePolicies = m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandlerWebsitePolicies;
+
+ RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), delegateHasWebsitePolicies ? @selector(_webView:decidePolicyForNavigationAction:decisionHandler:) : @selector(webView:decidePolicyForNavigationAction:decisionHandler:));
+
+ auto decisionHandlerWithPolicies = [localListener = RefPtr<WebFramePolicyListenerProxy>(WTFMove(listener)), localNavigationAction = RefPtr<API::NavigationAction>(&navigationAction), checker = WTFMove(checker), mainFrameURLString](WKNavigationActionPolicy actionPolicy, _WKWebsitePolicies *websitePolicies) mutable {
checker->didCallCompletionHandler();
+ WebsitePolicies policies;
+ if (websitePolicies)
+ policies = websitePolicies->_websitePolicies->websitePolicies();
+
switch (actionPolicy) {
case WKNavigationActionPolicyAllow:
- tryAppLink(localNavigationAction, mainFrameURLString, [localListener](bool followedLinkToApp) {
+ tryAppLink(WTFMove(localNavigationAction), mainFrameURLString, [localListener = WTFMove(localListener), policies = WTFMove(policies)](bool followedLinkToApp) mutable {
if (followedLinkToApp) {
localListener->ignore();
return;
}
- localListener->use();
+ localListener->use(policies);
});
break;
@@ -356,17 +364,23 @@
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wswitch"
case _WKNavigationActionPolicyDownload:
-#pragma clang diagnostic pop
localListener->download();
break;
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wswitch"
case _WKNavigationActionPolicyAllowWithoutTryingAppLink:
#pragma clang diagnostic pop
- localListener->use();
+ localListener->use(policies);
break;
}
- }];
+ };
+
+ if (delegateHasWebsitePolicies)
+ [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) decisionHandler:decisionHandlerWithPolicies];
+ else {
+ auto decisionHandlerWithoutPolicies = [decisionHandlerWithPolicies] (WKNavigationActionPolicy actionPolicy) mutable {
+ decisionHandlerWithPolicies(actionPolicy, nil);
+ };
+ [navigationDelegate webView:m_navigationState.m_webView decidePolicyForNavigationAction:wrapper(navigationAction) decisionHandler:decisionHandlerWithoutPolicies];
+ }
}
void NavigationState::NavigationClient::decidePolicyForNavigationResponse(WebPageProxy&, API::NavigationResponse& navigationResponse, Ref<WebFramePolicyListenerProxy>&& listener, API::Object* userData)
@@ -378,7 +392,7 @@
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:url.path isDirectory:&isDirectory];
if (exists && !isDirectory && navigationResponse.canShowMIMEType())
- listener->use();
+ listener->use({ });
else
listener->ignore();
return;
@@ -385,7 +399,7 @@
}
if (navigationResponse.canShowMIMEType())
- listener->use();
+ listener->use({ });
else
listener->ignore();
return;
@@ -402,7 +416,7 @@
switch (responsePolicy) {
case WKNavigationResponsePolicyAllow:
- localListener->use();
+ localListener->use({ });
break;
case WKNavigationResponsePolicyCancel:
Modified: trunk/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -26,6 +26,8 @@
#include "config.h"
#include "WebFormSubmissionListenerProxy.h"
+#include "WebsitePolicies.h"
+
namespace WebKit {
WebFormSubmissionListenerProxy::WebFormSubmissionListenerProxy(WebFrameProxy* frame, uint64_t listenerID)
@@ -35,7 +37,7 @@
void WebFormSubmissionListenerProxy::continueSubmission()
{
- receivedPolicyDecision(WebCore::PolicyUse);
+ receivedPolicyDecision(WebCore::PolicyUse, { });
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -45,12 +45,12 @@
m_frame = nullptr;
}
-void WebFrameListenerProxy::receivedPolicyDecision(WebCore::PolicyAction action)
+void WebFrameListenerProxy::receivedPolicyDecision(WebCore::PolicyAction action, const WebsitePolicies& websitePolicies)
{
if (!m_frame)
return;
- m_frame->receivedPolicyDecision(action, m_listenerID, m_navigation.get());
+ m_frame->receivedPolicyDecision(action, m_listenerID, m_navigation.get(), websitePolicies);
m_frame = nullptr;
}
Modified: trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -23,8 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebFrameListenerProxy_h
-#define WebFrameListenerProxy_h
+#pragma once
#include "APINavigation.h"
#include "APIObject.h"
@@ -36,6 +35,7 @@
namespace WebKit {
class WebFrameProxy;
+struct WebsitePolicies;
class WebFrameListenerProxy : public API::Object {
public:
@@ -50,7 +50,7 @@
protected:
WebFrameListenerProxy(WebFrameProxy*, uint64_t listenerID);
- void receivedPolicyDecision(WebCore::PolicyAction);
+ void receivedPolicyDecision(WebCore::PolicyAction, const WebsitePolicies&);
private:
RefPtr<WebFrameProxy> m_frame;
@@ -59,5 +59,3 @@
};
} // namespace WebKit
-
-#endif // WebFrameListenerProxy_h
Modified: trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -27,6 +27,7 @@
#include "WebFramePolicyListenerProxy.h"
#include "WebFrameProxy.h"
+#include "WebsitePolicies.h"
namespace WebKit {
@@ -35,19 +36,19 @@
{
}
-void WebFramePolicyListenerProxy::use()
+void WebFramePolicyListenerProxy::use(const WebsitePolicies& websitePolicies)
{
- receivedPolicyDecision(WebCore::PolicyUse);
+ receivedPolicyDecision(WebCore::PolicyUse, websitePolicies);
}
void WebFramePolicyListenerProxy::download()
{
- receivedPolicyDecision(WebCore::PolicyDownload);
+ receivedPolicyDecision(WebCore::PolicyDownload, { });
}
void WebFramePolicyListenerProxy::ignore()
{
- receivedPolicyDecision(WebCore::PolicyIgnore);
+ receivedPolicyDecision(WebCore::PolicyIgnore, { });
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -23,8 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebFramePolicyListenerProxy_h
-#define WebFramePolicyListenerProxy_h
+#pragma once
#include "WebFrameListenerProxy.h"
@@ -40,12 +39,12 @@
public:
static const Type APIType = Type::FramePolicyListener;
- static PassRefPtr<WebFramePolicyListenerProxy> create(WebFrameProxy* frame, uint64_t listenerID)
+ static Ref<WebFramePolicyListenerProxy> create(WebFrameProxy* frame, uint64_t listenerID)
{
- return adoptRef(new WebFramePolicyListenerProxy(frame, listenerID));
+ return adoptRef(*new WebFramePolicyListenerProxy(frame, listenerID));
}
- void use();
+ void use(const WebsitePolicies&);
void download();
void ignore();
@@ -62,5 +61,3 @@
} // namespace WebKit
#undef DELEGATE_REF_COUNTING_TO_COCOA
-
-#endif // WebFramePolicyListenerProxy_h
Modified: trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -176,7 +176,7 @@
m_title = title;
}
-void WebFrameProxy::receivedPolicyDecision(WebCore::PolicyAction action, uint64_t listenerID, API::Navigation* navigation)
+void WebFrameProxy::receivedPolicyDecision(WebCore::PolicyAction action, uint64_t listenerID, API::Navigation* navigation, const WebsitePolicies& websitePolicies)
{
if (!m_page)
return;
@@ -183,7 +183,7 @@
ASSERT(m_activeListener);
ASSERT(m_activeListener->listenerID() == listenerID);
- m_page->receivedPolicyDecision(action, this, listenerID, navigation);
+ m_page->receivedPolicyDecision(action, *this, listenerID, navigation, websitePolicies);
}
WebFramePolicyListenerProxy& WebFrameProxy::setUpPolicyListenerProxy(uint64_t listenerID)
Modified: trunk/Source/WebKit2/UIProcess/WebFrameProxy.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebFrameProxy.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebFrameProxy.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -23,8 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebFrameProxy_h
-#define WebFrameProxy_h
+#pragma once
#include "APIObject.h"
#include "FrameLoadState.h"
@@ -53,6 +52,7 @@
class WebFormSubmissionListenerProxy;
class WebFramePolicyListenerProxy;
class WebPageProxy;
+struct WebsitePolicies;
typedef GenericCallback<API::Data*> DataCallback;
@@ -115,7 +115,7 @@
void didChangeTitle(const String&);
// Policy operations.
- void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID, API::Navigation* = nullptr);
+ void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID, API::Navigation*, const WebsitePolicies&);
WebFramePolicyListenerProxy& setUpPolicyListenerProxy(uint64_t listenerID);
WebFormSubmissionListenerProxy& setUpFormSubmissionListenerProxy(uint64_t listenerID);
@@ -149,5 +149,3 @@
};
} // namespace WebKit
-
-#endif // WebFrameProxy_h
Modified: trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -334,7 +334,7 @@
// Allow non-main frames to navigate anywhere.
API::FrameInfo* sourceFrame = toImpl(navigationActionRef)->sourceFrame();
if (sourceFrame && !sourceFrame->isMainFrame()) {
- toImpl(listenerRef)->use();
+ toImpl(listenerRef)->use({ });
return;
}
@@ -345,7 +345,7 @@
// Allow loading of the main inspector file.
if (WebInspectorProxy::isMainOrTestInspectorPage(request.url())) {
- toImpl(listenerRef)->use();
+ toImpl(listenerRef)->use({ });
return;
}
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -2253,7 +2253,7 @@
m_process->send(Messages::WebPage::CenterSelectionInVisibleArea(), m_pageID);
}
-void WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy* frame, uint64_t listenerID, API::Navigation* navigation)
+void WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy& frame, uint64_t listenerID, API::Navigation* navigation, const WebsitePolicies& websitePolicies)
{
if (!isValid())
return;
@@ -2293,10 +2293,11 @@
m_syncNavigationActionPolicyActionIsValid = true;
m_syncNavigationActionPolicyAction = action;
m_syncNavigationActionPolicyDownloadID = downloadID;
+ m_syncNavigationActionPolicyWebsitePolicies = websitePolicies;
return;
}
- m_process->send(Messages::WebPage::DidReceivePolicyDecision(frame->frameID(), listenerID, action, navigation ? navigation->navigationID() : 0, downloadID), m_pageID);
+ m_process->send(Messages::WebPage::DidReceivePolicyDecision(frame.frameID(), listenerID, action, navigation ? navigation->navigationID() : 0, downloadID), m_pageID);
}
void WebPageProxy::setUserAgent(const String& userAgent)
@@ -3609,7 +3610,7 @@
m_frameSetLargestFrame = value ? m_mainFrame : 0;
}
-void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData& navigationActionData, uint64_t originatingFrameID, const SecurityOriginData& originatingFrameSecurityOrigin, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, const UserData& userData, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, DownloadID& downloadID)
+void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData& navigationActionData, uint64_t originatingFrameID, const SecurityOriginData& originatingFrameSecurityOrigin, const WebCore::ResourceRequest& originalRequest, const ResourceRequest& request, uint64_t listenerID, const UserData& userData, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, DownloadID& downloadID, WebsitePolicies& websitePolicies)
{
PageClientProtector protector(m_pageClient);
@@ -3677,6 +3678,7 @@
if (m_syncNavigationActionPolicyActionIsValid) {
policyAction = m_syncNavigationActionPolicyAction;
downloadID = m_syncNavigationActionPolicyDownloadID;
+ websitePolicies = m_syncNavigationActionPolicyWebsitePolicies;
}
}
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-12-08 20:52:35 UTC (rev 209558)
@@ -60,6 +60,7 @@
#include "WebPageProxyMessages.h"
#include "WebPopupMenuProxy.h"
#include "WebProcessLifetimeTracker.h"
+#include "WebsitePolicies.h"
#include <WebCore/ActivityState.h>
#include <WebCore/Color.h>
#include <WebCore/DragActions.h>
@@ -803,7 +804,7 @@
void performDictionaryLookupOfCurrentSelection();
#endif
- void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID, API::Navigation* navigationID);
+ void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy&, uint64_t listenerID, API::Navigation* navigationID, const WebsitePolicies&);
void backForwardRemovedItem(uint64_t itemID);
@@ -1244,7 +1245,7 @@
void didDestroyNavigation(uint64_t navigationID);
- void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData&, uint64_t originatingFrameID, const WebCore::SecurityOriginData& originatingFrameSecurityOrigin, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, const UserData&, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, DownloadID&);
+ void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const NavigationActionData&, uint64_t originatingFrameID, const WebCore::SecurityOriginData& originatingFrameSecurityOrigin, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, uint64_t listenerID, const UserData&, bool& receivedPolicyAction, uint64_t& newNavigationID, uint64_t& policyAction, DownloadID&, WebsitePolicies&);
void decidePolicyForNewWindowAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, const NavigationActionData&, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, const UserData&);
void decidePolicyForResponse(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&);
void decidePolicyForResponseSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&, bool& receivedPolicyAction, uint64_t& policyAction, DownloadID&);
@@ -1770,6 +1771,7 @@
bool m_syncNavigationActionPolicyActionIsValid;
WebCore::PolicyAction m_syncNavigationActionPolicyAction;
DownloadID m_syncNavigationActionPolicyDownloadID;
+ WebsitePolicies m_syncNavigationActionPolicyWebsitePolicies;
bool m_shouldSuppressAppLinksInNextNavigationPolicyDecision { false };
Deque<NativeWebKeyboardEvent> m_keyEventQueue;
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (209557 => 209558)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2016-12-08 20:52:35 UTC (rev 209558)
@@ -111,7 +111,7 @@
# Policy messages
DecidePolicyForResponseSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::UserData userData) -> (bool receivedPolicyAction, uint64_t policyAction, WebKit::DownloadID downloadID)
- DecidePolicyForNavigationAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, struct WebCore::SecurityOriginData originatingFrameSecurityOrigin, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (bool receivedPolicyAction, uint64_t newNavigationID, uint64_t policyAction, WebKit::DownloadID downloadID)
+ DecidePolicyForNavigationAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, uint64_t originatingFrameID, struct WebCore::SecurityOriginData originatingFrameSecurityOrigin, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (bool receivedPolicyAction, uint64_t newNavigationID, uint64_t policyAction, WebKit::DownloadID downloadID, struct WebKit::WebsitePolicies websitePolicies)
DecidePolicyForNewWindowAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, struct WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::UserData userData)
UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::UserData userData)
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (209557 => 209558)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2016-12-08 20:52:35 UTC (rev 209558)
@@ -1099,6 +1099,13 @@
5C7706741D1138380012700F /* WebSocketProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C7706731D111D8B0012700F /* WebSocketProvider.cpp */; };
5C79439B1D762D62003102D4 /* WebKit2InitializeCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C79439A1D762CDF003102D4 /* WebKit2InitializeCocoa.mm */; };
5C85C7881C3F23CE0061A4FA /* PendingDownload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */; };
+ 5C9E56821DF7F1AB00C9EE33 /* WKWebsitePolicies.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C9E56801DF7F05500C9EE33 /* WKWebsitePolicies.cpp */; };
+ 5C9E56831DF7F1B300C9EE33 /* WKWebsitePolicies.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C9E56811DF7F05500C9EE33 /* WKWebsitePolicies.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 5CB2378B1DF0DE5300117AA3 /* _WKWebsitePolicies.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB2378A1DF0DD4300117AA3 /* _WKWebsitePolicies.mm */; };
+ 5CB2378C1DF0DE6E00117AA3 /* _WKWebsitePolicies.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB237891DF0DD4300117AA3 /* _WKWebsitePolicies.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 5CB2378E1DF0E0D300117AA3 /* _WKWebsitePoliciesInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB2378D1DF0E0C200117AA3 /* _WKWebsitePoliciesInternal.h */; };
+ 5CB237911DF0E2E600117AA3 /* APIWebsitePolicies.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CB237901DF0E1DD00117AA3 /* APIWebsitePolicies.cpp */; };
+ 5CB237921DF0E2EE00117AA3 /* APIWebsitePolicies.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB2378F1DF0E1B800117AA3 /* APIWebsitePolicies.h */; };
5CBC9B8D1C65279C00A8FDCF /* NetworkDataTaskCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */; };
5CBC9B8E1C652CA000A8FDCF /* NetworkDataTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */; };
5CE85B201C88E64B0070BFCE /* PingLoad.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CE85B1F1C88E6430070BFCE /* PingLoad.h */; };
@@ -3229,6 +3236,14 @@
5C79439A1D762CDF003102D4 /* WebKit2InitializeCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebKit2InitializeCocoa.mm; sourceTree = "<group>"; };
5C7C88DC1D0F41A0009D2F6D /* WebSocketProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketProvider.h; path = Network/WebSocketProvider.h; sourceTree = "<group>"; };
5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PendingDownload.cpp; path = NetworkProcess/Downloads/PendingDownload.cpp; sourceTree = "<group>"; };
+ 5C9E567F1DF7930900C9EE33 /* WebsitePolicies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebsitePolicies.h; sourceTree = "<group>"; };
+ 5C9E56801DF7F05500C9EE33 /* WKWebsitePolicies.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKWebsitePolicies.cpp; sourceTree = "<group>"; };
+ 5C9E56811DF7F05500C9EE33 /* WKWebsitePolicies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebsitePolicies.h; sourceTree = "<group>"; };
+ 5CB237891DF0DD4300117AA3 /* _WKWebsitePolicies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKWebsitePolicies.h; sourceTree = "<group>"; };
+ 5CB2378A1DF0DD4300117AA3 /* _WKWebsitePolicies.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKWebsitePolicies.mm; sourceTree = "<group>"; };
+ 5CB2378D1DF0E0C200117AA3 /* _WKWebsitePoliciesInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKWebsitePoliciesInternal.h; sourceTree = "<group>"; };
+ 5CB2378F1DF0E1B800117AA3 /* APIWebsitePolicies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIWebsitePolicies.h; sourceTree = "<group>"; };
+ 5CB237901DF0E1DD00117AA3 /* APIWebsitePolicies.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = APIWebsitePolicies.cpp; sourceTree = "<group>"; };
5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkDataTask.h; path = NetworkProcess/NetworkDataTask.h; sourceTree = "<group>"; };
5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = NetworkDataTaskCocoa.mm; path = NetworkProcess/cocoa/NetworkDataTaskCocoa.mm; sourceTree = "<group>"; };
5CE85B1F1C88E6430070BFCE /* PingLoad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PingLoad.h; path = NetworkProcess/PingLoad.h; sourceTree = "<group>"; };
@@ -4746,6 +4761,7 @@
3760881D150413E900FC82C7 /* WebRenderObject.h */,
8360349D1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp */,
8360349E1ACB34D600626549 /* WebSQLiteDatabaseTracker.h */,
+ 5C9E567F1DF7930900C9EE33 /* WebsitePolicies.h */,
C0337DD7127A51B6008FF4F4 /* WebTouchEvent.cpp */,
7C065F291C8CD95F00C2D950 /* WebUserContentControllerDataTypes.cpp */,
7C065F2A1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h */,
@@ -5318,6 +5334,9 @@
1AE286761C7E76510069AC4F /* _WKWebsiteDataSize.h */,
1AE286751C7E76510069AC4F /* _WKWebsiteDataSize.mm */,
1AE2867F1C7F92BF0069AC4F /* _WKWebsiteDataSizeInternal.h */,
+ 5CB237891DF0DD4300117AA3 /* _WKWebsitePolicies.h */,
+ 5CB2378A1DF0DD4300117AA3 /* _WKWebsitePolicies.mm */,
+ 5CB2378D1DF0E0C200117AA3 /* _WKWebsitePoliciesInternal.h */,
FED3C1DA1B447AE800E0EB7F /* APISerializedScriptValueCocoa.mm */,
7CEFA9601AC0999300B910FD /* APIUserContentExtensionStoreCocoa.mm */,
1A3635AB1A3145E500ED6197 /* APIWebsiteDataStoreCocoa.mm */,
@@ -6430,6 +6449,8 @@
1AE286821C7F93860069AC4F /* APIWebsiteDataRecord.h */,
1A3635A71A3144A300ED6197 /* APIWebsiteDataStore.cpp */,
1A3635A81A3144A300ED6197 /* APIWebsiteDataStore.h */,
+ 5CB237901DF0E1DD00117AA3 /* APIWebsitePolicies.cpp */,
+ 5CB2378F1DF0E1B800117AA3 /* APIWebsitePolicies.h */,
1A6563E21B7A8C50009CF787 /* APIWindowFeatures.cpp */,
1A6563E31B7A8C50009CF787 /* APIWindowFeatures.h */,
);
@@ -6565,6 +6586,8 @@
7C89D2A21A678875003A5FDE /* WKUserScriptRef.h */,
1A57109C1ABA0027002FABBE /* WKWebsiteDataStoreRef.cpp */,
1A57109D1ABA0027002FABBE /* WKWebsiteDataStoreRef.h */,
+ 5C9E56801DF7F05500C9EE33 /* WKWebsitePolicies.cpp */,
+ 5C9E56811DF7F05500C9EE33 /* WKWebsitePolicies.h */,
1A7C0DF41B7D1F1000A9B848 /* WKWindowFeaturesRef.cpp */,
1A7C0DF51B7D1F1000A9B848 /* WKWindowFeaturesRef.h */,
);
@@ -7818,6 +7841,7 @@
1AC75A1B1B3368270056745B /* HangDetectionDisabler.h in Headers */,
37F90DE31376560E0051CF68 /* HTTPCookieAcceptPolicy.h in Headers */,
51E351CB180F2CCC00E53BE9 /* IDBUtilities.h in Headers */,
+ 5CB237921DF0E2EE00117AA3 /* APIWebsitePolicies.h in Headers */,
BCCF6B2512C93E7A008F9C35 /* ImageOptions.h in Headers */,
1A1EC69E1872092100B951F0 /* ImportanceAssertion.h in Headers */,
BC204EE311C83E98008F3375 /* InjectedBundle.h in Headers */,
@@ -8135,6 +8159,7 @@
51834593134532E90092B696 /* WebIconDatabaseClient.h in Headers */,
51D02F6A132EC73700BEAA96 /* WebIconDatabaseMessages.h in Headers */,
511B24A7132E095700065A0C /* WebIconDatabaseProxy.h in Headers */,
+ 5CB2378C1DF0DE6E00117AA3 /* _WKWebsitePolicies.h in Headers */,
51D02F6C132EC73700BEAA96 /* WebIconDatabaseProxyMessages.h in Headers */,
510523701C739D42007993CB /* WebIDBConnectionToClient.h in Headers */,
5105237A1C73DA77007993CB /* WebIDBConnectionToClientMessages.h in Headers */,
@@ -8336,6 +8361,7 @@
377EAD4517E2C51A002D193D /* WKDeclarationSpecifiers.h in Headers */,
8372DB2F1A677D4A00C697C5 /* WKDiagnosticLoggingResultType.h in Headers */,
BC4075FA124FF0270068F20A /* WKDictionary.h in Headers */,
+ 5CB2378E1DF0E0D300117AA3 /* _WKWebsitePoliciesInternal.h in Headers */,
BC017D0716260FF4007054F5 /* WKDOMDocument.h in Headers */,
BC017D0916260FF4007054F5 /* WKDOMElement.h in Headers */,
BC017D0B16260FF4007054F5 /* WKDOMInternals.h in Headers */,
@@ -8547,6 +8573,7 @@
53DEA3661DDE423100E82648 /* json.hpp in Headers */,
373D122D18A4B6EB0066D9CC /* WKWebProcessPlugInFramePrivate.h in Headers */,
1F7506B21859163E00EC0FF7 /* WKWebProcessPlugInHitTestResult.h in Headers */,
+ 5C9E56831DF7F1B300C9EE33 /* WKWebsitePolicies.h in Headers */,
1F7506B71859165A00EC0FF7 /* WKWebProcessPlugInHitTestResultInternal.h in Headers */,
BC989D85161A9890000D46D3 /* WKWebProcessPlugInInternal.h in Headers */,
1F335BC0185B84F0001A201A /* WKWebProcessPlugInLoadDelegate.h in Headers */,
@@ -9360,6 +9387,7 @@
31EA25D2134F78C0005B1452 /* NativeWebMouseEventMac.mm in Sources */,
2DA9449F1884E4F000ED86DB /* NativeWebTouchEventIOS.mm in Sources */,
DF58C6361371ACA000F9A37C /* NativeWebWheelEventMac.mm in Sources */,
+ 5CB2378B1DF0DE5300117AA3 /* _WKWebsitePolicies.mm in Sources */,
1ADCB86A189831B30022EE5A /* NavigationActionData.cpp in Sources */,
1ABC3DF51899E437004F0626 /* NavigationState.mm in Sources */,
1A6FBA2B11E6862700DB1371 /* NetscapeBrowserFuncs.cpp in Sources */,
@@ -9405,6 +9433,7 @@
517CF0E3163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp in Sources */,
5C1426EC1C23F80900D41183 /* NetworkProcessCreationParameters.cpp in Sources */,
2DA944BD188511E700ED86DB /* NetworkProcessIOS.mm in Sources */,
+ 5CB237911DF0E2E600117AA3 /* APIWebsitePolicies.cpp in Sources */,
51795567162876CB00FA43B6 /* NetworkProcessMac.mm in Sources */,
5163199416289A6000E22F00 /* NetworkProcessMessageReceiver.cpp in Sources */,
E14A954916E016A40068DE82 /* NetworkProcessPlatformStrategies.cpp in Sources */,
@@ -9593,6 +9622,7 @@
728E86F21795188C0087879E /* WebColorPickerMac.mm in Sources */,
7C4ABED01AA8E9F00088AA37 /* WebCompiledContentExtension.cpp in Sources */,
7C4ABED41AA8FCB80088AA37 /* WebCompiledContentExtensionData.cpp in Sources */,
+ 5C9E56821DF7F1AB00C9EE33 /* WKWebsitePolicies.cpp in Sources */,
BC4A628F147312BE006C681A /* WebConnection.cpp in Sources */,
BC4A6291147312BE006C681A /* WebConnectionClient.cpp in Sources */,
1A1FEC1C1627B45700700F6D /* WebConnectionMessageReceiver.cpp in Sources */,
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (209557 => 209558)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2016-12-08 20:52:35 UTC (rev 209558)
@@ -53,6 +53,7 @@
#include "WebPageProxyMessages.h"
#include "WebProcess.h"
#include "WebProcessPoolMessages.h"
+#include "WebsitePolicies.h"
#include <_javascript_Core/APICast.h>
#include <_javascript_Core/JSObject.h>
#include <WebCore/CachedFrame.h>
@@ -807,11 +808,16 @@
// Notify the UIProcess.
Ref<WebFrame> protect(*m_frame);
WebCore::Frame* originatingCoreFrame = originatingFrame ? originatingFrame->coreFrame() : nullptr;
- if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrame ? originatingFrame->frameID() : 0, SecurityOriginData::fromFrame(originatingCoreFrame), navigationAction.resourceRequest(), request, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, newNavigationID, policyAction, downloadID))) {
+ WebsitePolicies websitePolicies;
+ if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrame ? originatingFrame->frameID() : 0, SecurityOriginData::fromFrame(originatingCoreFrame), navigationAction.resourceRequest(), request, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, newNavigationID, policyAction, downloadID, websitePolicies))) {
m_frame->didReceivePolicyDecision(listenerID, PolicyIgnore, 0, { });
return;
}
+ // Only setUserContentExtensionsEnabled if it hasn't already been disabled by reloading without content blockers.
+ if (documentLoader->userContentExtensionsEnabled())
+ documentLoader->setUserContentExtensionsEnabled(websitePolicies.contentBlockersEnabled);
+
// We call this synchronously because WebCore cannot gracefully handle a frame load without a synchronous navigation policy reply.
if (receivedPolicyAction)
m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), newNavigationID, downloadID);
Modified: trunk/Tools/ChangeLog (209557 => 209558)
--- trunk/Tools/ChangeLog 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Tools/ChangeLog 2016-12-08 20:52:35 UTC (rev 209558)
@@ -1,3 +1,19 @@
+2016-12-08 Alex Christensen <achristen...@webkit.org>
+
+ Add SPI for sending WebsiteSettings to WebProcess during navigation
+ https://bugs.webkit.org/show_bug.cgi?id=165517
+ <rdar://29341068>
+
+ Reviewed by Anders Carlsson.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/Tests/WebKit2/contentBlockerCheck.html: Added.
+ * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm: Added.
+ (-[WebsitePoliciesDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
+ (-[WebsitePoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
+ (-[WebsitePoliciesDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+ (TEST):
+
2016-12-08 Chris Dumez <cdu...@apple.com>
Unreviewed, rolling out r209489.
Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (209557 => 209558)
--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2016-12-08 20:23:41 UTC (rev 209557)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2016-12-08 20:52:35 UTC (rev 209558)
@@ -168,6 +168,8 @@
5C6E65441D5CEFD400F7862E /* URLParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C6E65411D5CEF8500F7862E /* URLParser.cpp */; };
5C726D6F1D3EE06E00C5E1A1 /* InstanceMethodSwizzler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C726D6E1D3EE06800C5E1A1 /* InstanceMethodSwizzler.mm */; };
5C838F7F1DB04F900082858F /* LoadInvalidURLRequest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 57901FAE1CAF137100ED64F9 /* LoadInvalidURLRequest.mm */; };
+ 5C9E56851DF9145400C9EE33 /* WebsitePolicies.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C9E56841DF9143D00C9EE33 /* WebsitePolicies.mm */; };
+ 5C9E56871DF914AE00C9EE33 /* contentBlockerCheck.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E56861DF9148E00C9EE33 /* contentBlockerCheck.html */; };
5C9E59411D3EB5AC00E3C62E /* ApplicationCache.db in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593E1D3EB1DE00E3C62E /* ApplicationCache.db */; };
5C9E59421D3EB5AC00E3C62E /* ApplicationCache.db-shm in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */; };
5C9E59431D3EB5AC00E3C62E /* ApplicationCache.db-wal in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */; };
@@ -586,6 +588,7 @@
dstPath = TestWebKitAPI.resources;
dstSubfolderSpec = 7;
files = (
+ 5C9E56871DF914AE00C9EE33 /* contentBlockerCheck.html in Copy Resources */,
07492B3C1DF8B86600633DE1 /* enumerateMediaDevices.html in Copy Resources */,
9B270FEE1DDC2C0B002D53F3 /* closed-shadow-tree-test.html in Copy Resources */,
F4C2AB221DD6D95E00E06D5B /* enormous-video-with-sound.html in Copy Resources */,
@@ -981,6 +984,8 @@
5C6E65411D5CEF8500F7862E /* URLParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = URLParser.cpp; sourceTree = "<group>"; };
5C726D6D1D3EE06800C5E1A1 /* InstanceMethodSwizzler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InstanceMethodSwizzler.h; path = cocoa/InstanceMethodSwizzler.h; sourceTree = "<group>"; };
5C726D6E1D3EE06800C5E1A1 /* InstanceMethodSwizzler.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InstanceMethodSwizzler.mm; path = cocoa/InstanceMethodSwizzler.mm; sourceTree = "<group>"; };
+ 5C9E56841DF9143D00C9EE33 /* WebsitePolicies.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebsitePolicies.mm; sourceTree = "<group>"; };
+ 5C9E56861DF9148E00C9EE33 /* contentBlockerCheck.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = contentBlockerCheck.html; sourceTree = "<group>"; };
5C9E593E1D3EB1DE00E3C62E /* ApplicationCache.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = ApplicationCache.db; sourceTree = "<group>"; };
5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-shm"; sourceTree = "<group>"; };
5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-wal"; sourceTree = "<group>"; };
@@ -1477,6 +1482,7 @@
7CCB99201D3B41F6003922F6 /* UserInitiatedActionInNavigationAction.mm */,
93E943F11CD3E87E00AC08C2 /* VideoControlsManager.mm */,
51714EB61CF8C7A4004723C4 /* WebProcessKillIDBCleanup.mm */,
+ 5C9E56841DF9143D00C9EE33 /* WebsitePolicies.mm */,
1F83571A1D3FFB0E00E3967B /* WKBackForwardList.mm */,
375E0E151D66674400EFEC2C /* WKNSNumber.mm */,
37B47E2E1D64E7CA005F4EFF /* WKObject.mm */,
@@ -1895,6 +1901,7 @@
7C486BA01AA1254B003F6F9B /* bundle-file.html */,
1A50AA1F1A2A4EA500F4C345 /* close-from-within-create-page.html */,
9B270FED1DDC25FD002D53F3 /* closed-shadow-tree-test.html */,
+ 5C9E56861DF9148E00C9EE33 /* contentBlockerCheck.html */,
290F4274172A1FDE00939FF0 /* custom-protocol-sync-xhr.html */,
C5E1AFFD16B22179006CC1F2 /* execCopy.html */,
BC2D004A12A9FEB300E732A3 /* file-with-anchor.html */,
@@ -2451,6 +2458,7 @@
7CCE7EEB1A411AE600447C4C /* DocumentStartUserScriptAlertCrash.cpp in Sources */,
37A22AA71DCAA27200AFBFC4 /* ObservedRenderingProgressEventsAfterCrash.mm in Sources */,
7CCE7EBB1A411A7E00447C4C /* DOMHTMLTableCellCellAbove.mm in Sources */,
+ 5C9E56851DF9145400C9EE33 /* WebsitePolicies.mm in Sources */,
2D51A0C71C8BF00C00765C45 /* DOMHTMLVideoElementWrapper.mm in Sources */,
5C0BF8921DD599B600B00328 /* EarlyKVOCrash.mm in Sources */,
7CCE7EBC1A411A7E00447C4C /* DOMNodeFromJSObject.mm in Sources */,
Added: trunk/Tools/TestWebKitAPI/Tests/WebKit2/contentBlockerCheck.html (0 => 209558)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit2/contentBlockerCheck.html (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2/contentBlockerCheck.html 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,13 @@
+<html>
+ <head>
+ <script>
+ function sendMessage() { alert(getComputedStyle(document.querySelector(".hidden")).display == "none" ? "content blockers enabled" :"content blockers disabled"); }
+ </script>
+ </head>
+ <body _onload_="sendMessage()">
+ <p class="hidden">
+ This text exists to determine if content blockers are enabled.
+ If they're enabled, the computed style of this text will be display:none.
+ </p>
+ </body>
+</html>
Added: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm (0 => 209558)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm 2016-12-08 20:52:35 UTC (rev 209558)
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2016 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"
+
+#import "PlatformUtilities.h"
+#import <WebKit/WKUserContentControllerPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
+#import <WebKit/_WKUserContentExtensionStorePrivate.h>
+#import <WebKit/_WKWebsitePolicies.h>
+#import <wtf/RetainPtr.h>
+
+#if WK_API_ENABLED
+
+static bool doneCompiling;
+static bool receivedAlert;
+static size_t alertCount;
+
+@interface WebsitePoliciesDelegate : NSObject <WKNavigationDelegate, WKUIDelegate>
+@end
+
+@implementation WebsitePoliciesDelegate
+
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
+{
+ // _webView:decidePolicyForNavigationAction:decisionHandler: should be called instead if it is implemented.
+ EXPECT_TRUE(false);
+ decisionHandler(WKNavigationActionPolicyAllow);
+}
+
+- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
+{
+ switch (alertCount++) {
+ case 0:
+ // FIXME: The first content blocker should be enabled here.
+ // ContentExtensionsBackend::addContentExtension isn't being called in the WebProcess
+ // until after the first main resource starts loading, so we need to send a message to the
+ // WebProcess before loading if we have installed content blockers.
+ // See rdar://problem/27788755
+ EXPECT_STREQ("content blockers disabled", message.UTF8String);
+ break;
+ case 1:
+ // Default behavior.
+ EXPECT_STREQ("content blockers enabled", message.UTF8String);
+ break;
+ case 2:
+ // After having set websitePolicies.contentBlockersEnabled to false.
+ EXPECT_STREQ("content blockers disabled", message.UTF8String);
+ break;
+ case 3:
+ // After having reloaded without content blockers.
+ EXPECT_STREQ("content blockers disabled", message.UTF8String);
+ break;
+ default:
+ EXPECT_TRUE(false);
+ }
+ receivedAlert = true;
+ completionHandler();
+}
+
+- (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler
+{
+ _WKWebsitePolicies *websitePolicies = [[[_WKWebsitePolicies alloc] init] autorelease];
+ switch (alertCount) {
+ case 0:
+ // Verify an existing bug the first time a page is loaded in a new WebProcess.
+ break;
+ case 1:
+ // Verify the content blockers behave correctly with the default behavior.
+ break;
+ case 2:
+ // Verify disabling content blockers works correctly.
+ websitePolicies.contentBlockersEnabled = false;
+ break;
+ case 3:
+ // Verify enabling content blockers has no effect when reloading without content blockers.
+ websitePolicies.contentBlockersEnabled = true;
+ break;
+ default:
+ EXPECT_TRUE(false);
+ }
+ decisionHandler(WKNavigationActionPolicyAllow, websitePolicies);
+}
+
+@end
+
+TEST(WebKit2, WebsitePoliciesContentBlockersEnabled)
+{
+ [[_WKUserContentExtensionStore defaultStore] _removeAllContentExtensions];
+
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+
+ doneCompiling = false;
+ NSString* contentBlocker = @"[{\"action\":{\"type\":\"css-display-none\",\"selector\":\".hidden\"},\"trigger\":{\"url-filter\":\".*\"}}]";
+ [[_WKUserContentExtensionStore defaultStore] compileContentExtensionForIdentifier:@"WebsitePoliciesTest" encodedContentExtension:contentBlocker completionHandler:^(_WKUserContentFilter *filter, NSError *error) {
+ EXPECT_TRUE(error == nil);
+ [[configuration userContentController] _addUserContentFilter:filter];
+ doneCompiling = true;
+ }];
+ TestWebKitAPI::Util::run(&doneCompiling);
+
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+
+ auto delegate = adoptNS([[WebsitePoliciesDelegate alloc] init]);
+ [webView setNavigationDelegate:delegate.get()];
+ [webView setUIDelegate:delegate.get()];
+
+ NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"contentBlockerCheck" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
+ alertCount = 0;
+ receivedAlert = false;
+ [webView loadRequest:request];
+ TestWebKitAPI::Util::run(&receivedAlert);
+
+ receivedAlert = false;
+ [webView reload];
+ TestWebKitAPI::Util::run(&receivedAlert);
+
+ receivedAlert = false;
+ [webView reload];
+ TestWebKitAPI::Util::run(&receivedAlert);
+
+ receivedAlert = false;
+ [webView _reloadWithoutContentBlockers];
+ TestWebKitAPI::Util::run(&receivedAlert);
+
+ [[_WKUserContentExtensionStore defaultStore] _removeAllContentExtensions];
+}
+
+#endif