<!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 <dburkart@apple.com>
</span><span class="cx">
</span><ins>+ Merge r171252.
+
+ 2014-07-18 Andy Estes <aestes@apple.com>
+
+ [iOS] Tapping "Allow Website" on a restricted page does not bring up the keypad
+ https://bugs.webkit.org/show_bug.cgi?id=135072
+ <rdar://problem/17528188>
+
+ 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 <dburkart@apple.com>
+
</ins><span class="cx"> Merge r171250.
</span><span class="cx">
</span><span class="cx"> 2014-07-18 Simon Fraser <simon.fraser@apple.com>
</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->didBlockData())
</span><del>- setContentFilterForBlockedLoad(m_contentFilter);
</del><ins>+ frameLoader()->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() && ContentFilter::isEnabled())
</span><del>- m_contentFilter = ContentFilter::create(response);
</del><ins>+ m_contentFilter = std::make_unique<ContentFilter>(response);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> frameLoader()->policyChecker().checkContentPolicy(m_response, [this](PolicyAction policy) {
</span><span class="lines">@@ -874,7 +874,7 @@
</span><span class="cx"> loadWasBlockedBeforeFinishing = m_contentFilter->didBlockData();
</span><span class="cx">
</span><span class="cx"> if (loadWasBlockedBeforeFinishing)
</span><del>- setContentFilterForBlockedLoad(m_contentFilter);
</del><ins>+ frameLoader()->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()->stopDeferringEvents();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if USE(CONTENT_FILTERING)
-void DocumentLoader::setContentFilterForBlockedLoad(PassRefPtr<ContentFilter> contentFilter)
-{
- ASSERT(!m_contentFilterForBlockedLoad);
- ASSERT(contentFilter);
- ASSERT(contentFilter->didBlockData());
- m_contentFilterForBlockedLoad = contentFilter;
-}
-
-bool DocumentLoader::handleContentFilterRequest(const ResourceRequest& 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(), "unblock")) {
- // Tell the FrameLoader to reload if the unblock is successful.
- m_contentFilterForBlockedLoad->requestUnblockAndDispatchIfSuccessful(bind(&FrameLoader::reload, &(m_frame->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<ContentFilter>);
- bool handleContentFilterRequest(const ResourceRequest&);
-#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<ApplicationCacheHost> m_applicationCacheHost;
</span><span class="cx">
</span><span class="cx"> #if USE(CONTENT_FILTERING)
</span><del>- RefPtr<ContentFilter> m_contentFilter;
- RefPtr<ContentFilter> m_contentFilterForBlockedLoad;
</del><ins>+ std::unique_ptr<ContentFilter> 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<void (PolicyAction)> 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&) { }
</span><span class="cx"> #endif
</span><ins>+
+#if USE(CONTENT_FILTERING)
+ virtual void contentFilterDidBlockLoad(std::unique_ptr<ContentFilter>) { }
+#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 "QuickLook.h"
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if USE(CONTENT_FILTERING)
-#include "ContentFilter.h"
-#endif
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> PolicyChecker::PolicyChecker(Frame& 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->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 <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/RetainPtr.h>
</span><del>-#include <wtf/ThreadSafeRefCounted.h>
</del><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-#include <wtf/Functional.h>
</del><ins>+#include <functional>
</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 && __MAC_OS_X_VERSION_MIN_REQUIRED >= 10100)
</span><span class="cx">
</span><span class="cx"> #if HAVE(NE_FILTER_SOURCE)
</span><del>-#import <atomic>
</del><span class="cx"> #import <dispatch/dispatch.h>
</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<ContentFilter> {
</del><ins>+class ContentFilter {
</ins><span class="cx"> public:
</span><del>- static PassRefPtr<ContentFilter> create(const ResourceResponse&);
</del><span class="cx"> static bool isEnabled();
</span><span class="cx">
</span><del>- virtual ~ContentFilter();
</del><ins>+ explicit ContentFilter(const ResourceResponse&);
+ ~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& length) const;
</span><del>-
</del><ins>+
+#if PLATFORM(COCOA)
+ ContentFilter();
+ void encode(NSKeyedArchiver *) const;
+ static bool decode(NSKeyedUnarchiver *, ContentFilter&);
+#endif
+
</ins><span class="cx"> #if PLATFORM(IOS)
</span><del>- static const char* scheme();
- void requestUnblockAndDispatchIfSuccessful(Function<void()>);
</del><ins>+ bool handleUnblockRequestAndDispatchIfSuccessful(const ResourceRequest&, std::function<void()>);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- explicit ContentFilter(const ResourceResponse&);
-
</del><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> RetainPtr<WebFilterEvaluator> m_platformContentFilter;
</span><span class="cx"> RetainPtr<NSData> m_replacementData;
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if HAVE(NE_FILTER_SOURCE)
</span><del>- std::atomic<long> m_neFilterSourceStatus;
</del><ins>+ long m_neFilterSourceStatus;
</ins><span class="cx"> RetainPtr<NEFilterSource> m_neFilterSource;
</span><span class="cx"> dispatch_queue_t m_neFilterSourceQueue;
</span><span class="cx"> RetainPtr<NSMutableData> 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) && USE(CONTENT_FILTERING)
</span><span class="cx">
</span><ins>+#import "ResourceRequest.h"
</ins><span class="cx"> #import "WebCoreThreadRun.h"
</span><span class="cx">
</span><span class="cx"> #if defined(__has_include) && __has_include(<WebContentAnalysis/WebFilterEvaluator.h>)
</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[] = "x-apple-content-filter";
</span><span class="cx"> return contentFilterScheme;
</span><span class="cx"> }
</span><del>-
-void ContentFilter::requestUnblockAndDispatchIfSuccessful(Function<void()> function)
</del><ins>+
+bool ContentFilter::handleUnblockRequestAndDispatchIfSuccessful(const ResourceRequest& request, std::function<void()> function)
</ins><span class="cx"> {
</span><ins>+ if (!request.url().protocolIs(scheme()))
+ return false;
+
+ if (!equalIgnoringCase(request.url().host(), "unblock"))
+ 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<ContentFilter> ContentFilter::create(const ResourceResponse& 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& 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<const char*>([originalData bytes]);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+static NSString * const platformContentFilterKey = @"platformContentFilter";
+
+void ContentFilter::encode(NSKeyedArchiver *archiver) const
+{
+ if ([getWebFilterEvaluatorClass() conformsToProtocol:@protocol(NSSecureCoding)])
+ [archiver encodeObject:m_platformContentFilter.get() forKey:platformContentFilterKey];
+}
+
+bool ContentFilter::decode(NSKeyedUnarchiver *unarchiver, ContentFilter& contentFilter)
+{
+ @try {
+ if ([getWebFilterEvaluatorClass() conformsToProtocol:@protocol(NSSecureCoding)])
+ contentFilter.m_platformContentFilter = (WebFilterEvaluator *)[unarchiver decodeObjectOfClass:getWebFilterEvaluatorClass() forKey:platformContentFilterKey];
+ return true;
+ } @catch (NSException *exception) {
+ LOG_ERROR("The platform content filter being decoded is not a WebFilterEvaluator.");
+ }
+
+ 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 <dburkart@apple.com>
</span><span class="cx">
</span><ins>+ Merge r171252.
+
+ 2014-07-18 Andy Estes <aestes@apple.com>
+
+ [iOS] Tapping "Allow Website" on a restricted page does not bring up the keypad
+ https://bugs.webkit.org/show_bug.cgi?id=135072
+ <rdar://problem/17528188>
+
+ 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 <dburkart@apple.com>
+
</ins><span class="cx"> Merge r171195.
</span><span class="cx">
</span><span class="cx"> 2014-07-17 Timothy Hatcher <timothy@apple.com>
</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&) override;
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+ virtual void contentFilterDidBlockLoad(std::unique_ptr<WebCore::ContentFilter>) override;
+
</ins><span class="cx"> RetainPtr<WebFrame> m_webFrame;
</span><span class="cx">
</span><span class="cx"> RetainPtr<WebFramePolicyListener> 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->_private->provisionalURL);
</span><span class="cx"> m_webFrame->_private->provisionalURL = core(m_webFrame.get())->loader().provisionalDocumentLoader()->url().string();
</span><ins>+ m_webFrame->_private->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& action, const ResourceRequest& request, PassRefPtr<FormState> 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<WebCore::ContentFilter> contentFilter)
+{
+ m_webFrame->_private->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->coreFrame->loader().documentLoader()->commitData((const char *)[data bytes], [data length]);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+- (BOOL)_contentFilterDidHandleNavigationAction:(const WebCore::ResourceRequest &)request
+{
+#if PLATFORM(IOS)
+ if (ContentFilter *contentFilter = _private->contentFilterForBlockedLoad.get()) {
+ RetainPtr<WebFrame> retainedMainFrame = [[self webView] mainFrame];
+ return contentFilter->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 "WebFramePrivate.h"
</span><span class="cx"> #import "WebPreferencesPrivate.h"
</span><ins>+#import <WebCore/ContentFilter.h>
</ins><span class="cx"> #import <WebCore/EditAction.h>
</span><span class="cx"> #import <WebCore/FrameLoaderTypes.h>
</span><span class="cx"> #import <WebCore/FrameSelection.h>
</span><span class="lines">@@ -90,7 +91,8 @@
</span><span class="cx"> RetainPtr<NSString> provisionalURL;
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> BOOL isCommitting;
</span><del>-#endif
</del><ins>+#endif
+ std::unique_ptr<WebCore::ContentFilter> 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&)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 <dburkart@apple.com>
</span><span class="cx">
</span><ins>+ Merge r171252.
+
+ 2014-07-18 Andy Estes <aestes@apple.com>
+
+ [iOS] Tapping "Allow Website" on a restricted page does not bring up the keypad
+ https://bugs.webkit.org/show_bug.cgi?id=135072
+ <rdar://problem/17528188>
+
+ Reviewed by David Kilzer.
+
+ * Shared/WebCoreArgumentCoders.h: Declared an ArgumentCoder for WebCore::ContentFilter.
+ * Shared/mac/WebCoreArgumentCodersMac.mm:
+ (IPC::ArgumentCoder<ContentFilter>::encode): Encoded the ContentFilter using a NSKeyedArchiver.
+ (IPC::ArgumentCoder<ContentFilter>::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 <dburkart@apple.com>
+
</ins><span class="cx"> Merge r171250.
</span><span class="cx">
</span><span class="cx"> 2014-07-18 Simon Fraser <simon.fraser@apple.com>
</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<> struct ArgumentCoder<WebCore::AffineTransform> {
</span><span class="lines">@@ -436,6 +442,13 @@
</span><span class="cx"> static bool decode(ArgumentDecoder&, WebCore::BlobPart&);
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+#if USE(CONTENT_FILTERING)
+template<> struct ArgumentCoder<WebCore::ContentFilter> {
+ static void encode(ArgumentEncoder&, const WebCore::ContentFilter&);
+ static bool decode(ArgumentDecoder&, WebCore::ContentFilter&);
+};
+#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 "DataReference.h"
</span><span class="cx"> #import "WebKitSystemInterface.h"
</span><span class="cx"> #import <WebCore/CertificateInfo.h>
</span><ins>+#import <WebCore/ContentFilter.h>
</ins><span class="cx"> #import <WebCore/KeyboardEvent.h>
</span><span class="cx"> #import <WebCore/ResourceError.h>
</span><span class="cx"> #import <WebCore/ResourceRequest.h>
</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<ContentFilter>::encode(ArgumentEncoder& encoder, const ContentFilter& contentFilter)
+{
+ RetainPtr<NSMutableData> data = adoptNS([[NSMutableData alloc] init]);
+ RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
+ [archiver setRequiresSecureCoding:YES];
+ contentFilter.encode(archiver.get());
+ [archiver finishEncoding];
+ IPC::encode(encoder, reinterpret_cast<CFDataRef>(data.get()));
+}
+
+bool ArgumentCoder<ContentFilter>::decode(ArgumentDecoder& decoder, ContentFilter& contentFilter)
+{
+ RetainPtr<CFDataRef> data;
+ if (!IPC::decode(decoder, data))
+ return false;
+
+ RetainPtr<NSKeyedUnarchiver> 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& contentFilter, uint64_t frameID)
+{
+ if (WebFrameProxy* frame = m_process->webFrame(frameID))
+ frame->setContentFilterForBlockedLoad(std::make_unique<WebCore::ContentFilter>(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& 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& 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& request)
+{
+#if PLATFORM(IOS)
+ if (m_contentFilterForBlockedLoad) {
+ RefPtr<WebPageProxy> retainedPage = m_page;
+ return m_contentFilterForBlockedLoad->handleUnblockRequestAndDispatchIfSuccessful(request, [retainedPage] {
+ retainedPage->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 <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><ins>+#if USE(CONTENT_FILTERING)
+#include <WebCore/ContentFilter.h>
+#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<WebCore::ContentFilter> contentFilter) { m_contentFilterForBlockedLoad = WTF::move(contentFilter); }
+ bool contentFilterDidHandleNavigationAction(const WebCore::ResourceRequest&);
+#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<WebCertificateInfo> m_certificateInfo;
</span><span class="cx"> RefPtr<WebFrameListenerProxy> m_activeListener;
</span><span class="cx"> uint64_t m_frameID;
</span><ins>+
+#if USE(CONTENT_FILTERING)
+ std::unique_ptr<WebCore::ContentFilter> 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->setNavigationID(newNavigationID);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if USE(CONTENT_FILTERING)
+ if (frame->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&);
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if USE(CONTENT_FILTERING)
+ void contentFilterDidBlockLoadForFrame(const WebCore::ContentFilter&, 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->willChangeCurrentHistoryItem();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if USE(CONTENT_FILTERING)
+void WebFrameLoaderClient::contentFilterDidBlockLoad(std::unique_ptr<WebCore::ContentFilter> contentFilter)
+{
+ if (WebPage* webPage = m_frame->page())
+ webPage->send(Messages::WebPageProxy::ContentFilterDidBlockLoadForFrame(*contentFilter, m_frame->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&) override;
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if USE(CONTENT_FILTERING)
+ virtual void contentFilterDidBlockLoad(std::unique_ptr<WebCore::ContentFilter>) override;
+#endif
+
</ins><span class="cx"> WebFrame* m_frame;
</span><span class="cx"> RefPtr<PluginView> m_pluginView;
</span><span class="cx"> bool m_hasSentResponseToPluginView;
</span></span></pre>
</div>
</div>
</body>
</html>