Title: [279032] trunk
Revision
279032
Author
[email protected]
Date
2021-06-18 01:05:25 -0700 (Fri, 18 Jun 2021)

Log Message

[SOUP] Add Timing-Allow-Origin checks to NetworkDataTaskSoup
https://bugs.webkit.org/show_bug.cgi?id=227008
<rdar://problem/79384792>

Reviewed by Adrian Perez de Castro.

Source/WebKit:

Add missing TAO checks to Soup backend.

* NetworkProcess/NetworkDataTask.cpp:
(WebKit::NetworkDataTask::create):
* NetworkProcess/soup/NetworkDataTaskSoup.cpp:
(WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
(WebKit::NetworkDataTaskSoup::didSendRequest):
(WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
* NetworkProcess/soup/NetworkDataTaskSoup.h:

LayoutTests:

* platform/glib/TestExpectations:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (279031 => 279032)


--- trunk/LayoutTests/ChangeLog	2021-06-18 05:35:58 UTC (rev 279031)
+++ trunk/LayoutTests/ChangeLog	2021-06-18 08:05:25 UTC (rev 279032)
@@ -1,3 +1,13 @@
+2021-06-18  Carlos Garcia Campos  <[email protected]>
+
+        [SOUP] Add Timing-Allow-Origin checks to NetworkDataTaskSoup
+        https://bugs.webkit.org/show_bug.cgi?id=227008
+        <rdar://problem/79384792>
+
+        Reviewed by Adrian Perez de Castro.
+
+        * platform/glib/TestExpectations:
+
 2021-06-17  Diego Pino Garcia  <[email protected]>
 
         [GTK][WPE] Unreviewed test gardening. Update baselines after r278974.

Modified: trunk/LayoutTests/platform/glib/TestExpectations (279031 => 279032)


--- trunk/LayoutTests/platform/glib/TestExpectations	2021-06-18 05:35:58 UTC (rev 279031)
+++ trunk/LayoutTests/platform/glib/TestExpectations	2021-06-18 08:05:25 UTC (rev 279032)
@@ -881,22 +881,6 @@
 webkit.org/b/179475 imported/w3c/web-platform-tests/fetch/api/basic/request-headers-case.any.html [ Failure ]
 webkit.org/b/179475 imported/w3c/web-platform-tests/fetch/api/basic/request-headers-case.any.worker.html [ Failure ]
 
-# Related to moving to Timing-Allow-Origin checks into the network process
-webkit.org/b/227008 http/tests/misc/webtiming-cross-origin-and-back1.html [ Failure ]
-webkit.org/b/227008 http/tests/misc/webtiming-cross-origin-redirect.py [ Failure ]
-webkit.org/b/227008 http/wpt/resource-timing/rt-cors.html [ Failure ]
-webkit.org/b/227008 http/wpt/resource-timing/rt-cors.worker.html [ Failure ]
-webkit.org/b/227008 http/wpt/resource-timing/rt-revalidate-requests-2.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/resource-timing/TAO-case-insensitive-null-opaque-origin.sub.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/resource-timing/TAO-crossorigin-port.sub.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/resource-timing/cross-origin-redirects.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/resource-timing/redirects.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/resource-timing/resource_reuse.sub.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/resource-timing/resource_timing_content_length.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/resource-timing/same-origin-from-cross-origin-redirect.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/server-timing/cross_origin.html [ Failure ]
-webkit.org/b/227008 imported/w3c/web-platform-tests/service-workers/service-worker/resource-timing-cross-origin.https.html [ Failure ]
-
 #////////////////////////////////////////////////////////////////////////////////////////
 # End of SOUP and Networking-related bugs
 #////////////////////////////////////////////////////////////////////////////////////////

Modified: trunk/Source/WebKit/ChangeLog (279031 => 279032)


--- trunk/Source/WebKit/ChangeLog	2021-06-18 05:35:58 UTC (rev 279031)
+++ trunk/Source/WebKit/ChangeLog	2021-06-18 08:05:25 UTC (rev 279032)
@@ -1,3 +1,21 @@
+2021-06-18  Carlos Garcia Campos  <[email protected]>
+
+        [SOUP] Add Timing-Allow-Origin checks to NetworkDataTaskSoup
+        https://bugs.webkit.org/show_bug.cgi?id=227008
+        <rdar://problem/79384792>
+
+        Reviewed by Adrian Perez de Castro.
+
+        Add missing TAO checks to Soup backend.
+
+        * NetworkProcess/NetworkDataTask.cpp:
+        (WebKit::NetworkDataTask::create):
+        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
+        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
+        (WebKit::NetworkDataTaskSoup::didSendRequest):
+        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
+        * NetworkProcess/soup/NetworkDataTaskSoup.h:
+
 2021-06-17  Said Abou-Hallawa  <[email protected]>
 
         [Cocoa] Disable hardware decoding in the WebProcess

Modified: trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp (279031 => 279032)


--- trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp	2021-06-18 05:35:58 UTC (rev 279031)
+++ trunk/Source/WebKit/NetworkProcess/NetworkDataTask.cpp	2021-06-18 08:05:25 UTC (rev 279032)
@@ -56,7 +56,7 @@
     return NetworkDataTaskCocoa::create(session, client, parameters);
 #endif
 #if USE(SOUP)
-    return NetworkDataTaskSoup::create(session, client, parameters.request, parameters.webFrameID, parameters.webPageID, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.shouldPreconnectOnly, parameters.isMainFrameNavigation);
+    return NetworkDataTaskSoup::create(session, client, parameters);
 #endif
 #if USE(CURL)
     return NetworkDataTaskCurl::create(session, client, parameters.request, parameters.webFrameID, parameters.webPageID, parameters.storedCredentialsPolicy, parameters.contentSniffingPolicy, parameters.contentEncodingSniffingPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation, parameters.shouldRelaxThirdPartyCookieBlocking);

Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp (279031 => 279032)


--- trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp	2021-06-18 05:35:58 UTC (rev 279031)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp	2021-06-18 08:05:25 UTC (rev 279032)
@@ -45,6 +45,7 @@
 #include <WebCore/SoupNetworkSession.h>
 #include <WebCore/SoupVersioning.h>
 #include <WebCore/TextEncoding.h>
+#include <WebCore/TimingAllowOrigin.h>
 #include <wtf/MainThread.h>
 #include <wtf/glib/RunLoopSourcePriority.h>
 
@@ -53,17 +54,18 @@
 
 static const size_t gDefaultReadBufferSize = 8192;
 
-NetworkDataTaskSoup::NetworkDataTaskSoup(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, FrameIdentifier frameID, PageIdentifier pageID, StoredCredentialsPolicy storedCredentialsPolicy, ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly, bool dataTaskIsForMainFrameNavigation)
-    : NetworkDataTask(session, client, requestWithCredentials, storedCredentialsPolicy, shouldClearReferrerOnHTTPSToHTTPRedirect, dataTaskIsForMainFrameNavigation)
-    , m_frameID(frameID)
-    , m_pageID(pageID)
-    , m_shouldContentSniff(shouldContentSniff)
-    , m_shouldPreconnectOnly(shouldPreconnectOnly)
+NetworkDataTaskSoup::NetworkDataTaskSoup(NetworkSession& session, NetworkDataTaskClient& client, const NetworkLoadParameters& parameters)
+    : NetworkDataTask(session, client, parameters.request, parameters.storedCredentialsPolicy, parameters.shouldClearReferrerOnHTTPSToHTTPRedirect, parameters.isMainFrameNavigation)
+    , m_frameID(parameters.webFrameID)
+    , m_pageID(parameters.webPageID)
+    , m_shouldContentSniff(parameters.contentSniffingPolicy)
+    , m_shouldPreconnectOnly(parameters.shouldPreconnectOnly)
+    , m_sourceOrigin(parameters.sourceOrigin)
     , m_timeoutSource(RunLoop::main(), this, &NetworkDataTaskSoup::timeoutFired)
 {
     m_session->registerNetworkDataTask(*this);
 
-    auto request = requestWithCredentials;
+    auto request = parameters.request;
     if (request.url().protocolIsInHTTPFamily()) {
 #if USE(SOUP2)
         m_networkLoadMetrics.fetchStart = MonotonicTime::now();
@@ -483,6 +485,12 @@
     m_networkLoadMetrics.responseStart = MonotonicTime::now();
 #endif
 
+    if (!m_networkLoadMetrics.failsTAOCheck) {
+        RefPtr<SecurityOrigin> origin = isTopLevelNavigation() ? SecurityOrigin::create(firstRequest().url()) : m_sourceOrigin;
+        if (origin)
+            m_networkLoadMetrics.failsTAOCheck = !passesTimingAllowOriginCheck(m_response, *origin);
+    }
+
     dispatchDidReceiveResponse();
 }
 
@@ -865,8 +873,6 @@
     request.setURL(redirectedURL);
 
     m_networkLoadMetrics.hasCrossOriginRedirect = m_networkLoadMetrics.hasCrossOriginRedirect || !SecurityOrigin::create(m_currentRequest.url())->canRequest(request.url());
-    // FIXME: Add TAO checks here and when receiving a response.
-    // This was done on Cocoa platforms in https://bugs.webkit.org/show_bug.cgi?id=226678
 
     // Clear the user agent to ensure a new one is computed.
     auto userAgent = request.httpUserAgent();

Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h (279031 => 279032)


--- trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h	2021-06-18 05:35:58 UTC (rev 279031)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.h	2021-06-18 08:05:25 UTC (rev 279032)
@@ -41,15 +41,15 @@
 
 class NetworkDataTaskSoup final : public NetworkDataTask {
 public:
-    static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, WebCore::ContentSniffingPolicy shouldContentSniff, WebCore::ContentEncodingSniffingPolicy shouldContentEncodingSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly, bool dataTaskIsForMainFrameNavigation)
+    static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const NetworkLoadParameters& parameters)
     {
-        return adoptRef(*new NetworkDataTaskSoup(session, client, request, frameID, pageID, storedCredentialsPolicy, shouldContentSniff, shouldContentEncodingSniff, shouldClearReferrerOnHTTPSToHTTPRedirect, shouldPreconnectOnly, dataTaskIsForMainFrameNavigation));
+        return adoptRef(*new NetworkDataTaskSoup(session, client, parameters));
     }
 
     ~NetworkDataTaskSoup();
 
 private:
-    NetworkDataTaskSoup(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::FrameIdentifier, WebCore::PageIdentifier, WebCore::StoredCredentialsPolicy, WebCore::ContentSniffingPolicy, WebCore::ContentEncodingSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, PreconnectOnly shouldPreconnectOnly, bool dataTaskIsForMainFrameNavigation);
+    NetworkDataTaskSoup(NetworkSession&, NetworkDataTaskClient&, const NetworkLoadParameters&);
 
     void cancel() override;
     void resume() override;
@@ -202,6 +202,7 @@
     bool m_allowOverwriteDownload { false };
     WebCore::NetworkLoadMetrics m_networkLoadMetrics;
     bool m_isBlockingCookies { false };
+    RefPtr<WebCore::SecurityOrigin> m_sourceOrigin;
     RunLoop::Timer<NetworkDataTaskSoup> m_timeoutSource;
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to