RESOLVED FIXED 184678
REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
https://bugs.webkit.org/show_bug.cgi?id=184678
Summary REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens ...
Chris Dumez
Reported 2018-04-16 19:09:37 PDT
CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab.
Attachments
Patch (35.04 KB, patch)
2018-04-16 20:54 PDT, Chris Dumez
no flags
Patch (35.04 KB, patch)
2018-04-17 08:36 PDT, Chris Dumez
no flags
Patch (34.24 KB, patch)
2018-04-17 09:07 PDT, Chris Dumez
no flags
Patch (34.49 KB, patch)
2018-04-17 09:18 PDT, Chris Dumez
no flags
Chris Dumez
Comment 1 2018-04-16 19:09:53 PDT
Chris Dumez
Comment 2 2018-04-16 20:54:57 PDT
Chris Dumez
Comment 3 2018-04-17 08:36:48 PDT
Alex Christensen
Comment 4 2018-04-17 08:53:13 PDT
Comment on attachment 338114 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=338114&action=review > Source/WebKit/UIProcess/WebPageProxy.messages.in:103 > + DecidePolicyForNavigationActionSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (uint64_t newNavigationID, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID, std::optional<WebKit::WebsitePoliciesData> websitePolicies) I think it would look a lot nicer if this were delayed.
Chris Dumez
Comment 5 2018-04-17 08:55:02 PDT
(In reply to Alex Christensen from comment #4) > Comment on attachment 338114 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=338114&action=review > > > Source/WebKit/UIProcess/WebPageProxy.messages.in:103 > > + DecidePolicyForNavigationActionSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (uint64_t newNavigationID, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID, std::optional<WebKit::WebsitePoliciesData> websitePolicies) > > I think it would look a lot nicer if this were delayed. Not very familiar with this but I'll figure it out from existing code.
Chris Dumez
Comment 6 2018-04-17 09:07:14 PDT
Chris Dumez
Comment 7 2018-04-17 09:07:38 PDT
(In reply to Alex Christensen from comment #4) > Comment on attachment 338114 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=338114&action=review > > > Source/WebKit/UIProcess/WebPageProxy.messages.in:103 > > + DecidePolicyForNavigationActionSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, struct WebKit::NavigationActionData navigationActionData, struct WebKit::FrameInfoData originatingFrameInfoData, uint64_t originatingPageID, WebCore::ResourceRequest originalRequest, WebCore::ResourceRequest request, uint64_t listenerID, WebKit::UserData userData) -> (uint64_t newNavigationID, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID, std::optional<WebKit::WebsitePoliciesData> websitePolicies) > > I think it would look a lot nicer if this were delayed. Done, much nicer / simpler indeed.
Chris Dumez
Comment 8 2018-04-17 09:12:58 PDT
Comment on attachment 338124 [details] Patch Alex pointed out an issue offline.
Chris Dumez
Comment 9 2018-04-17 09:18:02 PDT
Alex Christensen
Comment 10 2018-04-17 09:51:44 PDT
Comment on attachment 338125 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=338125&action=review > Source/WebKit/UIProcess/WebPageProxy.cpp:3952 > + // If the client did not respond synchronously, proceed with the load. > + if (auto syncNavigationActionPolicyReply = WTFMove(m_syncNavigationActionPolicyReply)) > + syncNavigationActionPolicyReply->send(navigationID, PolicyAction::Use, { }, { }); What should we do with the call to WebPageProxy::receivedPolicyDecision which will happen later, then? I think we should do nothing there.
Chris Dumez
Comment 11 2018-04-17 10:40:40 PDT
Comment on attachment 338125 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=338125&action=review >> Source/WebKit/UIProcess/WebPageProxy.cpp:3952 >> + syncNavigationActionPolicyReply->send(navigationID, PolicyAction::Use, { }, { }); > > What should we do with the call to WebPageProxy::receivedPolicyDecision which will happen later, then? I think we should do nothing there. If we do not do anything here then the WebProcess will be hung for an undetermined duration, while we await the client response. I think we tried this in the past and this caused regression, no? I want to restore pre-r229831 behavior, where the load would keep going if the client does not answer synchronously. I am trying to fix a regression from r229831 here and restoring pre-r229831 behavior is the safest bet. What you are suggesting seems to be another behavior.
Chris Dumez
Comment 12 2018-04-17 10:42:30 PDT
Comment on attachment 338125 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=338125&action=review >>> Source/WebKit/UIProcess/WebPageProxy.cpp:3952 >>> + syncNavigationActionPolicyReply->send(navigationID, PolicyAction::Use, { }, { }); >> >> What should we do with the call to WebPageProxy::receivedPolicyDecision which will happen later, then? I think we should do nothing there. > > If we do not do anything here then the WebProcess will be hung for an undetermined duration, while we await the client response. I think we tried this in the past and this caused regression, no? > > I want to restore pre-r229831 behavior, where the load would keep going if the client does not answer synchronously. I am trying to fix a regression from r229831 here and restoring pre-r229831 behavior is the safest bet. What you are suggesting seems to be another behavior. To answer your question, my understanding is that when the client responds asynchronously, WebPageProxy::receivedPolicyDecision() will send the WebPage::DidReceivePolicyDecision IPC to the WebProcess, which the WebProcess will ignore because there is no longer any listener for this ListenerID.
WebKit Commit Bot
Comment 13 2018-04-17 11:13:55 PDT
Comment on attachment 338125 [details] Patch Clearing flags on attachment: 338125 Committed r230721: <https://trac.webkit.org/changeset/230721>
WebKit Commit Bot
Comment 14 2018-04-17 11:13:57 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.