<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[209558] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/209558">209558</a></dd>
<dt>Author</dt> <dd>achristensen@apple.com</dd>
<dt>Date</dt> <dd>2016-12-08 12:52:35 -0800 (Thu, 08 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add SPI for sending WebsiteSettings to WebProcess during navigation
https://bugs.webkit.org/show_bug.cgi?id=165517
&lt;rdar://29341068&gt;

Source/WebKit2:

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):

Tools:

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):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2CMakeListstxt">trunk/Source/WebKit2/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2PlatformMaccmake">trunk/Source/WebKit2/PlatformMac.cmake</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIAPIObjecth">trunk/Source/WebKit2/Shared/API/APIObject.h</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIcWKBaseh">trunk/Source/WebKit2/Shared/API/c/WKBase.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPINavigationClienth">trunk/Source/WebKit2/UIProcess/API/APINavigationClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIPolicyClienth">trunk/Source/WebKit2/UIProcess/API/APIPolicyClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKAPICasth">trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKFramePolicyListenercpp">trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKFramePolicyListenerh">trunk/Source/WebKit2/UIProcess/API/C/WKFramePolicyListener.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagecpp">trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKNavigationDelegatePrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAutomationWebAutomationSessioncpp">trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaNavigationStateh">trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaNavigationStatemm">trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFormSubmissionListenerProxycpp">trunk/Source/WebKit2/UIProcess/WebFormSubmissionListenerProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameListenerProxycpp">trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameListenerProxyh">trunk/Source/WebKit2/UIProcess/WebFrameListenerProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFramePolicyListenerProxycpp">trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFramePolicyListenerProxyh">trunk/Source/WebKit2/UIProcess/WebFramePolicyListenerProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameProxycpp">trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameProxyh">trunk/Source/WebKit2/UIProcess/WebFrameProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebInspectorProxycpp">trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxymessagesin">trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj">trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2SharedWebsitePoliciesh">trunk/Source/WebKit2/Shared/WebsitePolicies.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIWebsitePoliciescpp">trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIWebsitePoliciesh">trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKWebsitePoliciescpp">trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKWebsitePoliciesh">trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKWebsitePoliciesh">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKWebsitePoliciesmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKWebsitePoliciesInternalh">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePoliciesInternal.h</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2contentBlockerCheckhtml">trunk/Tools/TestWebKitAPI/Tests/WebKit2/contentBlockerCheck.html</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaWebsitePoliciesmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm</a></li>
</ul>

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

</body>
</html>