<!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>[184941] trunk/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/184941">184941</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2015-05-27 21:52:25 -0700 (Wed, 27 May 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add a &quot;should open urls externally&quot; flag to DocumentLoader.
rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145417

Reviewed by Geoff Garen.

Source/WebCore:

No new tests (No change in behavior, testable at API level with a followup patch)

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::setTriggeringAction): Apply the current flag value to the
  new NavigationAction so it can be used later.
* loader/DocumentLoader.h:
(WebCore::DocumentLoader::setShouldOpenExternalURLsPolicy):
(WebCore::DocumentLoader::shouldOpenExternalURLsPolicy):
(WebCore::DocumentLoader::setTriggeringAction): Deleted.

FrameLoadRequest should hold the new flag to pass into FrameLoader machinery:
* loader/FrameLoadRequest.h:
(WebCore::FrameLoadRequest::setShouldOpenExternalURLsPolicy):
(WebCore::FrameLoadRequest::shouldOpenExternalURLsPolicy):

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::load): Set the flag on the newly created DocumentLoader but
  only if it is for the main frame.

* loader/FrameLoaderTypes.h: Add a new enum for the flag.

Navigation action should hold the new flag to pass to the policy delegate:
* loader/NavigationAction.cpp:
(WebCore::NavigationAction::NavigationAction):
* loader/NavigationAction.h:
(WebCore::NavigationAction::shouldOpenExternalURLsPolicy):
(WebCore::NavigationAction::setShouldOpenExternalURLsPolicy):

* loader/PolicyChecker.cpp:
(WebCore::PolicyChecker::checkNavigationPolicy): Include the flag from the DocumentLoader
  in the NavigationAction.

Source/WebKit2:

Rename &quot;user initiated&quot; to &quot;should open external URLs&quot;:
* Shared/API/Cocoa/_WKNSURLRequestExtras.h:
* Shared/API/Cocoa/_WKNSURLRequestExtras.mm:
(-[NSURLRequest _web_shouldOpenExternalURLs]):
(-[NSMutableURLRequest _web_setShouldOpenExternalURLs:]):
(-[NSURLRequest _web_isUserInitiated]): Deleted.
(-[NSMutableURLRequest _web_setIsUserInitiated:]): Deleted.

Hold the new flag as a bool, and encode/decode it across IPC:
* Shared/NavigationActionData.cpp:
(WebKit::NavigationActionData::encode):
(WebKit::NavigationActionData::decode):
(WebKit::NavigationActionData::NavigationActionData): Deleted.
* Shared/NavigationActionData.h:

* UIProcess/API/APINavigationAction.h: Add accessor for the bool flag.

* UIProcess/API/C/WKPage.cpp:
(WKPageLoadURLWithUserData): Use &quot;ShouldNotAllow&quot; in the legacy C API for now.
(WKPageLoadURLRequestWithUserData): Ditto.

* UIProcess/API/Cocoa/WKBrowsingContextController.mm:
(-[WKBrowsingContextController loadRequest:userData:]): Set the value of the flag
  based on whether or not the initiating NSURLRequest was user initiated.

* UIProcess/API/Cocoa/WKNavigationAction.mm:
(-[WKNavigationAction _shouldOpenExternalURLs]): Add accessor for the bool flag.
* UIProcess/API/Cocoa/WKNavigationActionPrivate.h:

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView loadRequest:]): Set the value of the flag based on whether or not the
  initiating NSURLRequest was user initiated.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::loadRequest): Pass the value down to the WebProcess to load.
(WebKit::WebPageProxy::loadFile): Ditto, but always with &quot;ShouldNotAllow&quot;.
* UIProcess/WebPageProxy.h:

* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Translate
  the NavigationAction flag to a bool in the NavigationActionData object.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::loadRequest): Set the value of the flag in the FrameLoadRequest that
  will be loaded.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoadercpp">trunk/Source/WebCore/loader/DocumentLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentLoaderh">trunk/Source/WebCore/loader/DocumentLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoadRequesth">trunk/Source/WebCore/loader/FrameLoadRequest.h</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoadercpp">trunk/Source/WebCore/loader/FrameLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderTypesh">trunk/Source/WebCore/loader/FrameLoaderTypes.h</a></li>
<li><a href="#trunkSourceWebCoreloaderNavigationActioncpp">trunk/Source/WebCore/loader/NavigationAction.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderNavigationActionh">trunk/Source/WebCore/loader/NavigationAction.h</a></li>
<li><a href="#trunkSourceWebCoreloaderPolicyCheckercpp">trunk/Source/WebCore/loader/PolicyChecker.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedAPICocoa_WKNSURLRequestExtrash">trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.h</a></li>
<li><a href="#trunkSourceWebKit2SharedAPICocoa_WKNSURLRequestExtrasmm">trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedNavigationActionDatacpp">trunk/Source/WebKit2/Shared/NavigationActionData.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedNavigationActionDatah">trunk/Source/WebKit2/Shared/NavigationActionData.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPINavigationActionh">trunk/Source/WebKit2/UIProcess/API/APINavigationAction.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagecpp">trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKBrowsingContextControllermm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKNavigationActionmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKNavigationActionPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagemessagesin">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/ChangeLog        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -1,3 +1,42 @@
</span><ins>+2015-05-27  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Add a &quot;should open urls externally&quot; flag to DocumentLoader.
+        rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145417
+
+        Reviewed by Geoff Garen.
+
+        No new tests (No change in behavior, testable at API level with a followup patch)
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::setTriggeringAction): Apply the current flag value to the 
+          new NavigationAction so it can be used later.
+        * loader/DocumentLoader.h:
+        (WebCore::DocumentLoader::setShouldOpenExternalURLsPolicy):
+        (WebCore::DocumentLoader::shouldOpenExternalURLsPolicy):
+        (WebCore::DocumentLoader::setTriggeringAction): Deleted.
+
+        FrameLoadRequest should hold the new flag to pass into FrameLoader machinery:
+        * loader/FrameLoadRequest.h:
+        (WebCore::FrameLoadRequest::setShouldOpenExternalURLsPolicy):
+        (WebCore::FrameLoadRequest::shouldOpenExternalURLsPolicy):
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::load): Set the flag on the newly created DocumentLoader but
+          only if it is for the main frame.
+
+        * loader/FrameLoaderTypes.h: Add a new enum for the flag.
+
+        Navigation action should hold the new flag to pass to the policy delegate:
+        * loader/NavigationAction.cpp:
+        (WebCore::NavigationAction::NavigationAction):
+        * loader/NavigationAction.h:
+        (WebCore::NavigationAction::shouldOpenExternalURLsPolicy):
+        (WebCore::NavigationAction::setShouldOpenExternalURLsPolicy):
+
+        * loader/PolicyChecker.cpp:
+        (WebCore::PolicyChecker::checkNavigationPolicy): Include the flag from the DocumentLoader
+          in the NavigationAction.
+
</ins><span class="cx"> 2015-05-27  Gyuyoung Kim  &lt;gyuyoung.kim@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Purge PassRefPtr in WebCore/Modules - 2
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -1553,6 +1553,13 @@
</span><span class="cx">     applicationCacheHost()-&gt;stopDeferringEvents();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void DocumentLoader::setTriggeringAction(const NavigationAction&amp; action)
+{
+    m_triggeringAction = action;
+    if (!m_triggeringAction.isEmpty())
+        m_triggeringAction.setShouldOpenExternalURLsPolicy(m_shouldOpenExternalURLsPolicy);
+}
+
</ins><span class="cx"> #if ENABLE(CONTENT_EXTENSIONS)
</span><span class="cx"> void DocumentLoader::addPendingContentExtensionSheet(const String&amp; identifier, StyleSheetContents&amp; sheet)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentLoader.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentLoader.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/DocumentLoader.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -178,7 +178,7 @@
</span><span class="cx">         const ResponseVector&amp; responses() const { return m_responses; }
</span><span class="cx"> 
</span><span class="cx">         const NavigationAction&amp; triggeringAction() const { return m_triggeringAction; }
</span><del>-        void setTriggeringAction(const NavigationAction&amp; action) { m_triggeringAction = action; }
</del><ins>+        void setTriggeringAction(const NavigationAction&amp;);
</ins><span class="cx">         void setOverrideEncoding(const String&amp; encoding) { m_overrideEncoding = encoding; }
</span><span class="cx">         void setLastCheckedRequest(const ResourceRequest&amp; request) { m_lastCheckedRequest = request; }
</span><span class="cx">         const ResourceRequest&amp; lastCheckedRequest()  { return m_lastCheckedRequest; }
</span><span class="lines">@@ -274,6 +274,9 @@
</span><span class="cx">         void addPendingContentExtensionDisplayNoneSelector(const String&amp; identifier, const String&amp; selector, uint32_t selectorID);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+        void setShouldOpenExternalURLsPolicy(ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy) { m_shouldOpenExternalURLsPolicy = shouldOpenExternalURLsPolicy; }
+        ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy() const { return m_shouldOpenExternalURLsPolicy; }
+
</ins><span class="cx">     protected:
</span><span class="cx">         WEBCORE_EXPORT DocumentLoader(const ResourceRequest&amp;, const SubstituteData&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -426,6 +429,7 @@
</span><span class="cx">         RefPtr&lt;IconDataCallback&gt; m_iconDataCallback;
</span><span class="cx"> 
</span><span class="cx">         bool m_subresourceLoadersArePageCacheAcceptable;
</span><ins>+        ShouldOpenExternalURLsPolicy m_shouldOpenExternalURLsPolicy { ShouldOpenExternalURLsPolicy::ShouldNotAllow };
</ins><span class="cx"> 
</span><span class="cx">         friend class ApplicationCacheHost;  // for substitute resource delivery
</span><span class="cx">         std::unique_ptr&lt;ApplicationCacheHost&gt; m_applicationCacheHost;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoadRequesth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoadRequest.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoadRequest.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/FrameLoadRequest.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -104,6 +104,9 @@
</span><span class="cx">     // corresponding parameter from ScriptController::executeIfJavaScriptURL() is addressed.
</span><span class="cx">     ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL() const { return m_shouldReplaceDocumentIfJavaScriptURL; }
</span><span class="cx"> 
</span><ins>+    void setShouldOpenExternalURLsPolicy(ShouldOpenExternalURLsPolicy policy) { m_shouldOpenExternalURLsPolicy = policy; }
+    ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy() const { return m_shouldOpenExternalURLsPolicy; }
+
</ins><span class="cx"> private:
</span><span class="cx">     RefPtr&lt;SecurityOrigin&gt; m_requester;
</span><span class="cx">     ResourceRequest m_resourceRequest;
</span><span class="lines">@@ -117,6 +120,7 @@
</span><span class="cx">     AllowNavigationToInvalidURL m_allowNavigationToInvalidURL;
</span><span class="cx">     NewFrameOpenerPolicy m_newFrameOpenerPolicy;
</span><span class="cx">     ShouldReplaceDocumentIfJavaScriptURL m_shouldReplaceDocumentIfJavaScriptURL;
</span><ins>+    ShouldOpenExternalURLsPolicy m_shouldOpenExternalURLsPolicy { ShouldOpenExternalURLsPolicy::ShouldNotAllow };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -1308,6 +1308,9 @@
</span><span class="cx">         request.setSubstituteData(defaultSubstituteDataForURL(request.resourceRequest().url()));
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;DocumentLoader&gt; loader = m_client.createDocumentLoader(request.resourceRequest(), request.substituteData());
</span><ins>+    if (m_frame.isMainFrame())
+        loader-&gt;setShouldOpenExternalURLsPolicy(request.shouldOpenExternalURLsPolicy());
+
</ins><span class="cx">     load(loader.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderTypesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoaderTypes.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoaderTypes.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/FrameLoaderTypes.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -71,6 +71,11 @@
</span><span class="cx">     Other
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+enum class ShouldOpenExternalURLsPolicy {
+    ShouldNotAllow,
+    ShouldAllow,
+};
+
</ins><span class="cx">     enum ClearProvisionalItemPolicy {
</span><span class="cx">         ShouldClearProvisionalItem,
</span><span class="cx">         ShouldNotClearProvisionalItem
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderNavigationActioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NavigationAction.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NavigationAction.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/NavigationAction.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -84,6 +84,13 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+NavigationAction::NavigationAction(const ResourceRequest&amp; resourceRequest, NavigationType type, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy)
+    : m_resourceRequest(resourceRequest)
+    , m_type(type)
+    , m_shouldOpenExternalURLsPolicy(shouldOpenExternalURLsPolicy)
+{
+}
+
</ins><span class="cx"> NavigationAction::NavigationAction(const ResourceRequest&amp; resourceRequest, FrameLoadType frameLoadType,
</span><span class="cx">         bool isFormSubmission, PassRefPtr&lt;Event&gt; event)
</span><span class="cx">     : m_resourceRequest(resourceRequest)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderNavigationActionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/NavigationAction.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/NavigationAction.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/NavigationAction.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -37,32 +37,37 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-    class NavigationAction {
-    public:
-        WEBCORE_EXPORT NavigationAction();
-        WEBCORE_EXPORT explicit NavigationAction(const ResourceRequest&amp;);
-        WEBCORE_EXPORT NavigationAction(const ResourceRequest&amp;, NavigationType);
-        WEBCORE_EXPORT NavigationAction(const ResourceRequest&amp;, FrameLoadType, bool isFormSubmission);
-        NavigationAction(const ResourceRequest&amp;, NavigationType, PassRefPtr&lt;Event&gt;);
-        NavigationAction(const ResourceRequest&amp;, FrameLoadType, bool isFormSubmission, PassRefPtr&lt;Event&gt;);
</del><ins>+class NavigationAction {
+public:
+    WEBCORE_EXPORT NavigationAction();
+    WEBCORE_EXPORT explicit NavigationAction(const ResourceRequest&amp;);
+    WEBCORE_EXPORT NavigationAction(const ResourceRequest&amp;, NavigationType);
+    WEBCORE_EXPORT NavigationAction(const ResourceRequest&amp;, FrameLoadType, bool isFormSubmission);
+    NavigationAction(const ResourceRequest&amp;, NavigationType, PassRefPtr&lt;Event&gt;);
+    NavigationAction(const ResourceRequest&amp;, NavigationType, ShouldOpenExternalURLsPolicy);
+    NavigationAction(const ResourceRequest&amp;, FrameLoadType, bool isFormSubmission, PassRefPtr&lt;Event&gt;);
</ins><span class="cx"> 
</span><del>-        bool isEmpty() const { return m_resourceRequest.url().isEmpty(); }
</del><ins>+    bool isEmpty() const { return m_resourceRequest.url().isEmpty(); }
</ins><span class="cx"> 
</span><del>-        URL url() const { return m_resourceRequest.url(); }
-        const ResourceRequest&amp; resourceRequest() const { return m_resourceRequest; }
</del><ins>+    URL url() const { return m_resourceRequest.url(); }
+    const ResourceRequest&amp; resourceRequest() const { return m_resourceRequest; }
</ins><span class="cx"> 
</span><del>-        NavigationType type() const { return m_type; }
-        const Event* event() const { return m_event.get(); }
</del><ins>+    NavigationType type() const { return m_type; }
+    const Event* event() const { return m_event.get(); }
</ins><span class="cx"> 
</span><del>-        bool processingUserGesture() const { return m_processingUserGesture; }
</del><ins>+    bool processingUserGesture() const { return m_processingUserGesture; }
</ins><span class="cx"> 
</span><del>-    private:
-        ResourceRequest m_resourceRequest;
-        NavigationType m_type;
-        RefPtr&lt;Event&gt; m_event;
-        bool m_processingUserGesture;
-    };
</del><ins>+    ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy() const { return m_shouldOpenExternalURLsPolicy; }
+    void setShouldOpenExternalURLsPolicy(ShouldOpenExternalURLsPolicy policy) { m_shouldOpenExternalURLsPolicy = policy; }
</ins><span class="cx"> 
</span><ins>+private:
+    ResourceRequest m_resourceRequest;
+    NavigationType m_type;
+    RefPtr&lt;Event&gt; m_event;
+    bool m_processingUserGesture;
+    ShouldOpenExternalURLsPolicy m_shouldOpenExternalURLsPolicy { ShouldOpenExternalURLsPolicy::ShouldNotAllow };
+};
+
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderPolicyCheckercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/PolicyChecker.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/PolicyChecker.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebCore/loader/PolicyChecker.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> {
</span><span class="cx">     NavigationAction action = loader-&gt;triggeringAction();
</span><span class="cx">     if (action.isEmpty()) {
</span><del>-        action = NavigationAction(request, NavigationType::Other);
</del><ins>+        action = NavigationAction(request, NavigationType::Other, loader-&gt;shouldOpenExternalURLsPolicy());
</ins><span class="cx">         loader-&gt;setTriggeringAction(action);
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/ChangeLog        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -1,3 +1,58 @@
</span><ins>+2015-05-27  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Add a &quot;should open urls externally&quot; flag to DocumentLoader.
+        rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145417
+
+        Reviewed by Geoff Garen.
+
+        Rename &quot;user initiated&quot; to &quot;should open external URLs&quot;:
+        * Shared/API/Cocoa/_WKNSURLRequestExtras.h:
+        * Shared/API/Cocoa/_WKNSURLRequestExtras.mm:
+        (-[NSURLRequest _web_shouldOpenExternalURLs]):
+        (-[NSMutableURLRequest _web_setShouldOpenExternalURLs:]):
+        (-[NSURLRequest _web_isUserInitiated]): Deleted.
+        (-[NSMutableURLRequest _web_setIsUserInitiated:]): Deleted.
+        
+        Hold the new flag as a bool, and encode/decode it across IPC:
+        * Shared/NavigationActionData.cpp:
+        (WebKit::NavigationActionData::encode):
+        (WebKit::NavigationActionData::decode):
+        (WebKit::NavigationActionData::NavigationActionData): Deleted.
+        * Shared/NavigationActionData.h:
+
+        * UIProcess/API/APINavigationAction.h: Add accessor for the bool flag.
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageLoadURLWithUserData): Use &quot;ShouldNotAllow&quot; in the legacy C API for now.
+        (WKPageLoadURLRequestWithUserData): Ditto.
+
+        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
+        (-[WKBrowsingContextController loadRequest:userData:]): Set the value of the flag
+          based on whether or not the initiating NSURLRequest was user initiated.
+
+        * UIProcess/API/Cocoa/WKNavigationAction.mm:
+        (-[WKNavigationAction _shouldOpenExternalURLs]): Add accessor for the bool flag.
+        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView loadRequest:]): Set the value of the flag based on whether or not the
+          initiating NSURLRequest was user initiated.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::loadRequest): Pass the value down to the WebProcess to load.
+        (WebKit::WebPageProxy::loadFile): Ditto, but always with &quot;ShouldNotAllow&quot;.
+        * UIProcess/WebPageProxy.h:
+
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Translate 
+          the NavigationAction flag to a bool in the NavigationActionData object.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::loadRequest): Set the value of the flag in the FrameLoadRequest that
+          will be loaded.
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
</ins><span class="cx"> 2015-05-27  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Can't load local files in WKWebView from containerized app
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPICocoa_WKNSURLRequestExtrash"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -27,12 +27,12 @@
</span><span class="cx"> 
</span><span class="cx"> @interface NSURLRequest (WKExtras)
</span><span class="cx"> 
</span><del>-- (BOOL)_web_isUserInitiated;
</del><ins>+- (BOOL)_web_shouldOpenExternalURLs;
</ins><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> @interface NSMutableURLRequest (WKExtras)
</span><span class="cx"> 
</span><del>-- (void)_web_setIsUserInitiated:(BOOL)userInitiated;
</del><ins>+- (void)_web_setShouldOpenExternalURLs:(BOOL)shouldOpenExternalURLs;
</ins><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPICocoa_WKNSURLRequestExtrasmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.mm (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.mm        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/Shared/API/Cocoa/_WKNSURLRequestExtras.mm        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -26,23 +26,21 @@
</span><span class="cx"> #import &quot;config.h&quot;
</span><span class="cx"> #import &quot;_WKNSURLRequestExtras.h&quot;
</span><span class="cx"> 
</span><del>-#import &lt;WebCore/ResourceRequest.h&gt;
-
</del><span class="cx"> @implementation NSURLRequest (WKExtras)
</span><span class="cx"> 
</span><del>-- (BOOL)_web_isUserInitiated
</del><ins>+- (BOOL)_web_shouldOpenExternalURLs
</ins><span class="cx"> {
</span><del>-    NSNumber *userInitiated = [NSURLProtocol propertyForKey:(NSString *)WebCore::ResourceRequest::isUserInitiatedKey() inRequest:self];
-    return userInitiated.boolValue;
</del><ins>+    NSNumber *shouldOpenExternalURLs = [NSURLProtocol propertyForKey:@&quot;WKNSURLRequestShouldOpenExternalURLsKey&quot; inRequest:self];
+    return shouldOpenExternalURLs.boolValue;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> @implementation NSMutableURLRequest (WKExtras)
</span><span class="cx"> 
</span><del>-- (void)_web_setIsUserInitiated:(BOOL)userInitiated
</del><ins>+- (void)_web_setShouldOpenExternalURLs:(BOOL)shouldOpenExternalURLs
</ins><span class="cx"> {
</span><del>-    [NSURLProtocol setProperty:userInitiated ? @YES : @NO forKey:(NSString *)WebCore::ResourceRequest::isUserInitiatedKey() inRequest:self];
</del><ins>+    [NSURLProtocol setProperty:shouldOpenExternalURLs ? @YES : @NO forKey:@&quot;WKNSURLRequestShouldOpenExternalURLsKey&quot; inRequest:self];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedNavigationActionDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/NavigationActionData.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/NavigationActionData.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/Shared/NavigationActionData.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -33,15 +33,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><del>-NavigationActionData::NavigationActionData()
-    : navigationType(NavigationType::Other)
-    , modifiers()
-    , mouseButton(WebMouseEvent::NoButton)
-    , isProcessingUserGesture(false)
-    , canHandleRequest(false)
-{
-}
-
</del><span class="cx"> void NavigationActionData::encode(IPC::ArgumentEncoder&amp; encoder) const
</span><span class="cx"> {
</span><span class="cx">     encoder.encodeEnum(navigationType);
</span><span class="lines">@@ -49,6 +40,7 @@
</span><span class="cx">     encoder.encodeEnum(mouseButton);
</span><span class="cx">     encoder &lt;&lt; isProcessingUserGesture;
</span><span class="cx">     encoder &lt;&lt; canHandleRequest;
</span><ins>+    encoder &lt;&lt; shouldOpenExternalURLs;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool NavigationActionData::decode(IPC::ArgumentDecoder&amp; decoder, NavigationActionData&amp; result)
</span><span class="lines">@@ -63,6 +55,8 @@
</span><span class="cx">         return false;
</span><span class="cx">     if (!decoder.decode(result.canHandleRequest))
</span><span class="cx">         return false;
</span><ins>+    if (!decoder.decode(result.shouldOpenExternalURLs))
+        return false;
</ins><span class="cx"> 
</span><span class="cx">     return true;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedNavigationActionDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/NavigationActionData.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/NavigationActionData.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/Shared/NavigationActionData.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -37,16 +37,15 @@
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> struct NavigationActionData {
</span><del>-    NavigationActionData();
-
</del><span class="cx">     void encode(IPC::ArgumentEncoder&amp;) const;
</span><span class="cx">     static bool decode(IPC::ArgumentDecoder&amp;, NavigationActionData&amp;);
</span><span class="cx"> 
</span><del>-    WebCore::NavigationType navigationType;
-    WebEvent::Modifiers modifiers;
-    WebMouseEvent::Button mouseButton;
-    bool isProcessingUserGesture;
-    bool canHandleRequest;
</del><ins>+    WebCore::NavigationType navigationType { WebCore::NavigationType::Other };
+    WebEvent::Modifiers modifiers { };
+    WebMouseEvent::Button mouseButton { WebMouseEvent::NoButton };
+    bool isProcessingUserGesture { false };
+    bool canHandleRequest { false };
+    bool shouldOpenExternalURLs { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPINavigationActionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APINavigationAction.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APINavigationAction.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/API/APINavigationAction.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -63,6 +63,7 @@
</span><span class="cx">     WebKit::WebMouseEvent::Button mouseButton() const { return m_navigationActionData.mouseButton; }
</span><span class="cx">     bool isProcessingUserGesture() const { return m_navigationActionData.isProcessingUserGesture; }
</span><span class="cx">     bool canHandleRequest() const { return m_navigationActionData.canHandleRequest; }
</span><ins>+    bool shouldOpenExternalURLs() const { return m_navigationActionData.shouldOpenExternalURLs; }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     RefPtr&lt;FrameInfo&gt; m_sourceFrame;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -128,7 +128,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WKPageLoadURLWithUserData(WKPageRef pageRef, WKURLRef URLRef, WKTypeRef userDataRef)
</span><span class="cx"> {
</span><del>-    toImpl(pageRef)-&gt;loadRequest(URL(URL(), toWTFString(URLRef)), toImpl(userDataRef));
</del><ins>+    toImpl(pageRef)-&gt;loadRequest(URL(URL(), toWTFString(URLRef)), ShouldOpenExternalURLsPolicy::ShouldNotAllow, toImpl(userDataRef));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WKPageLoadURLRequest(WKPageRef pageRef, WKURLRequestRef urlRequestRef)
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WKPageLoadURLRequestWithUserData(WKPageRef pageRef, WKURLRequestRef urlRequestRef, WKTypeRef userDataRef)
</span><span class="cx"> {
</span><del>-    toImpl(pageRef)-&gt;loadRequest(toImpl(urlRequestRef)-&gt;resourceRequest(), toImpl(userDataRef));
</del><ins>+    toImpl(pageRef)-&gt;loadRequest(toImpl(urlRequestRef)-&gt;resourceRequest(), ShouldOpenExternalURLsPolicy::ShouldNotAllow, toImpl(userDataRef));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WKPageLoadFile(WKPageRef pageRef, WKURLRef fileURL, WKURLRef resourceDirectoryURL)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKBrowsingContextControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -55,6 +55,7 @@
</span><span class="cx"> #import &quot;WebPageProxy.h&quot;
</span><span class="cx"> #import &quot;WebProcessPool.h&quot;
</span><span class="cx"> #import &quot;WebProtectionSpace.h&quot;
</span><ins>+#import &quot;_WKNSURLRequestExtras.h&quot;
</ins><span class="cx"> #import &quot;_WKRemoteObjectRegistryInternal.h&quot;
</span><span class="cx"> #import &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -191,7 +192,7 @@
</span><span class="cx">     if (userData)
</span><span class="cx">         wkUserData = ObjCObjectGraph::create(userData);
</span><span class="cx"> 
</span><del>-    _page-&gt;loadRequest(request, wkUserData.get());
</del><ins>+    _page-&gt;loadRequest(request, [request _web_shouldOpenExternalURLs] ? ShouldOpenExternalURLsPolicy::ShouldAllow : ShouldOpenExternalURLsPolicy::ShouldNotAllow, wkUserData.get());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)loadFileURL:(NSURL *)URL restrictToFilesWithin:(NSURL *)allowedDirectory
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKNavigationActionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.mm (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.mm        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.mm        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -172,6 +172,11 @@
</span><span class="cx">     return _navigationAction-&gt;canHandleRequest();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (BOOL)_shouldOpenExternalURLs
+{
+    return _navigationAction-&gt;shouldOpenExternalURLs();
+}
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKNavigationActionPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationActionPrivate.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> @property (nonatomic, readonly) NSURL *_originalURL;
</span><span class="cx"> @property (nonatomic, readonly, getter=_isUserInitiated) BOOL _userInitiated;
</span><span class="cx"> @property (nonatomic, readonly) BOOL _canHandleRequest;
</span><ins>+@property (nonatomic, readonly) BOOL _shouldOpenExternalURLs;
</ins><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -73,6 +73,7 @@
</span><span class="cx"> #import &quot;_WKDiagnosticLoggingDelegate.h&quot;
</span><span class="cx"> #import &quot;_WKFindDelegate.h&quot;
</span><span class="cx"> #import &quot;_WKFormDelegate.h&quot;
</span><ins>+#import &quot;_WKNSURLRequestExtras.h&quot;
</ins><span class="cx"> #import &quot;_WKRemoteObjectRegistryInternal.h&quot;
</span><span class="cx"> #import &quot;_WKSessionStateInternal.h&quot;
</span><span class="cx"> #import &quot;_WKVisitedLinkProviderInternal.h&quot;
</span><span class="lines">@@ -101,6 +102,7 @@
</span><span class="cx"> #import &quot;WebVideoFullscreenManagerProxy.h&quot;
</span><span class="cx"> #import &lt;UIKit/UIApplication.h&gt;
</span><span class="cx"> #import &lt;WebCore/CoreGraphicsSPI.h&gt;
</span><ins>+#import &lt;WebCore/FrameLoaderTypes.h&gt;
</ins><span class="cx"> #import &lt;WebCore/InspectorOverlay.h&gt;
</span><span class="cx"> #import &lt;WebCore/QuartzCoreSPI.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -443,7 +445,8 @@
</span><span class="cx"> 
</span><span class="cx"> - (WKNavigation *)loadRequest:(NSURLRequest *)request
</span><span class="cx"> {
</span><del>-    auto navigation = _page-&gt;loadRequest(request);
</del><ins>+    WebCore::ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy = [request _web_shouldOpenExternalURLs] ? WebCore::ShouldOpenExternalURLsPolicy::ShouldAllow : WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow;
+    auto navigation = _page-&gt;loadRequest(request, shouldOpenExternalURLsPolicy);
</ins><span class="cx">     if (!navigation)
</span><span class="cx">         return nil;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -838,7 +838,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;API::Navigation&gt; WebPageProxy::loadRequest(const ResourceRequest&amp; request, API::Object* userData)
</del><ins>+RefPtr&lt;API::Navigation&gt; WebPageProxy::loadRequest(const ResourceRequest&amp; request, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, API::Object* userData)
</ins><span class="cx"> {
</span><span class="cx">     if (m_isClosed)
</span><span class="cx">         return nullptr;
</span><span class="lines">@@ -856,7 +856,7 @@
</span><span class="cx">     bool createdExtension = maybeInitializeSandboxExtensionHandle(request.url(), sandboxExtensionHandle);
</span><span class="cx">     if (createdExtension)
</span><span class="cx">         m_process-&gt;willAcquireUniversalFileReadSandboxExtension();
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadRequest(navigation-&gt;navigationID(), request, sandboxExtensionHandle, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::LoadRequest(navigation-&gt;navigationID(), request, sandboxExtensionHandle, (uint64_t)shouldOpenExternalURLsPolicy, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer()-&gt;start();
</span><span class="cx"> 
</span><span class="cx">     return WTF::move(navigation);
</span><span class="lines">@@ -894,7 +894,7 @@
</span><span class="cx">     SandboxExtension::Handle sandboxExtensionHandle;
</span><span class="cx">     SandboxExtension::createHandle(resourceDirectoryPath, SandboxExtension::ReadOnly, sandboxExtensionHandle);
</span><span class="cx">     m_process-&gt;assumeReadAccessToBaseURL(resourceDirectoryURL);
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadRequest(navigation-&gt;navigationID(), fileURL, sandboxExtensionHandle, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::LoadRequest(navigation-&gt;navigationID(), fileURL, sandboxExtensionHandle, (uint64_t)ShouldOpenExternalURLsPolicy::ShouldNotAllow, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer()-&gt;start();
</span><span class="cx"> 
</span><span class="cx">     return WTF::move(navigation);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -65,6 +65,7 @@
</span><span class="cx"> #include &quot;WebProcessLifetimeTracker.h&quot;
</span><span class="cx"> #include &lt;WebCore/Color.h&gt;
</span><span class="cx"> #include &lt;WebCore/DragActions.h&gt;
</span><ins>+#include &lt;WebCore/FrameLoaderTypes.h&gt;
</ins><span class="cx"> #include &lt;WebCore/HitTestResult.h&gt;
</span><span class="cx"> #include &lt;WebCore/MediaProducer.h&gt;
</span><span class="cx"> #include &lt;WebCore/Page.h&gt;
</span><span class="lines">@@ -351,7 +352,7 @@
</span><span class="cx">     bool tryClose();
</span><span class="cx">     bool isClosed() const { return m_isClosed; }
</span><span class="cx"> 
</span><del>-    RefPtr&lt;API::Navigation&gt; loadRequest(const WebCore::ResourceRequest&amp;, API::Object* userData = nullptr);
</del><ins>+    RefPtr&lt;API::Navigation&gt; loadRequest(const WebCore::ResourceRequest&amp;, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow, API::Object* userData = nullptr);
</ins><span class="cx">     RefPtr&lt;API::Navigation&gt; loadFile(const String&amp; fileURL, const String&amp; resourceDirectoryURL, API::Object* userData = nullptr);
</span><span class="cx">     RefPtr&lt;API::Navigation&gt; loadData(API::Data*, const String&amp; MIMEType, const String&amp; encoding, const String&amp; baseURL, API::Object* userData = nullptr);
</span><span class="cx">     RefPtr&lt;API::Navigation&gt; loadHTMLString(const String&amp; htmlString, const String&amp; baseURL, API::Object* userData = nullptr);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -800,6 +800,7 @@
</span><span class="cx">     navigationActionData.mouseButton = action-&gt;mouseButton();
</span><span class="cx">     navigationActionData.isProcessingUserGesture = navigationAction.processingUserGesture();
</span><span class="cx">     navigationActionData.canHandleRequest = webPage-&gt;canHandleRequest(request);
</span><ins>+    navigationActionData.shouldOpenExternalURLs = navigationAction.shouldOpenExternalURLsPolicy() == ShouldOpenExternalURLsPolicy::ShouldAllow;
</ins><span class="cx"> 
</span><span class="cx">     WebCore::Frame* coreFrame = m_frame-&gt;coreFrame();
</span><span class="cx">     WebDocumentLoader* documentLoader = static_cast&lt;WebDocumentLoader*&gt;(coreFrame-&gt;loader().policyDocumentLoader());
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -1014,7 +1014,7 @@
</span><span class="cx">     frame-&gt;coreFrame()-&gt;loader().load(FrameLoadRequest(frame-&gt;coreFrame(), ResourceRequest(URL(URL(), url))));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::loadRequest(uint64_t navigationID, const ResourceRequest&amp; request, const SandboxExtension::Handle&amp; sandboxExtensionHandle, const UserData&amp; userData)
</del><ins>+void WebPage::loadRequest(uint64_t navigationID, const ResourceRequest&amp; request, const SandboxExtension::Handle&amp; sandboxExtensionHandle, uint64_t shouldOpenExternalURLsPolicy, const UserData&amp; userData)
</ins><span class="cx"> {
</span><span class="cx">     SendStopResponsivenessTimer stopper(this);
</span><span class="cx"> 
</span><span class="lines">@@ -1027,8 +1027,12 @@
</span><span class="cx">     m_loaderClient.willLoadURLRequest(this, request, WebProcess::singleton().transformHandlesToObjects(userData.object()).get());
</span><span class="cx"> 
</span><span class="cx">     // Initate the load in WebCore.
</span><del>-    corePage()-&gt;userInputBridge().loadRequest(FrameLoadRequest(m_mainFrame-&gt;coreFrame(), request));
</del><ins>+    FrameLoadRequest frameLoadRequest(m_mainFrame-&gt;coreFrame(), request);
+    ShouldOpenExternalURLsPolicy externalURLsPolicy = static_cast&lt;ShouldOpenExternalURLsPolicy&gt;(shouldOpenExternalURLsPolicy);
+    frameLoadRequest.setShouldOpenExternalURLsPolicy(externalURLsPolicy);
</ins><span class="cx"> 
</span><ins>+    corePage()-&gt;userInputBridge().loadRequest(frameLoadRequest);
+
</ins><span class="cx">     ASSERT(!m_pendingNavigationID);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -935,7 +935,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Actions
</span><span class="cx">     void tryClose();
</span><del>-    void loadRequest(uint64_t navigationID, const WebCore::ResourceRequest&amp;, const SandboxExtension::Handle&amp;, const UserData&amp;);
</del><ins>+    void loadRequest(uint64_t navigationID, const WebCore::ResourceRequest&amp;, const SandboxExtension::Handle&amp;, uint64_t shouldOpenExternalURLsPolicy, const UserData&amp;);
</ins><span class="cx">     void loadData(const IPC::DataReference&amp;, const String&amp; MIMEType, const String&amp; encodingName, const String&amp; baseURL, const UserData&amp;);
</span><span class="cx">     void loadHTMLString(uint64_t navigationID, const String&amp; htmlString, const String&amp; baseURL, const UserData&amp;);
</span><span class="cx">     void loadAlternateHTMLString(const String&amp; htmlString, const String&amp; baseURL, const String&amp; unreachableURL, const String&amp; provisionalLoadErrorURL, const UserData&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (184940 => 184941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2015-05-28 04:22:37 UTC (rev 184940)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2015-05-28 04:52:25 UTC (rev 184941)
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx">     TryRestoreScrollPosition()
</span><span class="cx"> 
</span><span class="cx">     LoadURLInFrame(String url, uint64_t frameID)
</span><del>-    LoadRequest(uint64_t navigationID, WebCore::ResourceRequest request, WebKit::SandboxExtension::Handle sandboxExtensionHandle, WebKit::UserData userData)
</del><ins>+    LoadRequest(uint64_t navigationID, WebCore::ResourceRequest request, WebKit::SandboxExtension::Handle sandboxExtensionHandle, uint64_t shouldOpenExternalURLsPolicy, WebKit::UserData userData)
</ins><span class="cx">     LoadData(IPC::DataReference data, String MIMEType, String encoding, String baseURL, WebKit::UserData userData)
</span><span class="cx">     LoadHTMLString(uint64_t navigationID, String htmlString, String baseURL, WebKit::UserData userData)
</span><span class="cx">     LoadAlternateHTMLString(String htmlString, String baseURL, String unreachableURL, String provisionalLoadErrorURL, WebKit::UserData userData)
</span></span></pre>
</div>
</div>

</body>
</html>