Changeset 44263 in webkit
- Timestamp:
- May 29, 2009 7:48:33 AM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ChangeLog
r44253 r44263 1 2009-05-29 Gustavo Noronha Silva <gns@gnome.org> 2 3 Reviewed by Jan Alonzo. 4 5 Add a test-case for our HTTP backend, currently checking the 6 ref-counting of the SoupMessage. 7 8 * GNUmakefile.am: 9 1 10 2009-05-28 Dirk Schulze <krit@webkit.org> 2 11 -
trunk/GNUmakefile.am
r44246 r44263 524 524 -no-fast-install 525 525 526 TEST_PROGS += Programs/unittests/testwebframe \ 526 TEST_PROGS += Programs/unittests/testhttpbackend \ 527 Programs/unittests/testwebframe \ 527 528 Programs/unittests/testwebbackforwardlist \ 528 529 Programs/unittests/testwebhistoryitem \ … … 531 532 532 533 # Add additional tests here 534 Programs_unittests_testhttpbackend_SOURCES = WebKit/gtk/tests/testhttpbackend.c 535 Programs_unittests_testhttpbackend_CFLAGS = $(webkit_tests_cflags) 536 Programs_unittests_testhttpbackend_LDADD = $(webkit_tests_ldadd) 537 Programs_unittests_testhttpbackend_LDFLAGS = $(webkit_tests_ldflags) 538 533 539 Programs_unittests_testwebframe_SOURCES = WebKit/gtk/tests/testwebframe.c 534 540 Programs_unittests_testwebframe_CFLAGS = $(webkit_tests_cflags) -
trunk/WebCore/ChangeLog
r44256 r44263 1 2009-05-29 Gustavo Noronha Silva <gns@gnome.org> 2 3 Reviewed by Jan Alonzo. 4 5 Make SoupMessage a member of ResourceRequest, instead of creating 6 it in startHttp. Implement updating of ResourceRequest from 7 SoupMessage, and vice versa. 8 9 * GNUmakefile.am: 10 * platform/network/soup/ResourceHandleSoup.cpp: 11 (WebCore::ResourceHandle::~ResourceHandle): 12 (WebCore::gotHeadersCallback): 13 (WebCore::ResourceHandle::startHttp): 14 * platform/network/soup/ResourceRequest.h: 15 (WebCore::ResourceRequest::ResourceRequest): 16 (WebCore::ResourceRequest::~ResourceRequest): 17 * platform/network/soup/ResourceRequestSoup.cpp: Added. 18 (WTF::SoupURI): 19 (WebCore::ResourceRequest::soupMessage): 20 (WebCore::ResourceRequest::ResourceRequest): 21 (WebCore::ResourceRequest::doUpdateResourceRequest): 22 (WebCore::ResourceRequest::doUpdatePlatformRequest): 23 1 24 2009-05-28 Dmitry Titov <dimich@chromium.org> 2 25 -
trunk/WebCore/GNUmakefile.am
r44253 r44263 1880 1880 WebCore/platform/network/soup/ResourceError.h \ 1881 1881 WebCore/platform/network/soup/ResourceHandleSoup.cpp \ 1882 WebCore/platform/network/soup/ResourceRequestSoup.cpp \ 1882 1883 WebCore/platform/network/soup/ResourceRequest.h \ 1883 1884 WebCore/platform/network/soup/ResourceResponse.h \ -
trunk/WebCore/platform/network/soup/ResourceHandleSoup.cpp
r44254 r44263 137 137 ResourceHandle::~ResourceHandle() 138 138 { 139 if (d->m_msg) 140 g_signal_handlers_disconnect_matched(d->m_msg, G_SIGNAL_MATCH_DATA, 141 0, 0, 0, 0, this); 139 142 } 140 143 … … 257 260 return; 258 261 259 Re sourceHandle*handle = static_cast<ResourceHandle*>(data);262 RefPtr<ResourceHandle> handle = static_cast<ResourceHandle*>(data); 260 263 if (!handle) 261 264 return; … … 268 271 269 272 fillResponseFromMessage(msg, &d->m_response); 270 client->didReceiveResponse(handle, d->m_response);271 273 d->m_reportedHeaders = true; 274 client->didReceiveResponse(handle.get(), d->m_response); 272 275 } 273 276 … … 466 469 ensureSessionIsInitialized(session); 467 470 468 SoupMessage* msg; 469 msg = soup_message_new(request().httpMethod().utf8().data(), urlString.utf8().data()); 470 g_signal_connect(msg, "restarted", G_CALLBACK(restartedCallback), this); 471 g_signal_connect(msg, "got-headers", G_CALLBACK(gotHeadersCallback), this); 472 g_signal_connect(msg, "got-chunk", G_CALLBACK(gotChunkCallback), this); 473 474 g_object_set_data(G_OBJECT(msg), "resourceHandle", reinterpret_cast<void*>(this)); 475 476 HTTPHeaderMap customHeaders = d->m_request.httpHeaderFields(); 477 if (!customHeaders.isEmpty()) { 478 HTTPHeaderMap::const_iterator end = customHeaders.end(); 479 for (HTTPHeaderMap::const_iterator it = customHeaders.begin(); it != end; ++it) 480 soup_message_headers_append(msg->request_headers, it->first.string().utf8().data(), it->second.utf8().data()); 481 } 471 d->m_msg = static_cast<SoupMessage*>(g_object_ref(request().soupMessage())); 472 g_signal_connect(d->m_msg, "restarted", G_CALLBACK(restartedCallback), this); 473 g_signal_connect(d->m_msg, "got-headers", G_CALLBACK(gotHeadersCallback), this); 474 g_signal_connect(d->m_msg, "got-chunk", G_CALLBACK(gotChunkCallback), this); 475 476 g_object_set_data(G_OBJECT(d->m_msg), "resourceHandle", reinterpret_cast<void*>(this)); 482 477 483 478 FormData* httpBody = d->m_request.httpBody(); … … 489 484 Vector<char> body; 490 485 httpBody->flatten(body); 491 soup_message_set_request( msg, d->m_request.httpContentType().utf8().data(),486 soup_message_set_request(d->m_msg, d->m_request.httpContentType().utf8().data(), 492 487 SOUP_MEMORY_COPY, body.data(), body.size()); 493 488 } else { … … 498 493 * (think sftp://) files by using GIO? 499 494 */ 500 soup_message_body_set_accumulate( msg->request_body, FALSE);495 soup_message_body_set_accumulate(d->m_msg->request_body, FALSE); 501 496 for (size_t i = 0; i < numElements; i++) { 502 497 const FormDataElement& element = httpBody->elements()[i]; 503 498 504 499 if (element.m_type == FormDataElement::data) 505 soup_message_body_append( msg->request_body, SOUP_MEMORY_TEMPORARY, element.m_data.data(), element.m_data.size());500 soup_message_body_append(d->m_msg->request_body, SOUP_MEMORY_TEMPORARY, element.m_data.data(), element.m_data.size()); 506 501 else { 507 502 /* … … 517 512 if (error) { 518 513 ResourceError resourceError(g_quark_to_string(SOUP_HTTP_ERROR), 519 msg->status_code,514 d->m_msg->status_code, 520 515 urlString, 521 516 String::fromUTF8(error->message)); … … 524 519 d->client()->didFail(this, resourceError); 525 520 526 g_object_unref(msg); 521 g_signal_handlers_disconnect_matched(d->m_msg, G_SIGNAL_MATCH_DATA, 522 0, 0, 0, 0, this); 523 g_object_unref(d->m_msg); 524 d->m_msg = 0; 525 527 526 return false; 528 527 } … … 531 530 g_mapped_file_get_length(fileMapping), 532 531 fileMapping, reinterpret_cast<GDestroyNotify>(g_mapped_file_free)); 533 soup_message_body_append_buffer( msg->request_body, soupBuffer);532 soup_message_body_append_buffer(d->m_msg->request_body, soupBuffer); 534 533 soup_buffer_free(soupBuffer); 535 534 } … … 538 537 } 539 538 540 d->m_msg = static_cast<SoupMessage*>(g_object_ref(msg));541 539 // balanced by a deref() in finishedCallback, which should always run 542 540 ref(); … … 547 545 // use it here instead. 548 546 soup_message_headers_replace(d->m_msg->request_headers, "Accept-Encoding", "identity"); 547 548 // Balanced in ResourceRequest's destructor; we need to keep our 549 // own ref, because after queueing the message, the session owns 550 // the initial reference. We cannot ref the message in 551 // ResourceRequest because not all request objects are queued. 552 g_object_ref(d->m_msg); 549 553 soup_session_queue_message(session, d->m_msg, finishedCallback, this); 550 554 -
trunk/WebCore/platform/network/soup/ResourceRequest.h
r35900 r44263 30 30 #include "ResourceRequestBase.h" 31 31 32 #include <libsoup/soup.h> 33 32 34 namespace WebCore { 33 35 … … 36 38 ResourceRequest(const String& url) 37 39 : ResourceRequestBase(KURL(url), UseProtocolCachePolicy) 40 , m_soupMessage(0) 38 41 { 39 42 } … … 41 44 ResourceRequest(const KURL& url) 42 45 : ResourceRequestBase(url, UseProtocolCachePolicy) 46 , m_soupMessage(0) 43 47 { 44 48 } … … 46 50 ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy) 47 51 : ResourceRequestBase(url, policy) 52 , m_soupMessage(0) 48 53 { 49 54 setHTTPReferrer(referrer); … … 52 57 ResourceRequest() 53 58 : ResourceRequestBase(KURL(), UseProtocolCachePolicy) 59 , m_soupMessage(0) 54 60 { 55 61 } 56 62 63 ResourceRequest(SoupMessage* soupMessage) 64 : ResourceRequestBase() 65 , m_soupMessage(soupMessage) 66 { 67 g_object_ref(soupMessage); 68 } 69 70 // We force copies of ResourceRequest to create their own 71 // SoupMessage, if needed. 72 ResourceRequest(const ResourceRequest& resourceRequest); 73 74 ~ResourceRequest() 75 { 76 if (m_soupMessage) { 77 g_object_unref(m_soupMessage); 78 m_soupMessage = 0; 79 } 80 } 81 82 SoupMessage* soupMessage() const; 83 57 84 private: 85 SoupMessage* m_soupMessage; 58 86 friend class ResourceRequestBase; 59 87 60 void doUpdatePlatformRequest() {}61 void doUpdateResourceRequest() {}88 void doUpdatePlatformRequest(); 89 void doUpdateResourceRequest(); 62 90 }; 63 91 -
trunk/WebKit/gtk/ChangeLog
r44248 r44263 1 2009-05-29 Gustavo Noronha Silva <gns@gnome.org> 2 3 Reviewed by Jan Alonzo. 4 5 Make NetworkRequest carry a reference of the SoupMessage used by 6 ResourceRequest, and use that to create new ResourceRequests where 7 needed, so that no information is lost while passing around 8 NetworkRequest objects. 9 10 * WebCoreSupport/FrameLoaderClientGtk.cpp: 11 (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType): 12 (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction): 13 (WebKit::FrameLoaderClient::startDownload): 14 * webkit/webkitdownload.cpp: 15 (webkit_download_start): 16 * webkit/webkitnetworkrequest.cpp: 17 (webkit_network_request_finalize): 18 (webkit_network_request_new_with_core_request): 19 (webkit_network_request_new): 20 (webkit_network_request_get_message): 21 * webkit/webkitprivate.h: 22 * webkit/webkitwebframe.cpp: 23 (webkit_web_frame_load_request): 24 1 25 2009-05-28 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> 2 26 -
trunk/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
r44183 r44263 312 312 313 313 WebKitWebView* page = getViewFromFrame(m_frame); 314 WebKitNetworkRequest* request = webkit_network_request_new (resourceRequest.url().string().utf8().data());314 WebKitNetworkRequest* request = webkit_network_request_new_with_core_request(resourceRequest); 315 315 316 316 WebKitWebPolicyDecision* policyDecision = webkit_web_policy_decision_new(m_frame, policyFunction); … … 411 411 412 412 WebKitWebView* webView = getViewFromFrame(m_frame); 413 WebKitNetworkRequest* request = webkit_network_request_new (resourceRequest.url().string().utf8().data());413 WebKitNetworkRequest* request = webkit_network_request_new_with_core_request(resourceRequest); 414 414 WebKitNavigationResponse response; 415 415 /* … … 1032 1032 void FrameLoaderClient::startDownload(const ResourceRequest& request) 1033 1033 { 1034 WebKitNetworkRequest* networkRequest = webkit_network_request_new (request.url().string().utf8().data());1034 WebKitNetworkRequest* networkRequest = webkit_network_request_new_with_core_request(request); 1035 1035 WebKitWebView* view = getViewFromFrame(m_frame); 1036 1036 -
trunk/WebKit/gtk/webkit/webkitdownload.cpp
r43319 r44263 422 422 if (priv->resourceHandle) 423 423 priv->resourceHandle->setClient(priv->downloadClient); 424 else { 425 // FIXME: Use the actual request object when WebKitNetworkRequest is finished. 426 ResourceRequest request(webkit_network_request_get_uri(priv->networkRequest)); 427 priv->resourceHandle = ResourceHandle::create(request, priv->downloadClient, 0, false, false, false); 428 } 424 else 425 priv->resourceHandle = ResourceHandle::create(ResourceRequest(webkit_network_request_get_message(priv->networkRequest)), priv->downloadClient, 0, false, false, false); 429 426 430 427 priv->timer = g_timer_new(); -
trunk/WebKit/gtk/webkit/webkitnetworkrequest.cpp
r44077 r44263 1 1 /* 2 2 * Copyright (C) 2007, 2008 Holger Hans Peter Freyther 3 * Copyright (C) 2009 Gustavo Noronha Silva 3 4 * 4 5 * This library is free software; you can redistribute it and/or … … 19 20 20 21 #include "config.h" 22 #include "webkitnetworkrequest.h" 21 23 22 #include "webkitnetworkrequest.h" 24 #include "CString.h" 25 #include "ResourceRequest.h" 26 #include "webkitprivate.h" 23 27 24 28 /** … … 39 43 struct _WebKitNetworkRequestPrivate { 40 44 gchar* uri; 45 SoupMessage* message; 41 46 }; 42 47 … … 49 54 50 55 g_free(priv->uri); 56 57 if (priv->message) { 58 g_object_unref(priv->message); 59 priv->message = NULL; 60 } 51 61 52 62 G_OBJECT_CLASS(webkit_network_request_parent_class)->finalize(object); … … 66 76 } 67 77 78 // for internal use only 79 WebKitNetworkRequest* webkit_network_request_new_with_core_request(const WebCore::ResourceRequest& resourceRequest) 80 { 81 WebKitNetworkRequest* request = WEBKIT_NETWORK_REQUEST(g_object_new(WEBKIT_TYPE_NETWORK_REQUEST, NULL)); 82 WebKitNetworkRequestPrivate* priv = request->priv; 83 84 SoupMessage* soupMessage = resourceRequest.soupMessage(); 85 if (soupMessage) 86 priv->message = SOUP_MESSAGE(g_object_ref(soupMessage)); 87 priv->uri = g_strdup(resourceRequest.url().string().utf8().data()); 88 89 return request; 90 } 91 68 92 /** 69 93 * webkit_network_request_new: … … 72 96 * Creates a new #WebKitNetworkRequest initialized with an URI. 73 97 * 74 * Returns: a new #WebKitNetworkRequest 98 * Returns: a new #WebKitNetworkRequest, or %NULL if the URI is 99 * invalid. 75 100 */ 76 101 WebKitNetworkRequest* webkit_network_request_new(const gchar* uri) … … 80 105 WebKitNetworkRequest* request = WEBKIT_NETWORK_REQUEST(g_object_new(WEBKIT_TYPE_NETWORK_REQUEST, NULL)); 81 106 WebKitNetworkRequestPrivate* priv = request->priv; 107 108 priv->message = soup_message_new("GET", uri); 109 if (!priv->message) 110 return NULL; 82 111 83 112 priv->uri = g_strdup(uri); … … 119 148 return priv->uri; 120 149 } 150 151 // NOT YET API; For internal use only, for now 152 // webkit_network_request_get_soup_message: 153 // @request: a #WebKitNetworkRequest 154 // 155 // Obtains the #SoupMessage held and used by the given request. Notice 156 // that modification of the SoupMessage of a request by signal 157 // handlers is only supported where explicitly documented. 158 // 159 // Returns: the #SoupMessage 160 SoupMessage* webkit_network_request_get_message(WebKitNetworkRequest* request) 161 { 162 g_return_val_if_fail(WEBKIT_IS_NETWORK_REQUEST(request), NULL); 163 164 WebKitNetworkRequestPrivate* priv = request->priv; 165 166 return priv->message; 167 } -
trunk/WebKit/gtk/webkit/webkitprivate.h
r44228 r44263 24 24 25 25 /* 26 * This file knows the shared secret of WebKitWebView and WebKitWebFrame. 26 * This file knows the shared secret of WebKitWebView, WebKitWebFrame, 27 * and WebKitNetworkRequest. 27 28 * They are using WebCore which musn't be exposed to the outer world. 28 29 */ … … 38 39 #include <webkit/webkitwebwindowfeatures.h> 39 40 #include <webkit/webkitwebbackforwardlist.h> 41 #include <webkit/webkitnetworkrequest.h> 40 42 41 43 #include "BackForwardList.h" … … 48 50 #include "FrameLoaderClient.h" 49 51 #include "ResourceHandle.h" 52 #include "ResourceRequest.h" 50 53 #include "ResourceResponse.h" 51 54 #include "WindowFeatures.h" 52 55 53 56 #include <glib.h> 57 #include <libsoup/soup.h> 54 58 55 59 class DownloadClient; … … 181 185 webkit_web_policy_decision_cancel (WebKitWebPolicyDecision* decision); 182 186 187 WebKitNetworkRequest* 188 webkit_network_request_new_with_core_request(const WebCore::ResourceRequest& resourceRequest); 189 190 // FIXME: move this to webkitnetworkrequest.h once the API is agreed upon. 191 WEBKIT_API SoupMessage* 192 webkit_network_request_get_message(WebKitNetworkRequest* request); 193 183 194 // FIXME: move this functionality into a 'WebKitWebDataSource' once implemented 184 195 WEBKIT_API gchar* -
trunk/WebKit/gtk/webkit/webkitwebframe.cpp
r43302 r44263 511 511 return; 512 512 513 // TODO: Use the ResourceRequest carried by WebKitNetworkRequest when it is implemented. 514 String string = String::fromUTF8(webkit_network_request_get_uri(request)); 515 coreFrame->loader()->load(ResourceRequest(KURL(KURL(), string)), false); 513 coreFrame->loader()->load(ResourceRequest(webkit_network_request_get_message(request)), false); 516 514 } 517 515
Note: See TracChangeset
for help on using the changeset viewer.