Changeset 229617 in webkit


Ignore:
Timestamp:
Mar 14, 2018 3:58:29 PM (6 years ago)
Author:
Ryan Haddad
Message:

Unreviewed, rolling out r229613.

Caused API test failures

Reverted changeset:

"Make policy decisions asynchronous"
https://bugs.webkit.org/show_bug.cgi?id=180568
https://trac.webkit.org/changeset/229613

Location:
trunk
Files:
39 deleted
11 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r229614 r229617  
     12018-03-14  Ryan Haddad  <ryanhaddad@apple.com>
     2
     3        Unreviewed, rolling out r229613.
     4
     5        Caused API test failures
     6
     7        Reverted changeset:
     8
     9        "Make policy decisions asynchronous"
     10        https://bugs.webkit.org/show_bug.cgi?id=180568
     11        https://trac.webkit.org/changeset/229613
     12
    1132018-03-14  Youenn Fablet  <youenn@apple.com>
    214
  • trunk/LayoutTests/TestExpectations

    r229613 r229617  
    17171717imported/w3c/web-platform-tests/workers/worker-performance.worker.html [ Pass Failure ]
    17181718
    1719 # We sometimes get 2 console log messages about CSP instead of 1 due to preloading.
    1720 http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-css-in-main-frame.html [ DumpJSConsoleLogInStdErr ]
    1721 
    17221719media/event-queue-crash.html [ DumpJSConsoleLogInStdErr ]
    17231720
  • trunk/LayoutTests/http/tests/security/contentSecurityPolicy/block-all-mixed-content/insecure-css-in-main-frame-expected.txt

    r229613 r229617  
    44main frame - didFinishLoadForFrame
    55main frame - didCommitLoadForFrame
     6CONSOLE MESSAGE: Blocked mixed content http://127.0.0.1:8000/security/mixedContent/resources/style.css because 'block-all-mixed-content' appears in the Content Security Policy.
    67main frame - didFinishDocumentLoadForFrame
    78main frame - didHandleOnloadEventsForFrame
  • trunk/LayoutTests/platform/ios/http/tests/loading/simple-subframe-expected.txt

    r229613 r229617  
    11main frame - didStartProvisionalLoadForFrame
    22main frame - didCommitLoadForFrame
     3frame "f1" - didStartProvisionalLoadForFrame
    34main frame - didFinishDocumentLoadForFrame
    4 frame "f1" - didStartProvisionalLoadForFrame
    55frame "f1" - didCommitLoadForFrame
    66frame "f1" - didFinishDocumentLoadForFrame
  • trunk/LayoutTests/platform/mac/webarchive/loading/mainresource-null-mimetype-crash-expected.txt

    r229616 r229617  
    22main frame - didCommitLoadForFrame
    33main frame - didFinishDocumentLoadForFrame
     4frame "<!--framePath //<!--frame0-->-->" - didStartProvisionalLoadForFrame
    45main frame - didHandleOnloadEventsForFrame
    5 frame "<!--framePath //<!--frame0-->-->" - didStartProvisionalLoadForFrame
    66frame "<!--framePath //<!--frame0-->-->" - didCommitLoadForFrame
    77frame "<!--framePath //<!--frame0-->-->" - didFinishDocumentLoadForFrame
  • trunk/LayoutTests/platform/wk2/http/tests/loading/authentication-after-redirect-stores-wrong-credentials/authentication-after-redirect-stores-wrong-credentials-expected.txt

    r229613 r229617  
    11main frame - didStartProvisionalLoadForFrame
    22main frame - didCommitLoadForFrame
     3frame "<!--framePath //<!--frame0-->-->" - didStartProvisionalLoadForFrame
    34main frame - didFinishDocumentLoadForFrame
    4 frame "<!--framePath //<!--frame0-->-->" - didStartProvisionalLoadForFrame
    55frame "<!--framePath //<!--frame0-->-->" - didReceiveServerRedirectForProvisionalLoadForFrame
    66127.0.0.1:8000 - didReceiveAuthenticationChallenge - Responding with httpUsername:httpPassword
  • trunk/LayoutTests/platform/wk2/http/tests/loading/basic-auth-load-URL-with-consecutive-slashes-expected.txt

    r229613 r229617  
    11main frame - didStartProvisionalLoadForFrame
    22main frame - didCommitLoadForFrame
     3frame "frame" - didStartProvisionalLoadForFrame
    34main frame - didFinishDocumentLoadForFrame
    4 frame "frame" - didStartProvisionalLoadForFrame
    55127.0.0.1:8000 - didReceiveAuthenticationChallenge - Responding with webkit:rocks
    66frame "frame" - didCommitLoadForFrame
  • trunk/Source/WebKit/ChangeLog

    r229615 r229617  
     12018-03-14  Ryan Haddad  <ryanhaddad@apple.com>
     2
     3        Unreviewed, rolling out r229613.
     4
     5        Caused API test failures
     6
     7        Reverted changeset:
     8
     9        "Make policy decisions asynchronous"
     10        https://bugs.webkit.org/show_bug.cgi?id=180568
     11        https://trac.webkit.org/changeset/229613
     12
    1132018-03-14  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r229613 r229617  
    23332333    if (action == PolicyAction::Download) {
    23342334        // Create a download proxy.
    2335         auto* download = m_process->processPool().createDownloadProxy(m_decidePolicyForResponseRequest, this);
     2335        const ResourceRequest& downloadRequest = m_decidePolicyForResponseRequest ? *m_decidePolicyForResponseRequest : ResourceRequest();
     2336        DownloadProxy* download = m_process->processPool().createDownloadProxy(downloadRequest, this);
    23362337        if (navigation) {
    23372338            download->setWasUserInitiated(navigation->wasUserInitiated());
     
    23412342        downloadID = download->downloadID();
    23422343        handleDownloadRequest(download);
    2343         m_decidePolicyForResponseRequest = { };
    2344     }
    2345 
     2344    }
     2345
     2346    // If we received a policy decision while in decidePolicyForResponse the decision will
     2347    // be sent back to the web process by decidePolicyForResponse.
     2348    if (m_inDecidePolicyForResponseSync) {
     2349        m_syncMimeTypePolicyActionIsValid = true;
     2350        m_syncMimeTypePolicyAction = action;
     2351        m_syncMimeTypePolicyDownloadID = downloadID;
     2352        return;
     2353    }
     2354
     2355    // If we received a policy decision while in decidePolicyForNavigationAction the decision will
     2356    // be sent back to the web process by decidePolicyForNavigationAction.
     2357    if (m_inDecidePolicyForNavigationAction) {
     2358        m_syncNavigationActionPolicyActionIsValid = true;
     2359        m_syncNavigationActionPolicyAction = action;
     2360        m_syncNavigationActionPolicyDownloadID = downloadID;
     2361        m_syncNavigationActionPolicyWebsitePolicies = WTFMove(websitePolicies);
     2362        return;
     2363    }
     2364   
    23462365    m_process->send(Messages::WebPage::DidReceivePolicyDecision(frame.frameID(), listenerID, action, navigation ? navigation->navigationID() : 0, downloadID, websitePolicies), m_pageID);
    23472366}
     
    37373756}
    37383757
    3739 void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, ResourceRequest&& request, uint64_t listenerID, const UserData& userData)
     3758void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, NavigationActionData&& navigationActionData, const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, const WebCore::ResourceRequest& originalRequest, ResourceRequest&& request, uint64_t listenerID, const UserData& userData, bool& receivedPolicyAction, uint64_t& newNavigationID, WebCore::PolicyAction& policyAction, DownloadID& downloadID, std::optional<WebsitePoliciesData>& websitePolicies)
    37403759{
    37413760    PageClientProtector protector(m_pageClient);
     
    37523771    MESSAGE_CHECK_URL(originalRequest.url());
    37533772   
    3754     uint64_t newNavigationID { 0 };
    37553773    Ref<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
    37563774    if (!navigationID) {
     
    37623780    } else {
    37633781        auto& navigation = m_navigationState->navigation(navigationID);
    3764         newNavigationID = navigationID;
    37653782        navigation.setWasUserInitiated(!!navigationActionData.userGestureTokenIdentifier);
    37663783        navigation.setShouldForceDownload(!navigationActionData.downloadAttribute.isNull());
     
    37693786
    37703787#if ENABLE(CONTENT_FILTERING)
    3771     if (frame->didHandleContentFilterUnblockNavigation(request))
    3772         return receivedPolicyDecision(PolicyAction::Ignore, *frame, listenerID, &m_navigationState->navigation(newNavigationID), { });
    3773 #endif
     3788    if (frame->didHandleContentFilterUnblockNavigation(request)) {
     3789        receivedPolicyAction = true;
     3790        policyAction = PolicyAction::Ignore;
     3791        return;
     3792    }
     3793#endif
     3794
     3795    ASSERT(!m_inDecidePolicyForNavigationAction);
     3796   
     3797    m_inDecidePolicyForNavigationAction = true;
     3798    m_syncNavigationActionPolicyActionIsValid = false;
    37743799
    37753800    WebFrameProxy* originatingFrame = m_process->webFrame(originatingFrameInfoData.frameID);
     
    37933818
    37943819    m_shouldSuppressAppLinksInNextNavigationPolicyDecision = false;
     3820    m_inDecidePolicyForNavigationAction = false;
     3821
     3822    // Check if we received a policy decision already. If we did, we can just pass it back.
     3823    receivedPolicyAction = m_syncNavigationActionPolicyActionIsValid;
     3824    if (m_syncNavigationActionPolicyActionIsValid) {
     3825        policyAction = m_syncNavigationActionPolicyAction;
     3826        downloadID = m_syncNavigationActionPolicyDownloadID;
     3827        websitePolicies = WTFMove(m_syncNavigationActionPolicyWebsitePolicies);
     3828    }
    37953829}
    37963830
     
    38233857{
    38243858    PageClientProtector protector(m_pageClient);
    3825 
    3826     m_decidePolicyForResponseRequest = request;
    38273859
    38283860    WebFrameProxy* frame = m_process->webFrame(frameID);
     
    38403872    } else
    38413873        m_policyClient->decidePolicyForResponse(*this, *frame, response, request, canShowMIMEType, WTFMove(listener), m_process->transformHandlesToObjects(userData.object()).get());
     3874}
     3875
     3876void WebPageProxy::decidePolicyForResponseSync(uint64_t frameID, const SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const ResourceResponse& response, const ResourceRequest& request, bool canShowMIMEType, uint64_t listenerID, const UserData& userData, bool& receivedPolicyAction, WebCore::PolicyAction& policyAction, DownloadID& downloadID)
     3877{
     3878    PageClientProtector protector(m_pageClient);
     3879
     3880    ASSERT(!m_inDecidePolicyForResponseSync);
     3881
     3882    m_inDecidePolicyForResponseSync = true;
     3883    m_decidePolicyForResponseRequest = &request;
     3884    m_syncMimeTypePolicyActionIsValid = false;
     3885   
     3886    decidePolicyForResponse(frameID, frameSecurityOrigin, navigationID, response, request, canShowMIMEType, listenerID, userData);
     3887   
     3888    m_inDecidePolicyForResponseSync = false;
     3889    m_decidePolicyForResponseRequest = nullptr;
     3890   
     3891    // Check if we received a policy decision already. If we did, we can just pass it back.
     3892    receivedPolicyAction = m_syncMimeTypePolicyActionIsValid;
     3893    if (m_syncMimeTypePolicyActionIsValid) {
     3894        policyAction = m_syncMimeTypePolicyAction;
     3895        downloadID = m_syncMimeTypePolicyDownloadID;
     3896    }
    38423897}
    38433898
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r229613 r229617  
    13631363    void didDestroyNavigation(uint64_t navigationID);
    13641364
    1365     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&);
     1365    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&, bool& receivedPolicyAction, uint64_t& newNavigationID, WebCore::PolicyAction&, DownloadID&, std::optional<WebsitePoliciesData>&);
    13661366    void decidePolicyForNewWindowAction(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, NavigationActionData&&, WebCore::ResourceRequest&&, const String& frameName, uint64_t listenerID, const UserData&);
    13671367    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&);
     1368    void decidePolicyForResponseSync(uint64_t frameID, const WebCore::SecurityOriginData& frameSecurityOrigin, uint64_t navigationID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, uint64_t listenerID, const UserData&, bool& receivedPolicyAction, WebCore::PolicyAction&, DownloadID&);
    13681369    void unableToImplementPolicy(uint64_t frameID, const WebCore::ResourceError&, const UserData&);
    13691370
     
    19061907    bool m_isPerformingDOMPrintOperation { false };
    19071908
    1908     WebCore::ResourceRequest m_decidePolicyForResponseRequest;
     1909    bool m_inDecidePolicyForResponseSync { false };
     1910    const WebCore::ResourceRequest* m_decidePolicyForResponseRequest { nullptr };
     1911    bool m_syncMimeTypePolicyActionIsValid { false };
     1912    WebCore::PolicyAction m_syncMimeTypePolicyAction { WebCore::PolicyAction::Use };
     1913    DownloadID m_syncMimeTypePolicyDownloadID { 0 };
     1914    bool m_inDecidePolicyForNavigationAction { false };
     1915    bool m_syncNavigationActionPolicyActionIsValid { false };
     1916    WebCore::PolicyAction m_syncNavigationActionPolicyAction { WebCore::PolicyAction::Use };
     1917    DownloadID m_syncNavigationActionPolicyDownloadID { 0 };
     1918    std::optional<WebsitePoliciesData> m_syncNavigationActionPolicyWebsitePolicies;
     1919
    19091920    bool m_shouldSuppressAppLinksInNextNavigationPolicyDecision { false };
    19101921
  • trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in

    r229613 r229617  
    9999
    100100    # Policy messages
    101     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)
    102     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)
     101    DecidePolicyForResponseSync(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, WebCore::ResourceResponse response, WebCore::ResourceRequest request, bool canShowMIMEType, uint64_t listenerID, WebKit::UserData userData) -> (bool receivedPolicyAction, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID)
     102    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) -> (bool receivedPolicyAction, uint64_t newNavigationID, enum WebCore::PolicyAction policyAction, WebKit::DownloadID downloadID, std::optional<WebKit::WebsitePoliciesData> websitePolicies)
    103103    DecidePolicyForNewWindowAction(uint64_t frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, struct WebKit::NavigationActionData navigationActionData, WebCore::ResourceRequest request, String frameName, uint64_t listenerID, WebKit::UserData userData)
    104104    UnableToImplementPolicy(uint64_t frameID, WebCore::ResourceError error, WebKit::UserData userData)
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r229613 r229617  
    749749    Ref<WebFrame> protector(*m_frame);
    750750    uint64_t listenerID = m_frame->setUpPolicyListener(WTFMove(function), WebFrame::ForNavigationAction::No);
     751    bool receivedPolicyAction;
     752    PolicyAction policyAction;
     753    DownloadID downloadID;
     754
    751755    auto navigationID = static_cast<WebDocumentLoader&>(*policyDocumentLoader).navigationID();
    752     if (!webPage->send(Messages::WebPageProxy::DecidePolicyForResponse(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), navigationID, response, request, canShowMIMEType, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get()))))
     756    if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForResponseSync(m_frame->frameID(), SecurityOriginData::fromFrame(coreFrame), navigationID, response, request, canShowMIMEType, listenerID, UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())), Messages::WebPageProxy::DecidePolicyForResponseSync::Reply(receivedPolicyAction, policyAction, downloadID), Seconds::infinity(), IPC::SendSyncOption::InformPlatformProcessWillSuspend)) {
    753757        m_frame->didReceivePolicyDecision(listenerID, PolicyAction::Ignore, 0, { }, { });
     758        return;
     759    }
     760
     761    // We call this synchronously because CFNetwork can only convert a loading connection to a download from its didReceiveResponse callback.
     762    if (receivedPolicyAction)
     763        m_frame->didReceivePolicyDecision(listenerID, policyAction, 0, downloadID, { });
    754764}
    755765
     
    834844   
    835845    uint64_t listenerID = m_frame->setUpPolicyListener(WTFMove(function), WebFrame::ForNavigationAction::Yes);
     846    bool receivedPolicyAction;
     847    uint64_t newNavigationID;
     848    PolicyAction policyAction;
     849    DownloadID downloadID;
    836850
    837851    ASSERT(navigationAction.sourceDocument());
     
    872886    // Notify the UIProcess.
    873887    Ref<WebFrame> protect(*m_frame);
    874     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()))))
     888    std::optional<WebsitePoliciesData> websitePolicies;
     889    if (!webPage->sendSync(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())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, newNavigationID, policyAction, downloadID, websitePolicies))) {
    875890        m_frame->didReceivePolicyDecision(listenerID, PolicyAction::Ignore, 0, { }, { });
     891        return;
     892    }
     893
     894    // We call this synchronously because WebCore cannot gracefully handle a frame load without a synchronous navigation policy reply.
     895    if (receivedPolicyAction)
     896        m_frame->didReceivePolicyDecision(listenerID, policyAction, newNavigationID, downloadID, WTFMove(websitePolicies));
    876897}
    877898
Note: See TracChangeset for help on using the changeset viewer.