<!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>[171423] branches/safari-600.1-branch/Source</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/171423">171423</a></dd>
<dt>Author</dt> <dd>dburkart@apple.com</dd>
<dt>Date</dt> <dd>2014-07-22 23:12:55 -0700 (Tue, 22 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/171252">r171252</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari6001branchSourceWebCoreChangeLog">branches/safari-600.1-branch/Source/WebCore/ChangeLog</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreWebCoreexpin">branches/safari-600.1-branch/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreloaderDocumentLoadercpp">branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreloaderDocumentLoaderh">branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.h</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreloaderFrameLoaderClienth">branches/safari-600.1-branch/Source/WebCore/loader/FrameLoaderClient.h</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreloaderPolicyCheckercpp">branches/safari-600.1-branch/Source/WebCore/loader/PolicyChecker.cpp</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreplatformContentFilterh">branches/safari-600.1-branch/Source/WebCore/platform/ContentFilter.h</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreplatformiosContentFilterIOSmm">branches/safari-600.1-branch/Source/WebCore/platform/ios/ContentFilterIOS.mm</a></li>
<li><a href="#branchessafari6001branchSourceWebCoreplatformmacContentFilterMacmm">branches/safari-600.1-branch/Source/WebCore/platform/mac/ContentFilterMac.mm</a></li>
<li><a href="#branchessafari6001branchSourceWebKitmacChangeLog">branches/safari-600.1-branch/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#branchessafari6001branchSourceWebKitmacWebCoreSupportWebFrameLoaderClienth">branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h</a></li>
<li><a href="#branchessafari6001branchSourceWebKitmacWebCoreSupportWebFrameLoaderClientmm">branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm</a></li>
<li><a href="#branchessafari6001branchSourceWebKitmacWebViewWebFramemm">branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrame.mm</a></li>
<li><a href="#branchessafari6001branchSourceWebKitmacWebViewWebFrameInternalh">branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrameInternal.h</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2ChangeLog">branches/safari-600.1-branch/Source/WebKit2/ChangeLog</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2SharedWebCoreArgumentCodersh">branches/safari-600.1-branch/Source/WebKit2/Shared/WebCoreArgumentCoders.h</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2SharedmacWebCoreArgumentCodersMacmm">branches/safari-600.1-branch/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2UIProcessCocoaWebPageProxyCocoamm">branches/safari-600.1-branch/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2UIProcessWebFrameProxycpp">branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.cpp</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2UIProcessWebFrameProxyh">branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.h</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2UIProcessWebPageProxycpp">branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2UIProcessWebPageProxyh">branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2UIProcessWebPageProxymessagesin">branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#branchessafari6001branchSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClienth">branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari6001branchSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/ChangeLog (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/ChangeLog        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/ChangeLog        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -1,5 +1,46 @@
</span><span class="cx"> 2014-07-22 Dana Burkart &lt;dburkart@apple.com&gt;
</span><span class="cx">     
</span><ins>+        Merge r171252.
+
+    2014-07-18  Andy Estes  &lt;aestes@apple.com&gt;
+
+            [iOS] Tapping &quot;Allow Website&quot; on a restricted page does not bring up the keypad
+            https://bugs.webkit.org/show_bug.cgi?id=135072
+            &lt;rdar://problem/17528188&gt;
+
+            Reviewed by David Kilzer.
+
+            No new tests. Content filtering is not testable from WebKit.
+
+            * WebCore.exp.in: Exported necessary ContentFilter symbols.
+            * loader/DocumentLoader.cpp:
+            (WebCore::DocumentLoader::finishedLoading): Called FrameLoaderClient::contentFilterDidBlockLoad().
+            (WebCore::DocumentLoader::responseReceived): Created a new ContentFilter.
+            (WebCore::DocumentLoader::dataReceived): Called FrameLoaderClient::contentFilterDidBlockLoad().
+            (WebCore::DocumentLoader::setContentFilterForBlockedLoad): Deleted.
+            (WebCore::DocumentLoader::handleContentFilterRequest): Deleted.
+            * loader/DocumentLoader.h:
+            * loader/FrameLoaderClient.h:
+            (WebCore::FrameLoaderClient::contentFilterDidBlockLoad):
+            * loader/PolicyChecker.cpp:
+            (WebCore::PolicyChecker::checkNavigationPolicy): Removed the check for unblock navigations, as this is now
+            handled at the WebKit layer.
+            * platform/ContentFilter.h: ContentFilter no longer needs to be RefCounted, so made various changes in order to
+            make it compatible with unique_ptr.
+            * platform/ios/ContentFilterIOS.mm:
+            (WebCore::scheme): Changed from a public member function to a static inline free function.
+            (WebCore::ContentFilter::handleUnblockRequestAndDispatchIfSuccessful): Renamed from requestUnblockAndDispatchIfSuccessful.
+            * platform/mac/ContentFilterMac.mm:
+            (WebCore::ContentFilter::ContentFilter): Added a default constructor for use during message decoding.
+            (WebCore::ContentFilter::addData): Removed calls to ref() and deref(). These were never actually needed since
+            we were dispatching the block synchronously.
+            (WebCore::ContentFilter::finishedAddingData): Ditto.
+            (WebCore::ContentFilter::encode): Encoded m_platformContentFilter to the NSKeyedArchiver if it conforms to NSSecureCoding.
+            (WebCore::ContentFilter::decode): Decoded m_platformContentFilter from the NSKeyedUnarchiver if it conforms to NSSecureCoding.
+            (WebCore::ContentFilter::create): Deleted.
+
+2014-07-22 Dana Burkart &lt;dburkart@apple.com&gt;
+    
</ins><span class="cx">         Merge r171250.
</span><span class="cx"> 
</span><span class="cx">     2014-07-18  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/WebCore.exp.in (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/WebCore.exp.in        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/WebCore.exp.in        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -3460,3 +3460,13 @@
</span><span class="cx"> #if ENABLE(VIEW_MODE_CSS_MEDIA)
</span><span class="cx"> __ZN7WebCore4Page11setViewModeENS0_8ViewModeE
</span><span class="cx"> #endif
</span><ins>+
+#if USE(CONTENT_FILTERING)
+#if PLATFORM(IOS)
+__ZN7WebCore13ContentFilter43handleUnblockRequestAndDispatchIfSuccessfulERKNS_15ResourceRequestENSt3__18functionIFvvEEE
+#endif
+__ZN7WebCore13ContentFilter6decodeEP17NSKeyedUnarchiverRS0_
+__ZN7WebCore13ContentFilterC1Ev
+__ZN7WebCore13ContentFilterD1Ev
+__ZNK7WebCore13ContentFilter6encodeEP15NSKeyedArchiver
+#endif
</ins></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.cpp (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.cpp        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.cpp        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -413,7 +413,7 @@
</span><span class="cx">             dataReceived(m_mainResource.get(), data, length);
</span><span class="cx"> 
</span><span class="cx">         if (m_contentFilter-&gt;didBlockData())
</span><del>-            setContentFilterForBlockedLoad(m_contentFilter);
</del><ins>+            frameLoader()-&gt;client().contentFilterDidBlockLoad(WTF::move(m_contentFilter));
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -664,7 +664,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(CONTENT_FILTERING)
</span><span class="cx">     if (response.url().protocolIsInHTTPFamily() &amp;&amp; ContentFilter::isEnabled())
</span><del>-        m_contentFilter = ContentFilter::create(response);
</del><ins>+        m_contentFilter = std::make_unique&lt;ContentFilter&gt;(response);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     frameLoader()-&gt;policyChecker().checkContentPolicy(m_response, [this](PolicyAction policy) {
</span><span class="lines">@@ -874,7 +874,7 @@
</span><span class="cx">         loadWasBlockedBeforeFinishing = m_contentFilter-&gt;didBlockData();
</span><span class="cx"> 
</span><span class="cx">         if (loadWasBlockedBeforeFinishing)
</span><del>-            setContentFilterForBlockedLoad(m_contentFilter);
</del><ins>+            frameLoader()-&gt;client().contentFilterDidBlockLoad(WTF::move(m_contentFilter));
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -1565,38 +1565,4 @@
</span><span class="cx">     applicationCacheHost()-&gt;stopDeferringEvents();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if USE(CONTENT_FILTERING)
-void DocumentLoader::setContentFilterForBlockedLoad(PassRefPtr&lt;ContentFilter&gt; contentFilter)
-{
-    ASSERT(!m_contentFilterForBlockedLoad);
-    ASSERT(contentFilter);
-    ASSERT(contentFilter-&gt;didBlockData());
-    m_contentFilterForBlockedLoad = contentFilter;
-}
-
-bool DocumentLoader::handleContentFilterRequest(const ResourceRequest&amp; request)
-{
-    // FIXME: Remove PLATFORM(IOS)-guard once we upstream ContentFilterIOS.mm and
-    // implement ContentFilter::requestUnblockAndDispatchIfSuccessful() for Mac.
-#if PLATFORM(IOS)
-    if (!m_contentFilterForBlockedLoad)
-        return false;
-
-    if (!request.url().protocolIs(ContentFilter::scheme()))
-        return false;
-
-    if (equalIgnoringCase(request.url().host(), &quot;unblock&quot;)) {
-        // Tell the FrameLoader to reload if the unblock is successful.
-        m_contentFilterForBlockedLoad-&gt;requestUnblockAndDispatchIfSuccessful(bind(&amp;FrameLoader::reload, &amp;(m_frame-&gt;loader()), false));
-        return true;
-    }
-
-    return false;
-#else
-    UNUSED_PARAM(request);
-    return false;
-#endif
-}
-#endif
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/loader/DocumentLoader.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -256,11 +256,6 @@
</span><span class="cx"> 
</span><span class="cx">         void checkLoadComplete();
</span><span class="cx"> 
</span><del>-#if USE(CONTENT_FILTERING)
-        void setContentFilterForBlockedLoad(PassRefPtr&lt;ContentFilter&gt;);
-        bool handleContentFilterRequest(const ResourceRequest&amp;);
-#endif
-
</del><span class="cx">         // The URL of the document resulting from this DocumentLoader.
</span><span class="cx">         URL documentURL() const;
</span><span class="cx"> 
</span><span class="lines">@@ -415,8 +410,7 @@
</span><span class="cx">         OwnPtr&lt;ApplicationCacheHost&gt; m_applicationCacheHost;
</span><span class="cx"> 
</span><span class="cx"> #if USE(CONTENT_FILTERING)
</span><del>-        RefPtr&lt;ContentFilter&gt; m_contentFilter;
-        RefPtr&lt;ContentFilter&gt; m_contentFilterForBlockedLoad;
</del><ins>+        std::unique_ptr&lt;ContentFilter&gt; m_contentFilter;
</ins><span class="cx"> #endif
</span><span class="cx">     };
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreloaderFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/loader/FrameLoaderClient.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/loader/FrameLoaderClient.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/loader/FrameLoaderClient.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -98,6 +98,10 @@
</span><span class="cx">     class QuickLookHandle;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+    class ContentFilter;
+#endif
+
</ins><span class="cx">     typedef std::function&lt;void (PolicyAction)&gt; FramePolicyFunction;
</span><span class="cx"> 
</span><span class="cx">     class FrameLoaderClient {
</span><span class="lines">@@ -331,6 +335,10 @@
</span><span class="cx"> #if USE(QUICK_LOOK)
</span><span class="cx">         virtual void didCreateQuickLookHandle(QuickLookHandle&amp;) { }
</span><span class="cx"> #endif
</span><ins>+
+#if USE(CONTENT_FILTERING)
+        virtual void contentFilterDidBlockLoad(std::unique_ptr&lt;ContentFilter&gt;) { }
+#endif
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreloaderPolicyCheckercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/loader/PolicyChecker.cpp (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/loader/PolicyChecker.cpp        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/loader/PolicyChecker.cpp        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -46,10 +46,6 @@
</span><span class="cx"> #include &quot;QuickLook.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if USE(CONTENT_FILTERING)
-#include &quot;ContentFilter.h&quot;
-#endif
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> PolicyChecker::PolicyChecker(Frame&amp; frame)
</span><span class="lines">@@ -109,15 +105,6 @@
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if USE(CONTENT_FILTERING)
-    if (DocumentLoader* documentLoader = m_frame.loader().documentLoader()) {
-        if (documentLoader-&gt;handleContentFilterRequest(request)) {
-            continueAfterNavigationPolicy(PolicyIgnore);
-            return;
-        }
-    }
-#endif
-
</del><span class="cx">     m_delegateIsDecidingNavigationPolicy = true;
</span><span class="cx">     m_frame.loader().client().dispatchDecidePolicyForNavigationAction(action, request, formState, [this](PolicyAction action) {
</span><span class="cx">         continueAfterNavigationPolicy(action);
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreplatformContentFilterh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/platform/ContentFilter.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/platform/ContentFilter.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/platform/ContentFilter.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -30,57 +30,62 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/RetainPtr.h&gt;
</span><del>-#include &lt;wtf/ThreadSafeRefCounted.h&gt;
</del><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-#include &lt;wtf/Functional.h&gt;
</del><ins>+#include &lt;functional&gt;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><del>-OBJC_CLASS NSMutableData;
</del><ins>+OBJC_CLASS NSData;
+OBJC_CLASS NSKeyedArchiver;
+OBJC_CLASS NSKeyedUnarchiver;
</ins><span class="cx"> OBJC_CLASS WebFilterEvaluator;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #define HAVE_NE_FILTER_SOURCE TARGET_OS_EMBEDDED || (!TARGET_OS_IPHONE &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 10100)
</span><span class="cx"> 
</span><span class="cx"> #if HAVE(NE_FILTER_SOURCE)
</span><del>-#import &lt;atomic&gt;
</del><span class="cx"> #import &lt;dispatch/dispatch.h&gt;
</span><span class="cx"> OBJC_CLASS NEFilterSource;
</span><ins>+OBJC_CLASS NSMutableData;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class ResourceRequest;
</ins><span class="cx"> class ResourceResponse;
</span><span class="cx"> 
</span><del>-class ContentFilter : public ThreadSafeRefCounted&lt;ContentFilter&gt; {
</del><ins>+class ContentFilter {
</ins><span class="cx"> public:
</span><del>-    static PassRefPtr&lt;ContentFilter&gt; create(const ResourceResponse&amp;);
</del><span class="cx">     static bool isEnabled();
</span><span class="cx"> 
</span><del>-    virtual ~ContentFilter();
</del><ins>+    explicit ContentFilter(const ResourceResponse&amp;);
+    ~ContentFilter();
</ins><span class="cx"> 
</span><span class="cx">     void addData(const char* data, int length);
</span><span class="cx">     void finishedAddingData();
</span><span class="cx">     bool needsMoreData() const;
</span><span class="cx">     bool didBlockData() const;
</span><span class="cx">     const char* getReplacementData(int&amp; length) const;
</span><del>-    
</del><ins>+
+#if PLATFORM(COCOA)
+    ContentFilter();
+    void encode(NSKeyedArchiver *) const;
+    static bool decode(NSKeyedUnarchiver *, ContentFilter&amp;);
+#endif
+
</ins><span class="cx"> #if PLATFORM(IOS)
</span><del>-    static const char* scheme();
-    void requestUnblockAndDispatchIfSuccessful(Function&lt;void()&gt;);
</del><ins>+    bool handleUnblockRequestAndDispatchIfSuccessful(const ResourceRequest&amp;, std::function&lt;void()&gt;);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    explicit ContentFilter(const ResourceResponse&amp;);
-    
</del><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     RetainPtr&lt;WebFilterEvaluator&gt; m_platformContentFilter;
</span><span class="cx">     RetainPtr&lt;NSData&gt; m_replacementData;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if HAVE(NE_FILTER_SOURCE)
</span><del>-    std::atomic&lt;long&gt; m_neFilterSourceStatus;
</del><ins>+    long m_neFilterSourceStatus;
</ins><span class="cx">     RetainPtr&lt;NEFilterSource&gt; m_neFilterSource;
</span><span class="cx">     dispatch_queue_t m_neFilterSourceQueue;
</span><span class="cx">     RetainPtr&lt;NSMutableData&gt; m_originalData;
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreplatformiosContentFilterIOSmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/platform/ios/ContentFilterIOS.mm (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/platform/ios/ContentFilterIOS.mm        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/platform/ios/ContentFilterIOS.mm        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS) &amp;&amp; USE(CONTENT_FILTERING)
</span><span class="cx"> 
</span><ins>+#import &quot;ResourceRequest.h&quot;
</ins><span class="cx"> #import &quot;WebCoreThreadRun.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #if defined(__has_include) &amp;&amp; __has_include(&lt;WebContentAnalysis/WebFilterEvaluator.h&gt;)
</span><span class="lines">@@ -40,21 +41,25 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-const char* ContentFilter::scheme()
</del><ins>+static inline const char* scheme()
</ins><span class="cx"> {
</span><span class="cx">     static const char contentFilterScheme[] = &quot;x-apple-content-filter&quot;;
</span><span class="cx">     return contentFilterScheme;
</span><span class="cx"> }
</span><del>-    
-void ContentFilter::requestUnblockAndDispatchIfSuccessful(Function&lt;void()&gt; function)
</del><ins>+
+bool ContentFilter::handleUnblockRequestAndDispatchIfSuccessful(const ResourceRequest&amp; request, std::function&lt;void()&gt; function)
</ins><span class="cx"> {
</span><ins>+    if (!request.url().protocolIs(scheme()))
+        return false;
+
+    if (!equalIgnoringCase(request.url().host(), &quot;unblock&quot;))
+        return false;
+
</ins><span class="cx">     [m_platformContentFilter unblockWithCompletion:^(BOOL unblocked, NSError *) {
</span><del>-        if (unblocked) {
-            WebThreadRun(^{
-                function();
-            });
-        }
</del><ins>+        if (unblocked)
+            function();
</ins><span class="cx">     }];
</span><ins>+    return true;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebCoreplatformmacContentFilterMacmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebCore/platform/mac/ContentFilterMac.mm (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebCore/platform/mac/ContentFilterMac.mm        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebCore/platform/mac/ContentFilterMac.mm        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -85,9 +85,12 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;ContentFilter&gt; ContentFilter::create(const ResourceResponse&amp; response)
</del><ins>+ContentFilter::ContentFilter()
+#if HAVE(NE_FILTER_SOURCE)
+    : m_neFilterSourceStatus(NEFilterSourceStatusNeedsMoreData)
+    , m_neFilterSourceQueue(0)
+#endif
</ins><span class="cx"> {
</span><del>-    return adoptRef(new ContentFilter(response));
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ContentFilter::ContentFilter(const ResourceResponse&amp; response)
</span><span class="lines">@@ -150,11 +153,9 @@
</span><span class="cx">     // additional copy.
</span><span class="cx">     [m_originalData appendBytes:data length:length];
</span><span class="cx"> 
</span><del>-    ref();
</del><span class="cx">     dispatch_semaphore_t neFilterSourceSemaphore = dispatch_semaphore_create(0);
</span><span class="cx">     [m_neFilterSource addData:[NSData dataWithBytes:(void*)data length:length] withCompletionQueue:m_neFilterSourceQueue completionHandler:^(NEFilterSourceStatus status, NSData *) {
</span><span class="cx">         m_neFilterSourceStatus = status;
</span><del>-        deref();
</del><span class="cx">         dispatch_semaphore_signal(neFilterSourceSemaphore);
</span><span class="cx">     }];
</span><span class="cx"> 
</span><span class="lines">@@ -179,11 +180,9 @@
</span><span class="cx">     if (!m_neFilterSource)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    ref();
</del><span class="cx">     dispatch_semaphore_t neFilterSourceSemaphore = dispatch_semaphore_create(0);
</span><span class="cx">     [m_neFilterSource dataCompleteWithCompletionQueue:m_neFilterSourceQueue completionHandler:^(NEFilterSourceStatus status, NSData *) {
</span><span class="cx">         m_neFilterSourceStatus = status;
</span><del>-        deref();
</del><span class="cx">         dispatch_semaphore_signal(neFilterSourceSemaphore);
</span><span class="cx">     }];
</span><span class="cx"> 
</span><span class="lines">@@ -234,6 +233,27 @@
</span><span class="cx">     return static_cast&lt;const char*&gt;([originalData bytes]);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static NSString * const platformContentFilterKey = @&quot;platformContentFilter&quot;;
+
+void ContentFilter::encode(NSKeyedArchiver *archiver) const
+{
+    if ([getWebFilterEvaluatorClass() conformsToProtocol:@protocol(NSSecureCoding)])
+        [archiver encodeObject:m_platformContentFilter.get() forKey:platformContentFilterKey];
+}
+
+bool ContentFilter::decode(NSKeyedUnarchiver *unarchiver, ContentFilter&amp; contentFilter)
+{
+    @try {
+        if ([getWebFilterEvaluatorClass() conformsToProtocol:@protocol(NSSecureCoding)])
+            contentFilter.m_platformContentFilter = (WebFilterEvaluator *)[unarchiver decodeObjectOfClass:getWebFilterEvaluatorClass() forKey:platformContentFilterKey];
+        return true;
+    } @catch (NSException *exception) {
+        LOG_ERROR(&quot;The platform content filter being decoded is not a WebFilterEvaluator.&quot;);
+    }
+
+    return false;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // USE(CONTENT_FILTERING)
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit/mac/ChangeLog (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit/mac/ChangeLog        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit/mac/ChangeLog        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -1,5 +1,27 @@
</span><span class="cx"> 2014-07-22 Dana Burkart &lt;dburkart@apple.com&gt;
</span><span class="cx">     
</span><ins>+        Merge r171252.
+
+    2014-07-18  Andy Estes  &lt;aestes@apple.com&gt;
+
+            [iOS] Tapping &quot;Allow Website&quot; on a restricted page does not bring up the keypad
+            https://bugs.webkit.org/show_bug.cgi?id=135072
+            &lt;rdar://problem/17528188&gt;
+
+            Reviewed by David Kilzer.
+
+            * WebCoreSupport/WebFrameLoaderClient.h: Override contentFilterDidBlockLoad().
+            * WebCoreSupport/WebFrameLoaderClient.mm:
+            (WebFrameLoaderClient::dispatchDidStartProvisionalLoad): Reset contentFilterForBlockedLoad to nullptr.
+            (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Check if this is navigation represents an
+            unblock request and ignore if so.
+            * WebView/WebFrame.mm:
+            (-[WebFrame _contentFilterDidHandleNavigationAction:]): Called ContentFilter::handleUnblockRequestAndDispatchIfSuccessful().
+            If the unblock is successful, reload the main frame.
+            * WebView/WebFrameInternal.h:
+
+2014-07-22 Dana Burkart &lt;dburkart@apple.com&gt;
+    
</ins><span class="cx">         Merge r171195.
</span><span class="cx"> 
</span><span class="cx">     2014-07-17  Timothy Hatcher  &lt;timothy@apple.com&gt;
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKitmacWebCoreSupportWebFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -235,6 +235,8 @@
</span><span class="cx">     virtual void didCreateQuickLookHandle(WebCore::QuickLookHandle&amp;) override;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+    virtual void contentFilterDidBlockLoad(std::unique_ptr&lt;WebCore::ContentFilter&gt;) override;
+
</ins><span class="cx">     RetainPtr&lt;WebFrame&gt; m_webFrame;
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;WebFramePolicyListener&gt; m_policyListener;
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKitmacWebCoreSupportWebFrameLoaderClientmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -667,6 +667,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_webFrame-&gt;_private-&gt;provisionalURL);
</span><span class="cx">     m_webFrame-&gt;_private-&gt;provisionalURL = core(m_webFrame.get())-&gt;loader().provisionalDocumentLoader()-&gt;url().string();
</span><ins>+    m_webFrame-&gt;_private-&gt;contentFilterForBlockedLoad = nullptr;
</ins><span class="cx"> 
</span><span class="cx">     WebView *webView = getWebView(m_webFrame.get());
</span><span class="cx"> #if !PLATFORM(IOS)
</span><span class="lines">@@ -881,6 +882,11 @@
</span><span class="cx"> 
</span><span class="cx"> void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction&amp; action, const ResourceRequest&amp; request, PassRefPtr&lt;FormState&gt; formState, FramePolicyFunction function)
</span><span class="cx"> {
</span><ins>+    if ([m_webFrame _contentFilterDidHandleNavigationAction:request]) {
+        function(PolicyIgnore);
+        return;
+    }
+
</ins><span class="cx">     WebView *webView = getWebView(m_webFrame.get());
</span><span class="cx">     [[webView _policyDelegateForwarder] webView:webView
</span><span class="cx">                 decidePolicyForNavigationAction:actionDictionary(action, formState)
</span><span class="lines">@@ -2238,6 +2244,11 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+void WebFrameLoaderClient::contentFilterDidBlockLoad(std::unique_ptr&lt;WebCore::ContentFilter&gt; contentFilter)
+{
+    m_webFrame-&gt;_private-&gt;contentFilterForBlockedLoad = WTF::move(contentFilter);
+}
+
</ins><span class="cx"> @implementation WebFramePolicyListener
</span><span class="cx"> 
</span><span class="cx"> + (void)initialize
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKitmacWebViewWebFramemm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrame.mm (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrame.mm        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrame.mm        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -1001,6 +1001,22 @@
</span><span class="cx">     _private-&gt;coreFrame-&gt;loader().documentLoader()-&gt;commitData((const char *)[data bytes], [data length]);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (BOOL)_contentFilterDidHandleNavigationAction:(const WebCore::ResourceRequest &amp;)request
+{
+#if PLATFORM(IOS)
+    if (ContentFilter *contentFilter = _private-&gt;contentFilterForBlockedLoad.get()) {
+        RetainPtr&lt;WebFrame&gt; retainedMainFrame = [[self webView] mainFrame];
+        return contentFilter-&gt;handleUnblockRequestAndDispatchIfSuccessful(request, [retainedMainFrame] {
+            WebThreadRun(^ {
+                [retainedMainFrame reload];
+            });
+        });
+    }
+#endif
+
+    return NO;
+}
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> @implementation WebFrame (WebPrivate)
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKitmacWebViewWebFrameInternalh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrameInternal.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrameInternal.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit/mac/WebView/WebFrameInternal.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> 
</span><span class="cx"> #import &quot;WebFramePrivate.h&quot;
</span><span class="cx"> #import &quot;WebPreferencesPrivate.h&quot;
</span><ins>+#import &lt;WebCore/ContentFilter.h&gt;
</ins><span class="cx"> #import &lt;WebCore/EditAction.h&gt;
</span><span class="cx"> #import &lt;WebCore/FrameLoaderTypes.h&gt;
</span><span class="cx"> #import &lt;WebCore/FrameSelection.h&gt;
</span><span class="lines">@@ -90,7 +91,8 @@
</span><span class="cx">     RetainPtr&lt;NSString&gt; provisionalURL;
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     BOOL isCommitting;
</span><del>-#endif    
</del><ins>+#endif
+    std::unique_ptr&lt;WebCore::ContentFilter&gt; contentFilterForBlockedLoad;
</ins><span class="cx"> }
</span><span class="cx"> @end
</span><span class="cx"> 
</span><span class="lines">@@ -182,6 +184,8 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)_commitData:(NSData *)data;
</span><span class="cx"> 
</span><ins>+- (BOOL)_contentFilterDidHandleNavigationAction:(const WebCore::ResourceRequest&amp;)request;
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> @interface NSObject (WebInternalFrameLoadDelegate)
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/ChangeLog (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/ChangeLog        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/ChangeLog        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -1,5 +1,38 @@
</span><span class="cx"> 2014-07-22 Dana Burkart &lt;dburkart@apple.com&gt;
</span><span class="cx">     
</span><ins>+        Merge r171252.
+
+    2014-07-18  Andy Estes  &lt;aestes@apple.com&gt;
+
+            [iOS] Tapping &quot;Allow Website&quot; on a restricted page does not bring up the keypad
+            https://bugs.webkit.org/show_bug.cgi?id=135072
+            &lt;rdar://problem/17528188&gt;
+
+            Reviewed by David Kilzer.
+
+            * Shared/WebCoreArgumentCoders.h: Declared an ArgumentCoder for WebCore::ContentFilter.
+            * Shared/mac/WebCoreArgumentCodersMac.mm:
+            (IPC::ArgumentCoder&lt;ContentFilter&gt;::encode): Encoded the ContentFilter using a NSKeyedArchiver.
+            (IPC::ArgumentCoder&lt;ContentFilter&gt;::decode): Decoded the ContentFilter using a NSKeyedUnarchiver.
+            * UIProcess/Cocoa/WebPageProxyCocoa.mm:
+            (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame): Called WebFrameProxy::setContentFilterForBlockedLoad().
+            * UIProcess/WebFrameProxy.cpp:
+            (WebKit::WebFrameProxy::didStartProvisionalLoad): Reset m_contentFilterForBlockedLoad to nullptr.
+            (WebKit::WebFrameProxy::contentFilterDidHandleNavigationAction): Called ContentFilter::handleUnblockRequestAndDispatchIfSuccessful().
+            If the unblock is successful, reload the WebPageProxy.
+            * UIProcess/WebFrameProxy.h:
+            (WebKit::WebFrameProxy::setContentFilterForBlockedLoad):
+            * UIProcess/WebPageProxy.cpp:
+            (WebKit::WebPageProxy::decidePolicyForNavigationAction): Check if this is navigation represents an unblock
+            request and ignore if so.
+            * UIProcess/WebPageProxy.h:
+            * UIProcess/WebPageProxy.messages.in: Defined ContentFilterDidBlockLoadForFrame.
+            * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+            (WebKit::WebFrameLoaderClient::contentFilterDidBlockLoad): Sent ContentFilterDidBlockLoadForFrame to the WebPageProxy.
+            * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
+
+2014-07-22 Dana Burkart &lt;dburkart@apple.com&gt;
+    
</ins><span class="cx">         Merge r171250.
</span><span class="cx"> 
</span><span class="cx"> 2014-07-18  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2SharedWebCoreArgumentCodersh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/Shared/WebCoreArgumentCoders.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/Shared/WebCoreArgumentCoders.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/Shared/WebCoreArgumentCoders.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -105,6 +105,12 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+namespace WebCore {
+class ContentFilter;
+}
+#endif
+
</ins><span class="cx"> namespace IPC {
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct ArgumentCoder&lt;WebCore::AffineTransform&gt; {
</span><span class="lines">@@ -436,6 +442,13 @@
</span><span class="cx">     static bool decode(ArgumentDecoder&amp;, WebCore::BlobPart&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+template&lt;&gt; struct ArgumentCoder&lt;WebCore::ContentFilter&gt; {
+    static void encode(ArgumentEncoder&amp;, const WebCore::ContentFilter&amp;);
+    static bool decode(ArgumentDecoder&amp;, WebCore::ContentFilter&amp;);
+};
+#endif
+
</ins><span class="cx"> } // namespace IPC
</span><span class="cx"> 
</span><span class="cx"> #endif // WebCoreArgumentCoders_h
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2SharedmacWebCoreArgumentCodersMacmm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #import &quot;DataReference.h&quot;
</span><span class="cx"> #import &quot;WebKitSystemInterface.h&quot;
</span><span class="cx"> #import &lt;WebCore/CertificateInfo.h&gt;
</span><ins>+#import &lt;WebCore/ContentFilter.h&gt;
</ins><span class="cx"> #import &lt;WebCore/KeyboardEvent.h&gt;
</span><span class="cx"> #import &lt;WebCore/ResourceError.h&gt;
</span><span class="cx"> #import &lt;WebCore/ResourceRequest.h&gt;
</span><span class="lines">@@ -300,4 +301,29 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ArgumentCoder&lt;ContentFilter&gt;::encode(ArgumentEncoder&amp; encoder, const ContentFilter&amp; contentFilter)
+{
+    RetainPtr&lt;NSMutableData&gt; data = adoptNS([[NSMutableData alloc] init]);
+    RetainPtr&lt;NSKeyedArchiver&gt; archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
+    [archiver setRequiresSecureCoding:YES];
+    contentFilter.encode(archiver.get());
+    [archiver finishEncoding];
+    IPC::encode(encoder, reinterpret_cast&lt;CFDataRef&gt;(data.get()));
+}
+
+bool ArgumentCoder&lt;ContentFilter&gt;::decode(ArgumentDecoder&amp; decoder, ContentFilter&amp; contentFilter)
+{
+    RetainPtr&lt;CFDataRef&gt; data;
+    if (!IPC::decode(decoder, data))
+        return false;
+
+    RetainPtr&lt;NSKeyedUnarchiver&gt; unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:(NSData *)data.get()]);
+    [unarchiver setRequiresSecureCoding:YES];
+    if (!ContentFilter::decode(unarchiver.get(), contentFilter))
+        return false;
+
+    [unarchiver finishDecoding];
+    return true;
+}
+
</ins><span class="cx"> } // namespace IPC
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2UIProcessCocoaWebPageProxyCocoamm"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -72,4 +72,10 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPageProxy::contentFilterDidBlockLoadForFrame(const WebCore::ContentFilter&amp; contentFilter, uint64_t frameID)
+{
+    if (WebFrameProxy* frame = m_process-&gt;webFrame(frameID))
+        frame-&gt;setContentFilterForBlockedLoad(std::make_unique&lt;WebCore::ContentFilter&gt;(contentFilter));
</ins><span class="cx"> }
</span><ins>+
+}
</ins></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2UIProcessWebFrameProxycpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.cpp (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -127,6 +127,9 @@
</span><span class="cx"> void WebFrameProxy::didStartProvisionalLoad(const String&amp; url)
</span><span class="cx"> {
</span><span class="cx">     m_frameLoadState.didStartProvisionalLoad(url);
</span><ins>+#if USE(CONTENT_FILTERING)
+    m_contentFilterForBlockedLoad = nullptr;
+#endif
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebFrameProxy::didReceiveServerRedirectForProvisionalLoad(const String&amp; url)
</span><span class="lines">@@ -230,4 +233,20 @@
</span><span class="cx">     m_frameLoadState.setUnreachableURL(unreachableURL);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+bool WebFrameProxy::contentFilterDidHandleNavigationAction(const WebCore::ResourceRequest&amp; request)
+{
+#if PLATFORM(IOS)
+    if (m_contentFilterForBlockedLoad) {
+        RefPtr&lt;WebPageProxy&gt; retainedPage = m_page;
+        return m_contentFilterForBlockedLoad-&gt;handleUnblockRequestAndDispatchIfSuccessful(request, [retainedPage] {
+            retainedPage-&gt;reload(false);
+        });
+    }
+#endif
+
+    return false;
+}
+#endif
+
</ins><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2UIProcessWebFrameProxyh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebFrameProxy.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -35,6 +35,10 @@
</span><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+#include &lt;WebCore/ContentFilter.h&gt;
+#endif
+
</ins><span class="cx"> namespace IPC {
</span><span class="cx">     class ArgumentDecoder;
</span><span class="cx">     class Connection;
</span><span class="lines">@@ -113,6 +117,11 @@
</span><span class="cx">     WebFramePolicyListenerProxy* setUpPolicyListenerProxy(uint64_t listenerID);
</span><span class="cx">     WebFormSubmissionListenerProxy* setUpFormSubmissionListenerProxy(uint64_t listenerID);
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+    void setContentFilterForBlockedLoad(std::unique_ptr&lt;WebCore::ContentFilter&gt; contentFilter) { m_contentFilterForBlockedLoad = WTF::move(contentFilter); }
+    bool contentFilterDidHandleNavigationAction(const WebCore::ResourceRequest&amp;);
+#endif
+
</ins><span class="cx"> private:
</span><span class="cx">     WebFrameProxy(WebPageProxy* page, uint64_t frameID);
</span><span class="cx"> 
</span><span class="lines">@@ -126,6 +135,10 @@
</span><span class="cx">     RefPtr&lt;WebCertificateInfo&gt; m_certificateInfo;
</span><span class="cx">     RefPtr&lt;WebFrameListenerProxy&gt; m_activeListener;
</span><span class="cx">     uint64_t m_frameID;
</span><ins>+
+#if USE(CONTENT_FILTERING)
+    std::unique_ptr&lt;WebCore::ContentFilter&gt; m_contentFilterForBlockedLoad;
+#endif
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.cpp (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.cpp        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.cpp        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -2854,6 +2854,14 @@
</span><span class="cx">         listener-&gt;setNavigationID(newNavigationID);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+    if (frame-&gt;contentFilterDidHandleNavigationAction(request)) {
+        receivedPolicyAction = true;
+        policyAction = PolicyIgnore;
+        return;
+    }
+#endif
+
</ins><span class="cx">     ASSERT(!m_inDecidePolicyForNavigationAction);
</span><span class="cx"> 
</span><span class="cx">     m_inDecidePolicyForNavigationAction = true;
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -1271,6 +1271,10 @@
</span><span class="cx">     void didFinishLoadForQuickLookDocumentInMainFrame(const QuickLookDocumentData&amp;);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+    void contentFilterDidBlockLoadForFrame(const WebCore::ContentFilter&amp;, uint64_t frameID);
+#endif
+
</ins><span class="cx">     uint64_t generateNavigationID();
</span><span class="cx"> 
</span><span class="cx">     WebPreferencesStore preferencesStore() const;
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.messages.in (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -405,4 +405,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     WillChangeCurrentHistoryItem()
</span><ins>+
+#if USE(CONTENT_FILTERING)
+    ContentFilterDidBlockLoadForFrame(WebCore::ContentFilter contentFilter, uint64_t frameID)
+#endif
</ins><span class="cx"> }
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -1630,4 +1630,12 @@
</span><span class="cx">     webPage-&gt;willChangeCurrentHistoryItem();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+void WebFrameLoaderClient::contentFilterDidBlockLoad(std::unique_ptr&lt;WebCore::ContentFilter&gt; contentFilter)
+{
+    if (WebPage* webPage = m_frame-&gt;page())
+        webPage-&gt;send(Messages::WebPageProxy::ContentFilterDidBlockLoadForFrame(*contentFilter, m_frame-&gt;frameID()));
+}
+#endif
+
</ins><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="branchessafari6001branchSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h (171422 => 171423)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h        2014-07-23 06:09:23 UTC (rev 171422)
+++ branches/safari-600.1-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h        2014-07-23 06:12:55 UTC (rev 171423)
</span><span class="lines">@@ -228,6 +228,10 @@
</span><span class="cx">     virtual void didCreateQuickLookHandle(WebCore::QuickLookHandle&amp;) override;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if USE(CONTENT_FILTERING)
+    virtual void contentFilterDidBlockLoad(std::unique_ptr&lt;WebCore::ContentFilter&gt;) override;
+#endif
+
</ins><span class="cx">     WebFrame* m_frame;
</span><span class="cx">     RefPtr&lt;PluginView&gt; m_pluginView;
</span><span class="cx">     bool m_hasSentResponseToPluginView;
</span></span></pre>
</div>
</div>

</body>
</html>