WebKit Bugzilla
Attachment 339853 Details for
Bug 185439
: System Preview links should trigger a download
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185439-20180508120229.patch (text/plain), 15.59 KB, created by
Dean Jackson
on 2018-05-08 12:02:30 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Dean Jackson
Created:
2018-05-08 12:02:30 PDT
Size:
15.59 KB
patch
obsolete
>Subversion Revision: 231399 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 7a6d26c79c8e0fb80e2b1ce1cdedae9cdf240bb1..2bcc15bf0703c11ab401de5b9f0fea3d8071a292 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,31 @@ >+2018-05-08 Dean Jackson <dino@apple.com> >+ >+ System Preview links should trigger a download >+ https://bugs.webkit.org/show_bug.cgi?id=185439 >+ <rdar://problem/40065545> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-05 Sam Weinig <sam@webkit.org> > > Cleanup XMLHttpRequestUpload a little >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index b3b5308792bd7864d04676b6187575a0bb76ca11..4e195ce4672edf3a28e042d9714604c7155d6e92 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,21 @@ >+2018-05-08 Dean Jackson <dino@apple.com> >+ >+ System Preview links should trigger a download >+ https://bugs.webkit.org/show_bug.cgi?id=185439 >+ <rdar://problem/40065545> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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 Dean Jackson <dino@apple.com> > > Use thumbnails in System Previews >diff --git a/Source/WebCore/html/HTMLAnchorElement.cpp b/Source/WebCore/html/HTMLAnchorElement.cpp >index 7152317bef273c2be9489a92575276552e62c7cc..89a38c1782c38c3b3b12a2fe10db730640ec95f6 100644 >--- a/Source/WebCore/html/HTMLAnchorElement.cpp >+++ b/Source/WebCore/html/HTMLAnchorElement.cpp >@@ -417,9 +417,14 @@ void HTMLAnchorElement::handleClick(Event& event) > } > #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); > } >diff --git a/Source/WebCore/loader/FrameLoadRequest.cpp b/Source/WebCore/loader/FrameLoadRequest.cpp >index 02382f37b3d752f8b64a92b016aa62e4898b9abf..c154772813dee436a8221260f00c4fe2be6e87f2 100644 >--- a/Source/WebCore/loader/FrameLoadRequest.cpp >+++ b/Source/WebCore/loader/FrameLoadRequest.cpp >@@ -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 @@ FrameLoadRequest::FrameLoadRequest(Document& requester, SecurityOrigin& requeste > , m_shouldOpenExternalURLsPolicy { shouldOpenExternalURLsPolicy } > , m_downloadAttribute { downloadAttribute } > , m_initiatedByMainFrame { initiatedByMainFrame } >+ , m_isSystemPreview { isSystemPreview } > { > } > >diff --git a/Source/WebCore/loader/FrameLoadRequest.h b/Source/WebCore/loader/FrameLoadRequest.h >index 055e8acb8ffd142c7f8f1f4241ac1c2e8d3b73b0..d6f10ed7d900d460e1920d54df47c5df6804facd 100644 >--- a/Source/WebCore/loader/FrameLoadRequest.h >+++ b/Source/WebCore/loader/FrameLoadRequest.h >@@ -38,7 +38,7 @@ class SecurityOrigin; > > 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 @@ public: > 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 @@ private: > AtomicString m_downloadAttribute; > InitiatedByMainFrame m_initiatedByMainFrame { InitiatedByMainFrame::Unknown }; > bool m_isCrossOriginWindowOpenNavigation { false }; >+ bool m_isSystemPreview { false }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/loader/FrameLoader.cpp b/Source/WebCore/loader/FrameLoader.cpp >index 606a0f19a86650b00c23c1cf2b9fda8d86730e13..23bc58d20b8e621349bb937c75b6238d34ba4d7e 100644 >--- a/Source/WebCore/loader/FrameLoader.cpp >+++ b/Source/WebCore/loader/FrameLoader.cpp >@@ -370,13 +370,13 @@ void FrameLoader::changeLocation(FrameLoadRequest&& request) > 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 @@ void FrameLoader::loadURL(FrameLoadRequest&& frameLoadRequest, const String& ref > 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; >diff --git a/Source/WebCore/loader/FrameLoader.h b/Source/WebCore/loader/FrameLoader.h >index c7cd4cad189fd88563ced5f54f6948920a55ff7d..95e170a92ce5e55ef5ca1ef11ed80d8b3eb8f9bd 100644 >--- a/Source/WebCore/loader/FrameLoader.h >+++ b/Source/WebCore/loader/FrameLoader.h >@@ -121,7 +121,7 @@ public: > 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> = { }); >diff --git a/Source/WebCore/platform/network/ResourceRequestBase.cpp b/Source/WebCore/platform/network/ResourceRequestBase.cpp >index 2b650cbb4eef1eefc4a4d9bf165e52bd72c1f6a9..3cb156987e3ef5f7ff8d922eecdd933bcea02fe6 100644 >--- a/Source/WebCore/platform/network/ResourceRequestBase.cpp >+++ b/Source/WebCore/platform/network/ResourceRequestBase.cpp >@@ -576,6 +576,16 @@ void ResourceRequestBase::setHTTPHeaderFields(HTTPHeaderMap headerFields) > 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()) >diff --git a/Source/WebCore/platform/network/ResourceRequestBase.h b/Source/WebCore/platform/network/ResourceRequestBase.h >index 98fcdb4cfeb8a284d3544e67d2dee89028cbbf0d..030a0bb825034a4c9bfaad7ac787adce373a4901 100644 >--- a/Source/WebCore/platform/network/ResourceRequestBase.h >+++ b/Source/WebCore/platform/network/ResourceRequestBase.h >@@ -171,6 +171,9 @@ public: > 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 @@ protected: > Requester m_requester { Requester::Unspecified }; > String m_initiatorIdentifier; > String m_cachePartition { emptyString() }; >+ bool m_isSystemPreview { false }; > > private: > const ResourceRequest& asResourceRequest() const; >diff --git a/Source/WebKit/Shared/WebCoreArgumentCoders.cpp b/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >index 577c49c674c5af90dd32dda02a0d58ae946ee1fc..e76ff64f2a0dc90ef0ddd694f350a4d676fefb89 100644 >--- a/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >+++ b/Source/WebKit/Shared/WebCoreArgumentCoders.cpp >@@ -1237,6 +1237,7 @@ void ArgumentCoder<ResourceRequest>::encode(Encoder& encoder, const ResourceRequ > { > encoder << resourceRequest.cachePartition(); > encoder << resourceRequest.hiddenFromInspector(); >+ encoder << resourceRequest.isSystemPreview(); > > if (resourceRequest.encodingRequiresPlatformData()) { > encoder << true; >@@ -1259,6 +1260,11 @@ bool ArgumentCoder<ResourceRequest>::decode(Decoder& decoder, ResourceRequest& r > return false; > resourceRequest.setHiddenFromInspector(isHiddenFromInspector); > >+ bool isSystemPreview; >+ if (!decoder.decode(isSystemPreview)) >+ return false; >+ resourceRequest.setSystemPreview(isSystemPreview); >+ > bool hasPlatformData; > if (!decoder.decode(hasPlatformData)) > return false; >diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp >index efe7620e0fdadc4d673e33992fe152f99a0a138a..f49a4f824557fbee9fc5239d100fce39878b298c 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.cpp >+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp >@@ -3957,7 +3957,7 @@ void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const Secur > > 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);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
jonlee
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185439
:
339851
| 339853