Title: [145725] releases/WebKitGTK/webkit-2.0
Revision
145725
Author
carlo...@webkit.org
Date
2013-03-13 09:27:35 -0700 (Wed, 13 Mar 2013)

Log Message

[GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=112160

Reviewed by Martin Robinson.

Source/WebCore:

* platform/network/soup/GOwnPtrSoup.cpp:
(WTF::SoupMessageHeaders): Add freeOwnedGPtr implementation for
SoupMessageHeaders.
(WTF):
* platform/network/soup/GOwnPtrSoup.h:
(WTF):
* platform/network/soup/ResourceRequest.h:
(ResourceRequest):
* platform/network/soup/ResourceRequestSoup.cpp:
(WebCore::ResourceRequest::updateSoupMessageHeaders): New function
to update the given SoupMessageHeaders with the ResourceRequest
headers.
(WebCore::ResourceRequest::updateFromSoupMessageHeaders): New
function to update the ResourceRequest headers with the given
SoupMessageHeaders.
(WebCore::ResourceRequest::updateSoupMessage): Use
updateSoupMessageHeaders() to update the headers.
(WebCore::ResourceRequest::toSoupMessage): Ditto.
(WebCore::ResourceRequest::updateFromSoupMessage): Use
updateFromSoupMessageHeaders to update the headers.

Source/WebKit2:

It allows to load requests with custom headers, or to update the
headers of a request before being sent to the server in the
WebKitWebPage::send-request callback.

* UIProcess/API/gtk/WebKitURIRequest.cpp:
(_WebKitURIRequestPrivate): Add SoupMessageHeaders.
(webkit_uri_request_get_http_headers): Return the HTTP headers of
the request as a SoupMessageHeaders if the request is HTTP. A new
SoupMessageHeaders is created on demand using the existing headers
of the request.
(webkitURIRequestGetResourceRequest): Instead of returning a const
reference of the internal ResourceRequest, set a request passed as
a reference and update its HTTP headers using the
SoupMessageHeaders if present.
* UIProcess/API/gtk/WebKitURIRequest.h:
* UIProcess/API/gtk/WebKitURIRequestPrivate.h:
* UIProcess/API/gtk/WebKitWebView.cpp:
(webkit_web_view_load_request): Update to the new
webkitURIRequestGetResourceRequest API.
* UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add
webkit_uri_request_get_http_headers symbol.
* UIProcess/API/gtk/tests/TestLoaderClient.cpp:
(testWebPageURI):
(testURIRequestHTTPHeaders):
(serverCallback):
(beforeAll):
* WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
(willSendRequestForFrame): Update to the new
webkitURIRequestGetResourceRequest API.

Tools:

* MiniBrowser/gtk/GNUmakefile.am: Add missing libsoup flags to
CPPFLAGS.

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.0/Source/WebCore/ChangeLog (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebCore/ChangeLog	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebCore/ChangeLog	2013-03-13 16:27:35 UTC (rev 145725)
@@ -1,3 +1,31 @@
+2013-03-13  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
+        https://bugs.webkit.org/show_bug.cgi?id=112160
+
+        Reviewed by Martin Robinson.
+
+        * platform/network/soup/GOwnPtrSoup.cpp:
+        (WTF::SoupMessageHeaders): Add freeOwnedGPtr implementation for
+        SoupMessageHeaders.
+        (WTF):
+        * platform/network/soup/GOwnPtrSoup.h:
+        (WTF):
+        * platform/network/soup/ResourceRequest.h:
+        (ResourceRequest):
+        * platform/network/soup/ResourceRequestSoup.cpp:
+        (WebCore::ResourceRequest::updateSoupMessageHeaders): New function
+        to update the given SoupMessageHeaders with the ResourceRequest
+        headers.
+        (WebCore::ResourceRequest::updateFromSoupMessageHeaders): New
+        function to update the ResourceRequest headers with the given
+        SoupMessageHeaders.
+        (WebCore::ResourceRequest::updateSoupMessage): Use
+        updateSoupMessageHeaders() to update the headers.
+        (WebCore::ResourceRequest::toSoupMessage): Ditto.
+        (WebCore::ResourceRequest::updateFromSoupMessage): Use
+        updateFromSoupMessageHeaders to update the headers.
+
 2013-03-12  Zan Dobersek  <zdober...@igalia.com>
 
         [GTK] Remove HILDON_CPPFLAGS and HILDON_CFLAGS references from GNUmakefiles

Modified: releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/GOwnPtrSoup.cpp (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/GOwnPtrSoup.cpp	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/GOwnPtrSoup.cpp	2013-03-13 16:27:35 UTC (rev 145725)
@@ -21,6 +21,11 @@
 #include "GOwnPtrSoup.h"
 
 #include <libsoup/soup-cookie.h>
+// FIXME: soup-message-headers.h doesn't currently has the G_BEGIN_DECLS/G_END_DECLS guards.
+// Remove this extern C when we bump libsoup requirements.
+extern "C" {
+#include <libsoup/soup-message-headers.h>
+}
 #include <libsoup/soup-uri.h>
 
 namespace WTF {
@@ -37,4 +42,10 @@
         soup_cookie_free(ptr);
 }
 
+template <> void freeOwnedGPtr<SoupMessageHeaders>(SoupMessageHeaders* ptr)
+{
+    if (ptr)
+        soup_message_headers_free(ptr);
 }
+
+}

Modified: releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/GOwnPtrSoup.h (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/GOwnPtrSoup.h	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/GOwnPtrSoup.h	2013-03-13 16:27:35 UTC (rev 145725)
@@ -24,11 +24,13 @@
 
 typedef struct _SoupURI SoupURI;
 typedef struct _SoupCookie SoupCookie;
+typedef struct SoupMessageHeaders SoupMessageHeaders;
 
 namespace WTF {
 
 template<> void freeOwnedGPtr<SoupURI>(SoupURI* ptr);
 template<> void freeOwnedGPtr<SoupCookie>(SoupCookie* ptr);
+template<> void freeOwnedGPtr<SoupMessageHeaders>(SoupMessageHeaders*);
 
 }
 

Modified: releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/ResourceRequest.h (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/ResourceRequest.h	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/ResourceRequest.h	2013-03-13 16:27:35 UTC (rev 145725)
@@ -67,6 +67,8 @@
             updateFromSoupMessage(soupMessage);
         }
 
+        void updateSoupMessageHeaders(SoupMessageHeaders*) const;
+        void updateFromSoupMessageHeaders(SoupMessageHeaders*);
         void updateSoupMessage(SoupMessage*) const;
         SoupMessage* toSoupMessage() const;
         void updateFromSoupMessage(SoupMessage*);

Modified: releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp	2013-03-13 16:27:35 UTC (rev 145725)
@@ -34,21 +34,36 @@
 
 namespace WebCore {
 
-void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage) const
+void ResourceRequest::updateSoupMessageHeaders(SoupMessageHeaders* soupHeaders) const
 {
-    g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().utf8().data(), NULL);
-
-    GOwnPtr<SoupURI> uri(soupURI());
-    soup_message_set_uri(soupMessage, uri.get());
-
     const HTTPHeaderMap& headers = httpHeaderFields();
-    SoupMessageHeaders* soupHeaders = soupMessage->request_headers;
     if (!headers.isEmpty()) {
         HTTPHeaderMap::const_iterator end = headers.end();
         for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it)
             soup_message_headers_append(soupHeaders, it->key.string().utf8().data(), it->value.utf8().data());
     }
+}
 
+void ResourceRequest::updateFromSoupMessageHeaders(SoupMessageHeaders* soupHeaders)
+{
+    m_httpHeaderFields.clear();
+    SoupMessageHeadersIter headersIter;
+    soup_message_headers_iter_init(&headersIter, soupHeaders);
+    const char* headerName;
+    const char* headerValue;
+    while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
+        m_httpHeaderFields.set(String::fromUTF8(headerName), String::fromUTF8(headerValue));
+}
+
+void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage) const
+{
+    g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().utf8().data(), NULL);
+
+    GOwnPtr<SoupURI> uri(soupURI());
+    soup_message_set_uri(soupMessage, uri.get());
+
+    updateSoupMessageHeaders(soupMessage->request_headers);
+
     String firstPartyString = firstPartyForCookies().string();
     if (!firstPartyString.isEmpty()) {
         GOwnPtr<SoupURI> firstParty(soup_uri_new(firstPartyString.utf8().data()));
@@ -64,13 +79,7 @@
     if (!soupMessage)
         return 0;
 
-    const HTTPHeaderMap& headers = httpHeaderFields();
-    SoupMessageHeaders* soupHeaders = soupMessage->request_headers;
-    if (!headers.isEmpty()) {
-        HTTPHeaderMap::const_iterator end = headers.end();
-        for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it)
-            soup_message_headers_append(soupHeaders, it->key.string().utf8().data(), it->value.utf8().data());
-    }
+    updateSoupMessageHeaders(soupMessage->request_headers);
 
     String firstPartyString = firstPartyForCookies().string();
     if (!firstPartyString.isEmpty()) {
@@ -98,13 +107,7 @@
 
     m_httpMethod = String::fromUTF8(soupMessage->method);
 
-    m_httpHeaderFields.clear();
-    SoupMessageHeadersIter headersIter;
-    const char* headerName;
-    const char* headerValue;
-    soup_message_headers_iter_init(&headersIter, soupMessage->request_headers);
-    while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
-        m_httpHeaderFields.set(String::fromUTF8(headerName), String::fromUTF8(headerValue));
+    updateFromSoupMessageHeaders(soupMessage->request_headers);
 
     if (soupMessage->request_body->data)
         m_httpBody = FormData::create(soupMessage->request_body->data, soupMessage->request_body->length);

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog	2013-03-13 16:27:35 UTC (rev 145725)
@@ -1,3 +1,40 @@
+2013-03-13  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
+        https://bugs.webkit.org/show_bug.cgi?id=112160
+
+        Reviewed by Martin Robinson.
+
+        It allows to load requests with custom headers, or to update the
+        headers of a request before being sent to the server in the
+        WebKitWebPage::send-request callback.
+
+        * UIProcess/API/gtk/WebKitURIRequest.cpp:
+        (_WebKitURIRequestPrivate): Add SoupMessageHeaders.
+        (webkit_uri_request_get_http_headers): Return the HTTP headers of
+        the request as a SoupMessageHeaders if the request is HTTP. A new
+        SoupMessageHeaders is created on demand using the existing headers
+        of the request.
+        (webkitURIRequestGetResourceRequest): Instead of returning a const
+        reference of the internal ResourceRequest, set a request passed as
+        a reference and update its HTTP headers using the
+        SoupMessageHeaders if present.
+        * UIProcess/API/gtk/WebKitURIRequest.h:
+        * UIProcess/API/gtk/WebKitURIRequestPrivate.h:
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkit_web_view_load_request): Update to the new
+        webkitURIRequestGetResourceRequest API.
+        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add
+        webkit_uri_request_get_http_headers symbol.
+        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
+        (testWebPageURI):
+        (testURIRequestHTTPHeaders):
+        (serverCallback):
+        (beforeAll):
+        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
+        (willSendRequestForFrame): Update to the new
+        webkitURIRequestGetResourceRequest API.
+
 2013-03-11  Zan Dobersek  <zdober...@igalia.com>
 
         [GTK] WebKit2-only build fails

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.cpp (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.cpp	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.cpp	2013-03-13 16:27:35 UTC (rev 145725)
@@ -22,6 +22,7 @@
 
 #include "WebKitPrivate.h"
 #include "WebKitURIRequestPrivate.h"
+#include <WebCore/GOwnPtrSoup.h>
 #include <glib/gi18n-lib.h>
 #include <wtf/text/CString.h>
 
@@ -47,6 +48,7 @@
 struct _WebKitURIRequestPrivate {
     WebCore::ResourceRequest resourceRequest;
     CString uri;
+    GOwnPtr<SoupMessageHeaders> httpHeaders;
 };
 
 WEBKIT_DEFINE_TYPE(WebKitURIRequest, webkit_uri_request, G_TYPE_OBJECT)
@@ -145,14 +147,40 @@
     g_object_notify(G_OBJECT(request), "uri");
 }
 
-WebKitURIRequest* webkitURIRequestCreateForResourceRequest(const WebCore::ResourceRequest& resourceRequest)
+/**
+ * webkit_uri_request_get_http_headers:
+ * @request: a #WebKitURIRequest
+ *
+ * Get the HTTP headers of a #WebKitURIRequest as a #SoupMessageHeaders.
+ *
+ * Returns: (transfer none): a #SoupMessageHeaders with the HTTP headers of @request
+ *    or %NULL if @request is not an HTTP request.
+ */
+SoupMessageHeaders* webkit_uri_request_get_http_headers(WebKitURIRequest* request)
 {
+    g_return_val_if_fail(WEBKIT_IS_URI_REQUEST(request), 0);
+
+    if (request->priv->httpHeaders)
+        return request->priv->httpHeaders.get();
+
+    if (!request->priv->resourceRequest.url().protocolIsInHTTPFamily())
+        return 0;
+
+    request->priv->httpHeaders.set(soup_message_headers_new(SOUP_MESSAGE_HEADERS_REQUEST));
+    request->priv->resourceRequest.updateSoupMessageHeaders(request->priv->httpHeaders.get());
+    return request->priv->httpHeaders.get();
+}
+
+WebKitURIRequest* webkitURIRequestCreateForResourceRequest(const ResourceRequest& resourceRequest)
+{
     WebKitURIRequest* uriRequest = WEBKIT_URI_REQUEST(g_object_new(WEBKIT_TYPE_URI_REQUEST, NULL));
     uriRequest->priv->resourceRequest = resourceRequest;
     return uriRequest;
 }
 
-const WebCore::ResourceRequest& webkitURIRequestGetResourceRequest(WebKitURIRequest* uriRequest)
+void webkitURIRequestGetResourceRequest(WebKitURIRequest* request, ResourceRequest& resourceRequest)
 {
-    return uriRequest->priv->resourceRequest;
+    resourceRequest = request->priv->resourceRequest;
+    if (request->priv->httpHeaders)
+        resourceRequest.updateFromSoupMessageHeaders(request->priv->httpHeaders.get());
 }

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.h (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.h	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.h	2013-03-13 16:27:35 UTC (rev 145725)
@@ -25,6 +25,7 @@
 #define WebKitURIRequest_h
 
 #include <glib-object.h>
+#include <libsoup/soup.h>
 #include <webkit2/WebKitDefines.h>
 
 G_BEGIN_DECLS
@@ -53,18 +54,21 @@
 };
 
 WEBKIT_API GType
-webkit_uri_request_get_type (void);
+webkit_uri_request_get_type         (void);
 
 WEBKIT_API WebKitURIRequest *
-webkit_uri_request_new      (const gchar      *uri);
+webkit_uri_request_new              (const gchar      *uri);
 
 WEBKIT_API const gchar *
-webkit_uri_request_get_uri  (WebKitURIRequest *request);
+webkit_uri_request_get_uri          (WebKitURIRequest *request);
 
 WEBKIT_API void
-webkit_uri_request_set_uri  (WebKitURIRequest *request,
-                             const gchar      *uri);
+webkit_uri_request_set_uri          (WebKitURIRequest *request,
+                                     const gchar      *uri);
 
+WEBKIT_API SoupMessageHeaders *
+webkit_uri_request_get_http_headers (WebKitURIRequest *request);
+
 G_END_DECLS
 
 #endif

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequestPrivate.h (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequestPrivate.h	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequestPrivate.h	2013-03-13 16:27:35 UTC (rev 145725)
@@ -30,6 +30,6 @@
 #include <WebCore/ResourceRequest.h>
 
 WebKitURIRequest* webkitURIRequestCreateForResourceRequest(const WebCore::ResourceRequest&);
-const WebCore::ResourceRequest& webkitURIRequestGetResourceRequest(WebKitURIRequest*);
+void webkitURIRequestGetResourceRequest(WebKitURIRequest*, WebCore::ResourceRequest&);
 
 #endif // WebKitURIRequestPrivate_h

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2013-03-13 16:27:35 UTC (rev 145725)
@@ -1928,7 +1928,9 @@
     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
     g_return_if_fail(WEBKIT_IS_URI_REQUEST(request));
 
-    RefPtr<WebURLRequest> urlRequest = WebURLRequest::create(webkitURIRequestGetResourceRequest(request));
+    ResourceRequest resourceRequest;
+    webkitURIRequestGetResourceRequest(request, resourceRequest);
+    RefPtr<WebURLRequest> urlRequest = WebURLRequest::create(resourceRequest);
     getPage(webView)->loadURLRequest(urlRequest.get());
 }
 

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt	2013-03-13 16:27:35 UTC (rev 145725)
@@ -338,6 +338,7 @@
 webkit_uri_request_new
 webkit_uri_request_get_uri
 webkit_uri_request_set_uri
+webkit_uri_request_get_http_headers
 
 <SUBSECTION Standard>
 WebKitURIRequestClass

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp	2013-03-13 16:27:35 UTC (rev 145725)
@@ -32,6 +32,8 @@
 static WebKitTestBus* bus;
 static WebKitTestServer* kServer;
 
+const char* kDNTHeaderNotPresent = "DNT header not present";
+
 static void testLoadingStatus(LoadTrackingTest* test, gconstpointer data)
 {
     test->setRedirectURI(kServer->getURIForPath("/normal").data());
@@ -345,6 +347,43 @@
 
 }
 
+static void testURIRequestHTTPHeaders(WebViewTest* test, gconstpointer)
+{
+    GRefPtr<WebKitURIRequest> uriRequest = adoptGRef(webkit_uri_request_new("file:///foo/bar"));
+    g_assert(uriRequest.get());
+    g_assert_cmpstr(webkit_uri_request_get_uri(uriRequest.get()), ==, "file:///foo/bar");
+    g_assert(!webkit_uri_request_get_http_headers(uriRequest.get()));
+
+    // Load a request with no Do Not Track header.
+    webkit_uri_request_set_uri(uriRequest.get(), kServer->getURIForPath("/do-not-track-header").data());
+    test->loadRequest(uriRequest.get());
+    test->waitUntilLoadFinished();
+
+    size_t mainResourceDataSize = 0;
+    const char* mainResourceData = test->mainResourceData(mainResourceDataSize);
+    g_assert_cmpint(mainResourceDataSize, ==, strlen(kDNTHeaderNotPresent));
+    g_assert(!strncmp(mainResourceData, kDNTHeaderNotPresent, mainResourceDataSize));
+
+    // Add the Do Not Track header and load the request again.
+    SoupMessageHeaders* headers = webkit_uri_request_get_http_headers(uriRequest.get());
+    g_assert(headers);
+    soup_message_headers_append(headers, "DNT", "1");
+    test->loadRequest(uriRequest.get());
+    test->waitUntilLoadFinished();
+
+    mainResourceData = test->mainResourceData(mainResourceDataSize);
+    g_assert_cmpint(mainResourceDataSize, ==, 1);
+    g_assert(!strncmp(mainResourceData, "1", mainResourceDataSize));
+
+    // Load a URI for which the web extension will add the Do Not Track header.
+    test->loadURI(kServer->getURIForPath("/add-do-not-track-header").data());
+    test->waitUntilLoadFinished();
+
+    mainResourceData = test->mainResourceData(mainResourceDataSize);
+    g_assert_cmpint(mainResourceDataSize, ==, 1);
+    g_assert(!strncmp(mainResourceData, "1", mainResourceDataSize));
+}
+
 static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
 {
     static const char* responseString = "<html><body>Testing!Testing!Testing!Testing!Testing!Testing!Testing!"
@@ -375,6 +414,13 @@
         soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, responseString, strlen(responseString));
         soup_server_unpause_message(server, message);
         return;
+    } else if (g_str_equal(path, "/do-not-track-header") || g_str_equal(path, "/add-do-not-track-header")) {
+        const char* doNotTrack = soup_message_headers_get_one(message->request_headers, "DNT");
+        if (doNotTrack)
+            soup_message_body_append(message->response_body, SOUP_MEMORY_COPY, doNotTrack, strlen(doNotTrack));
+        else
+            soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, kDNTHeaderNotPresent, strlen(kDNTHeaderNotPresent));
+        soup_message_set_status(message, SOUP_STATUS_OK);
     } else
         soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
 
@@ -409,6 +455,7 @@
 
     ViewIsLoadingTest::add("WebKitWebView", "is-loading", testWebViewIsLoading);
     WebPageURITest::add("WebKitWebPage", "get-uri", testWebPageURI);
+    WebViewTest::add("WebKitURIRequest", "http-headers", testURIRequestHTTPHeaders);
 }
 
 void afterAll()

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp	2013-03-13 16:27:35 UTC (rev 145725)
@@ -75,6 +75,10 @@
         GOwnPtr<char> prefix(g_strndup(requestURI, strlen(requestURI) - strlen(suffix)));
         GOwnPtr<char> newURI(g_strdup_printf("%s/_javascript_.js", prefix.get()));
         webkit_uri_request_set_uri(request, newURI.get());
+    } else if (g_str_has_suffix(requestURI, "/add-do-not-track-header")) {
+        SoupMessageHeaders* headers = webkit_uri_request_get_http_headers(request);
+        g_assert(headers);
+        soup_message_headers_append(headers, "DNT", "1");
     } else if (g_str_has_suffix(requestURI, "/cancel-this.js"))
         return TRUE;
 

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp	2013-03-13 16:27:35 UTC (rev 145725)
@@ -134,7 +134,9 @@
     if (returnValue)
         return 0;
 
-    WebURLRequest* newRequest = WebURLRequest::create(webkitURIRequestGetResourceRequest(request.get())).leakRef();
+    ResourceRequest resourceRequest;
+    webkitURIRequestGetResourceRequest(request.get(), resourceRequest);
+    WebURLRequest* newRequest = WebURLRequest::create(resourceRequest).leakRef();
 
     ImmutableDictionary::MapType message;
     message.set(String::fromUTF8("Page"), toImpl(page));

Modified: releases/WebKitGTK/webkit-2.0/Tools/ChangeLog (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Tools/ChangeLog	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Tools/ChangeLog	2013-03-13 16:27:35 UTC (rev 145725)
@@ -1,3 +1,13 @@
+2013-03-13  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
+        https://bugs.webkit.org/show_bug.cgi?id=112160
+
+        Reviewed by Martin Robinson.
+
+        * MiniBrowser/gtk/GNUmakefile.am: Add missing libsoup flags to
+        CPPFLAGS.
+
 2013-03-11  Zan Dobersek  <zdober...@igalia.com>
 
         [GTK] WebKit2-only build fails

Modified: releases/WebKitGTK/webkit-2.0/Tools/MiniBrowser/gtk/GNUmakefile.am (145724 => 145725)


--- releases/WebKitGTK/webkit-2.0/Tools/MiniBrowser/gtk/GNUmakefile.am	2013-03-13 16:23:47 UTC (rev 145724)
+++ releases/WebKitGTK/webkit-2.0/Tools/MiniBrowser/gtk/GNUmakefile.am	2013-03-13 16:27:35 UTC (rev 145725)
@@ -14,7 +14,8 @@
 	$(_javascript_core_cppflags) \
 	$(FREETYPE_CFLAGS) \
 	$(GLIB_CFLAGS) \
-	$(GTK_CFLAGS)
+	$(GTK_CFLAGS) \
+	$(LIBSOUP_CFLAGS)
 
 Programs_MiniBrowser_SOURCES = \
 	Tools/MiniBrowser/gtk/BrowserCellRendererVariant.h \
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to