Title: [254884] trunk
Revision
254884
Author
[email protected]
Date
2020-01-21 14:51:41 -0800 (Tue, 21 Jan 2020)

Log Message

ProvisionalPageProxy::loadData should pass last navigation's shouldOpenExternalURLsPolicy flag to WebPageProxy
https://bugs.webkit.org/show_bug.cgi?id=206462
<rdar://problem/57468718>

Reviewed by Chris Dumez.

Source/WebKit:

Covered by API tests.

This patch also does it for ProvisionalPageProxy::loadRequest.

* UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::loadData):
(WebKit::ProvisionalPageProxy::loadRequest):
* UIProcess/ProvisionalPageProxy.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::continueNavigationInNewProcess):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
(TestWebKitAPI::TEST):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (254883 => 254884)


--- trunk/Source/WebKit/ChangeLog	2020-01-21 22:33:03 UTC (rev 254883)
+++ trunk/Source/WebKit/ChangeLog	2020-01-21 22:51:41 UTC (rev 254884)
@@ -1,3 +1,22 @@
+2020-01-21  Jiewen Tan  <[email protected]>
+
+        ProvisionalPageProxy::loadData should pass last navigation's shouldOpenExternalURLsPolicy flag to WebPageProxy
+        https://bugs.webkit.org/show_bug.cgi?id=206462
+        <rdar://problem/57468718>
+
+        Reviewed by Chris Dumez.
+
+        Covered by API tests.
+
+        This patch also does it for ProvisionalPageProxy::loadRequest.
+
+        * UIProcess/ProvisionalPageProxy.cpp:
+        (WebKit::ProvisionalPageProxy::loadData):
+        (WebKit::ProvisionalPageProxy::loadRequest):
+        * UIProcess/ProvisionalPageProxy.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::continueNavigationInNewProcess):
+
 2020-01-21  Rob Buis  <[email protected]>
 
         Add build flag for stale-while-revalidate

Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (254883 => 254884)


--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp	2020-01-21 22:33:03 UTC (rev 254883)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp	2020-01-21 22:51:41 UTC (rev 254884)
@@ -152,10 +152,10 @@
 {
     RELEASE_LOG_IF_ALLOWED(ProcessSwapping, "loadData: pageProxyID=%" PRIu64 " webPageID=%" PRIu64, m_page.identifier().toUInt64(), m_webPageID.toUInt64());
 
-    m_page.loadDataWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, data, MIMEType, encoding, baseURL, userData, WebCore::ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies));
+    m_page.loadDataWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, data, MIMEType, encoding, baseURL, userData, WebCore::ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies), navigation.lastNavigationAction().shouldOpenExternalURLsPolicy);
 }
 
-void ProvisionalPageProxy::loadRequest(API::Navigation& navigation, WebCore::ResourceRequest&& request, WebCore::ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, API::Object* userData, Optional<WebsitePoliciesData>&& websitePolicies)
+void ProvisionalPageProxy::loadRequest(API::Navigation& navigation, WebCore::ResourceRequest&& request, API::Object* userData, Optional<WebsitePoliciesData>&& websitePolicies)
 {
     RELEASE_LOG_IF_ALLOWED(ProcessSwapping, "loadRequest: pageProxyID=%" PRIu64 " webPageID=%" PRIu64, m_page.identifier().toUInt64(), m_webPageID.toUInt64());
 
@@ -165,7 +165,7 @@
     if (navigation.fromItem() && navigation.lockBackForwardList() == WebCore::LockBackForwardList::Yes)
         navigation.fromItem()->setLastProcessIdentifier(m_process->coreProcessIdentifier());
 
-    m_page.loadRequestWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, WTFMove(request), shouldOpenExternalURLsPolicy, userData, WebCore::ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies));
+    m_page.loadRequestWithNavigationShared(m_process.copyRef(), m_webPageID, navigation, WTFMove(request), navigation.lastNavigationAction().shouldOpenExternalURLsPolicy, userData, WebCore::ShouldTreatAsContinuingLoad::Yes, WTFMove(websitePolicies));
 }
 
 void ProvisionalPageProxy::goToBackForwardItem(API::Navigation& navigation, WebBackForwardListItem& item, Optional<WebsitePoliciesData>&& websitePolicies)

Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h (254883 => 254884)


--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h	2020-01-21 22:33:03 UTC (rev 254883)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h	2020-01-21 22:51:41 UTC (rev 254884)
@@ -92,7 +92,7 @@
 #endif
 
     void loadData(API::Navigation&, const IPC::DataReference&, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData, Optional<WebsitePoliciesData>&& = WTF::nullopt);
-    void loadRequest(API::Navigation&, WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy, API::Object* userData, Optional<WebsitePoliciesData>&& = WTF::nullopt);
+    void loadRequest(API::Navigation&, WebCore::ResourceRequest&&, API::Object* userData, Optional<WebsitePoliciesData>&& = WTF::nullopt);
     void goToBackForwardItem(API::Navigation&, WebBackForwardListItem&, Optional<WebsitePoliciesData>&&);
     void cancel();
 

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (254883 => 254884)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-01-21 22:33:03 UTC (rev 254883)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-01-21 22:51:41 UTC (rev 254884)
@@ -3209,7 +3209,7 @@
         if (auto& substituteData = navigation->substituteData())
             m_provisionalPage->loadData(navigation, { substituteData->content.data(), substituteData->content.size() }, substituteData->MIMEType, substituteData->encoding, substituteData->baseURL, substituteData->userData.get(), WTFMove(websitePolicies));
         else
-            m_provisionalPage->loadRequest(navigation, ResourceRequest { navigation->currentRequest() }, WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, nullptr, WTFMove(websitePolicies));
+            m_provisionalPage->loadRequest(navigation, ResourceRequest { navigation->currentRequest() }, nullptr, WTFMove(websitePolicies));
     };
     if (m_inspectorController->shouldPauseLoading(*m_provisionalPage))
         m_inspectorController->setContinueLoadingCallback(*m_provisionalPage, WTFMove(continuation));

Modified: trunk/Tools/ChangeLog (254883 => 254884)


--- trunk/Tools/ChangeLog	2020-01-21 22:33:03 UTC (rev 254883)
+++ trunk/Tools/ChangeLog	2020-01-21 22:51:41 UTC (rev 254884)
@@ -1,3 +1,14 @@
+2020-01-21  Jiewen Tan  <[email protected]>
+
+        ProvisionalPageProxy::loadData should pass last navigation's shouldOpenExternalURLsPolicy flag to WebPageProxy
+        https://bugs.webkit.org/show_bug.cgi?id=206462
+        <rdar://problem/57468718>
+
+        Reviewed by Chris Dumez.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:
+        (TestWebKitAPI::TEST):
+
 2020-01-21  Rob Buis  <[email protected]>
 
         Add build flag for stale-while-revalidate

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm (254883 => 254884)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm	2020-01-21 22:33:03 UTC (rev 254883)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm	2020-01-21 22:51:41 UTC (rev 254884)
@@ -1016,6 +1016,39 @@
     [webView waitForMessage:@"SAML"];
 }
 
+TEST(SOAuthorizationRedirect, InterceptionSucceedSAMLWithPSON)
+{
+    resetState();
+    ClassMethodSwizzler swizzler1(PAL::getSOAuthorizationClass(), @selector(canPerformAuthorizationWithURL:responseCode:), reinterpret_cast<IMP>(overrideCanPerformAuthorizationWithURL));
+    InstanceMethodSwizzler swizzler2(PAL::getSOAuthorizationClass(), @selector(setDelegate:), reinterpret_cast<IMP>(overrideSetDelegate));
+    InstanceMethodSwizzler swizzler3(PAL::getSOAuthorizationClass(), @selector(beginAuthorizationWithURL:httpHeaders:httpBody:), reinterpret_cast<IMP>(overrideBeginAuthorizationWithURL));
+
+    RetainPtr<NSURL> baseURL = [[NSBundle mainBundle] URLForResource:@"simple3" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"];
+    auto testURL = URL(URL(), "http://www.example.com");
+
+    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
+    auto delegate = adoptNS([[TestSOAuthorizationDelegate alloc] init]);
+    configureSOAuthorizationWebView(webView.get(), delegate.get(), OpenExternalSchemesPolicy::Allow);
+
+    [webView loadRequest:[NSURLRequest requestWithURL:baseURL.get()]];
+    Util::run(&navigationCompleted);
+
+    // PSON: file:/// => example.com
+    [webView loadRequest:[NSURLRequest requestWithURL:(NSURL *)testURL]];
+    Util::run(&authorizationPerformed);
+
+    navigationCompleted = false;
+    // Pass a HTTP 200 response with a html to mimic a SAML response.
+    auto response = adoptNS([[NSHTTPURLResponse alloc] initWithURL:(NSURL *)testURL statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:nil]);
+    [gDelegate authorization:gAuthorization didCompleteWithHTTPResponse:response.get() httpBody:adoptNS([[NSData alloc] initWithBytes:samlResponse length:strlen(samlResponse)]).get()];
+    Util::run(&navigationCompleted);
+
+    authorizationPerformed = false;
+    navigationPolicyDecided = false;
+    [webView _evaluateJavaScriptWithoutUserGesture:@"location = 'http://www.example.com'" completionHandler:nil];
+    Util::run(&navigationPolicyDecided);
+}
+
 TEST(SOAuthorizationRedirect, AuthorizationOptions)
 {
     resetState();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to