<!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 "should open urls externally" 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 "user initiated" to "should open external URLs":
* 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 "ShouldNotAllow" 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 "ShouldNotAllow".
* 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 <beidson@apple.com>
+
+ Add a "should open urls externally" 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 <gyuyoung.kim@webkit.org>
</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()->stopDeferringEvents();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void DocumentLoader::setTriggeringAction(const NavigationAction& 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& identifier, StyleSheetContents& 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& responses() const { return m_responses; }
</span><span class="cx">
</span><span class="cx"> const NavigationAction& triggeringAction() const { return m_triggeringAction; }
</span><del>- void setTriggeringAction(const NavigationAction& action) { m_triggeringAction = action; }
</del><ins>+ void setTriggeringAction(const NavigationAction&);
</ins><span class="cx"> void setOverrideEncoding(const String& encoding) { m_overrideEncoding = encoding; }
</span><span class="cx"> void setLastCheckedRequest(const ResourceRequest& request) { m_lastCheckedRequest = request; }
</span><span class="cx"> const ResourceRequest& lastCheckedRequest() { return m_lastCheckedRequest; }
</span><span class="lines">@@ -274,6 +274,9 @@
</span><span class="cx"> void addPendingContentExtensionDisplayNoneSelector(const String& identifier, const String& 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&, const SubstituteData&);
</span><span class="cx">
</span><span class="lines">@@ -426,6 +429,7 @@
</span><span class="cx"> RefPtr<IconDataCallback> 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<ApplicationCacheHost> 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<SecurityOrigin> 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<DocumentLoader> loader = m_client.createDocumentLoader(request.resourceRequest(), request.substituteData());
</span><ins>+ if (m_frame.isMainFrame())
+ loader->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& resourceRequest, NavigationType type, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy)
+ : m_resourceRequest(resourceRequest)
+ , m_type(type)
+ , m_shouldOpenExternalURLsPolicy(shouldOpenExternalURLsPolicy)
+{
+}
+
</ins><span class="cx"> NavigationAction::NavigationAction(const ResourceRequest& resourceRequest, FrameLoadType frameLoadType,
</span><span class="cx"> bool isFormSubmission, PassRefPtr<Event> 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&);
- WEBCORE_EXPORT NavigationAction(const ResourceRequest&, NavigationType);
- WEBCORE_EXPORT NavigationAction(const ResourceRequest&, FrameLoadType, bool isFormSubmission);
- NavigationAction(const ResourceRequest&, NavigationType, PassRefPtr<Event>);
- NavigationAction(const ResourceRequest&, FrameLoadType, bool isFormSubmission, PassRefPtr<Event>);
</del><ins>+class NavigationAction {
+public:
+ WEBCORE_EXPORT NavigationAction();
+ WEBCORE_EXPORT explicit NavigationAction(const ResourceRequest&);
+ WEBCORE_EXPORT NavigationAction(const ResourceRequest&, NavigationType);
+ WEBCORE_EXPORT NavigationAction(const ResourceRequest&, FrameLoadType, bool isFormSubmission);
+ NavigationAction(const ResourceRequest&, NavigationType, PassRefPtr<Event>);
+ NavigationAction(const ResourceRequest&, NavigationType, ShouldOpenExternalURLsPolicy);
+ NavigationAction(const ResourceRequest&, FrameLoadType, bool isFormSubmission, PassRefPtr<Event>);
</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& resourceRequest() const { return m_resourceRequest; }
</del><ins>+ URL url() const { return m_resourceRequest.url(); }
+ const ResourceRequest& 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<Event> 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<Event> 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->triggeringAction();
</span><span class="cx"> if (action.isEmpty()) {
</span><del>- action = NavigationAction(request, NavigationType::Other);
</del><ins>+ action = NavigationAction(request, NavigationType::Other, loader->shouldOpenExternalURLsPolicy());
</ins><span class="cx"> loader->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 <beidson@apple.com>
+
+ Add a "should open urls externally" flag to DocumentLoader.
+ rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145417
+
+ Reviewed by Geoff Garen.
+
+ Rename "user initiated" to "should open external URLs":
+ * 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 "ShouldNotAllow" 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 "ShouldNotAllow".
+ * 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 <andersca@apple.com>
</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 "config.h"
</span><span class="cx"> #import "_WKNSURLRequestExtras.h"
</span><span class="cx">
</span><del>-#import <WebCore/ResourceRequest.h>
-
</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:@"WKNSURLRequestShouldOpenExternalURLsKey" 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:@"WKNSURLRequestShouldOpenExternalURLsKey" 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& 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 << isProcessingUserGesture;
</span><span class="cx"> encoder << canHandleRequest;
</span><ins>+ encoder << shouldOpenExternalURLs;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool NavigationActionData::decode(IPC::ArgumentDecoder& decoder, NavigationActionData& 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&) const;
</span><span class="cx"> static bool decode(IPC::ArgumentDecoder&, NavigationActionData&);
</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<FrameInfo> 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)->loadRequest(URL(URL(), toWTFString(URLRef)), toImpl(userDataRef));
</del><ins>+ toImpl(pageRef)->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)->loadRequest(toImpl(urlRequestRef)->resourceRequest(), toImpl(userDataRef));
</del><ins>+ toImpl(pageRef)->loadRequest(toImpl(urlRequestRef)->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 "WebPageProxy.h"
</span><span class="cx"> #import "WebProcessPool.h"
</span><span class="cx"> #import "WebProtectionSpace.h"
</span><ins>+#import "_WKNSURLRequestExtras.h"
</ins><span class="cx"> #import "_WKRemoteObjectRegistryInternal.h"
</span><span class="cx"> #import <wtf/NeverDestroyed.h>
</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->loadRequest(request, wkUserData.get());
</del><ins>+ _page->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->canHandleRequest();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+- (BOOL)_shouldOpenExternalURLs
+{
+ return _navigationAction->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 "_WKDiagnosticLoggingDelegate.h"
</span><span class="cx"> #import "_WKFindDelegate.h"
</span><span class="cx"> #import "_WKFormDelegate.h"
</span><ins>+#import "_WKNSURLRequestExtras.h"
</ins><span class="cx"> #import "_WKRemoteObjectRegistryInternal.h"
</span><span class="cx"> #import "_WKSessionStateInternal.h"
</span><span class="cx"> #import "_WKVisitedLinkProviderInternal.h"
</span><span class="lines">@@ -101,6 +102,7 @@
</span><span class="cx"> #import "WebVideoFullscreenManagerProxy.h"
</span><span class="cx"> #import <UIKit/UIApplication.h>
</span><span class="cx"> #import <WebCore/CoreGraphicsSPI.h>
</span><ins>+#import <WebCore/FrameLoaderTypes.h>
</ins><span class="cx"> #import <WebCore/InspectorOverlay.h>
</span><span class="cx"> #import <WebCore/QuartzCoreSPI.h>
</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->loadRequest(request);
</del><ins>+ WebCore::ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy = [request _web_shouldOpenExternalURLs] ? WebCore::ShouldOpenExternalURLsPolicy::ShouldAllow : WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow;
+ auto navigation = _page->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<API::Navigation> WebPageProxy::loadRequest(const ResourceRequest& request, API::Object* userData)
</del><ins>+RefPtr<API::Navigation> WebPageProxy::loadRequest(const ResourceRequest& 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->willAcquireUniversalFileReadSandboxExtension();
</span><del>- m_process->send(Messages::WebPage::LoadRequest(navigation->navigationID(), request, sandboxExtensionHandle, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+ m_process->send(Messages::WebPage::LoadRequest(navigation->navigationID(), request, sandboxExtensionHandle, (uint64_t)shouldOpenExternalURLsPolicy, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</ins><span class="cx"> m_process->responsivenessTimer()->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->assumeReadAccessToBaseURL(resourceDirectoryURL);
</span><del>- m_process->send(Messages::WebPage::LoadRequest(navigation->navigationID(), fileURL, sandboxExtensionHandle, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+ m_process->send(Messages::WebPage::LoadRequest(navigation->navigationID(), fileURL, sandboxExtensionHandle, (uint64_t)ShouldOpenExternalURLsPolicy::ShouldNotAllow, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</ins><span class="cx"> m_process->responsivenessTimer()->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 "WebProcessLifetimeTracker.h"
</span><span class="cx"> #include <WebCore/Color.h>
</span><span class="cx"> #include <WebCore/DragActions.h>
</span><ins>+#include <WebCore/FrameLoaderTypes.h>
</ins><span class="cx"> #include <WebCore/HitTestResult.h>
</span><span class="cx"> #include <WebCore/MediaProducer.h>
</span><span class="cx"> #include <WebCore/Page.h>
</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<API::Navigation> loadRequest(const WebCore::ResourceRequest&, API::Object* userData = nullptr);
</del><ins>+ RefPtr<API::Navigation> loadRequest(const WebCore::ResourceRequest&, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow, API::Object* userData = nullptr);
</ins><span class="cx"> RefPtr<API::Navigation> loadFile(const String& fileURL, const String& resourceDirectoryURL, API::Object* userData = nullptr);
</span><span class="cx"> RefPtr<API::Navigation> loadData(API::Data*, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr);
</span><span class="cx"> RefPtr<API::Navigation> loadHTMLString(const String& htmlString, const String& 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->mouseButton();
</span><span class="cx"> navigationActionData.isProcessingUserGesture = navigationAction.processingUserGesture();
</span><span class="cx"> navigationActionData.canHandleRequest = webPage->canHandleRequest(request);
</span><ins>+ navigationActionData.shouldOpenExternalURLs = navigationAction.shouldOpenExternalURLsPolicy() == ShouldOpenExternalURLsPolicy::ShouldAllow;
</ins><span class="cx">
</span><span class="cx"> WebCore::Frame* coreFrame = m_frame->coreFrame();
</span><span class="cx"> WebDocumentLoader* documentLoader = static_cast<WebDocumentLoader*>(coreFrame->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->coreFrame()->loader().load(FrameLoadRequest(frame->coreFrame(), ResourceRequest(URL(URL(), url))));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebPage::loadRequest(uint64_t navigationID, const ResourceRequest& request, const SandboxExtension::Handle& sandboxExtensionHandle, const UserData& userData)
</del><ins>+void WebPage::loadRequest(uint64_t navigationID, const ResourceRequest& request, const SandboxExtension::Handle& sandboxExtensionHandle, uint64_t shouldOpenExternalURLsPolicy, const UserData& 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()->userInputBridge().loadRequest(FrameLoadRequest(m_mainFrame->coreFrame(), request));
</del><ins>+ FrameLoadRequest frameLoadRequest(m_mainFrame->coreFrame(), request);
+ ShouldOpenExternalURLsPolicy externalURLsPolicy = static_cast<ShouldOpenExternalURLsPolicy>(shouldOpenExternalURLsPolicy);
+ frameLoadRequest.setShouldOpenExternalURLsPolicy(externalURLsPolicy);
</ins><span class="cx">
</span><ins>+ corePage()->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&, const SandboxExtension::Handle&, const UserData&);
</del><ins>+ void loadRequest(uint64_t navigationID, const WebCore::ResourceRequest&, const SandboxExtension::Handle&, uint64_t shouldOpenExternalURLsPolicy, const UserData&);
</ins><span class="cx"> void loadData(const IPC::DataReference&, const String& MIMEType, const String& encodingName, const String& baseURL, const UserData&);
</span><span class="cx"> void loadHTMLString(uint64_t navigationID, const String& htmlString, const String& baseURL, const UserData&);
</span><span class="cx"> void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL, const String& provisionalLoadErrorURL, const UserData&);
</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>