Changeset 148966 in webkit


Ignore:
Timestamp:
Apr 23, 2013 8:08:22 AM (11 years ago)
Author:
Carlos Garcia Campos
Message:

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

Reviewed by Andreas Kling.

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.

Location:
trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r148965 r148966  
     12013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
     4        https://bugs.webkit.org/show_bug.cgi?id=112160
     5
     6        Reviewed by Andreas Kling.
     7
     8        * platform/network/soup/GOwnPtrSoup.cpp:
     9        (WTF::SoupMessageHeaders): Add freeOwnedGPtr implementation for
     10        SoupMessageHeaders.
     11        (WTF):
     12        * platform/network/soup/GOwnPtrSoup.h:
     13        (WTF):
     14        * platform/network/soup/ResourceRequest.h:
     15        (ResourceRequest):
     16        * platform/network/soup/ResourceRequestSoup.cpp:
     17        (WebCore::ResourceRequest::updateSoupMessageHeaders): New function
     18        to update the given SoupMessageHeaders with the ResourceRequest
     19        headers.
     20        (WebCore::ResourceRequest::updateFromSoupMessageHeaders): New
     21        function to update the ResourceRequest headers with the given
     22        SoupMessageHeaders.
     23        (WebCore::ResourceRequest::updateSoupMessage): Use
     24        updateSoupMessageHeaders() to update the headers.
     25        (WebCore::ResourceRequest::toSoupMessage): Ditto.
     26        (WebCore::ResourceRequest::updateFromSoupMessage): Use
     27        updateFromSoupMessageHeaders to update the headers.
     28
    1292013-04-23  Andreas Kling  <akling@apple.com>
    230
  • trunk/Source/WebCore/platform/network/soup/GOwnPtrSoup.cpp

    r148507 r148966  
    3737}
    3838
     39template <> void freeOwnedGPtr<SoupMessageHeaders>(SoupMessageHeaders* ptr)
     40{
     41    if (ptr)
     42        soup_message_headers_free(ptr);
    3943}
     44
     45}
  • trunk/Source/WebCore/platform/network/soup/GOwnPtrSoup.h

    r112234 r148966  
    2525typedef struct _SoupURI SoupURI;
    2626typedef struct _SoupCookie SoupCookie;
     27typedef struct SoupMessageHeaders SoupMessageHeaders;
    2728
    2829namespace WTF {
     
    3031template<> void freeOwnedGPtr<SoupURI>(SoupURI* ptr);
    3132template<> void freeOwnedGPtr<SoupCookie>(SoupCookie* ptr);
     33template<> void freeOwnedGPtr<SoupMessageHeaders>(SoupMessageHeaders*);
    3234
    3335}
  • trunk/Source/WebCore/platform/network/soup/ResourceRequest.h

    r144216 r148966  
    7070        void updateFromDelegatePreservingOldHTTPBody(const ResourceRequest& delegateProvidedRequest) { *this = delegateProvidedRequest; }
    7171
     72        void updateSoupMessageHeaders(SoupMessageHeaders*) const;
     73        void updateFromSoupMessageHeaders(SoupMessageHeaders*);
    7274        void updateSoupMessage(SoupMessage*) const;
    7375        SoupMessage* toSoupMessage() const;
  • trunk/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp

    r145376 r148966  
    3535namespace WebCore {
    3636
     37void ResourceRequest::updateSoupMessageHeaders(SoupMessageHeaders* soupHeaders) const
     38{
     39    const HTTPHeaderMap& headers = httpHeaderFields();
     40    if (!headers.isEmpty()) {
     41        HTTPHeaderMap::const_iterator end = headers.end();
     42        for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it)
     43            soup_message_headers_append(soupHeaders, it->key.string().utf8().data(), it->value.utf8().data());
     44    }
     45}
     46
     47void ResourceRequest::updateFromSoupMessageHeaders(SoupMessageHeaders* soupHeaders)
     48{
     49    m_httpHeaderFields.clear();
     50    SoupMessageHeadersIter headersIter;
     51    soup_message_headers_iter_init(&headersIter, soupHeaders);
     52    const char* headerName;
     53    const char* headerValue;
     54    while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
     55        m_httpHeaderFields.set(String::fromUTF8(headerName), String::fromUTF8(headerValue));
     56}
     57
    3758void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage) const
    3859{
     
    4263    soup_message_set_uri(soupMessage, uri.get());
    4364
    44     const HTTPHeaderMap& headers = httpHeaderFields();
    45     SoupMessageHeaders* soupHeaders = soupMessage->request_headers;
    46     if (!headers.isEmpty()) {
    47         HTTPHeaderMap::const_iterator end = headers.end();
    48         for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it)
    49             soup_message_headers_append(soupHeaders, it->key.string().utf8().data(), it->value.utf8().data());
    50     }
     65    updateSoupMessageHeaders(soupMessage->request_headers);
    5166
    5267    String firstPartyString = firstPartyForCookies().string();
     
    6580        return 0;
    6681
    67     const HTTPHeaderMap& headers = httpHeaderFields();
    68     SoupMessageHeaders* soupHeaders = soupMessage->request_headers;
    69     if (!headers.isEmpty()) {
    70         HTTPHeaderMap::const_iterator end = headers.end();
    71         for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it)
    72             soup_message_headers_append(soupHeaders, it->key.string().utf8().data(), it->value.utf8().data());
    73     }
     82    updateSoupMessageHeaders(soupMessage->request_headers);
    7483
    7584    String firstPartyString = firstPartyForCookies().string();
     
    99108    m_httpMethod = String::fromUTF8(soupMessage->method);
    100109
    101     m_httpHeaderFields.clear();
    102     SoupMessageHeadersIter headersIter;
    103     const char* headerName;
    104     const char* headerValue;
    105     soup_message_headers_iter_init(&headersIter, soupMessage->request_headers);
    106     while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
    107         m_httpHeaderFields.set(String::fromUTF8(headerName), String::fromUTF8(headerValue));
     110    updateFromSoupMessageHeaders(soupMessage->request_headers);
    108111
    109112    if (soupMessage->request_body->data)
  • trunk/Source/WebKit2/ChangeLog

    r148963 r148966  
     12013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
     4        https://bugs.webkit.org/show_bug.cgi?id=112160
     5
     6        Reviewed by Andreas Kling.
     7
     8        It allows to load requests with custom headers, or to update the
     9        headers of a request before being sent to the server in the
     10        WebKitWebPage::send-request callback.
     11
     12        * UIProcess/API/gtk/WebKitURIRequest.cpp:
     13        (_WebKitURIRequestPrivate): Add SoupMessageHeaders.
     14        (webkit_uri_request_get_http_headers): Return the HTTP headers of
     15        the request as a SoupMessageHeaders if the request is HTTP. A new
     16        SoupMessageHeaders is created on demand using the existing headers
     17        of the request.
     18        (webkitURIRequestGetResourceRequest): Instead of returning a const
     19        reference of the internal ResourceRequest, set a request passed as
     20        a reference and update its HTTP headers using the
     21        SoupMessageHeaders if present.
     22        * UIProcess/API/gtk/WebKitURIRequest.h:
     23        * UIProcess/API/gtk/WebKitURIRequestPrivate.h:
     24        * UIProcess/API/gtk/WebKitWebView.cpp:
     25        (webkit_web_view_load_request): Update to the new
     26        webkitURIRequestGetResourceRequest API.
     27        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add
     28        webkit_uri_request_get_http_headers symbol.
     29        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
     30        (testWebPageURI):
     31        (testURIRequestHTTPHeaders):
     32        (serverCallback):
     33        (beforeAll):
     34        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
     35        (willSendRequestForFrame): Update to the new
     36        webkitURIRequestGetResourceRequest API.
     37
    1382013-04-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>
    239
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.cpp

    r148679 r148966  
    2323#include "WebKitPrivate.h"
    2424#include "WebKitURIRequestPrivate.h"
     25#include <WebCore/GOwnPtrSoup.h>
    2526#include <glib/gi18n-lib.h>
    2627#include <wtf/text/CString.h>
     
    4849    WebCore::ResourceRequest resourceRequest;
    4950    CString uri;
     51    GOwnPtr<SoupMessageHeaders> httpHeaders;
    5052};
    5153
     
    146148}
    147149
    148 WebKitURIRequest* webkitURIRequestCreateForResourceRequest(const WebCore::ResourceRequest& resourceRequest)
     150/**
     151 * webkit_uri_request_get_http_headers:
     152 * @request: a #WebKitURIRequest
     153 *
     154 * Get the HTTP headers of a #WebKitURIRequest as a #SoupMessageHeaders.
     155 *
     156 * Returns: (transfer none): a #SoupMessageHeaders with the HTTP headers of @request
     157 *    or %NULL if @request is not an HTTP request.
     158 */
     159SoupMessageHeaders* webkit_uri_request_get_http_headers(WebKitURIRequest* request)
     160{
     161    g_return_val_if_fail(WEBKIT_IS_URI_REQUEST(request), 0);
     162
     163    if (request->priv->httpHeaders)
     164        return request->priv->httpHeaders.get();
     165
     166    if (!request->priv->resourceRequest.url().protocolIsInHTTPFamily())
     167        return 0;
     168
     169    request->priv->httpHeaders.set(soup_message_headers_new(SOUP_MESSAGE_HEADERS_REQUEST));
     170    request->priv->resourceRequest.updateSoupMessageHeaders(request->priv->httpHeaders.get());
     171    return request->priv->httpHeaders.get();
     172}
     173
     174WebKitURIRequest* webkitURIRequestCreateForResourceRequest(const ResourceRequest& resourceRequest)
    149175{
    150176    WebKitURIRequest* uriRequest = WEBKIT_URI_REQUEST(g_object_new(WEBKIT_TYPE_URI_REQUEST, NULL));
     
    153179}
    154180
    155 const WebCore::ResourceRequest& webkitURIRequestGetResourceRequest(WebKitURIRequest* uriRequest)
     181void webkitURIRequestGetResourceRequest(WebKitURIRequest* request, ResourceRequest& resourceRequest)
    156182{
    157     return uriRequest->priv->resourceRequest;
     183    resourceRequest = request->priv->resourceRequest;
     184    if (request->priv->httpHeaders)
     185        resourceRequest.updateFromSoupMessageHeaders(request->priv->httpHeaders.get());
    158186}
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.h

    r148679 r148966  
    2626
    2727#include <glib-object.h>
     28#include <libsoup/soup.h>
    2829#include <webkit2/WebKitDefines.h>
    2930
     
    5455
    5556WEBKIT_API GType
    56 webkit_uri_request_get_type (void);
     57webkit_uri_request_get_type         (void);
    5758
    5859WEBKIT_API WebKitURIRequest *
    59 webkit_uri_request_new      (const gchar      *uri);
     60webkit_uri_request_new              (const gchar      *uri);
    6061
    6162WEBKIT_API const gchar *
    62 webkit_uri_request_get_uri  (WebKitURIRequest *request);
     63webkit_uri_request_get_uri          (WebKitURIRequest *request);
    6364
    6465WEBKIT_API void
    65 webkit_uri_request_set_uri  (WebKitURIRequest *request,
    66                              const gchar      *uri);
     66webkit_uri_request_set_uri          (WebKitURIRequest *request,
     67                                     const gchar      *uri);
     68
     69WEBKIT_API SoupMessageHeaders *
     70webkit_uri_request_get_http_headers (WebKitURIRequest *request);
    6771
    6872G_END_DECLS
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequestPrivate.h

    r129475 r148966  
    3131
    3232WebKitURIRequest* webkitURIRequestCreateForResourceRequest(const WebCore::ResourceRequest&);
    33 const WebCore::ResourceRequest& webkitURIRequestGetResourceRequest(WebKitURIRequest*);
     33void webkitURIRequestGetResourceRequest(WebKitURIRequest*, WebCore::ResourceRequest&);
    3434
    3535#endif // WebKitURIRequestPrivate_h
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp

    r148665 r148966  
    18441844    g_return_if_fail(WEBKIT_IS_URI_REQUEST(request));
    18451845
    1846     RefPtr<WebURLRequest> urlRequest = WebURLRequest::create(webkitURIRequestGetResourceRequest(request));
     1846    ResourceRequest resourceRequest;
     1847    webkitURIRequestGetResourceRequest(request, resourceRequest);
     1848    RefPtr<WebURLRequest> urlRequest = WebURLRequest::create(resourceRequest);
    18471849    getPage(webView)->loadURLRequest(urlRequest.get());
    18481850}
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt

    r148887 r148966  
    337337webkit_uri_request_get_uri
    338338webkit_uri_request_set_uri
     339webkit_uri_request_get_http_headers
    339340
    340341<SUBSECTION Standard>
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp

    r148666 r148966  
    3333static WebKitTestServer* kServer;
    3434
     35const char* kDNTHeaderNotPresent = "DNT header not present";
     36
    3537static void testLoadingStatus(LoadTrackingTest* test, gconstpointer data)
    3638{
     
    346348}
    347349
     350static void testURIRequestHTTPHeaders(WebViewTest* test, gconstpointer)
     351{
     352    GRefPtr<WebKitURIRequest> uriRequest = adoptGRef(webkit_uri_request_new("file:///foo/bar"));
     353    g_assert(uriRequest.get());
     354    g_assert_cmpstr(webkit_uri_request_get_uri(uriRequest.get()), ==, "file:///foo/bar");
     355    g_assert(!webkit_uri_request_get_http_headers(uriRequest.get()));
     356
     357    // Load a request with no Do Not Track header.
     358    webkit_uri_request_set_uri(uriRequest.get(), kServer->getURIForPath("/do-not-track-header").data());
     359    test->loadRequest(uriRequest.get());
     360    test->waitUntilLoadFinished();
     361
     362    size_t mainResourceDataSize = 0;
     363    const char* mainResourceData = test->mainResourceData(mainResourceDataSize);
     364    g_assert_cmpint(mainResourceDataSize, ==, strlen(kDNTHeaderNotPresent));
     365    g_assert(!strncmp(mainResourceData, kDNTHeaderNotPresent, mainResourceDataSize));
     366
     367    // Add the Do Not Track header and load the request again.
     368    SoupMessageHeaders* headers = webkit_uri_request_get_http_headers(uriRequest.get());
     369    g_assert(headers);
     370    soup_message_headers_append(headers, "DNT", "1");
     371    test->loadRequest(uriRequest.get());
     372    test->waitUntilLoadFinished();
     373
     374    mainResourceData = test->mainResourceData(mainResourceDataSize);
     375    g_assert_cmpint(mainResourceDataSize, ==, 1);
     376    g_assert(!strncmp(mainResourceData, "1", mainResourceDataSize));
     377
     378    // Load a URI for which the web extension will add the Do Not Track header.
     379    test->loadURI(kServer->getURIForPath("/add-do-not-track-header").data());
     380    test->waitUntilLoadFinished();
     381
     382    mainResourceData = test->mainResourceData(mainResourceDataSize);
     383    g_assert_cmpint(mainResourceDataSize, ==, 1);
     384    g_assert(!strncmp(mainResourceData, "1", mainResourceDataSize));
     385}
     386
    348387static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
    349388{
     
    376415        soup_server_unpause_message(server, message);
    377416        return;
     417    } else if (g_str_equal(path, "/do-not-track-header") || g_str_equal(path, "/add-do-not-track-header")) {
     418        const char* doNotTrack = soup_message_headers_get_one(message->request_headers, "DNT");
     419        if (doNotTrack)
     420            soup_message_body_append(message->response_body, SOUP_MEMORY_COPY, doNotTrack, strlen(doNotTrack));
     421        else
     422            soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, kDNTHeaderNotPresent, strlen(kDNTHeaderNotPresent));
     423        soup_message_set_status(message, SOUP_STATUS_OK);
    378424    } else
    379425        soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
     
    410456    ViewIsLoadingTest::add("WebKitWebView", "is-loading", testWebViewIsLoading);
    411457    WebPageURITest::add("WebKitWebPage", "get-uri", testWebPageURI);
     458    WebViewTest::add("WebKitURIRequest", "http-headers", testURIRequestHTTPHeaders);
    412459}
    413460
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp

    r148679 r148966  
    7777        GOwnPtr<char> newURI(g_strdup_printf("%s/javascript.js", prefix.get()));
    7878        webkit_uri_request_set_uri(request, newURI.get());
     79    } else if (g_str_has_suffix(requestURI, "/add-do-not-track-header")) {
     80        SoupMessageHeaders* headers = webkit_uri_request_get_http_headers(request);
     81        g_assert(headers);
     82        soup_message_headers_append(headers, "DNT", "1");
    7983    } else if (g_str_has_suffix(requestURI, "/cancel-this.js"))
    8084        return TRUE;
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp

    r148679 r148966  
    138138        return 0;
    139139
    140     RefPtr<WebURLRequest> newRequest = WebURLRequest::create(webkitURIRequestGetResourceRequest(request.get()));
     140    ResourceRequest resourceRequest;
     141    webkitURIRequestGetResourceRequest(request.get(), resourceRequest);
     142    RefPtr<WebURLRequest> newRequest = WebURLRequest::create(resourceRequest);
    141143
    142144    ImmutableDictionary::MapType message;
  • trunk/Tools/ChangeLog

    r148963 r148966  
     12013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
     4        https://bugs.webkit.org/show_bug.cgi?id=112160
     5
     6        Reviewed by Andreas Kling.
     7
     8        * MiniBrowser/gtk/GNUmakefile.am: Add missing libsoup flags to
     9        CPPFLAGS.
     10
    1112013-04-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>
    212
  • trunk/Tools/MiniBrowser/gtk/GNUmakefile.am

    r141126 r148966  
    1515        $(FREETYPE_CFLAGS) \
    1616        $(GLIB_CFLAGS) \
    17         $(GTK_CFLAGS)
     17        $(GTK_CFLAGS) \
     18        $(LIBSOUP_CFLAGS)
    1819
    1920Programs_MiniBrowser_SOURCES = \
Note: See TracChangeset for help on using the changeset viewer.