Changeset 230721 in webkit


Ignore:
Timestamp:
Apr 17, 2018 11:13:49 AM (6 years ago)
Author:
Chris Dumez
Message:

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
<rdar://problem/39422122>

Reviewed by Alex Christensen.

Source/WebCore:

Frament navigations need to happen synchronously for Web-compatibility. Because of this,
r225657 added code to make sure that if the client does not make the navigation policy
decision synchronously for frament navigations, then we'll stop waiting for the client
and proceed with the navigation. However, r229831 make the navigation policy decision
IPC decision, meaning that even if the client responds synchronously, it would be
asynchronously from WebCore's point of view. As a result, we would always ignore the
client's policy decision when doing a fragment navigation.

This is an issue on iclould.com because the web-app links are fragment URLs. When you
CMD+click one of these link, we do the navigation policy check. As a result of this
check, Safari responds IGNORE to the policy decision and instead decides to load the
link in a new tab (because CMD key is pressed). Due to the bug mentioned above, we
would not obey the IGNORE policy decision from Safari and load the link in the current
tab, even though Safari would already be loading it in a new tab.

To address the issue, I reintroduced a synchronous code path for navigation policy
decision making, backed by synchronous IPC. This synchronous code path is now used for
fragment navigations to restore pre-r229831 behavior. If the client does not answer
synchronously, we'll proceed with the navigation anyway, as was happening pre-r229831.

Test: http/tests/navigation/fragment-navigation-policy-ignore.html

  • loader/EmptyClients.cpp:

(WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

  • loader/EmptyFrameLoaderClient.h:
  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::loadURL):
(WebCore::FrameLoader::loadWithDocumentLoader):

  • loader/FrameLoaderClient.h:
  • loader/PolicyChecker.cpp:

(WebCore::PolicyChecker::checkNavigationPolicy):

  • loader/PolicyChecker.h:

Source/WebKit:

Re-introduce synchronous code path which existed pre-r229831 and use it for fragment navigations.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::receivedPolicyDecision):
(WebKit::WebPageProxy::decidePolicyForNavigationActionSync):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

Source/WebKitLegacy/mac:

Add new parameter to dispatchDecidePolicyForNavigationAction.

  • WebCoreSupport/WebFrameLoaderClient.h:
  • WebCoreSupport/WebFrameLoaderClient.mm:

(WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

Source/WebKitLegacy/win:

Add new parameter to dispatchDecidePolicyForNavigationAction.

  • WebCoreSupport/WebFrameLoaderClient.cpp:

(WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

  • WebCoreSupport/WebFrameLoaderClient.h:

LayoutTests:

Add layout test coverage.

  • http/tests/navigation/fragment-navigation-policy-ignore-expected.txt: Added.
  • http/tests/navigation/fragment-navigation-policy-ignore.html: Added.
Location:
trunk
Files:
2 added
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r230712 r230721  
     12018-04-17  Chris Dumez  <cdumez@apple.com>
     2
     3        REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
     4        https://bugs.webkit.org/show_bug.cgi?id=184678
     5        <rdar://problem/39422122>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Add layout test coverage.
     10
     11        * http/tests/navigation/fragment-navigation-policy-ignore-expected.txt: Added.
     12        * http/tests/navigation/fragment-navigation-policy-ignore.html: Added.
     13
    1142018-04-17  Said Abou-Hallawa  <sabouhallawa@apple.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r230716 r230721  
     12018-04-17  Chris Dumez  <cdumez@apple.com>
     2
     3        REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
     4        https://bugs.webkit.org/show_bug.cgi?id=184678
     5        <rdar://problem/39422122>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Frament navigations need to happen synchronously for Web-compatibility. Because of this,
     10        r225657 added code to make sure that if the client does not make the navigation policy
     11        decision synchronously for frament navigations, then we'll stop waiting for the client
     12        and proceed with the navigation. However, r229831 make the navigation policy decision
     13        IPC decision, meaning that even if the client responds synchronously, it would be
     14        asynchronously from WebCore's point of view. As a result, we would always ignore the
     15        client's policy decision when doing a fragment navigation.
     16
     17        This is an issue on iclould.com because the web-app links are fragment URLs. When you
     18        CMD+click one of these link, we do the navigation policy check. As a result of this
     19        check, Safari responds IGNORE to the policy decision and instead decides to load the
     20        link in a new tab (because CMD key is pressed). Due to the bug mentioned above, we
     21        would not obey the IGNORE policy decision from Safari and load the link in the current
     22        tab, even though Safari would already be loading it in a new tab.
     23
     24        To address the issue, I reintroduced a synchronous code path for navigation policy
     25        decision making, backed by synchronous IPC. This synchronous code path is now used for
     26        fragment navigations to restore pre-r229831 behavior. If the client does not answer
     27        synchronously, we'll proceed with the navigation anyway, as was happening pre-r229831.
     28
     29        Test: http/tests/navigation/fragment-navigation-policy-ignore.html
     30
     31        * loader/EmptyClients.cpp:
     32        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     33        * loader/EmptyFrameLoaderClient.h:
     34        * loader/FrameLoader.cpp:
     35        (WebCore::FrameLoader::loadURL):
     36        (WebCore::FrameLoader::loadWithDocumentLoader):
     37        * loader/FrameLoaderClient.h:
     38        * loader/PolicyChecker.cpp:
     39        (WebCore::PolicyChecker::checkNavigationPolicy):
     40        * loader/PolicyChecker.h:
     41
    1422018-04-17  Matt Lewis  <jlewis3@apple.com>
    243
  • trunk/Source/WebCore/loader/EmptyClients.cpp

    r229979 r230721  
    437437}
    438438
    439 void EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, bool, FormState*, FramePolicyFunction&&)
     439void EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, bool, FormState*, PolicyDecisionMode, FramePolicyFunction&&)
    440440{
    441441}
  • trunk/Source/WebCore/loader/EmptyFrameLoaderClient.h

    r229977 r230721  
    9696    void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction&&) final { }
    9797    void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, FormState*, const String&, FramePolicyFunction&&) final;
    98     void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, bool didReceiveRedirectResponse, FormState*, FramePolicyFunction&&) final;
     98    void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, bool didReceiveRedirectResponse, FormState*, PolicyDecisionMode, FramePolicyFunction&&) final;
    9999    void cancelPolicyCheck() final { }
    100100
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r230711 r230721  
    12611261}
    12621262
    1263 struct SharedBool : public RefCounted<SharedBool> {
    1264     bool value { false };
    1265 };
    1266 
    12671263void FrameLoader::loadURL(FrameLoadRequest&& frameLoadRequest, const String& referrer, FrameLoadType newLoadType, Event* event, FormState* formState, CompletionHandler<void()>&& completionHandler)
    12681264{
     
    13371333        policyChecker().stopCheck();
    13381334        policyChecker().setLoadType(newLoadType);
    1339         auto completionHandlerCalled = adoptRef(*new SharedBool);
    1340         policyChecker().checkNavigationPolicy(ResourceRequest(request), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame), completionHandlerCalled = completionHandlerCalled.copyRef()] (const ResourceRequest& request, FormState*, ShouldContinue shouldContinue) {
    1341             if (!completionHandlerCalled->value) {
    1342                 completionHandlerCalled->value = true;
    1343                 continueFragmentScrollAfterNavigationPolicy(request, shouldContinue == ShouldContinue::Yes);
    1344             }
    1345         });
    1346             if (!completionHandlerCalled->value) {
    1347             completionHandlerCalled->value = true;
    1348             continueFragmentScrollAfterNavigationPolicy(WTFMove(request), true);
    1349         }
     1335        policyChecker().checkNavigationPolicy(ResourceRequest(request), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame)] (const ResourceRequest& request, FormState*, ShouldContinue shouldContinue) {
     1336            continueFragmentScrollAfterNavigationPolicy(request, shouldContinue == ShouldContinue::Yes);
     1337        }, PolicyDecisionMode::Synchronous);
    13501338        return;
    13511339    }
     
    15131501        oldDocumentLoader->setLastCheckedRequest(ResourceRequest());
    15141502        policyChecker().stopCheck();
    1515         auto completionHandlerCalled = adoptRef(*new SharedBool);
    1516         policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame), completionHandlerCalled = completionHandlerCalled.copyRef()] (const ResourceRequest& request, FormState*, ShouldContinue shouldContinue) {
    1517             if (!completionHandlerCalled->value) {
    1518                 completionHandlerCalled->value = true;
    1519                 continueFragmentScrollAfterNavigationPolicy(request, shouldContinue == ShouldContinue::Yes);
    1520             }
    1521         });
    1522         if (!completionHandlerCalled->value) {
    1523             completionHandlerCalled->value = true;
    1524             continueFragmentScrollAfterNavigationPolicy(loader->request(), true);
    1525         }
     1503        policyChecker().checkNavigationPolicy(ResourceRequest(loader->request()), false /* didReceiveRedirectResponse */, oldDocumentLoader.get(), formState, [this, protectedFrame = makeRef(m_frame)] (const ResourceRequest& request, FormState*, ShouldContinue shouldContinue) {
     1504            continueFragmentScrollAfterNavigationPolicy(request, shouldContinue == ShouldContinue::Yes);
     1505        }, PolicyDecisionMode::Synchronous);
    15261506        return;
    15271507    }
  • trunk/Source/WebCore/loader/FrameLoaderClient.h

    r229977 r230721  
    103103class Widget;
    104104
     105enum class PolicyDecisionMode;
    105106struct StringWithDirection;
    106107
     
    190191    virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction&&) = 0;
    191192    virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, FormState*, const String& frameName, FramePolicyFunction&&) = 0;
    192     virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, bool didReceiveRedirectResponse, FormState*, FramePolicyFunction&&) = 0;
     193    virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, bool didReceiveRedirectResponse, FormState*, PolicyDecisionMode, FramePolicyFunction&&) = 0;
    193194    virtual void didDecidePolicyForNavigationAction() { }
    194195    virtual void cancelPolicyCheck() = 0;
  • trunk/Source/WebCore/loader/PolicyChecker.cpp

    r230458 r230721  
    8282}
    8383
    84 void PolicyChecker::checkNavigationPolicy(ResourceRequest&& request, bool didReceiveRedirectResponse, DocumentLoader* loader, FormState* formState, NavigationPolicyDecisionFunction&& function)
     84void PolicyChecker::checkNavigationPolicy(ResourceRequest&& request, bool didReceiveRedirectResponse, DocumentLoader* loader, FormState* formState, NavigationPolicyDecisionFunction&& function, PolicyDecisionMode policyDecisionMode)
    8585{
    8686    NavigationAction action = loader->triggeringAction();
     
    150150    String suggestedFilename = action.downloadAttribute().isEmpty() ? nullAtom() : action.downloadAttribute();
    151151    ResourceRequest requestCopy = request;
    152     m_frame.loader().client().dispatchDecidePolicyForNavigationAction(action, request, didReceiveRedirectResponse, formState, [this, function = WTFMove(function), request = WTFMove(requestCopy), formState = makeRefPtr(formState), suggestedFilename = WTFMove(suggestedFilename)](PolicyAction policyAction) mutable {
     152    m_frame.loader().client().dispatchDecidePolicyForNavigationAction(action, request, didReceiveRedirectResponse, formState, policyDecisionMode, [this, function = WTFMove(function), request = WTFMove(requestCopy), formState = makeRefPtr(formState), suggestedFilename = WTFMove(suggestedFilename)](PolicyAction policyAction) mutable {
    153153        m_frame.loader().client().didDecidePolicyForNavigationAction();
    154154
  • trunk/Source/WebCore/loader/PolicyChecker.h

    r230458 r230721  
    5757};
    5858
     59enum class PolicyDecisionMode { Synchronous, Asynchronous };
     60
    5961using NewWindowPolicyDecisionFunction = CompletionHandler<void(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, ShouldContinue)>;
    6062using NavigationPolicyDecisionFunction = CompletionHandler<void(ResourceRequest&&, FormState*, ShouldContinue)>;
     
    6668    explicit PolicyChecker(Frame&);
    6769
    68     void checkNavigationPolicy(ResourceRequest&&, bool didReceiveRedirectResponse, DocumentLoader*, FormState*, NavigationPolicyDecisionFunction&&);
     70    void checkNavigationPolicy(ResourceRequest&&, bool didReceiveRedirectResponse, DocumentLoader*, FormState*, NavigationPolicyDecisionFunction&&, PolicyDecisionMode = PolicyDecisionMode::Asynchronous);
    6971    void checkNavigationPolicy(ResourceRequest&&, bool didReceiveRedirectResponse, NavigationPolicyDecisionFunction&&);
    7072    void checkNewWindowPolicy(NavigationAction&&, const ResourceRequest&, FormState*, const String& frameName, NewWindowPolicyDecisionFunction&&);
  • trunk/Source/WebKit/ChangeLog

    r230718 r230721  
     12018-04-17  Chris Dumez  <cdumez@apple.com>
     2
     3        REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
     4        https://bugs.webkit.org/show_bug.cgi?id=184678
     5        <rdar://problem/39422122>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Re-introduce synchronous code path which existed pre-r229831 and use it for fragment navigations.
     10
     11        * UIProcess/WebPageProxy.cpp:
     12        (WebKit::WebPageProxy::receivedPolicyDecision):
     13        (WebKit::WebPageProxy::decidePolicyForNavigationActionSync):
     14        * UIProcess/WebPageProxy.h:
     15        * UIProcess/WebPageProxy.messages.in:
     16        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     17        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     18        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
     19
    1202018-04-17  Michael Catanzaro  <mcatanzaro@igalia.com>
    221
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r230640 r230721  
    23912391    }
    23922392
     2393    if (auto syncNavigationActionPolicyReply = WTFMove(m_syncNavigationActionPolicyReply)) {
     2394        syncNavigationActionPolicyReply->send(navigation ? navigation->navigationID() : 0, action, downloadID, WTFMove(websitePolicies));
     2395        return;
     2396    }
     2397
    23932398    m_process->send(Messages::WebPage::DidReceivePolicyDecision(frame.frameID(), listenerID, action, navigation ? navigation->navigationID() : 0, downloadID, websitePolicies), m_pageID);
    23942399}
     
    39103915
    39113916    m_shouldSuppressAppLinksInNextNavigationPolicyDecision = false;
     3917}
     3918
     3919void WebPageProxy::decidePolicyForNavigationActionSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&& request, uint64_t listenerID, const UserData& userData, Ref<Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply>&& reply)
     3920{
     3921    ASSERT(!m_syncNavigationActionPolicyReply);
     3922    m_syncNavigationActionPolicyReply = WTFMove(reply);
     3923
     3924    decidePolicyForNavigationAction(frameID, frameSecurityOrigin, navigationID, WTFMove(navigationActionData), originatingFrameInfoData, originatingPageID, originalRequest, WTFMove(request), listenerID, userData);
     3925
     3926    // If the client did not respond synchronously, proceed with the load.
     3927    if (auto syncNavigationActionPolicyReply = WTFMove(m_syncNavigationActionPolicyReply))
     3928        syncNavigationActionPolicyReply->send(navigationID, PolicyAction::Use, { }, { });
    39123929}
    39133930
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r230640 r230721  
    13681368
    13691369    void decidePolicyForNavigationAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, uint64_t listenerID, const UserData&);
     1370    void decidePolicyForNavigationActionSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&&, const FrameInfoData&, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, WebCore::ResourceRequest&&, uint64_t listenerID, const UserData&, Ref<Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply>&&);
    13701371    void decidePolicyForNewWindowAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, NavigationActionData&&, WebCore::ResourceRequest&&, const String& frameName, uint64_t listenerID, const UserData&);
    13711372    void decidePolicyForResponse(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&);
     
    19261927    bool m_isPerformingDOMPrintOperation { false };
    19271928
     1929    // Synchronous navigation policy decision.
     1930    RefPtr<Messages::WebPageProxy::DecidePolicyForNavigationActionSync::DelayedReply> m_syncNavigationActionPolicyReply;
     1931
    19281932    WebCore::ResourceRequest m_decidePolicyForResponseRequest;
    19291933    bool m_shouldSuppressAppLinksInNextNavigationPolicyDecision { false };
  • trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in

    r230591 r230721  
    101101    DecidePolicyForResponse(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::UserData userData)
    102102    DecidePolicyForNavigationAction(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)
     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) Delayed
    103104    DecidePolicyForNewWindowAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, struct WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::UserData userData)
    104105    UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::UserData userData)
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r230489 r230721  
    816816}
    817817
    818 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& navigationAction, const ResourceRequest& request, bool didReceiveRedirectResponse, FormState* formState, FramePolicyFunction&& function)
     818void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& navigationAction, const ResourceRequest& request, bool didReceiveRedirectResponse, FormState* formState, PolicyDecisionMode policyDecisionMode, FramePolicyFunction&& function)
    819819{
    820820    WebPage* webPage = m_frame ? m_frame->page() : nullptr;
     
    888888    // Notify the UIProcess.
    889889    Ref<WebFrame> protect(*m_frame);
     890
     891    if (policyDecisionMode == PolicyDecisionMode::Synchronous) {
     892        uint64_t newNavigationID;
     893        PolicyAction policyAction;
     894        DownloadID downloadID;
     895        std::optional<WebsitePoliciesData> websitePolicies;
     896
     897        if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationActionSync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingFrame && originatingFrame->page() ? originatingFrame->page()->pageID() : 0, navigationAction.resourceRequest(), request, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForNavigationActionSync::Reply(newNavigationID, policyAction, downloadID, websitePolicies))) {
     898            m_frame->didReceivePolicyDecision(listenerID, PolicyAction::Ignore, 0, { }, { });
     899            return;
     900        }
     901
     902        m_frame->didReceivePolicyDecision(listenerID, policyAction, 0, downloadID, { });
     903        return;
     904    }
     905
     906    ASSERT(policyDecisionMode == PolicyDecisionMode::Asynchronous);
    890907    if (!webPage->send(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), documentLoader->navigationID(), navigationActionData, originatingFrameInfoData, originatingFrame && originatingFrame->page() ? originatingFrame->page()->pageID() : 0, navigationAction.resourceRequest(), request, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()))))
    891908        m_frame->didReceivePolicyDecision(listenerID, PolicyAction::Ignore, 0, { }, { });
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h

    r229977 r230721  
    126126    void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction&&) final;
    127127    void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, WebCore::FormState*, const String& frameName, WebCore::FramePolicyFunction&&) final;
    128     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, bool didReceiveRedirectResponse, WebCore::FormState*, WebCore::FramePolicyFunction&&) final;
     128    void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, bool didReceiveRedirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::FramePolicyFunction&&) final;
    129129    void didDecidePolicyForNavigationAction() final;
    130130    void cancelPolicyCheck() final;
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r230643 r230721  
     12018-04-17  Chris Dumez  <cdumez@apple.com>
     2
     3        REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
     4        https://bugs.webkit.org/show_bug.cgi?id=184678
     5        <rdar://problem/39422122>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Add new parameter to dispatchDecidePolicyForNavigationAction.
     10
     11        * WebCoreSupport/WebFrameLoaderClient.h:
     12        * WebCoreSupport/WebFrameLoaderClient.mm:
     13        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     14
    1152018-04-13  Chris Dumez  <cdumez@apple.com>
    216
  • trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h

    r229977 r230721  
    128128    void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction&&) final;
    129129    void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, WebCore::FormState*, const WTF::String& frameName, WebCore::FramePolicyFunction&&) final;
    130     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, bool didReceiveRedirectResponse, WebCore::FormState*, WebCore::FramePolicyFunction&&) final;
     130    void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, bool didReceiveRedirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::FramePolicyFunction&&) final;
    131131    void cancelPolicyCheck() final;
    132132
  • trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm

    r230211 r230721  
    901901}
    902902
    903 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, bool, FormState* formState, FramePolicyFunction&& function)
     903void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, bool, FormState* formState, PolicyDecisionMode, FramePolicyFunction&& function)
    904904{
    905905    WebView *webView = getWebView(m_webFrame.get());
  • trunk/Source/WebKitLegacy/win/ChangeLog

    r230632 r230721  
     12018-04-17  Chris Dumez  <cdumez@apple.com>
     2
     3        REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
     4        https://bugs.webkit.org/show_bug.cgi?id=184678
     5        <rdar://problem/39422122>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Add new parameter to dispatchDecidePolicyForNavigationAction.
     10
     11        * WebCoreSupport/WebFrameLoaderClient.cpp:
     12        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     13        * WebCoreSupport/WebFrameLoaderClient.h:
     14
    1152018-04-12  Antoine Quint  <graouts@apple.com>
    216
  • trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp

    r229640 r230721  
    566566}
    567567
    568 void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, bool, FormState* formState, FramePolicyFunction&& function)
     568void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(const NavigationAction& action, const ResourceRequest& request, bool, FormState* formState, WebCore::PolicyDecisionMode, WebCore::PolicyDecisionMode, FramePolicyFunction&& function)
    569569{
    570570    WebView* webView = m_webFrame->webView();
  • trunk/Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h

    r228942 r230721  
    103103    void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction&&) override;
    104104    void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, WebCore::FormState*, const WTF::String& frameName, WebCore::FramePolicyFunction&&) override;
    105     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, bool didReceiveRedirectResponse, WebCore::FormState*, WebCore::FramePolicyFunction&&) override;
     105    void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, bool didReceiveRedirectResponse, WebCore::FormState*, WebCore::PolicyDecisionMode, WebCore::FramePolicyFunction&&) override;
    106106    void cancelPolicyCheck() override;
    107107
Note: See TracChangeset for help on using the changeset viewer.