Title: [231507] trunk/Source
Revision
231507
Author
[email protected]
Date
2018-05-08 13:12:24 -0700 (Tue, 08 May 2018)

Log Message

System Preview links should trigger a download
https://bugs.webkit.org/show_bug.cgi?id=185439
<rdar://problem/40065545>

Reviewed by Jon Lee.

Source/WebCore:

Add a new field to FrameLoadRequest, which then is copied
into ResourceRequest, identifying if the link clicked
is a system preview.

* html/HTMLAnchorElement.cpp:
(WebCore::HTMLAnchorElement::handleClick): Look for isSystemPreviewLink().
* loader/FrameLoadRequest.cpp:
(WebCore::FrameLoadRequest::FrameLoadRequest):
* loader/FrameLoadRequest.h: New property.
(WebCore::FrameLoadRequest::FrameLoadRequest):
(WebCore::FrameLoadRequest::isSystemPreview const):
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::urlSelected):
(WebCore::FrameLoader::loadURL):
* loader/FrameLoader.h:
* platform/network/ResourceRequestBase.cpp:
(WebCore::ResourceRequestBase::isSystemPreview const):
(WebCore::ResourceRequestBase::setSystemPreview):
* platform/network/ResourceRequestBase.h:

Source/WebKit:

Encode the new field identifying a system preview. And
if you encounter such a resource request, trigger
a download.

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<ResourceRequest>::encode):
(IPC::ArgumentCoder<ResourceRequest>::decode):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::decidePolicyForNavigationAction):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (231506 => 231507)


--- trunk/Source/WebCore/ChangeLog	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/ChangeLog	2018-05-08 20:12:24 UTC (rev 231507)
@@ -1,3 +1,31 @@
+2018-05-08  Dean Jackson  <[email protected]>
+
+        System Preview links should trigger a download
+        https://bugs.webkit.org/show_bug.cgi?id=185439
+        <rdar://problem/40065545>
+
+        Reviewed by Jon Lee.
+
+        Add a new field to FrameLoadRequest, which then is copied
+        into ResourceRequest, identifying if the link clicked
+        is a system preview.
+
+        * html/HTMLAnchorElement.cpp:
+        (WebCore::HTMLAnchorElement::handleClick): Look for isSystemPreviewLink().
+        * loader/FrameLoadRequest.cpp:
+        (WebCore::FrameLoadRequest::FrameLoadRequest):
+        * loader/FrameLoadRequest.h: New property.
+        (WebCore::FrameLoadRequest::FrameLoadRequest):
+        (WebCore::FrameLoadRequest::isSystemPreview const):
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::urlSelected):
+        (WebCore::FrameLoader::loadURL):
+        * loader/FrameLoader.h:
+        * platform/network/ResourceRequestBase.cpp:
+        (WebCore::ResourceRequestBase::isSystemPreview const):
+        (WebCore::ResourceRequestBase::setSystemPreview):
+        * platform/network/ResourceRequestBase.h:
+
 2018-05-08  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r231491.

Modified: trunk/Source/WebCore/html/HTMLAnchorElement.cpp (231506 => 231507)


--- trunk/Source/WebCore/html/HTMLAnchorElement.cpp	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/html/HTMLAnchorElement.cpp	2018-05-08 20:12:24 UTC (rev 231507)
@@ -417,9 +417,14 @@
     }
 #endif
 
+    bool isSystemPreview = false;
+#if USE(SYSTEM_PREVIEW)
+    isSystemPreview = isSystemPreviewLink();
+#endif
+
     ShouldSendReferrer shouldSendReferrer = hasRel(Relation::NoReferrer) ? NeverSendReferrer : MaybeSendReferrer;
     auto newFrameOpenerPolicy = hasRel(Relation::NoOpener) ? std::make_optional(NewFrameOpenerPolicy::Suppress) : std::nullopt;
-    frame->loader().urlSelected(completedURL, target(), &event, LockHistory::No, LockBackForwardList::No, shouldSendReferrer, document().shouldOpenExternalURLsPolicyToPropagate(), newFrameOpenerPolicy, downloadAttribute);
+    frame->loader().urlSelected(completedURL, target(), &event, LockHistory::No, LockBackForwardList::No, shouldSendReferrer, document().shouldOpenExternalURLsPolicyToPropagate(), newFrameOpenerPolicy, downloadAttribute, isSystemPreview);
 
     sendPings(completedURL);
 }

Modified: trunk/Source/WebCore/loader/FrameLoadRequest.cpp (231506 => 231507)


--- trunk/Source/WebCore/loader/FrameLoadRequest.cpp	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/loader/FrameLoadRequest.cpp	2018-05-08 20:12:24 UTC (rev 231507)
@@ -37,7 +37,7 @@
 
 namespace WebCore {
 
-FrameLoadRequest::FrameLoadRequest(Document& requester, SecurityOrigin& requesterSecurityOrigin, const ResourceRequest& resourceRequest, const String& frameName, LockHistory lockHistory, LockBackForwardList lockBackForwardList, ShouldSendReferrer shouldSendReferrer, AllowNavigationToInvalidURL allowNavigationToInvalidURL, NewFrameOpenerPolicy newFrameOpenerPolicy, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, InitiatedByMainFrame initiatedByMainFrame, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL, const AtomicString& downloadAttribute)
+FrameLoadRequest::FrameLoadRequest(Document& requester, SecurityOrigin& requesterSecurityOrigin, const ResourceRequest& resourceRequest, const String& frameName, LockHistory lockHistory, LockBackForwardList lockBackForwardList, ShouldSendReferrer shouldSendReferrer, AllowNavigationToInvalidURL allowNavigationToInvalidURL, NewFrameOpenerPolicy newFrameOpenerPolicy, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, InitiatedByMainFrame initiatedByMainFrame, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL, const AtomicString& downloadAttribute, bool isSystemPreview)
     : m_requester { makeRef(requester) }
     , m_requesterSecurityOrigin { makeRef(requesterSecurityOrigin) }
     , m_resourceRequest { resourceRequest }
@@ -51,6 +51,7 @@
     , m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy }
     , m_downloadAttribute { downloadAttribute }
     , m_initiatedByMainFrame { initiatedByMainFrame }
+    , m_isSystemPreview { isSystemPreview }
 {
 }
 

Modified: trunk/Source/WebCore/loader/FrameLoadRequest.h (231506 => 231507)


--- trunk/Source/WebCore/loader/FrameLoadRequest.h	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/loader/FrameLoadRequest.h	2018-05-08 20:12:24 UTC (rev 231507)
@@ -38,7 +38,7 @@
 
 class FrameLoadRequest {
 public:
-    WEBCORE_EXPORT FrameLoadRequest(Document&, SecurityOrigin&, const ResourceRequest&, const String& frameName, LockHistory, LockBackForwardList, ShouldSendReferrer, AllowNavigationToInvalidURL, NewFrameOpenerPolicy, ShouldOpenExternalURLsPolicy, InitiatedByMainFrame, ShouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL, const AtomicString& downloadAttribute = { });
+    WEBCORE_EXPORT FrameLoadRequest(Document&, SecurityOrigin&, const ResourceRequest&, const String& frameName, LockHistory, LockBackForwardList, ShouldSendReferrer, AllowNavigationToInvalidURL, NewFrameOpenerPolicy, ShouldOpenExternalURLsPolicy, InitiatedByMainFrame, ShouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL, const AtomicString& downloadAttribute = { }, bool isSystemPreview = false);
     WEBCORE_EXPORT FrameLoadRequest(Frame&, const ResourceRequest&, ShouldOpenExternalURLsPolicy, const SubstituteData& = SubstituteData());
 
     WEBCORE_EXPORT ~FrameLoadRequest();
@@ -87,6 +87,8 @@
     void setIsCrossOriginWindowOpenNavigation(bool value) { m_isCrossOriginWindowOpenNavigation = value; }
     bool isCrossOriginWindowOpenNavigation() const { return m_isCrossOriginWindowOpenNavigation; }
 
+    bool isSystemPreview() const { return m_isSystemPreview; }
+
 private:
     Ref<Document> m_requester;
     Ref<SecurityOrigin> m_requesterSecurityOrigin;
@@ -106,6 +108,7 @@
     AtomicString m_downloadAttribute;
     InitiatedByMainFrame m_initiatedByMainFrame { InitiatedByMainFrame::Unknown };
     bool m_isCrossOriginWindowOpenNavigation { false };
+    bool m_isSystemPreview { false };
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (231506 => 231507)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2018-05-08 20:12:24 UTC (rev 231507)
@@ -370,13 +370,13 @@
     urlSelected(WTFMove(request), nullptr);
 }
 
-void FrameLoader::urlSelected(const URL& url, const String& passedTarget, Event* triggeringEvent, LockHistory lockHistory, LockBackForwardList lockBackForwardList, ShouldSendReferrer shouldSendReferrer, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, std::optional<NewFrameOpenerPolicy> openerPolicy, const AtomicString& downloadAttribute)
+void FrameLoader::urlSelected(const URL& url, const String& passedTarget, Event* triggeringEvent, LockHistory lockHistory, LockBackForwardList lockBackForwardList, ShouldSendReferrer shouldSendReferrer, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, std::optional<NewFrameOpenerPolicy> openerPolicy, const AtomicString& downloadAttribute, bool isSystemPreview)
 {
     auto* frame = lexicalFrameFromCommonVM();
     auto initiatedByMainFrame = frame && frame->isMainFrame() ? InitiatedByMainFrame::Yes : InitiatedByMainFrame::Unknown;
 
     NewFrameOpenerPolicy newFrameOpenerPolicy = openerPolicy.value_or(shouldSendReferrer == NeverSendReferrer ? NewFrameOpenerPolicy::Suppress : NewFrameOpenerPolicy::Allow);
-    urlSelected(FrameLoadRequest(*m_frame.document(), m_frame.document()->securityOrigin(), { url }, passedTarget, lockHistory, lockBackForwardList, shouldSendReferrer, AllowNavigationToInvalidURL::Yes, newFrameOpenerPolicy, shouldOpenExternalURLsPolicy, initiatedByMainFrame, DoNotReplaceDocumentIfJavaScriptURL, downloadAttribute), triggeringEvent);
+    urlSelected(FrameLoadRequest(*m_frame.document(), m_frame.document()->securityOrigin(), { url }, passedTarget, lockHistory, lockBackForwardList, shouldSendReferrer, AllowNavigationToInvalidURL::Yes, newFrameOpenerPolicy, shouldOpenExternalURLsPolicy, initiatedByMainFrame, DoNotReplaceDocumentIfJavaScriptURL, downloadAttribute, isSystemPreview), triggeringEvent);
 }
 
 void FrameLoader::urlSelected(FrameLoadRequest&& frameRequest, Event* triggeringEvent)
@@ -1354,8 +1354,9 @@
         return;
     }
 
-    // must grab this now, since this load may stop the previous load and clear this flag
+    // Must grab this now, since this load may stop the previous load and clear this flag.
     bool isRedirect = m_quickRedirectComing;
+    request.setSystemPreview(frameLoadRequest.isSystemPreview());
     loadWithNavigationAction(request, action, lockHistory, newLoadType, formState, allowNavigationToInvalidURL, [this, isRedirect, sameURL, newLoadType, protectedFrame = makeRef(m_frame), completionHandler = completionHandlerCaller.release()] {
         if (isRedirect) {
             m_quickRedirectComing = false;

Modified: trunk/Source/WebCore/loader/FrameLoader.h (231506 => 231507)


--- trunk/Source/WebCore/loader/FrameLoader.h	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/loader/FrameLoader.h	2018-05-08 20:12:24 UTC (rev 231507)
@@ -121,7 +121,7 @@
     unsigned long loadResourceSynchronously(const ResourceRequest&, ClientCredentialPolicy, const FetchOptions&, const HTTPHeaderMap&, ResourceError&, ResourceResponse&, RefPtr<SharedBuffer>& data);
 
     void changeLocation(FrameLoadRequest&&);
-    WEBCORE_EXPORT void urlSelected(const URL&, const String& target, Event*, LockHistory, LockBackForwardList, ShouldSendReferrer, ShouldOpenExternalURLsPolicy, std::optional<NewFrameOpenerPolicy> = std::nullopt, const AtomicString& downloadAttribute = nullAtom());
+    WEBCORE_EXPORT void urlSelected(const URL&, const String& target, Event*, LockHistory, LockBackForwardList, ShouldSendReferrer, ShouldOpenExternalURLsPolicy, std::optional<NewFrameOpenerPolicy> = std::nullopt, const AtomicString& downloadAttribute = nullAtom(), bool isSystemPreview = false);
     void submitForm(Ref<FormSubmission>&&);
 
     WEBCORE_EXPORT void reload(OptionSet<ReloadOption> = { });

Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp (231506 => 231507)


--- trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp	2018-05-08 20:12:24 UTC (rev 231507)
@@ -576,6 +576,16 @@
     m_platformRequestUpdated = false;
 }
 
+bool ResourceRequestBase::isSystemPreview() const
+{
+    return m_isSystemPreview;
+}
+
+void ResourceRequestBase::setSystemPreview(bool s)
+{
+    m_isSystemPreview = s;
+}
+
 bool equalIgnoringHeaderFields(const ResourceRequestBase& a, const ResourceRequestBase& b)
 {
     if (a.url() != b.url())

Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.h (231506 => 231507)


--- trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2018-05-08 20:12:24 UTC (rev 231507)
@@ -171,6 +171,9 @@
     String initiatorIdentifier() const { return m_initiatorIdentifier; }
     void setInitiatorIdentifier(const String& identifier) { m_initiatorIdentifier = identifier; }
 
+    WEBCORE_EXPORT bool isSystemPreview() const;
+    WEBCORE_EXPORT void setSystemPreview(bool);
+
 #if !PLATFORM(COCOA)
     bool encodingRequiresPlatformData() const { return true; }
 #endif
@@ -230,6 +233,7 @@
     Requester m_requester { Requester::Unspecified };
     String m_initiatorIdentifier;
     String m_cachePartition { emptyString() };
+    bool m_isSystemPreview { false };
 
 private:
     const ResourceRequest& asResourceRequest() const;

Modified: trunk/Source/WebKit/ChangeLog (231506 => 231507)


--- trunk/Source/WebKit/ChangeLog	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebKit/ChangeLog	2018-05-08 20:12:24 UTC (rev 231507)
@@ -1,3 +1,21 @@
+2018-05-08  Dean Jackson  <[email protected]>
+
+        System Preview links should trigger a download
+        https://bugs.webkit.org/show_bug.cgi?id=185439
+        <rdar://problem/40065545>
+
+        Reviewed by Jon Lee.
+
+        Encode the new field identifying a system preview. And
+        if you encounter such a resource request, trigger
+        a download.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<ResourceRequest>::encode):
+        (IPC::ArgumentCoder<ResourceRequest>::decode):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
+
 2018-05-08  John Wilander  <[email protected]>
 
         Storage Access API: Add a request roundtrip to check whether prompting is needed

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp (231506 => 231507)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp	2018-05-08 20:12:24 UTC (rev 231507)
@@ -1237,6 +1237,7 @@
 {
     encoder << resourceRequest.cachePartition();
     encoder << resourceRequest.hiddenFromInspector();
+    encoder << resourceRequest.isSystemPreview();
 
     if (resourceRequest.encodingRequiresPlatformData()) {
         encoder << true;
@@ -1259,6 +1260,11 @@
         return false;
     resourceRequest.setHiddenFromInspector(isHiddenFromInspector);
 
+    bool isSystemPreview;
+    if (!decoder.decode(isSystemPreview))
+        return false;
+    resourceRequest.setSystemPreview(isSystemPreview);
+
     bool hasPlatformData;
     if (!decoder.decode(hasPlatformData))
         return false;

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (231506 => 231507)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-05-08 19:42:20 UTC (rev 231506)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2018-05-08 20:12:24 UTC (rev 231507)
@@ -3961,7 +3961,7 @@
 
     uint64_t newNavigationID = navigation->navigationID();
     navigation->setWasUserInitiated(!!navigationActionData.userGestureTokenIdentifier);
-    navigation->setShouldForceDownload(!navigationActionData.downloadAttribute.isNull());
+    navigation->setShouldForceDownload(!navigationActionData.downloadAttribute.isNull() || request.isSystemPreview());
     navigation->setCurrentRequest(ResourceRequest(request), m_process->coreProcessIdentifier());
     navigation->setCurrentRequestIsRedirect(navigationActionData.isRedirect);
     navigation->setTreatAsSameOriginNavigation(navigationActionData.treatAsSameOriginNavigation);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to