WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
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
Details
Formatted Diff
Diff
Patch
(35.04 KB, patch)
2018-04-17 08:36 PDT
,
Chris Dumez
no flags
Details
Formatted Diff
Diff
Patch
(34.24 KB, patch)
2018-04-17 09:07 PDT
,
Chris Dumez
no flags
Details
Formatted Diff
Diff
Patch
(34.49 KB, patch)
2018-04-17 09:18 PDT
,
Chris Dumez
no flags
Details
Formatted Diff
Diff
Show Obsolete
(3)
View All
Add attachment
proposed patch, testcase, etc.
Chris Dumez
Comment 1
2018-04-16 19:09:53 PDT
<
rdar://problem/39422122
>
Chris Dumez
Comment 2
2018-04-16 20:54:57 PDT
Created
attachment 338074
[details]
Patch
Chris Dumez
Comment 3
2018-04-17 08:36:48 PDT
Created
attachment 338114
[details]
Patch
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
Created
attachment 338124
[details]
Patch
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
Created
attachment 338125
[details]
Patch
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.
Top of Page
Format For Printing
XML
Clone This Bug