Title: [246143] trunk
Revision
246143
Author
[email protected]
Date
2019-06-05 20:55:13 -0700 (Wed, 05 Jun 2019)

Log Message

[Curl] Report all request headers to web inspector.
https://bugs.webkit.org/show_bug.cgi?id=191653

Patch by Takashi Komori <[email protected]> on 2019-06-05
Reviewed by Fujii Hironori.

Source/WebCore:

Test: http/tests/inspector/network/resource-request-headers.html

* platform/network/curl/CurlContext.cpp:
(WebCore::CurlHandle::setDebugCallbackFunction):
* platform/network/curl/CurlContext.h:
* platform/network/curl/CurlRequest.cpp:
(WebCore::CurlRequest::setupTransfer):
(WebCore::CurlRequest::didReceiveDebugInfo):
(WebCore::CurlRequest::updateNetworkLoadMetrics):
(WebCore::CurlRequest::didReceiveDebugInfoCallback):
* platform/network/curl/CurlRequest.h:

LayoutTests:

* platform/wincairo/TestExpectations:
* platform/wincairo/http/tests/inspector/network/resource-request-headers-expected.txt: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (246142 => 246143)


--- trunk/LayoutTests/ChangeLog	2019-06-06 03:39:08 UTC (rev 246142)
+++ trunk/LayoutTests/ChangeLog	2019-06-06 03:55:13 UTC (rev 246143)
@@ -1,3 +1,13 @@
+2019-06-05  Takashi Komori  <[email protected]>
+
+        [Curl] Report all request headers to web inspector.
+        https://bugs.webkit.org/show_bug.cgi?id=191653
+
+        Reviewed by Fujii Hironori.
+
+        * platform/wincairo/TestExpectations:
+        * platform/wincairo/http/tests/inspector/network/resource-request-headers-expected.txt: Added.
+
 2019-06-05  Myles C. Maxfield  <[email protected]>
 
         [WHLSL] Educate the property resolver about IndexExpressions

Modified: trunk/LayoutTests/platform/wincairo/TestExpectations (246142 => 246143)


--- trunk/LayoutTests/platform/wincairo/TestExpectations	2019-06-06 03:39:08 UTC (rev 246142)
+++ trunk/LayoutTests/platform/wincairo/TestExpectations	2019-06-06 03:55:13 UTC (rev 246143)
@@ -891,7 +891,10 @@
 http/tests/history [ Skip ]
 http/tests/images [ Skip ]
 http/tests/incremental [ Skip ]
+
 http/tests/inspector [ Skip ]
+http/tests/inspector/network/resource-request-headers.html [ Pass ]
+
 http/tests/loading [ Skip ]
 http/tests/local/blob [ Skip ]
 http/tests/local/fileapi [ Skip ]

Added: trunk/LayoutTests/platform/wincairo/http/tests/inspector/network/resource-request-headers-expected.txt (0 => 246143)


--- trunk/LayoutTests/platform/wincairo/http/tests/inspector/network/resource-request-headers-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/wincairo/http/tests/inspector/network/resource-request-headers-expected.txt	2019-06-06 03:55:13 UTC (rev 246143)
@@ -0,0 +1,36 @@
+127.0.0.1:8000 - didReceiveAuthenticationChallenge - ProtectionSpaceAuthenticationSchemeHTTPBasic - Simulating cancelled authentication sheet
+127.0.0.1:8000 - didReceiveAuthenticationChallenge - ProtectionSpaceAuthenticationSchemeHTTPBasic - Simulating cancelled authentication sheet
+Test for Resource request headers which may not have been immediately available but eventually are (Cookie, Authorization).
+
+
+== Running test suite: Resource.Metrics.RequestHeaders
+-- Running test case: Resource.Metrics.RequestHeaders.WithoutCookie
+PASS: Resource should be created.
+PASS: Resource should receive a Response.
+PASS: Request should not have a 'Cookie' header.
+
+-- Running test case: Resource.Metrics.RequestHeaders.WithCookie
+PASS: Resource should be created.
+PASS: Resource should receive a Response.
+PASS: 'Cookie' header value should be `InspectorTestCookie=1234`.
+
+-- Running test case: Resource.Metrics.RequestHeaders.BasicAuth.None
+PASS: Resource should be created.
+PASS: Resource should receive a Response.
+PASS: Resource should have a 401 status code.
+PASS: Response should have a 'WWW-Authenticate' response header for the failure.
+PASS: Request should not have a 'Authorization' header.
+
+-- Running test case: Resource.Metrics.RequestHeaders.BasicAuth.Failure
+PASS: Resource should be created.
+PASS: Resource should receive a Response.
+PASS: Resource should have a 401 status code.
+PASS: Response should have a 'WWW-Authenticate' response header for the failure.
+PASS: 'Authorization' header value should be for badUsername:badPassword.
+
+-- Running test case: Resource.Metrics.RequestHeaders.BasicAuth.Success
+PASS: Resource should be created.
+PASS: Resource should receive a Response.
+PASS: Resource should have a 200 status code.
+PASS: 'Authorization' header value should be for goodUsername:goodPassword.
+

Modified: trunk/Source/WebCore/ChangeLog (246142 => 246143)


--- trunk/Source/WebCore/ChangeLog	2019-06-06 03:39:08 UTC (rev 246142)
+++ trunk/Source/WebCore/ChangeLog	2019-06-06 03:55:13 UTC (rev 246143)
@@ -1,3 +1,22 @@
+2019-06-05  Takashi Komori  <[email protected]>
+
+        [Curl] Report all request headers to web inspector.
+        https://bugs.webkit.org/show_bug.cgi?id=191653
+
+        Reviewed by Fujii Hironori.
+
+        Test: http/tests/inspector/network/resource-request-headers.html
+
+        * platform/network/curl/CurlContext.cpp:
+        (WebCore::CurlHandle::setDebugCallbackFunction):
+        * platform/network/curl/CurlContext.h:
+        * platform/network/curl/CurlRequest.cpp:
+        (WebCore::CurlRequest::setupTransfer):
+        (WebCore::CurlRequest::didReceiveDebugInfo):
+        (WebCore::CurlRequest::updateNetworkLoadMetrics):
+        (WebCore::CurlRequest::didReceiveDebugInfoCallback):
+        * platform/network/curl/CurlRequest.h:
+
 2019-06-05  Said Abou-Hallawa  <[email protected]>
 
         [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested

Modified: trunk/Source/WebCore/platform/network/curl/CurlContext.cpp (246142 => 246143)


--- trunk/Source/WebCore/platform/network/curl/CurlContext.cpp	2019-06-06 03:39:08 UTC (rev 246142)
+++ trunk/Source/WebCore/platform/network/curl/CurlContext.cpp	2019-06-06 03:55:13 UTC (rev 246143)
@@ -638,6 +638,13 @@
     curl_easy_setopt(m_handle, CURLOPT_SSL_CTX_FUNCTION, callbackFunc);
 }
 
+void CurlHandle::setDebugCallbackFunction(curl_debug_callback callbackFunc, void* userData)
+{
+    curl_easy_setopt(m_handle, CURLOPT_DEBUGFUNCTION, callbackFunc);
+    curl_easy_setopt(m_handle, CURLOPT_DEBUGDATA, userData);
+    curl_easy_setopt(m_handle, CURLOPT_VERBOSE, 1L);
+}
+
 void CurlHandle::enableConnectionOnly()
 {
     curl_easy_setopt(m_handle, CURLOPT_CONNECT_ONLY, 1L);

Modified: trunk/Source/WebCore/platform/network/curl/CurlContext.h (246142 => 246143)


--- trunk/Source/WebCore/platform/network/curl/CurlContext.h	2019-06-06 03:39:08 UTC (rev 246142)
+++ trunk/Source/WebCore/platform/network/curl/CurlContext.h	2019-06-06 03:55:13 UTC (rev 246143)
@@ -273,6 +273,7 @@
     void setWriteCallbackFunction(curl_write_callback, void*);
     void setReadCallbackFunction(curl_read_callback, void*);
     void setSslCtxCallbackFunction(curl_ssl_ctx_callback, void*);
+    void setDebugCallbackFunction(curl_debug_callback, void*);
 
     // Status
     Optional<String> getProxyUrl();

Modified: trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp (246142 => 246143)


--- trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp	2019-06-06 03:39:08 UTC (rev 246142)
+++ trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp	2019-06-06 03:55:13 UTC (rev 246143)
@@ -234,6 +234,9 @@
     m_curlHandle->setHeaderCallbackFunction(didReceiveHeaderCallback, this);
     m_curlHandle->setWriteCallbackFunction(didReceiveDataCallback, this);
 
+    if (m_captureExtraMetrics)
+        m_curlHandle->setDebugCallbackFunction(didReceiveDebugInfoCallback, this);
+
     m_curlHandle->setTimeout(timeoutInterval());
 
     if (m_shouldSuspend)
@@ -491,6 +494,31 @@
     m_curlHandle = nullptr;
 }
 
+int CurlRequest::didReceiveDebugInfo(curl_infotype type, char* data, size_t size)
+{
+    if (!data)
+        return 0;
+
+    if (type == CURLINFO_HEADER_OUT) {
+        String requestHeader(data, size);
+        auto headerFields = requestHeader.split("\r\n");
+        // Remove the request line
+        if (headerFields.size())
+            headerFields.remove(0);
+
+        for (auto& header : headerFields) {
+            auto pos = header.find(":");
+            if (pos != notFound) {
+                auto key = header.left(pos).stripWhiteSpace();
+                auto value = header.substring(pos + 1).stripWhiteSpace();
+                m_requestHeaders.add(key, value);
+            }
+        }
+    }
+
+    return 0;
+}
+
 void CurlRequest::appendAcceptLanguageHeader(HTTPHeaderMap& header)
 {
     for (const auto& language : userPreferredLanguages())
@@ -696,7 +724,7 @@
 
         if (m_captureExtraMetrics) {
             m_curlHandle->addExtraNetworkLoadMetrics(m_networkLoadMetrics);
-            m_networkLoadMetrics.requestHeaders = m_request.httpHeaderFields();
+            m_networkLoadMetrics.requestHeaders = m_requestHeaders;
             m_networkLoadMetrics.responseBodyDecodedSize = m_totalReceivedSize;
         }
     }
@@ -766,6 +794,11 @@
     return static_cast<CurlRequest*>(userData)->didReceiveData(SharedBuffer::create(ptr, blockSize * numberOfBlocks));
 }
 
+int CurlRequest::didReceiveDebugInfoCallback(CURL*, curl_infotype type, char* data, size_t size, void* userData)
+{
+    return static_cast<CurlRequest*>(userData)->didReceiveDebugInfo(type, data, size);
 }
 
+}
+
 #endif

Modified: trunk/Source/WebCore/platform/network/curl/CurlRequest.h (246142 => 246143)


--- trunk/Source/WebCore/platform/network/curl/CurlRequest.h	2019-06-06 03:39:08 UTC (rev 246142)
+++ trunk/Source/WebCore/platform/network/curl/CurlRequest.h	2019-06-06 03:55:13 UTC (rev 246143)
@@ -134,6 +134,8 @@
     void finalizeTransfer();
     void invokeCancel();
 
+    int didReceiveDebugInfo(curl_infotype, char*, size_t);
+
     // For setup 
     void appendAcceptLanguageHeader(HTTPHeaderMap&);
     void setupPOST(ResourceRequest&);
@@ -163,6 +165,7 @@
     static size_t willSendDataCallback(char*, size_t, size_t, void*);
     static size_t didReceiveHeaderCallback(char*, size_t, size_t, void*);
     static size_t didReceiveDataCallback(char*, size_t, size_t, void*);
+    static int didReceiveDebugInfoCallback(CURL*, curl_infotype, char*, size_t, void*);
 
 
     CurlRequestClient* m_client { };
@@ -211,6 +214,7 @@
     CertificateInfo m_certificateInfo;
     bool m_captureExtraMetrics;
     NetworkLoadMetrics m_networkLoadMetrics;
+    HTTPHeaderMap m_requestHeaders;
     MonotonicTime m_requestStartTime { MonotonicTime::nan() };
     MonotonicTime m_performStartTime;
     size_t m_totalReceivedSize { 0 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to