<!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>[203003] 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/203003">203003</a></dd>
<dt>Author</dt> <dd>aestes@apple.com</dd>
<dt>Date</dt> <dd>2016-07-08 13:14:34 -0700 (Fri, 08 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Content Filtering] Load blocked pages more like other error pages are loaded
https://bugs.webkit.org/show_bug.cgi?id=159485
&lt;rdar://problem/26014076&gt;

Reviewed by Brady Eidson.

Source/WebCore:

Content filter blocked pages were being loaded by cancelling the provisional load of the
page that was blocked and then scheduling a navigation to the content filter error page.
Some clients would not expect a new, Web process-initiated provisional navigation to start
after a cancellation, though, and this would put them in a bad state.

This patch changes blocked page loading to behave more like loading other error pages.
Specifically:
1. didFailProvisionalLoad is dispatched with a new, non-cancellation error code.
2. The blocked page is loaded immediately after dispatching didFailProvisionalLoad, which
   prevents FrameLoader from creating a new back-forward list item for the substitute data load.
3. A substitute data load initiated by the client for the blocked URL is ignored if
   ContentFilter will display its own error page.
4. A file: URL is used instead of a custom scheme for the base URL of the blocked page,
   since some clients expect this.

Updated existing tests to capture frame load delegate callbacks and the back forward list.
Added new API tests: ContentFiltering.LoadAlternate*.

* English.lproj/Localizable.strings: Added a WebKitErrorFrameLoadBlockedByContentFilter description.
* Resources/ContentFilterBlockedPage.html: Added.
* WebCore.xcodeproj/project.pbxproj: Added ContentFilterBlockedPage.html as a frameowrk resource.
* loader/ContentFilter.cpp:
(WebCore::ContentFilter::continueAfterWillSendRequest): Protected m_documentLoader,
since it might otherwise be deallocated inside ContentFilter::didDecide() if the load is blocked.
(WebCore::ContentFilter::stopFilteringMainResource): Only set m_state to Stopped if not
already Blocked, so that we don't forget this ContentFilter was blocked when calling
cancelMailResourceLoad() in didDecide().
(WebCore::ContentFilter::continueAfterResponseReceived): Protected m_documentLoader,
since it might otherwise be deallocated inside ContentFilter::didDecide() if the load is blocked.
(WebCore::ContentFilter::continueAfterDataReceived): Ditto.
(WebCore::ContentFilter::continueAfterNotifyFinished): Ditto.
(WebCore::ContentFilter::didDecide): Moved code from DocumentLoader::contentFilterDidBlock() to here.
Created a blockedByContentFilterError() and called cancelMainResourceLoad().
(WebCore::blockedPageURL): Returned a file: URL to ContentFilterBlockedPage.html in WebCore.framework.
(WebCore::ContentFilter::continueAfterSubstituteDataRequest): If the substitute data load
is for the same failingURL as the currently-displayed blocked page, ignore it.
(WebCore::ContentFilter::handleProvisionalLoadFailure): Load the blocked page if m_state is Blocked
and the ResourceError matches the error we used when previously calling cancelMainResourceLoad().
(WebCore::ContentFilter::unblockHandler): Deleted.
(WebCore::ContentFilter::replacementData): Deleted.
(WebCore::ContentFilter::unblockRequestDeniedScript): Deleted.
* loader/ContentFilter.h:
* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::contentFilter): Returned m_contentFilter.
(WebCore::DocumentLoader::installContentFilterUnblockHandler): Deleted.
(WebCore::DocumentLoader::contentFilterDidBlock): Deleted.
* loader/DocumentLoader.h:
* loader/EmptyClients.h: Added a default implementation of blockedByContentFilterError().
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::load): If m_loadType was already RedirectWithLockedBackForwardList
and we are loading subsitute data for a failing URL, continue to use RedirectWithLockedBackForwardList.
This prevents a new back-forward list item from being created when loading a blocked page in a subframe.
(WebCore::FrameLoader::checkLoadCompleteForThisFrame):
Called ContentFilter::handleProvisionalLoadFailure() after dispatchDidFailProvisionalLoad().
(WebCore::FrameLoader::blockedByContentFilterError): Called FrameLoaderClient::blockedByContentFilterError().
* loader/FrameLoader.h:
* loader/FrameLoaderClient.h:
* loader/NavigationScheduler.cpp:
(WebCore::ScheduledSubstituteDataLoad::ScheduledSubstituteDataLoad): Deleted.
(WebCore::NavigationScheduler::scheduleSubstituteDataLoad): Deleted.
* loader/NavigationScheduler.h:
* loader/PolicyChecker.cpp:
(WebCore::PolicyChecker::checkNavigationPolicy): Ignored a substitute data load for a
failing URL if ContentFilter::continueAfterSubstituteDataRequest() returns false.

Source/WebKit/mac:

* Misc/WebKitErrors.h: Defined WebKitErrorFrameLoadBlockedByContentFilter.
* Misc/WebKitErrors.m:
(registerErrors): Registered WebKitErrorDescriptionFrameLoadBlockedByContentFilter.
* WebCoreSupport/WebFrameLoaderClient.h:
* WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::blockedByContentFilterError): Returned a ResourceError for WebKitErrorFrameLoadBlockedByContentFilter.

Source/WebKit2:

* Shared/API/c/WKErrorRef.h: Defined kWKErrorCodeFrameLoadBlockedByContentFilter.
* UIProcess/Cocoa/WebProcessProxyCocoa.mm:
(WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added the resource directories
of WebCore.framework and WebKit.framework as paths with assumed read access.
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::hasAssumedReadAccessToURL): Checked platformPathsWithAssumedReadAccess()
as well as m_localPathsWithAssumedReadAccess.
(WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added a non-Cocoa implementation.
* UIProcess/WebProcessProxy.h:
* WebProcess/WebCoreSupport/WebErrors.h:
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::blockedByContentFilterError): Called WebKit::blockedByContentFilterError().
* WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
* WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
(WebKit::blockedByContentFilterError): Returned a ResourceError for kWKErrorCodeFrameLoadBlockedByContentFilter.

Tools:

Added API tests for WebView and WKWebView to verify that alternate HTML loaded in response
to a content filtering provisional navigation failure is ignored in preference of
ContentFilter's own error page.

* TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
(-[LoadAlternateNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
(-[LoadAlternateNavigationDelegate webView:didFinishNavigation:]):
(loadAlternateTest):
(TEST):
* TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm:
(-[MockContentFilterEnabler initWithCoder:]):
* TestWebKitAPI/Tests/mac/ContentFiltering.mm: Added.
(-[LoadAlternateFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
(-[LoadAlternateFrameLoadDelegate webView:didFinishLoadForFrame:]):
(TestWebKitAPI::loadAlternateTest):
(TestWebKitAPI::TEST):

LayoutTests:

Changed allow-* and block-* tests from ref tests to text tests so that they can capture
frame load delegate callbacks and the back forward list.

* contentfiltering/allow-after-add-data-expected.html: Removed.
* contentfiltering/allow-after-add-data-expected.txt: Added.
* contentfiltering/allow-after-finished-adding-data-expected.html: Removed.
* contentfiltering/allow-after-finished-adding-data-expected.txt: Added.
* contentfiltering/allow-after-response-expected.html: Removed.
* contentfiltering/allow-after-response-expected.txt: Added.
* contentfiltering/allow-after-will-send-request-expected.html: Removed.
* contentfiltering/allow-after-will-send-request-expected.txt: Added.
* contentfiltering/allow-never-expected.html: Removed.
* contentfiltering/allow-never-expected.txt: Added.
* contentfiltering/block-after-add-data-expected.html: Removed.
* contentfiltering/block-after-add-data-expected.txt: Added.
* contentfiltering/block-after-add-data-then-allow-unblock-expected.html: Removed.
* contentfiltering/block-after-add-data-then-allow-unblock-expected.txt: Added.
* contentfiltering/block-after-add-data-then-deny-unblock-expected.html: Removed.
* contentfiltering/block-after-add-data-then-deny-unblock-expected.txt: Added.
* contentfiltering/block-after-finished-adding-data-expected.html: Removed.
* contentfiltering/block-after-finished-adding-data-expected.txt: Added.
* contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.html: Removed.
* contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.txt: Added.
* contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.html: Removed.
* contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.txt: Added.
* contentfiltering/block-after-response-expected.html: Removed.
* contentfiltering/block-after-response-expected.txt: Added.
* contentfiltering/block-after-response-then-allow-unblock-expected.html: Removed.
* contentfiltering/block-after-response-then-allow-unblock-expected.txt: Added.
* contentfiltering/block-after-response-then-deny-unblock-expected.html: Removed.
* contentfiltering/block-after-response-then-deny-unblock-expected.txt: Added.
* contentfiltering/block-after-will-send-request-expected.html: Removed.
* contentfiltering/block-after-will-send-request-expected.txt: Added.
* contentfiltering/block-after-will-send-request-then-allow-unblock-expected.html: Removed.
* contentfiltering/block-after-will-send-request-then-allow-unblock-expected.txt: Added.
* contentfiltering/block-after-will-send-request-then-deny-unblock-expected.html: Removed.
* contentfiltering/block-after-will-send-request-then-deny-unblock-expected.txt: Added.
* contentfiltering/block-never-expected.html: Removed.
* contentfiltering/block-never-expected.txt: Added.
* contentfiltering/resources/contentfiltering.js: Added testRunner calls to dump as text,
dump frame load callbacks, and dump the back forward list. Changed from loading data: URLs
to file: URLs in the test iframe.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestscontentfilteringresourcescontentfilteringjs">trunk/LayoutTests/contentfiltering/resources/contentfiltering.js</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreEnglishlprojLocalizablestrings">trunk/Source/WebCore/English.lproj/Localizable.strings</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreloaderContentFiltercpp">trunk/Source/WebCore/loader/ContentFilter.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderContentFilterh">trunk/Source/WebCore/loader/ContentFilter.h</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoadercpp">trunk/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoaderh">trunk/Source/WebCore/loader/DocumentLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderEmptyClientsh">trunk/Source/WebCore/loader/EmptyClients.h</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoadercpp">trunk/Source/WebCore/loader/FrameLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderh">trunk/Source/WebCore/loader/FrameLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderClienth">trunk/Source/WebCore/loader/FrameLoaderClient.h</a></li>
<li><a href="#trunkSourceWebCoreloaderNavigationSchedulercpp">trunk/Source/WebCore/loader/NavigationScheduler.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderNavigationSchedulerh">trunk/Source/WebCore/loader/NavigationScheduler.h</a></li>
<li><a href="#trunkSourceWebCoreloaderPolicyCheckercpp">trunk/Source/WebCore/loader/PolicyChecker.cpp</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacMiscWebKitErrorsh">trunk/Source/WebKit/mac/Misc/WebKitErrors.h</a></li>
<li><a href="#trunkSourceWebKitmacMiscWebKitErrorsm">trunk/Source/WebKit/mac/Misc/WebKitErrors.m</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebFrameLoaderClienth">trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebFrameLoaderClientmm">trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIcWKErrorRefh">trunk/Source/WebKit2/Shared/API/c/WKErrorRef.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaWebProcessProxyCocoamm">trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessProxyCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebProcessProxycpp">trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebProcessProxyh">trunk/Source/WebKit2/UIProcess/WebProcessProxy.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebErrorsh">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebErrors.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClienth">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportmacWebErrorsMacmm">trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPIConfigurationsTestWebKitAPIxcconfig">trunk/Tools/TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig</a></li>
<li><a href="#trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj">trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaContentFilteringmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaContentFilteringPlugInmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscontentfilteringallowafteradddataexpectedtxt">trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowafterfinishedaddingdataexpectedtxt">trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowafterresponseexpectedtxt">trunk/LayoutTests/contentfiltering/allow-after-response-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowafterwillsendrequestexpectedtxt">trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowneverexpectedtxt">trunk/LayoutTests/contentfiltering/allow-never-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafteradddataexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-add-data-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafteradddatathenallowunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafteradddatathendenyunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterfinishedaddingdataexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathenallowunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathendenyunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterresponseexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-response-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterresponsethenallowunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterresponsethendenyunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterwillsendrequestexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterwillsendrequestthenallowunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterwillsendrequestthendenyunblockexpectedtxt">trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.txt</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockneverexpectedtxt">trunk/LayoutTests/contentfiltering/block-never-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreResourcesContentFilterBlockedPagehtml">trunk/Source/WebCore/Resources/ContentFilterBlockedPage.html</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsmacContentFilteringmm">trunk/Tools/TestWebKitAPI/Tests/mac/ContentFiltering.mm</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscontentfilteringallowafteradddataexpectedhtml">trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowafterfinishedaddingdataexpectedhtml">trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowafterresponseexpectedhtml">trunk/LayoutTests/contentfiltering/allow-after-response-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowafterwillsendrequestexpectedhtml">trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringallowneverexpectedhtml">trunk/LayoutTests/contentfiltering/allow-never-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafteradddataexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-add-data-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafteradddatathenallowunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafteradddatathendenyunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterfinishedaddingdataexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathenallowunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathendenyunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterresponseexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-response-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterresponsethenallowunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterresponsethendenyunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterwillsendrequestexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterwillsendrequestthenallowunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockafterwillsendrequestthendenyunblockexpectedhtml">trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.html</a></li>
<li><a href="#trunkLayoutTestscontentfilteringblockneverexpectedhtml">trunk/LayoutTests/contentfiltering/block-never-expected.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/ChangeLog        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,3 +1,54 @@
</span><ins>+2016-07-08  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [Content Filtering] Load blocked pages more like other error pages are loaded
+        https://bugs.webkit.org/show_bug.cgi?id=159485
+        &lt;rdar://problem/26014076&gt;
+
+        Reviewed by Brady Eidson.
+
+        Changed allow-* and block-* tests from ref tests to text tests so that they can capture
+        frame load delegate callbacks and the back forward list.
+
+        * contentfiltering/allow-after-add-data-expected.html: Removed.
+        * contentfiltering/allow-after-add-data-expected.txt: Added.
+        * contentfiltering/allow-after-finished-adding-data-expected.html: Removed.
+        * contentfiltering/allow-after-finished-adding-data-expected.txt: Added.
+        * contentfiltering/allow-after-response-expected.html: Removed.
+        * contentfiltering/allow-after-response-expected.txt: Added.
+        * contentfiltering/allow-after-will-send-request-expected.html: Removed.
+        * contentfiltering/allow-after-will-send-request-expected.txt: Added.
+        * contentfiltering/allow-never-expected.html: Removed.
+        * contentfiltering/allow-never-expected.txt: Added.
+        * contentfiltering/block-after-add-data-expected.html: Removed.
+        * contentfiltering/block-after-add-data-expected.txt: Added.
+        * contentfiltering/block-after-add-data-then-allow-unblock-expected.html: Removed.
+        * contentfiltering/block-after-add-data-then-allow-unblock-expected.txt: Added.
+        * contentfiltering/block-after-add-data-then-deny-unblock-expected.html: Removed.
+        * contentfiltering/block-after-add-data-then-deny-unblock-expected.txt: Added.
+        * contentfiltering/block-after-finished-adding-data-expected.html: Removed.
+        * contentfiltering/block-after-finished-adding-data-expected.txt: Added.
+        * contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.html: Removed.
+        * contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.txt: Added.
+        * contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.html: Removed.
+        * contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.txt: Added.
+        * contentfiltering/block-after-response-expected.html: Removed.
+        * contentfiltering/block-after-response-expected.txt: Added.
+        * contentfiltering/block-after-response-then-allow-unblock-expected.html: Removed.
+        * contentfiltering/block-after-response-then-allow-unblock-expected.txt: Added.
+        * contentfiltering/block-after-response-then-deny-unblock-expected.html: Removed.
+        * contentfiltering/block-after-response-then-deny-unblock-expected.txt: Added.
+        * contentfiltering/block-after-will-send-request-expected.html: Removed.
+        * contentfiltering/block-after-will-send-request-expected.txt: Added.
+        * contentfiltering/block-after-will-send-request-then-allow-unblock-expected.html: Removed.
+        * contentfiltering/block-after-will-send-request-then-allow-unblock-expected.txt: Added.
+        * contentfiltering/block-after-will-send-request-then-deny-unblock-expected.html: Removed.
+        * contentfiltering/block-after-will-send-request-then-deny-unblock-expected.txt: Added.
+        * contentfiltering/block-never-expected.html: Removed.
+        * contentfiltering/block-never-expected.txt: Added.
+        * contentfiltering/resources/contentfiltering.js: Added testRunner calls to dump as text,
+        dump frame load callbacks, and dump the back forward list. Changed from loading data: URLs
+        to file: URLs in the test iframe.
+
</ins><span class="cx"> 2016-07-08  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Font Loading] The callback passed to document.fonts.ready should always be called
</span></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafteradddataexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafteradddataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/allow-after-add-data-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/allow-after-add-data.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafterfinishedaddingdataexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafterfinishedaddingdataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/allow-after-finished-adding-data-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/allow-after-finished-adding-data.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafterresponseexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/allow-after-response-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-response-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/allow-after-response-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafterresponseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/allow-after-response-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-response-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/allow-after-response-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/allow-after-response.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafterwillsendrequestexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowafterwillsendrequestexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/allow-after-will-send-request-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/allow-after-will-send-request.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowneverexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/allow-never-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-never-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/allow-never-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringallowneverexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/allow-never-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/allow-never-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/allow-never-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/allow-never.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafteradddataexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-add-data-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-add-data-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-add-data-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafteradddataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-add-data-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-add-data-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-add-data-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-add-data.html  **nav target**
+            (file test):contentfiltering/resources/fail.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafteradddatathenallowunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafteradddatathenallowunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-add-data-then-allow-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-add-data-then-allow-unblock.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafteradddatathendenyunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafteradddatathendenyunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-add-data-then-deny-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-add-data-then-deny-unblock.html  **nav target**
+            (file test):contentfiltering/resources/fail.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterfinishedaddingdataexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterfinishedaddingdataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-finished-adding-data.html  **nav target**
+            (file test):contentfiltering/resources/fail.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathenallowunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathenallowunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-allow-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-finished-adding-data-then-allow-unblock.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathendenyunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterfinishedaddingdatathendenyunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-finished-adding-data-then-deny-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-finished-adding-data-then-deny-unblock.html  **nav target**
+            (file test):contentfiltering/resources/fail.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterresponseexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-response-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-response-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-response-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterresponseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-response-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-response-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-response-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-response.html  **nav target**
+            (file test):contentfiltering/resources/fail.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterresponsethenallowunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterresponsethenallowunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-response-then-allow-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-response-then-allow-unblock.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterresponsethendenyunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterresponsethendenyunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-response-then-deny-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-response-then-deny-unblock.html  **nav target**
+            (file test):contentfiltering/resources/fail.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterwillsendrequestexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterwillsendrequestexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-will-send-request-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-will-send-request.html  **nav target**
+            about:blank (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterwillsendrequestthenallowunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterwillsendrequestthenallowunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-allow-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-will-send-request-then-allow-unblock.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterwillsendrequestthendenyunblockexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockafterwillsendrequestthendenyunblockexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-after-will-send-request-then-deny-unblock-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/fail.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFailProvisionalLoadWithError
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: x-apple-content-filter://mock-unblock 
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-after-will-send-request-then-deny-unblock.html  **nav target**
+            about:blank (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockneverexpectedhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/contentfiltering/block-never-expected.html (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-never-expected.html        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/block-never-expected.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,2 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;iframe src=&quot;resources/pass.html&quot;&gt;&lt;/iframe&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscontentfilteringblockneverexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/contentfiltering/block-never-expected.txt (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/block-never-expected.txt                                (rev 0)
+++ trunk/LayoutTests/contentfiltering/block-never-expected.txt        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+main frame - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - willPerformClientRedirectToURL: resources/pass.html 
+main frame - didHandleOnloadEventsForFrame
+main frame - didFinishLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didStartProvisionalLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCancelClientRedirectForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didCommitLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishDocumentLoadForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didHandleOnloadEventsForFrame
+frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot; - didFinishLoadForFrame
+
+
+--------
+Frame: '&lt;!--framePath //&lt;!--frame0--&gt;--&gt;'
+--------
+PASS
+
+============== Back Forward List ==============
+curr-&gt;  (file test):contentfiltering/block-never.html  **nav target**
+            (file test):contentfiltering/resources/pass.html (in frame &quot;&lt;!--framePath //&lt;!--frame0--&gt;--&gt;&quot;)
+===============================================
</ins></span></pre></div>
<a id="trunkLayoutTestscontentfilteringresourcescontentfilteringjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/contentfiltering/resources/contentfiltering.js (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/contentfiltering/resources/contentfiltering.js        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/LayoutTests/contentfiltering/resources/contentfiltering.js        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -33,7 +33,11 @@
</span><span class="cx">         }, false);
</span><span class="cx">         iframe.contentDocument.location = settings.unblockRequestURL;
</span><span class="cx">     }, false);
</span><del>-    iframe.src = &quot;data:text/html,&lt;!DOCTYPE html&gt;&lt;body&gt;&quot; + (blockedStringText === &quot;FAIL&quot; ? &quot;PASS&quot; : &quot;FAIL&quot;);
</del><ins>+
+    if (blockedStringText === &quot;FAIL&quot;)
+        iframe.src = &quot;resources/pass.html&quot;;
+    else
+        iframe.src = &quot;resources/fail.html&quot;;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function testContentFiltering(decisionPoint, decision, decideAfterUnblockRequest)
</span><span class="lines">@@ -49,6 +53,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     window.testRunner.waitUntilDone();
</span><ins>+    window.testRunner.dumpAsText();
+    window.testRunner.dumpChildFramesAsText();
+    window.testRunner.dumpBackForwardList();
+    window.testRunner.dumpFrameLoadCallbacks();
</ins><span class="cx">     window.addEventListener(&quot;load&quot;, function(event) {
</span><span class="cx">         _doTest(decisionPoint, decision, decideAfterUnblockRequest);
</span><span class="cx">     }, false);
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/ChangeLog        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,3 +1,76 @@
</span><ins>+2016-07-08  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [Content Filtering] Load blocked pages more like other error pages are loaded
+        https://bugs.webkit.org/show_bug.cgi?id=159485
+        &lt;rdar://problem/26014076&gt;
+
+        Reviewed by Brady Eidson.
+
+        Content filter blocked pages were being loaded by cancelling the provisional load of the
+        page that was blocked and then scheduling a navigation to the content filter error page.
+        Some clients would not expect a new, Web process-initiated provisional navigation to start
+        after a cancellation, though, and this would put them in a bad state.
+        
+        This patch changes blocked page loading to behave more like loading other error pages.
+        Specifically:
+        1. didFailProvisionalLoad is dispatched with a new, non-cancellation error code.
+        2. The blocked page is loaded immediately after dispatching didFailProvisionalLoad, which
+           prevents FrameLoader from creating a new back-forward list item for the substitute data load.
+        3. A substitute data load initiated by the client for the blocked URL is ignored if
+           ContentFilter will display its own error page.
+        4. A file: URL is used instead of a custom scheme for the base URL of the blocked page,
+           since some clients expect this.
+
+        Updated existing tests to capture frame load delegate callbacks and the back forward list.
+        Added new API tests: ContentFiltering.LoadAlternate*.
+
+        * English.lproj/Localizable.strings: Added a WebKitErrorFrameLoadBlockedByContentFilter description.
+        * Resources/ContentFilterBlockedPage.html: Added.
+        * WebCore.xcodeproj/project.pbxproj: Added ContentFilterBlockedPage.html as a frameowrk resource.
+        * loader/ContentFilter.cpp:
+        (WebCore::ContentFilter::continueAfterWillSendRequest): Protected m_documentLoader,
+        since it might otherwise be deallocated inside ContentFilter::didDecide() if the load is blocked.
+        (WebCore::ContentFilter::stopFilteringMainResource): Only set m_state to Stopped if not
+        already Blocked, so that we don't forget this ContentFilter was blocked when calling
+        cancelMailResourceLoad() in didDecide().
+        (WebCore::ContentFilter::continueAfterResponseReceived): Protected m_documentLoader,
+        since it might otherwise be deallocated inside ContentFilter::didDecide() if the load is blocked.
+        (WebCore::ContentFilter::continueAfterDataReceived): Ditto.
+        (WebCore::ContentFilter::continueAfterNotifyFinished): Ditto.
+        (WebCore::ContentFilter::didDecide): Moved code from DocumentLoader::contentFilterDidBlock() to here.
+        Created a blockedByContentFilterError() and called cancelMainResourceLoad().
+        (WebCore::blockedPageURL): Returned a file: URL to ContentFilterBlockedPage.html in WebCore.framework.
+        (WebCore::ContentFilter::continueAfterSubstituteDataRequest): If the substitute data load
+        is for the same failingURL as the currently-displayed blocked page, ignore it.
+        (WebCore::ContentFilter::handleProvisionalLoadFailure): Load the blocked page if m_state is Blocked
+        and the ResourceError matches the error we used when previously calling cancelMainResourceLoad().
+        (WebCore::ContentFilter::unblockHandler): Deleted.
+        (WebCore::ContentFilter::replacementData): Deleted.
+        (WebCore::ContentFilter::unblockRequestDeniedScript): Deleted.
+        * loader/ContentFilter.h:
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::contentFilter): Returned m_contentFilter.
+        (WebCore::DocumentLoader::installContentFilterUnblockHandler): Deleted.
+        (WebCore::DocumentLoader::contentFilterDidBlock): Deleted.
+        * loader/DocumentLoader.h:
+        * loader/EmptyClients.h: Added a default implementation of blockedByContentFilterError().
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::load): If m_loadType was already RedirectWithLockedBackForwardList
+        and we are loading subsitute data for a failing URL, continue to use RedirectWithLockedBackForwardList.
+        This prevents a new back-forward list item from being created when loading a blocked page in a subframe.
+        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
+        Called ContentFilter::handleProvisionalLoadFailure() after dispatchDidFailProvisionalLoad().
+        (WebCore::FrameLoader::blockedByContentFilterError): Called FrameLoaderClient::blockedByContentFilterError().
+        * loader/FrameLoader.h:
+        * loader/FrameLoaderClient.h:
+        * loader/NavigationScheduler.cpp:
+        (WebCore::ScheduledSubstituteDataLoad::ScheduledSubstituteDataLoad): Deleted.
+        (WebCore::NavigationScheduler::scheduleSubstituteDataLoad): Deleted.
+        * loader/NavigationScheduler.h:
+        * loader/PolicyChecker.cpp:
+        (WebCore::PolicyChecker::checkNavigationPolicy): Ignored a substitute data load for a
+        failing URL if ContentFilter::continueAfterSubstituteDataRequest() returns false.
+
</ins><span class="cx"> 2016-07-08  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Font Loading] The callback passed to document.fonts.ready should always be called
</span></span></pre></div>
<a id="trunkSourceWebCoreEnglishlprojLocalizablestrings"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/English.lproj/Localizable.strings (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/English.lproj/Localizable.strings        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/English.lproj/Localizable.strings        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1117,3 +1117,5 @@
</span><span class="cx"> /* An ARIA accessibility group that acts as an dialog. */
</span><span class="cx"> &quot;web dialog&quot; = &quot;web dialog&quot;;
</span><span class="cx"> 
</span><ins>+/* WebKitErrorFrameLoadBlockedByContentFilter description */
+&quot;The URL was blocked by a content filter&quot; = &quot;The URL was blocked by a content filter&quot;;
</ins></span></pre></div>
<a id="trunkSourceWebCoreResourcesContentFilterBlockedPagehtml"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Resources/ContentFilterBlockedPage.html (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Resources/ContentFilterBlockedPage.html                                (rev 0)
+++ trunk/Source/WebCore/Resources/ContentFilterBlockedPage.html        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+&lt;!-- This file intentionally left blank --&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -4186,6 +4186,7 @@
</span><span class="cx">                 A19D93471A9FEC7200B46C24 /* WebFilterEvaluatorSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = A19D93451A9FEC7200B46C24 /* WebFilterEvaluatorSPI.h */; };
</span><span class="cx">                 A19D934A1AA11B1E00B46C24 /* NetworkExtensionContentFilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = A19D93481AA11B1E00B46C24 /* NetworkExtensionContentFilter.mm */; };
</span><span class="cx">                 A19D934B1AA11B1E00B46C24 /* NetworkExtensionContentFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = A19D93491AA11B1E00B46C24 /* NetworkExtensionContentFilter.h */; };
</span><ins>+                A1AA9AB91D23911500FEADB3 /* ContentFilterBlockedPage.html in Resources */ = {isa = PBXBuildFile; fileRef = A1AA9AB81D23911500FEADB3 /* ContentFilterBlockedPage.html */; };
</ins><span class="cx">                 A1B5B29E1AAA846E008B6042 /* MockContentFilterSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B5B29C1AAA846E008B6042 /* MockContentFilterSettings.cpp */; };
</span><span class="cx">                 A1B5B29F1AAA846F008B6042 /* MockContentFilterSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B5B29D1AAA846E008B6042 /* MockContentFilterSettings.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 A1BF6B821AA96C7D00AF4A8A /* MockContentFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1BF6B801AA96C7D00AF4A8A /* MockContentFilter.cpp */; };
</span><span class="lines">@@ -11985,6 +11986,7 @@
</span><span class="cx">                 A19D93451A9FEC7200B46C24 /* WebFilterEvaluatorSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebFilterEvaluatorSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A19D93481AA11B1E00B46C24 /* NetworkExtensionContentFilter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkExtensionContentFilter.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A19D93491AA11B1E00B46C24 /* NetworkExtensionContentFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkExtensionContentFilter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                A1AA9AB81D23911500FEADB3 /* ContentFilterBlockedPage.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ContentFilterBlockedPage.html; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 A1B5B29C1AAA846E008B6042 /* MockContentFilterSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockContentFilterSettings.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1B5B29D1AAA846E008B6042 /* MockContentFilterSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockContentFilterSettings.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A1BF6B801AA96C7D00AF4A8A /* MockContentFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockContentFilter.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16056,6 +16058,7 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 CD0DBB3E142274E600280263 /* audio */,
</span><span class="cx">                                 65998A650E5F5FD3004E097A /* images */,
</span><ins>+                                A1AA9AB81D23911500FEADB3 /* ContentFilterBlockedPage.html */,
</ins><span class="cx">                                 A11E8C001B1E28BE0003A7C7 /* copyCursor.png */,
</span><span class="cx">                                 7CC7E3D617208C0F003C5277 /* IDNScriptWhiteList.txt */,
</span><span class="cx">                                 2D9F0E1214FF1CBF00BA0FF7 /* linearSRGB.icc */,
</span><span class="lines">@@ -29165,6 +29168,7 @@
</span><span class="cx">                                 93153BDA14181F7A00FCF5BE /* missingImage@2x.png in Resources */,
</span><span class="cx">                                 318891611AB7EEA100EA627B /* missingImage@3x.png in Resources */,
</span><span class="cx">                                 A11E8C061B1E28FA0003A7C7 /* moveCursor.png in Resources */,
</span><ins>+                                A1AA9AB91D23911500FEADB3 /* ContentFilterBlockedPage.html in Resources */,
</ins><span class="cx">                                 A11E8C071B1E28FE0003A7C7 /* northEastSouthWestResizeCursor.png in Resources */,
</span><span class="cx">                                 A11E8C081B1E29020003A7C7 /* northSouthResizeCursor.png in Resources */,
</span><span class="cx">                                 A11E8C091B1E29070003A7C7 /* northWestSouthEastResizeCursor.png in Resources */,
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderContentFiltercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ContentFilter.cpp (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ContentFilter.cpp        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/ContentFilter.cpp        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013-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">@@ -31,11 +31,18 @@
</span><span class="cx"> #include &quot;CachedRawResource.h&quot;
</span><span class="cx"> #include &quot;ContentFilterUnblockHandler.h&quot;
</span><span class="cx"> #include &quot;DocumentLoader.h&quot;
</span><ins>+#include &quot;Frame.h&quot;
+#include &quot;FrameLoadRequest.h&quot;
+#include &quot;FrameLoader.h&quot;
+#include &quot;FrameLoaderClient.h&quot;
</ins><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;NetworkExtensionContentFilter.h&quot;
</span><span class="cx"> #include &quot;ParentalControlsContentFilter.h&quot;
</span><ins>+#include &quot;ScriptController.h&quot;
</ins><span class="cx"> #include &quot;SharedBuffer.h&quot;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><ins>+#include &lt;wtf/Ref.h&gt;
+#include &lt;wtf/TemporaryChange.h&gt;
</ins><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if !LOG_DISABLED
</span><span class="lines">@@ -89,6 +96,8 @@
</span><span class="cx"> 
</span><span class="cx"> bool ContentFilter::continueAfterWillSendRequest(ResourceRequest&amp; request, const ResourceResponse&amp; redirectResponse)
</span><span class="cx"> {
</span><ins>+    Ref&lt;DocumentLoader&gt; protectedDocumentLoader { m_documentLoader };
+
</ins><span class="cx">     LOG(ContentFiltering, &quot;ContentFilter received request for &lt;%s&gt; with redirect response from &lt;%s&gt;.\n&quot;, request.url().string().ascii().data(), redirectResponse.url().string().ascii().data());
</span><span class="cx"> #if !LOG_DISABLED
</span><span class="cx">     ResourceRequest originalRequest { request };
</span><span class="lines">@@ -119,37 +128,15 @@
</span><span class="cx"> 
</span><span class="cx"> void ContentFilter::stopFilteringMainResource()
</span><span class="cx"> {
</span><del>-    m_state = State::Stopped;
</del><ins>+    if (m_state != State::Blocked)
+        m_state = State::Stopped;
</ins><span class="cx">     m_mainResource = nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ContentFilterUnblockHandler ContentFilter::unblockHandler() const
-{
-    ASSERT(m_state == State::Blocked);
-    ASSERT(m_blockingContentFilter);
-    ASSERT(m_blockingContentFilter-&gt;didBlockData());
-    return m_blockingContentFilter-&gt;unblockHandler();
-}
-
-Ref&lt;SharedBuffer&gt; ContentFilter::replacementData() const
-{
-    ASSERT(m_state == State::Blocked);
-    ASSERT(m_blockingContentFilter);
-    ASSERT(m_blockingContentFilter-&gt;didBlockData());
-    return m_blockingContentFilter-&gt;replacementData();
-}
-
-String ContentFilter::unblockRequestDeniedScript() const
-{
-    ASSERT(m_state == State::Blocked);
-    ASSERT(m_blockingContentFilter);
-    ASSERT(m_blockingContentFilter-&gt;didBlockData());
-    return m_blockingContentFilter-&gt;unblockRequestDeniedScript();
-}
-
</del><span class="cx"> bool ContentFilter::continueAfterResponseReceived(CachedResource* resource, const ResourceResponse&amp; response)
</span><span class="cx"> {
</span><span class="cx">     ASSERT_UNUSED(resource, resource == m_mainResource);
</span><ins>+    Ref&lt;DocumentLoader&gt; protectedDocumentLoader { m_documentLoader };
</ins><span class="cx"> 
</span><span class="cx">     if (m_state == State::Filtering) {
</span><span class="cx">         LOG(ContentFiltering, &quot;ContentFilter received response from &lt;%s&gt;.\n&quot;, response.url().string().ascii().data());
</span><span class="lines">@@ -164,6 +151,7 @@
</span><span class="cx"> bool ContentFilter::continueAfterDataReceived(CachedResource* resource, const char* data, int length)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(resource == m_mainResource);
</span><ins>+    Ref&lt;DocumentLoader&gt; protectedDocumentLoader { m_documentLoader };
</ins><span class="cx"> 
</span><span class="cx">     if (m_state == State::Filtering) {
</span><span class="cx">         LOG(ContentFiltering, &quot;ContentFilter received %d bytes of data from &lt;%s&gt;.\n&quot;, length, resource-&gt;url().string().ascii().data());
</span><span class="lines">@@ -182,6 +170,7 @@
</span><span class="cx"> bool ContentFilter::continueAfterNotifyFinished(CachedResource* resource)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(resource == m_mainResource);
</span><ins>+    Ref&lt;DocumentLoader&gt; protectedDocumentLoader { m_documentLoader };
</ins><span class="cx"> 
</span><span class="cx">     if (resource-&gt;errorOccurred())
</span><span class="cx">         return true;
</span><span class="lines">@@ -236,8 +225,24 @@
</span><span class="cx">     ASSERT(state == State::Allowed || state == State::Blocked);
</span><span class="cx">     LOG(ContentFiltering, &quot;ContentFilter decided load should be %s for main resource at &lt;%s&gt;.\n&quot;, state == State::Allowed ? &quot;allowed&quot; : &quot;blocked&quot;, m_mainResource ? m_mainResource-&gt;url().string().ascii().data() : &quot;&quot;);
</span><span class="cx">     m_state = state;
</span><del>-    if (m_state == State::Blocked)
-        m_documentLoader.contentFilterDidBlock();
</del><ins>+    if (m_state != State::Blocked)
+        return;
+
+    ContentFilterUnblockHandler unblockHandler { m_blockingContentFilter-&gt;unblockHandler() };
+    unblockHandler.setUnreachableURL(m_documentLoader.documentURL());
+    RefPtr&lt;Frame&gt; frame { m_documentLoader.frame() };
+    String unblockRequestDeniedScript { m_blockingContentFilter-&gt;unblockRequestDeniedScript() };
+    if (!unblockRequestDeniedScript.isEmpty() &amp;&amp; frame) {
+        static_assert(std::is_base_of&lt;ThreadSafeRefCounted&lt;Frame&gt;, Frame&gt;::value, &quot;Frame must be ThreadSafeRefCounted.&quot;);
+        unblockHandler.wrapWithDecisionHandler([frame = WTFMove(frame), script = unblockRequestDeniedScript.isolatedCopy()](bool unblocked) {
+            if (!unblocked)
+                frame-&gt;script().executeScript(script);
+        });
+    }
+    m_documentLoader.frameLoader()-&gt;client().contentFilterDidBlockLoad(WTFMove(unblockHandler));
+
+    m_blockedError = m_documentLoader.frameLoader()-&gt;blockedByContentFilterError(m_documentLoader.request());
+    m_documentLoader.cancelMainResourceLoad(m_blockedError);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ContentFilter::deliverResourceData(CachedResource&amp; resource)
</span><span class="lines">@@ -248,6 +253,51 @@
</span><span class="cx">         m_documentLoader.dataReceived(&amp;resource, resourceBuffer-&gt;data(), resourceBuffer-&gt;size());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static const URL&amp; blockedPageURL()
+{
+    static LazyNeverDestroyed&lt;URL&gt; blockedPageURL;
+    static std::once_flag onceFlag;
+    std::call_once(onceFlag, [] {
+        auto webCoreBundle = CFBundleGetBundleWithIdentifier(CFSTR(&quot;com.apple.WebCore&quot;));
+        auto blockedPageCFURL = adoptCF(CFBundleCopyResourceURL(webCoreBundle, CFSTR(&quot;ContentFilterBlockedPage&quot;), CFSTR(&quot;html&quot;), nullptr));
+        blockedPageURL.construct(blockedPageCFURL.get());
+    });
+
+    return blockedPageURL;
+}
+
+bool ContentFilter::continueAfterSubstituteDataRequest(const DocumentLoader&amp; activeLoader, const SubstituteData&amp; substituteData)
+{
+    if (auto contentFilter = activeLoader.contentFilter()) {
+        if (contentFilter-&gt;m_state == State::Blocked &amp;&amp; !contentFilter-&gt;m_isLoadingBlockedPage)
+            return contentFilter-&gt;m_blockedError.failingURL() != substituteData.failingURL();
+    }
+
+    if (activeLoader.request().url() == blockedPageURL()) {
+        ASSERT(activeLoader.substituteData().isValid());
+        return activeLoader.substituteData().failingURL() != substituteData.failingURL();
+    }
+
+    return true;
+}
+
+void ContentFilter::handleProvisionalLoadFailure(const ResourceError&amp; error)
+{
+    if (m_state != State::Blocked)
+        return;
+
+    if (m_blockedError.errorCode() != error.errorCode() || m_blockedError.domain() != error.domain())
+        return;
+
+    ASSERT(m_blockedError.failingURL() == error.failingURL());
+
+    RefPtr&lt;SharedBuffer&gt; replacementData { m_blockingContentFilter-&gt;replacementData() };
+    ResourceResponse response { URL(), ASCIILiteral(&quot;text/html&quot;), replacementData-&gt;size(), ASCIILiteral(&quot;UTF-8&quot;) };
+    SubstituteData substituteData { WTFMove(replacementData), error.failingURL(), response, SubstituteData::SessionHistoryVisibility::Hidden };
+    TemporaryChange&lt;bool&gt; loadingBlockedPage { m_isLoadingBlockedPage, true };
+    m_documentLoader.frameLoader()-&gt;load(FrameLoadRequest(m_documentLoader.frame(), blockedPageURL(), ShouldOpenExternalURLsPolicy::ShouldNotAllow, substituteData));
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(CONTENT_FILTERING)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderContentFilterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ContentFilter.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ContentFilter.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/ContentFilter.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2013-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,13 +23,13 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef ContentFilter_h
-#define ContentFilter_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_FILTERING)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CachedResourceHandle.h&quot;
</span><span class="cx"> #include &quot;PlatformContentFilter.h&quot;
</span><ins>+#include &quot;ResourceError.h&quot;
</ins><span class="cx"> #include &lt;functional&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -36,11 +36,10 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class CachedRawResource;
</span><del>-class ContentFilterUnblockHandler;
</del><span class="cx"> class DocumentLoader;
</span><span class="cx"> class ResourceRequest;
</span><span class="cx"> class ResourceResponse;
</span><del>-class SharedBuffer;
</del><ins>+class SubstituteData;
</ins><span class="cx"> 
</span><span class="cx"> class ContentFilter {
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="lines">@@ -62,9 +61,8 @@
</span><span class="cx">     bool continueAfterDataReceived(CachedResource*, const char* data, int length);
</span><span class="cx">     bool continueAfterNotifyFinished(CachedResource*);
</span><span class="cx"> 
</span><del>-    ContentFilterUnblockHandler unblockHandler() const;
-    Ref&lt;SharedBuffer&gt; replacementData() const;
-    String unblockRequestDeniedScript() const;
</del><ins>+    static bool continueAfterSubstituteDataRequest(const DocumentLoader&amp; activeLoader, const SubstituteData&amp;);
+    void handleProvisionalLoadFailure(const ResourceError&amp;);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     using State = PlatformContentFilter::State;
</span><span class="lines">@@ -88,6 +86,8 @@
</span><span class="cx">     CachedResourceHandle&lt;CachedRawResource&gt; m_mainResource;
</span><span class="cx">     PlatformContentFilter* m_blockingContentFilter { nullptr };
</span><span class="cx">     State m_state { State::Stopped };
</span><ins>+    ResourceError m_blockedError;
+    bool m_isLoadingBlockedPage { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template &lt;typename T&gt;
</span><span class="lines">@@ -100,5 +100,3 @@
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(CONTENT_FILTERING)
</span><del>-
-#endif // ContentFilter_h
</del></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.cpp        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006-2008, 2016 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2006-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2011 Google Inc. All rights reserved.
</span><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -63,7 +63,6 @@
</span><span class="cx"> #include &quot;ResourceHandle.h&quot;
</span><span class="cx"> #include &quot;ResourceLoadObserver.h&quot;
</span><span class="cx"> #include &quot;SchemeRegistry.h&quot;
</span><del>-#include &quot;ScriptController.h&quot;
</del><span class="cx"> #include &quot;SecurityPolicy.h&quot;
</span><span class="cx"> #include &quot;Settings.h&quot;
</span><span class="cx"> #include &quot;SubresourceLoader.h&quot;
</span><span class="lines">@@ -1708,37 +1707,10 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTENT_FILTERING)
</span><del>-void DocumentLoader::installContentFilterUnblockHandler(ContentFilter&amp; contentFilter)
</del><ins>+ContentFilter* DocumentLoader::contentFilter() const
</ins><span class="cx"> {
</span><del>-    ContentFilterUnblockHandler unblockHandler { contentFilter.unblockHandler() };
-    unblockHandler.setUnreachableURL(documentURL());
-    RefPtr&lt;Frame&gt; frame { this-&gt;frame() };
-    String unblockRequestDeniedScript { contentFilter.unblockRequestDeniedScript() };
-    if (!unblockRequestDeniedScript.isEmpty() &amp;&amp; frame) {
-        static_assert(std::is_base_of&lt;ThreadSafeRefCounted&lt;Frame&gt;, Frame&gt;::value, &quot;Frame must be ThreadSafeRefCounted.&quot;);
-        unblockHandler.wrapWithDecisionHandler([frame = WTFMove(frame), script = unblockRequestDeniedScript.isolatedCopy()](bool unblocked) {
-            if (!unblocked)
-                frame-&gt;script().executeScript(script);
-        });
-    }
-    frameLoader()-&gt;client().contentFilterDidBlockLoad(WTFMove(unblockHandler));
</del><ins>+    return m_contentFilter.get();
</ins><span class="cx"> }
</span><del>-
-void DocumentLoader::contentFilterDidBlock()
-{
-    ASSERT(m_contentFilter);
-
-    installContentFilterUnblockHandler(*m_contentFilter);
-
-    URL blockedURL;
-    blockedURL.setProtocol(ContentFilter::urlScheme());
-    blockedURL.setHost(ASCIILiteral(&quot;blocked-page&quot;));
-    auto replacementData = m_contentFilter-&gt;replacementData();
-    ResourceResponse response(URL(), ASCIILiteral(&quot;text/html&quot;), replacementData-&gt;size(), ASCIILiteral(&quot;UTF-8&quot;));
-    SubstituteData substituteData { adoptRef(&amp;replacementData.leakRef()), documentURL(), response, SubstituteData::SessionHistoryVisibility::Hidden };
-    frame()-&gt;navigationScheduler().scheduleSubstituteDataLoad(blockedURL, substituteData);
-}
</del><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/DocumentLoader.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2006-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2011 Google Inc. All rights reserved.
</span><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -27,8 +27,7 @@
</span><span class="cx">  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef DocumentLoader_h
-#define DocumentLoader_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;CachedRawResourceClient.h&quot;
</span><span class="cx"> #include &quot;CachedResourceHandle.h&quot;
</span><span class="lines">@@ -68,6 +67,7 @@
</span><span class="cx">     class ArchiveResourceCollection;
</span><span class="cx">     class CachedRawResource;
</span><span class="cx">     class CachedResourceLoader;
</span><ins>+    class ContentFilter;
</ins><span class="cx">     class FormState;
</span><span class="cx">     class Frame;
</span><span class="cx">     class FrameLoader;
</span><span class="lines">@@ -77,15 +77,12 @@
</span><span class="cx">     class SubresourceLoader;
</span><span class="cx">     class SubstituteResource;
</span><span class="cx"> 
</span><del>-#if ENABLE(CONTENT_FILTERING)
-    class ContentFilter;
-#endif
-
</del><span class="cx">     typedef HashMap&lt;unsigned long, RefPtr&lt;ResourceLoader&gt;&gt; ResourceLoaderMap;
</span><span class="cx">     typedef Vector&lt;ResourceResponse&gt; ResponseVector;
</span><span class="cx"> 
</span><span class="cx">     class DocumentLoader : public RefCounted&lt;DocumentLoader&gt;, private CachedRawResourceClient {
</span><span class="cx">         WTF_MAKE_FAST_ALLOCATED;
</span><ins>+        friend class ContentFilter;
</ins><span class="cx">     public:
</span><span class="cx">         static Ref&lt;DocumentLoader&gt; create(const ResourceRequest&amp; request, const SubstituteData&amp; data)
</span><span class="cx">         {
</span><span class="lines">@@ -285,6 +282,10 @@
</span><span class="cx">         void setShouldOpenExternalURLsPolicy(ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy) { m_shouldOpenExternalURLsPolicy = shouldOpenExternalURLsPolicy; }
</span><span class="cx">         ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicyToPropagate() const;
</span><span class="cx"> 
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+        ContentFilter* contentFilter() const;
+#endif
+
</ins><span class="cx">     protected:
</span><span class="cx">         WEBCORE_EXPORT DocumentLoader(const ResourceRequest&amp;, const SubstituteData&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -348,12 +349,6 @@
</span><span class="cx">         void cancelPolicyCheckIfNeeded();
</span><span class="cx">         void becomeMainResourceClient();
</span><span class="cx"> 
</span><del>-#if ENABLE(CONTENT_FILTERING)
-        friend class ContentFilter;
-        void installContentFilterUnblockHandler(ContentFilter&amp;);
-        void contentFilterDidBlock();
-#endif
-
</del><span class="cx">         Frame* m_frame;
</span><span class="cx">         Ref&lt;CachedResourceLoader&gt; m_cachedResourceLoader;
</span><span class="cx"> 
</span><span class="lines">@@ -479,5 +474,3 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> }
</span><del>-
-#endif // DocumentLoader_h
</del></span></pre></div>
<a id="trunkSourceWebCoreloaderEmptyClientsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/EmptyClients.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/EmptyClients.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/EmptyClients.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> /*
</span><span class="cx">  * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
</span><del>- * Copyright (C) 2008-2012, 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
</span><span class="cx">  * Copyright (C) 2012 Samsung Electronics. All rights reserved.
</span><span class="cx">  *
</span><span class="lines">@@ -336,6 +336,9 @@
</span><span class="cx">     ResourceError blockedByContentBlockerError(const ResourceRequest&amp;) override { return { }; }
</span><span class="cx">     ResourceError cannotShowURLError(const ResourceRequest&amp;) override { return { }; }
</span><span class="cx">     ResourceError interruptedForPolicyChangeError(const ResourceRequest&amp;) override { return { }; }
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+    ResourceError blockedByContentFilterError(const ResourceRequest&amp;) override { return { }; }
+#endif
</ins><span class="cx"> 
</span><span class="cx">     ResourceError cannotShowMIMETypeError(const ResourceResponse&amp;) override { return { }; }
</span><span class="cx">     ResourceError fileDoesNotExistError(const ResourceResponse&amp;) override { return { }; }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.cpp        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -43,6 +43,7 @@
</span><span class="cx"> #include &quot;CachedResourceLoader.h&quot;
</span><span class="cx"> #include &quot;Chrome.h&quot;
</span><span class="cx"> #include &quot;ChromeClient.h&quot;
</span><ins>+#include &quot;ContentFilter.h&quot;
</ins><span class="cx"> #include &quot;ContentSecurityPolicy.h&quot;
</span><span class="cx"> #include &quot;DOMImplementation.h&quot;
</span><span class="cx"> #include &quot;DOMWindow.h&quot;
</span><span class="lines">@@ -1339,6 +1340,8 @@
</span><span class="cx">         type = FrameLoadType::Same;
</span><span class="cx">     } else if (shouldTreatURLAsSameAsCurrent(newDocumentLoader-&gt;unreachableURL()) &amp;&amp; m_loadType == FrameLoadType::Reload)
</span><span class="cx">         type = FrameLoadType::Reload;
</span><ins>+    else if (m_loadType == FrameLoadType::RedirectWithLockedBackForwardList &amp;&amp; !newDocumentLoader-&gt;unreachableURL().isEmpty() &amp;&amp; newDocumentLoader-&gt;substituteData().isValid())
+        type = FrameLoadType::RedirectWithLockedBackForwardList;
</ins><span class="cx">     else
</span><span class="cx">         type = FrameLoadType::Standard;
</span><span class="cx"> 
</span><span class="lines">@@ -2241,6 +2244,10 @@
</span><span class="cx">             if (!pdl-&gt;isLoadingInAPISense() || pdl-&gt;isStopping()) {
</span><span class="cx">                 m_provisionalLoadErrorBeingHandledURL = m_provisionalDocumentLoader-&gt;url();
</span><span class="cx">                 m_client.dispatchDidFailProvisionalLoad(error);
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+                if (auto contentFilter = pdl-&gt;contentFilter())
+                    contentFilter-&gt;handleProvisionalLoadFailure(error);
+#endif
</ins><span class="cx">                 m_provisionalLoadErrorBeingHandledURL = { };
</span><span class="cx"> 
</span><span class="cx">                 ASSERT(!pdl-&gt;isLoading());
</span><span class="lines">@@ -3441,6 +3448,15 @@
</span><span class="cx">     return error;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+ResourceError FrameLoader::blockedByContentFilterError(const ResourceRequest&amp; request) const
+{
+    ResourceError error = m_client.blockedByContentFilterError(request);
+    error.setType(ResourceError::Type::General);
+    return error;
+}
+#endif
+
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> RetainPtr&lt;CFDictionaryRef&gt; FrameLoader::connectionProperties(ResourceLoader* loader)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/FrameLoader.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -171,6 +171,9 @@
</span><span class="cx">     WEBCORE_EXPORT ResourceError cancelledError(const ResourceRequest&amp;) const;
</span><span class="cx">     WEBCORE_EXPORT ResourceError blockedByContentBlockerError(const ResourceRequest&amp;) const;
</span><span class="cx">     ResourceError blockedError(const ResourceRequest&amp;) const;
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+    ResourceError blockedByContentFilterError(const ResourceRequest&amp;) const;
+#endif
</ins><span class="cx"> 
</span><span class="cx">     bool isHostedByObjectElement() const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoaderClient.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoaderClient.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/FrameLoaderClient.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2006-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2012 Google Inc. All rights reserved.
</span><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -27,8 +27,7 @@
</span><span class="cx">  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef FrameLoaderClient_h
-#define FrameLoaderClient_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;FrameLoaderTypes.h&quot;
</span><span class="cx"> #include &quot;LayoutMilestones.h&quot;
</span><span class="lines">@@ -232,6 +231,9 @@
</span><span class="cx">         virtual ResourceError blockedByContentBlockerError(const ResourceRequest&amp;) = 0;
</span><span class="cx">         virtual ResourceError cannotShowURLError(const ResourceRequest&amp;) = 0;
</span><span class="cx">         virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&amp;) = 0;
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+        virtual ResourceError blockedByContentFilterError(const ResourceRequest&amp;) = 0;
+#endif
</ins><span class="cx"> 
</span><span class="cx">         virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&amp;) = 0;
</span><span class="cx">         virtual ResourceError fileDoesNotExistError(const ResourceResponse&amp;) = 0;
</span><span class="lines">@@ -355,5 +357,3 @@
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // FrameLoaderClient_h
</del></span></pre></div>
<a id="trunkSourceWebCoreloaderNavigationSchedulercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NavigationScheduler.cpp (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NavigationScheduler.cpp        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/NavigationScheduler.cpp        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006-2010, 2016 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2006-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
</span><span class="cx">  * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
</span><span class="cx">  * Copyright (C) 2009 Adam Barth. All rights reserved.
</span><span class="lines">@@ -323,26 +323,6 @@
</span><span class="cx">     Document&amp; m_originDocument;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class ScheduledSubstituteDataLoad : public ScheduledNavigation {
-public:
-    ScheduledSubstituteDataLoad(const URL&amp; baseURL, const SubstituteData&amp; substituteData)
-        : ScheduledNavigation { 0, LockHistory::No, LockBackForwardList::No, false, false }
-        , m_baseURL { baseURL }
-        , m_substituteData { substituteData }
-    {
-    }
-
-    void fire(Frame&amp; frame) override
-    {
-        UserGestureIndicator gestureIndicator { wasUserGesture() ? DefinitelyProcessingUserGesture : DefinitelyNotProcessingUserGesture };
-        frame.loader().load(FrameLoadRequest { &amp;frame, m_baseURL, m_shouldOpenExternalURLsPolicy, m_substituteData });
-    }
-
-private:
-    URL m_baseURL;
-    SubstituteData m_substituteData;
-};
-
</del><span class="cx"> NavigationScheduler::NavigationScheduler(Frame&amp; frame)
</span><span class="cx">     : m_frame(frame)
</span><span class="cx">     , m_timer(*this, &amp;NavigationScheduler::timerFired)
</span><span class="lines">@@ -499,12 +479,6 @@
</span><span class="cx">     schedule(std::make_unique&lt;ScheduledHistoryNavigation&gt;(steps));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NavigationScheduler::scheduleSubstituteDataLoad(const URL&amp; baseURL, const SubstituteData&amp; substituteData)
-{
-    if (shouldScheduleNavigation())
-        schedule(std::make_unique&lt;ScheduledSubstituteDataLoad&gt;(baseURL, substituteData));
-}
-
</del><span class="cx"> void NavigationScheduler::schedulePageBlock(Document&amp; originDocument)
</span><span class="cx"> {
</span><span class="cx">     if (shouldScheduleNavigation())
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderNavigationSchedulerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NavigationScheduler.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NavigationScheduler.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/NavigationScheduler.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2006-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
</span><span class="cx">  * Copyright (C) 2009 Adam Barth. All rights reserved.
</span><span class="cx">  *
</span><span class="lines">@@ -28,8 +28,7 @@
</span><span class="cx">  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef NavigationScheduler_h
-#define NavigationScheduler_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;FrameLoaderTypes.h&quot;
</span><span class="cx"> #include &quot;Timer.h&quot;
</span><span class="lines">@@ -42,7 +41,6 @@
</span><span class="cx"> class Frame;
</span><span class="cx"> class ScheduledNavigation;
</span><span class="cx"> class SecurityOrigin;
</span><del>-class SubstituteData;
</del><span class="cx"> class URL;
</span><span class="cx"> 
</span><span class="cx"> class NavigationDisablerForBeforeUnload {
</span><span class="lines">@@ -75,7 +73,6 @@
</span><span class="cx">     void scheduleFormSubmission(PassRefPtr&lt;FormSubmission&gt;);
</span><span class="cx">     void scheduleRefresh(Document* initiatingDocument);
</span><span class="cx">     void scheduleHistoryNavigation(int steps);
</span><del>-    void scheduleSubstituteDataLoad(const URL&amp; baseURL, const SubstituteData&amp;);
</del><span class="cx">     void schedulePageBlock(Document&amp; originDocument);
</span><span class="cx"> 
</span><span class="cx">     void startTimer();
</span><span class="lines">@@ -98,5 +95,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // NavigationScheduler_h
</del></span></pre></div>
<a id="trunkSourceWebCoreloaderPolicyCheckercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/PolicyChecker.cpp (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/PolicyChecker.cpp        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebCore/loader/PolicyChecker.cpp        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;PolicyChecker.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;ContentFilter.h&quot;
</ins><span class="cx"> #include &quot;ContentSecurityPolicy.h&quot;
</span><span class="cx"> #include &quot;DOMWindow.h&quot;
</span><span class="cx"> #include &quot;DocumentLoader.h&quot;
</span><span class="lines">@@ -91,10 +92,15 @@
</span><span class="cx"> 
</span><span class="cx">     // We are always willing to show alternate content for unreachable URLs;
</span><span class="cx">     // treat it like a reload so it maintains the right state for b/f list.
</span><del>-    if (loader-&gt;substituteData().isValid() &amp;&amp; !loader-&gt;substituteData().failingURL().isEmpty()) {
</del><ins>+    auto&amp; substituteData = loader-&gt;substituteData();
+    if (substituteData.isValid() &amp;&amp; !substituteData.failingURL().isEmpty()) {
+        bool shouldContinue = true;
+#if ENABLE(CONTENT_FILTERING)
+        shouldContinue = ContentFilter::continueAfterSubstituteDataRequest(*m_frame.loader().activeDocumentLoader(), substituteData);
+#endif
</ins><span class="cx">         if (isBackForwardLoadType(m_loadType))
</span><span class="cx">             m_loadType = FrameLoadType::Reload;
</span><del>-        function(request, 0, true);
</del><ins>+        function(request, 0, shouldContinue);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-07-08  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [Content Filtering] Load blocked pages more like other error pages are loaded
+        https://bugs.webkit.org/show_bug.cgi?id=159485
+        &lt;rdar://problem/26014076&gt;
+
+        Reviewed by Brady Eidson.
+
+        * Misc/WebKitErrors.h: Defined WebKitErrorFrameLoadBlockedByContentFilter.
+        * Misc/WebKitErrors.m:
+        (registerErrors): Registered WebKitErrorDescriptionFrameLoadBlockedByContentFilter.
+        * WebCoreSupport/WebFrameLoaderClient.h:
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+        (WebFrameLoaderClient::blockedByContentFilterError): Returned a ResourceError for WebKitErrorFrameLoadBlockedByContentFilter.
+
</ins><span class="cx"> 2016-07-08  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r202944.
</span></span></pre></div>
<a id="trunkSourceWebKitmacMiscWebKitErrorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Misc/WebKitErrors.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Misc/WebKitErrors.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit/mac/Misc/WebKitErrors.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2003 Apple Inc.  All rights reserved.
</del><ins>+ * Copyright (C) 2003-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">@@ -38,11 +38,13 @@
</span><span class="cx">     @constant WebKitErrorCannotShowMIMEType
</span><span class="cx">     @constant WebKitErrorCannotShowURL
</span><span class="cx">     @constant WebKitErrorFrameLoadInterruptedByPolicyChange
</span><ins>+    @constant WebKitErrorFrameLoadBlockedByContentFilter
</ins><span class="cx"> */
</span><span class="cx"> enum {
</span><span class="cx">     WebKitErrorCannotShowMIMEType =                             100,
</span><span class="cx">     WebKitErrorCannotShowURL =                                  101,
</span><span class="cx">     WebKitErrorFrameLoadInterruptedByPolicyChange =             102,
</span><ins>+    WebKitErrorFrameLoadBlockedByContentFilter =                105,
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> /*!
</span></span></pre></div>
<a id="trunkSourceWebKitmacMiscWebKitErrorsm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Misc/WebKitErrors.m (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Misc/WebKitErrors.m        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit/mac/Misc/WebKitErrors.m        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2005 Apple Inc.  All rights reserved.
</del><ins>+ * Copyright (C) 2005-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">@@ -45,6 +45,7 @@
</span><span class="cx"> #define WebKitErrorDescriptionCannotShowURL UI_STRING_INTERNAL(&quot;The URL can’t be shown&quot;, &quot;WebKitErrorCannotShowURL description&quot;)
</span><span class="cx"> #define WebKitErrorDescriptionFrameLoadInterruptedByPolicyChange UI_STRING_INTERNAL(&quot;Frame load interrupted&quot;, &quot;WebKitErrorFrameLoadInterruptedByPolicyChange description&quot;)
</span><span class="cx"> #define WebKitErrorDescriptionCannotUseRestrictedPort UI_STRING_INTERNAL(&quot;Not allowed to use restricted network port&quot;, &quot;WebKitErrorCannotUseRestrictedPort description&quot;)
</span><ins>+#define WebKitErrorDescriptionFrameLoadBlockedByContentFilter UI_STRING_INTERNAL(&quot;The URL was blocked by a content filter&quot;, &quot;WebKitErrorFrameLoadBlockedByContentFilter description&quot;)
</ins><span class="cx"> 
</span><span class="cx"> // Plug-in and java errors
</span><span class="cx"> #define WebKitErrorDescriptionCannotFindPlugin UI_STRING_INTERNAL(&quot;The plug-in can’t be found&quot;, &quot;WebKitErrorCannotFindPlugin description&quot;)
</span><span class="lines">@@ -154,7 +155,8 @@
</span><span class="cx">         WebKitErrorDescriptionCannotShowURL,                        [NSNumber numberWithInt: WebKitErrorCannotShowURL],
</span><span class="cx">         WebKitErrorDescriptionFrameLoadInterruptedByPolicyChange,   [NSNumber numberWithInt: WebKitErrorFrameLoadInterruptedByPolicyChange],
</span><span class="cx">         WebKitErrorDescriptionCannotUseRestrictedPort,              [NSNumber numberWithInt: WebKitErrorCannotUseRestrictedPort],
</span><del>-        
</del><ins>+        WebKitErrorDescriptionFrameLoadBlockedByContentFilter,      [NSNumber numberWithInt: WebKitErrorFrameLoadBlockedByContentFilter],
+
</ins><span class="cx">         // Plug-in and java errors
</span><span class="cx">         WebKitErrorDescriptionCannotFindPlugin,                     [NSNumber numberWithInt: WebKitErrorCannotFindPlugIn],
</span><span class="cx">         WebKitErrorDescriptionCannotLoadPlugin,                     [NSNumber numberWithInt: WebKitErrorCannotLoadPlugIn],
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2006-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">@@ -162,6 +162,7 @@
</span><span class="cx">     WebCore::ResourceError blockedByContentBlockerError(const WebCore::ResourceRequest&amp;) override;
</span><span class="cx">     WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&amp;) override;
</span><span class="cx">     WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&amp;) override;
</span><ins>+    WebCore::ResourceError blockedByContentFilterError(const WebCore::ResourceRequest&amp;) override;
</ins><span class="cx"> 
</span><span class="cx">     WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&amp;) override;
</span><span class="cx">     WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebFrameLoaderClientmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2006-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">@@ -1145,6 +1145,11 @@
</span><span class="cx">     return [NSError _webKitErrorWithDomain:WebKitErrorDomain code:WebKitErrorFrameLoadInterruptedByPolicyChange URL:request.url()];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+ResourceError WebFrameLoaderClient::blockedByContentFilterError(const ResourceRequest&amp; request)
+{
+    return [NSError _webKitErrorWithDomain:WebKitErrorDomain code:WebKitErrorFrameLoadBlockedByContentFilter URL:request.url()];
+}
+
</ins><span class="cx"> ResourceError WebFrameLoaderClient::cannotShowMIMETypeError(const ResourceResponse&amp; response)
</span><span class="cx"> {
</span><span class="cx">     return [NSError _webKitErrorWithDomain:NSURLErrorDomain code:WebKitErrorCannotShowMIMEType URL:response.url()];
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/ChangeLog        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2016-07-08  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [Content Filtering] Load blocked pages more like other error pages are loaded
+        https://bugs.webkit.org/show_bug.cgi?id=159485
+        &lt;rdar://problem/26014076&gt;
+
+        Reviewed by Brady Eidson.
+
+        * Shared/API/c/WKErrorRef.h: Defined kWKErrorCodeFrameLoadBlockedByContentFilter.
+        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
+        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added the resource directories
+        of WebCore.framework and WebKit.framework as paths with assumed read access.
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::hasAssumedReadAccessToURL): Checked platformPathsWithAssumedReadAccess()
+        as well as m_localPathsWithAssumedReadAccess.
+        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added a non-Cocoa implementation.
+        * UIProcess/WebProcessProxy.h:
+        * WebProcess/WebCoreSupport/WebErrors.h:
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::blockedByContentFilterError): Called WebKit::blockedByContentFilterError().
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
+        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
+        (WebKit::blockedByContentFilterError): Returned a ResourceError for kWKErrorCodeFrameLoadBlockedByContentFilter.
+
</ins><span class="cx"> 2016-07-08  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix 32-bit build.
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPIcWKErrorRefh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/c/WKErrorRef.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/c/WKErrorRef.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/Shared/API/c/WKErrorRef.h        2016-07-08 20:14:34 UTC (rev 203003)
</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">@@ -38,6 +38,7 @@
</span><span class="cx">     kWKErrorCodeFrameLoadInterruptedByPolicyChange =             102,
</span><span class="cx">     kWKErrorCodeCannotUseRestrictedPort =                        103,
</span><span class="cx">     kWKErrorCodeFrameLoadBlockedByContentBlocker =               104,
</span><ins>+    kWKErrorCodeFrameLoadBlockedByContentFilter =                105,
</ins><span class="cx">     kWKErrorCodeCannotFindPlugIn =                               200,
</span><span class="cx">     kWKErrorCodeCannotLoadPlugIn =                               201,
</span><span class="cx">     kWKErrorCodeJavaUnavailable =                                202,
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaWebProcessProxyCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessProxyCocoa.mm (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessProxyCocoa.mm        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessProxyCocoa.mm        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-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">@@ -30,9 +30,20 @@
</span><span class="cx"> #import &quot;WKBrowsingContextControllerInternal.h&quot;
</span><span class="cx"> #import &quot;WKBrowsingContextHandleInternal.h&quot;
</span><span class="cx"> #import &quot;WKTypeRefWrapper.h&quot;
</span><ins>+#import &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><ins>+const HashSet&lt;String&gt;&amp; WebProcessProxy::platformPathsWithAssumedReadAccess()
+{
+    static NeverDestroyed&lt;HashSet&lt;String&gt;&gt; platformPathsWithAssumedReadAccess(std::initializer_list&lt;String&gt; {
+        [NSBundle bundleWithIdentifier:@&quot;com.apple.WebCore&quot;].resourcePath.stringByStandardizingPath,
+        [NSBundle bundleWithIdentifier:@&quot;com.apple.WebKit&quot;].resourcePath.stringByStandardizingPath
+    });
+
+    return platformPathsWithAssumedReadAccess;
+}
+
</ins><span class="cx"> RefPtr&lt;ObjCObjectGraph&gt; WebProcessProxy::transformHandlesToObjects(ObjCObjectGraph&amp; objectGraph)
</span><span class="cx"> {
</span><span class="cx">     struct Transformer final : ObjCObjectGraph::Transformer {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebProcessProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010, 2011 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">@@ -322,12 +322,20 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     String path = url.fileSystemPath();
</span><del>-    for (const String&amp; assumedAccessPath : m_localPathsWithAssumedReadAccess) {
</del><ins>+    auto startsWithURLPath = [&amp;path](const String&amp; assumedAccessPath) {
</ins><span class="cx">         // There are no &quot;..&quot; components, because URL removes those.
</span><del>-        if (path.startsWith(assumedAccessPath))
-            return true;
-    }
</del><ins>+        return path.startsWith(assumedAccessPath);
+    };
</ins><span class="cx"> 
</span><ins>+    auto&amp; platformPaths = platformPathsWithAssumedReadAccess();
+    auto platformPathsEnd = platformPaths.end();
+    if (std::find_if(platformPaths.begin(), platformPathsEnd, startsWithURLPath) != platformPathsEnd)
+        return true;
+
+    auto localPathsEnd = m_localPathsWithAssumedReadAccess.end();
+    if (std::find_if(m_localPathsWithAssumedReadAccess.begin(), localPathsEnd, startsWithURLPath) != localPathsEnd)
+        return true;
+
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1035,4 +1043,12 @@
</span><span class="cx">         callback(isWebProcessResponsive);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if !PLATFORM(COCOA)
+const HashSet&lt;String&gt;&amp; WebProcessProxy::platformPathsWithAssumedReadAccess()
+{
+    static NeverDestroyed&lt;HashSet&lt;String&gt;&gt; platformPathsWithAssumedReadAccess;
+    return platformPathsWithAssumedReadAccess;
+}
+#endif
+
</ins><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebProcessProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010, 2011 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 WebProcessProxy_h
-#define WebProcessProxy_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;APISession.h&quot;
</span><span class="cx"> #include &quot;ChildProcessProxy.h&quot;
</span><span class="lines">@@ -191,6 +190,8 @@
</span><span class="cx">     void releaseIconForPageURL(const String&amp; pageURL);
</span><span class="cx">     void releaseRemainingIconsForPageURLs();
</span><span class="cx"> 
</span><ins>+    static const HashSet&lt;String&gt;&amp; platformPathsWithAssumedReadAccess();
+
</ins><span class="cx">     // IPC::Connection::Client
</span><span class="cx">     friend class WebConnectionToWebProcess;
</span><span class="cx">     void didReceiveMessage(IPC::Connection&amp;, IPC::MessageDecoder&amp;) override;
</span><span class="lines">@@ -258,5 +259,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span><del>-
-#endif // WebProcessProxy_h
</del></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebErrorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebErrors.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebErrors.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebErrors.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010, 2011 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 WebErrors_h
-#define WebErrors_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     class URL;
</span><span class="lines">@@ -40,6 +39,9 @@
</span><span class="cx"> WebCore::ResourceError blockedByContentBlockerError(const WebCore::ResourceRequest&amp;);
</span><span class="cx"> WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&amp;);
</span><span class="cx"> WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&amp;);
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+WebCore::ResourceError blockedByContentFilterError(const WebCore::ResourceRequest&amp;);
+#endif
</ins><span class="cx"> WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&amp;);
</span><span class="cx"> WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&amp;);
</span><span class="cx"> WebCore::ResourceError pluginWillHandleLoadError(const WebCore::ResourceResponse&amp;);
</span><span class="lines">@@ -46,5 +48,3 @@
</span><span class="cx"> WebCore::ResourceError internalError(const WebCore::URL&amp;);
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span><del>-
-#endif // WebErrors_h
</del></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1112,6 +1112,13 @@
</span><span class="cx">     return WebKit::interruptedForPolicyChangeError(request);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+ResourceError WebFrameLoaderClient::blockedByContentFilterError(const ResourceRequest&amp; request)
+{
+    return WebKit::blockedByContentFilterError(request);
+}
+#endif
+
</ins><span class="cx"> ResourceError WebFrameLoaderClient::cannotShowMIMETypeError(const ResourceResponse&amp; response)
</span><span class="cx"> {
</span><span class="cx">     return WebKit::cannotShowMIMETypeError(response);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2010, 2011, 2012 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 WebFrameLoaderClient_h
-#define WebFrameLoaderClient_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #include &lt;WebCore/FrameLoaderClient.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -149,6 +148,9 @@
</span><span class="cx">     WebCore::ResourceError blockedByContentBlockerError(const WebCore::ResourceRequest&amp;) override;
</span><span class="cx">     WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&amp;) override;
</span><span class="cx">     WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&amp;) override;
</span><ins>+#if ENABLE(CONTENT_FILTERING)
+    WebCore::ResourceError blockedByContentFilterError(const WebCore::ResourceRequest&amp;) override;
+#endif
</ins><span class="cx">     
</span><span class="cx">     WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&amp;) override;
</span><span class="cx">     WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&amp;) override;
</span><span class="lines">@@ -268,5 +270,3 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span><del>-
-#endif // WebFrameLoaderClient_h
</del></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportmacWebErrorsMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebErrorsMac.mm        2016-07-08 20:14:34 UTC (rev 203003)
</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">@@ -82,6 +82,11 @@
</span><span class="cx">     return ResourceError(API::Error::webKitErrorDomain(), kWKErrorCodeFrameLoadInterruptedByPolicyChange, request.url(), WEB_UI_STRING(&quot;Frame load interrupted&quot;, &quot;WebKitErrorFrameLoadInterruptedByPolicyChange description&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+ResourceError blockedByContentFilterError(const ResourceRequest&amp; request)
+{
+    return ResourceError(API::Error::webKitErrorDomain(), kWKErrorCodeFrameLoadBlockedByContentFilter, request.url(), WEB_UI_STRING(&quot;The URL was blocked by a content filter&quot;, &quot;WebKitErrorBlockedByContentFilter&quot;));
+}
+
</ins><span class="cx"> ResourceError cannotShowMIMETypeError(const ResourceResponse&amp; response)
</span><span class="cx"> {
</span><span class="cx">     return ResourceError(API::Error::webKitErrorDomain(), kWKErrorCodeCannotShowMIMEType, response.url(), WEB_UI_STRING(&quot;Content with specified MIME type can’t be shown&quot;, &quot;WebKitErrorCannotShowMIMEType description&quot;));
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Tools/ChangeLog        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2016-07-08  Andy Estes  &lt;aestes@apple.com&gt;
+
+        [Content Filtering] Load blocked pages more like other error pages are loaded
+        https://bugs.webkit.org/show_bug.cgi?id=159485
+        &lt;rdar://problem/26014076&gt;
+
+        Reviewed by Brady Eidson.
+
+        Added API tests for WebView and WKWebView to verify that alternate HTML loaded in response
+        to a content filtering provisional navigation failure is ignored in preference of
+        ContentFilter's own error page.
+
+        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
+        (-[LoadAlternateNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
+        (-[LoadAlternateNavigationDelegate webView:didFinishNavigation:]):
+        (loadAlternateTest):
+        (TEST):
+        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm:
+        (-[MockContentFilterEnabler initWithCoder:]):
+        * TestWebKitAPI/Tests/mac/ContentFiltering.mm: Added.
+        (-[LoadAlternateFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
+        (-[LoadAlternateFrameLoadDelegate webView:didFinishLoadForFrame:]):
+        (TestWebKitAPI::loadAlternateTest):
+        (TestWebKitAPI::TEST):
+
</ins><span class="cx"> 2016-07-08  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r202944.
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPIConfigurationsTestWebKitAPIxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Tools/TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-// Copyright (C) 2010, 2014 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">@@ -28,8 +28,10 @@
</span><span class="cx"> 
</span><span class="cx"> UNEXPORTED_SYMBOL_LDFLAGS = -Wl,-unexported_symbol -Wl,__ZN7testing4Test16TearDownTestCaseEv -Wl,-unexported_symbol -Wl,__ZN7testing4Test13SetUpTestCaseEv
</span><span class="cx"> 
</span><del>-OTHER_LDFLAGS = $(inherited) $(UNEXPORTED_SYMBOL_LDFLAGS) -lgtest -force_load $(BUILT_PRODUCTS_DIR)/libTestWebKitAPI.a -framework JavaScriptCore -framework WebKit $(OTHER_LDFLAGS_PLATFORM);
</del><ins>+OTHER_LDFLAGS = $(inherited) $(UNEXPORTED_SYMBOL_LDFLAGS) -lgtest -force_load $(BUILT_PRODUCTS_DIR)/libTestWebKitAPI.a -framework JavaScriptCore -framework WebKit -lWebCoreTestSupport $(OTHER_LDFLAGS_PLATFORM);
</ins><span class="cx"> OTHER_LDFLAGS_PLATFORM[sdk=macosx*] = -framework Cocoa -framework Carbon;
</span><span class="cx"> 
</span><span class="cx"> // FIXME: This should not be built on iOS. Instead we should create and use a TestWebKitAPI application.
</span><span class="cx"> OTHER_LDFLAGS_PLATFORM[sdk=iphone*] = -framework WebCore -framework CoreGraphics;
</span><ins>+
+LD_RUNPATH_SEARCH_PATHS = &quot;@loader_path&quot;;
</ins></span></pre></div>
<a id="trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -353,6 +353,7 @@
</span><span class="cx">                 9B0786A51C5885C300D159E3 /* InjectedBundleMakeAllShadowRootOpen_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9B0786A41C5885C300D159E3 /* InjectedBundleMakeAllShadowRootOpen_Bundle.cpp */; };
</span><span class="cx">                 9B26FCCA159D16DE00CC3765 /* HTMLFormCollectionNamedItem.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9B26FCB4159D15E700CC3765 /* HTMLFormCollectionNamedItem.html */; };
</span><span class="cx">                 9B4F8FA7159D52DD002D9F94 /* HTMLCollectionNamedItem.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9B4F8FA6159D52CA002D9F94 /* HTMLCollectionNamedItem.html */; };
</span><ins>+                A1146A8D1D2D7115000FE710 /* ContentFiltering.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1146A8A1D2D704F000FE710 /* ContentFiltering.mm */; };
</ins><span class="cx">                 A13EBBAA1B87428D00097110 /* WebProcessPlugIn.mm in Sources */ = {isa = PBXBuildFile; fileRef = A13EBBA91B87428D00097110 /* WebProcessPlugIn.mm */; };
</span><span class="cx">                 A13EBBAB1B87434600097110 /* PlatformUtilitiesCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F139E721A423A2B00F590F5 /* PlatformUtilitiesCocoa.mm */; };
</span><span class="cx">                 A13EBBB01B87436F00097110 /* BundleParametersPlugIn.mm in Sources */ = {isa = PBXBuildFile; fileRef = A13EBBAE1B87436F00097110 /* BundleParametersPlugIn.mm */; };
</span><span class="lines">@@ -860,6 +861,7 @@
</span><span class="cx">                 9B4F8FA3159D52B1002D9F94 /* HTMLCollectionNamedItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HTMLCollectionNamedItem.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9B4F8FA6159D52CA002D9F94 /* HTMLCollectionNamedItem.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = HTMLCollectionNamedItem.html; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 9B79164F1BD89D0D00D50B8F /* FirstResponderScrollingPosition.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FirstResponderScrollingPosition.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                A1146A8A1D2D704F000FE710 /* ContentFiltering.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContentFiltering.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 A13EBB491B87339E00097110 /* TestWebKitAPI.wkbundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestWebKitAPI.wkbundle; sourceTree = BUILT_PRODUCTS_DIR; };
</span><span class="cx">                 A13EBB521B87346600097110 /* WebProcessPlugIn.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = WebProcessPlugIn.xcconfig; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A13EBB541B8734E000097110 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -1632,6 +1634,7 @@
</span><span class="cx">                                 00CD9F6215BE312C002DA2CE /* BackForwardList.mm */,
</span><span class="cx">                                 26DF5A5D15A29BAA003689C2 /* CancelLoadFromResourceLoadDelegate.mm */,
</span><span class="cx">                                 290A9BB51735DE8A00D71BBC /* CloseNewWindowInNavigationPolicyDelegate.mm */,
</span><ins>+                                A1146A8A1D2D704F000FE710 /* ContentFiltering.mm */,
</ins><span class="cx">                                 5142B2701517C88B00C32B19 /* ContextMenuCanCopyURL.mm */,
</span><span class="cx">                                 3776BC62150946BC0043A66D /* DeviceScaleFactorInDashboardRegions.mm */,
</span><span class="cx">                                 939BA91614103412001A01BD /* DeviceScaleFactorOnBack.mm */,
</span><span class="lines">@@ -2095,6 +2098,7 @@
</span><span class="cx">                                 7C83E0B61D0A64B300FEBCF3 /* ModalAlertsSPI.cpp in Sources */,
</span><span class="cx">                                 7C83E04E1D0A641800FEBCF3 /* DFAMinimizer.cpp in Sources */,
</span><span class="cx">                                 7C83E0B81D0A64BD00FEBCF3 /* InjectedBundleMakeAllShadowRootsOpen.cpp in Sources */,
</span><ins>+                                A1146A8D1D2D7115000FE710 /* ContentFiltering.mm in Sources */,
</ins><span class="cx">                                 7CCE7EF91A411AE600447C4C /* GetInjectedBundleInitializationUserDataCallback.cpp in Sources */,
</span><span class="cx">                                 536770341CC8022800D425B1 /* WebScriptObjectDescription.mm in Sources */,
</span><span class="cx">                                 7CCE7EE21A411A9A00447C4C /* GetPIDAfterAbortedProcessLaunch.cpp in Sources */,
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaContentFilteringmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2015-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">@@ -35,6 +35,7 @@
</span><span class="cx"> #import &lt;WebKit/WKNavigationDelegatePrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKProcessPoolPrivate.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKWebView.h&gt;
</span><ins>+#import &lt;WebKit/WKWebViewPrivate.h&gt;
</ins><span class="cx"> #import &lt;WebKit/_WKDownloadDelegate.h&gt;
</span><span class="cx"> #import &lt;WebKit/_WKRemoteObjectInterface.h&gt;
</span><span class="cx"> #import &lt;WebKit/_WKRemoteObjectRegistry.h&gt;
</span><span class="lines">@@ -256,6 +257,73 @@
</span><span class="cx">     downloadTest(Decision::Block, DecisionPoint::Never);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+@interface LoadAlternateNavigationDelegate : NSObject &lt;WKNavigationDelegate&gt;
+@end
+
+@implementation LoadAlternateNavigationDelegate
+
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
+{
+    EXPECT_WK_STREQ(WebKitErrorDomain, error.domain);
+    EXPECT_EQ(WebKitErrorFrameLoadBlockedByContentFilter, error.code);
+    [webView _loadAlternateHTMLString:@&quot;FAIL&quot; baseURL:nil forUnreachableURL:[error.userInfo objectForKey:NSURLErrorFailingURLErrorKey]];
+}
+
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
+{
+    [webView evaluateJavaScript:@&quot;document.body.innerText&quot; completionHandler:^ (id result, NSError *error) {
+        EXPECT_TRUE([result isKindOfClass:[NSString class]]);
+        EXPECT_WK_STREQ(@&quot;blocked&quot;, result);
+        isDone = true;
+    }];
+}
+
+@end
+
+static void loadAlternateTest(Decision decision, DecisionPoint decisionPoint)
+{
+    @autoreleasepool {
+        [TestProtocol registerWithScheme:@&quot;http&quot;];
+
+        auto configuration = configurationWithContentFilterSettings(decision, decisionPoint);
+        auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration.get()]);
+        auto navigationDelegate = adoptNS([[LoadAlternateNavigationDelegate alloc] init]);
+        [webView setNavigationDelegate:navigationDelegate.get()];
+        [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@&quot;http://redirect/?result&quot;]]];
+
+        isDone = false;
+        TestWebKitAPI::Util::run(&amp;isDone);
+
+        [TestProtocol unregister];
+    }
+}
+
+TEST(ContentFiltering, LoadAlternateAfterWillSendRequestWK2)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterWillSendRequest);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterRedirectWK2)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterRedirect);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterResponseWK2)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterResponse);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterAddDataWK2)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterAddData);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterFinishedAddingDataWK2)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterFinishedAddingData);
+}
+
+
</ins><span class="cx"> @interface LazilyLoadPlatformFrameworksController : NSObject &lt;WKNavigationDelegate&gt;
</span><span class="cx"> @property (nonatomic, readonly) WKWebView *webView;
</span><span class="cx"> - (void)expectParentalControlsLoaded:(BOOL)parentalControlsShouldBeLoaded networkExtensionLoaded:(BOOL)networkExtensionShouldBeLoaded;
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaContentFilteringPlugInmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm (203002 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm        2016-07-08 19:40:20 UTC (rev 203002)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2015-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">@@ -63,6 +63,7 @@
</span><span class="cx">     settings.setEnabled(true);
</span><span class="cx">     settings.setDecision(static_cast&lt;Decision&gt;([decoder decodeIntForKey:@&quot;Decision&quot;]));
</span><span class="cx">     settings.setDecisionPoint(static_cast&lt;DecisionPoint&gt;([decoder decodeIntForKey:@&quot;DecisionPoint&quot;]));
</span><ins>+    settings.setBlockedString(ASCIILiteral(&quot;blocked&quot;));
</ins><span class="cx">     return self;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsmacContentFilteringmm"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestWebKitAPI/Tests/mac/ContentFiltering.mm (0 => 203003)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/mac/ContentFiltering.mm                                (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/mac/ContentFiltering.mm        2016-07-08 20:14:34 UTC (rev 203003)
</span><span class="lines">@@ -0,0 +1,108 @@
</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;MockContentFilterSettings.h&quot;
+#import &quot;PlatformUtilities.h&quot;
+#import &quot;TestProtocol.h&quot;
+#import &lt;WebKit/WebKit.h&gt;
+
+using Decision = WebCore::MockContentFilterSettings::Decision;
+using DecisionPoint = WebCore::MockContentFilterSettings::DecisionPoint;
+
+static bool isDone;
+
+@interface LoadAlternateFrameLoadDelegate : NSObject &lt;WebFrameLoadDelegate&gt;
+@end
+
+@implementation LoadAlternateFrameLoadDelegate
+
+- (void)webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame
+{
+    EXPECT_WK_STREQ(WebKitErrorDomain, error.domain);
+    EXPECT_EQ(WebKitErrorFrameLoadBlockedByContentFilter, error.code);
+    [frame loadAlternateHTMLString:@&quot;FAIL&quot; baseURL:nil forUnreachableURL:[error.userInfo objectForKey:NSURLErrorFailingURLErrorKey]];
+}
+
+- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
+{
+    EXPECT_WK_STREQ(@&quot;blocked&quot;, frame.DOMDocument.body.innerText);
+    isDone = true;
+}
+
+@end
+
+namespace TestWebKitAPI {
+
+static void loadAlternateTest(Decision decision, DecisionPoint decisionPoint)
+{
+    @autoreleasepool {
+        auto&amp; settings = WebCore::MockContentFilterSettings::singleton();
+        settings.setEnabled(true);
+        settings.setDecision(decision);
+        settings.setDecisionPoint(decisionPoint);
+        settings.setBlockedString(ASCIILiteral(&quot;blocked&quot;));
+        [TestProtocol registerWithScheme:@&quot;http&quot;];
+
+        auto webView = adoptNS([[WebView alloc] initWithFrame:NSZeroRect]);
+        auto frameLoadDelegate = adoptNS([[LoadAlternateFrameLoadDelegate alloc] init]);
+        [webView setFrameLoadDelegate:frameLoadDelegate.get()];
+        [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@&quot;http://redirect/?result&quot;]]];
+
+        isDone = false;
+        TestWebKitAPI::Util::run(&amp;isDone);
+
+        settings.setEnabled(false);
+        [TestProtocol unregister];
+    }
+}
+
+TEST(ContentFiltering, LoadAlternateAfterWillSendRequestWK1)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterWillSendRequest);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterRedirectWK1)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterRedirect);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterResponseWK1)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterResponse);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterAddDataWK1)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterAddData);
+}
+
+TEST(ContentFiltering, LoadAlternateAfterFinishedAddingDataWK1)
+{
+    loadAlternateTest(Decision::Block, DecisionPoint::AfterFinishedAddingData);
+}
+
+} // namespace TestWebKitAPI
</ins></span></pre>
</div>
</div>

</body>
</html>