Changeset 144893 in webkit
- Timestamp:
- Mar 6, 2013, 12:11:23 AM (12 years ago)
- Location:
- releases/WebKitGTK/webkit-2.0/Source/WebKit2
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog
r144890 r144893 1 2013-03-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add WebKitWebPage::send-request signal to WebKit2 GTK+ API 4 https://bugs.webkit.org/show_bug.cgi?id=83681 5 6 Reviewed by Martin Robinson. 7 8 Add WebKitWebPage::send-request signal emitted in willSendRequest 9 callback to allow web process extensions to modify requests before 10 they are sent or cancel the resource load. 11 12 * UIProcess/API/gtk/WebKitURIRequest.cpp: 13 (webkitURIRequestSetProperty): Use webkit_uri_request_set_uri() to 14 set the new URI. 15 (webkit_uri_request_class_init): Make URI property construct 16 instead of construct-only, since it can be updated once 17 constructed. It should never be NULL, so set default value to 18 about:blank instad of NULL. 19 (webkit_uri_request_set_uri): New public method to set the URI of 20 the WebKitURIRequest. 21 * UIProcess/API/gtk/WebKitURIRequest.h: Allow to include this file 22 from webkit-web-extension.h. 23 * UIProcess/API/gtk/WebKitURIResponse.h: Ditto. 24 * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add 25 webkit_uri_request_set_uri. 26 * UIProcess/API/gtk/tests/TestResources.cpp: 27 (testWebResourceSendRequest): 28 (serverCallback): 29 (beforeAll): 30 * UIProcess/API/gtk/tests/WebExtensionTest.cpp: 31 (sendRequestCallback): 32 (pageCreatedCallback): 33 * UIProcess/API/gtk/webkit2marshal.list: 34 * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp: 35 (willSendRequestForFrame): Emit WebKitWebPage::send-request and 36 return early if the load is cancelled. 37 (webkit_web_page_class_init): Add WebKitWebPage::send-request signal. 38 * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h: 39 1 40 2013-03-05 Manuel Rego Casasnovas <rego@igalia.com> 2 41 -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.cpp
r137469 r144893 71 71 switch (propId) { 72 72 case PROP_URI: 73 request->priv->resourceRequest.setURL(KURL(KURL(), g_value_get_string(value)));73 webkit_uri_request_set_uri(request, g_value_get_string(value)); 74 74 break; 75 75 default: … … 93 93 _("URI"), 94 94 _("The URI to which the request will be made."), 95 0,96 static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT _ONLY)));95 "about:blank", 96 static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT))); 97 97 } 98 98 … … 126 126 } 127 127 128 /** 129 * webkit_uri_request_set_uri: 130 * @request: a #WebKitURIRequest 131 * @uri: an URI 132 * 133 * Set the URI of @request 134 */ 135 void webkit_uri_request_set_uri(WebKitURIRequest* request, const char* uri) 136 { 137 g_return_if_fail(WEBKIT_IS_URI_REQUEST(request)); 138 g_return_if_fail(uri); 139 140 KURL url(KURL(), uri); 141 if (url == request->priv->resourceRequest.url()) 142 return; 143 144 request->priv->resourceRequest.setURL(url); 145 g_object_notify(G_OBJECT(request), "uri"); 146 } 147 128 148 WebKitURIRequest* webkitURIRequestCreateForResourceRequest(const WebCore::ResourceRequest& resourceRequest) 129 149 { -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIRequest.h
r101248 r144893 18 18 */ 19 19 20 #if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION) 20 #if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION) && !defined(__WEBKIT_WEB_EXTENSION_H_INSIDE__) 21 21 #error "Only <webkit2/webkit2.h> can be included directly." 22 22 #endif … … 62 62 webkit_uri_request_get_uri (WebKitURIRequest *request); 63 63 64 WEBKIT_API void 65 webkit_uri_request_set_uri (WebKitURIRequest *request, 66 const gchar *uri); 67 64 68 G_END_DECLS 65 69 -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitURIResponse.h
r143341 r144893 18 18 */ 19 19 20 #if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION) 20 #if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION) && !defined(__WEBKIT_WEB_EXTENSION_H_INSIDE__) 21 21 #error "Only <webkit2/webkit2.h> can be included directly." 22 22 #endif -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt
r144890 r144893 331 331 webkit_uri_request_new 332 332 webkit_uri_request_get_uri 333 webkit_uri_request_set_uri 333 334 334 335 <SUBSECTION Standard> -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp
r144740 r144893 557 557 g_assert(resource); 558 558 g_assert_cmpstr(webkit_web_resource_get_uri(resource), ==, simpleStyleCSSURI.data()); 559 } 560 561 class SendRequestTest: public SingleResourceLoadTest { 562 public: 563 MAKE_GLIB_TEST_FIXTURE(SendRequestTest); 564 565 void resourceSentRequest(WebKitWebResource* resource, WebKitURIRequest* request, WebKitURIResponse* redirectResponse) 566 { 567 if (resource != m_resource) 568 return; 569 570 g_assert_cmpstr(webkit_uri_request_get_uri(request), ==, m_expectedNewResourceURI.data()); 571 g_assert_cmpstr(webkit_uri_request_get_uri(request), ==, webkit_web_resource_get_uri(resource)); 572 573 SingleResourceLoadTest::resourceSentRequest(resource, request, redirectResponse); 574 } 575 576 void resourceFailed(WebKitWebResource* resource, GError* error) 577 { 578 if (resource != m_resource) 579 return; 580 581 g_assert_cmpstr(webkit_web_resource_get_uri(resource), ==, m_expectedCancelledResourceURI.data()); 582 g_assert_error(error, WEBKIT_NETWORK_ERROR, WEBKIT_NETWORK_ERROR_CANCELLED); 583 584 SingleResourceLoadTest::resourceFailed(resource, error); 585 } 586 587 void setExpectedNewResourceURI(const CString& uri) 588 { 589 m_expectedNewResourceURI = uri; 590 } 591 592 void setExpectedCancelledResourceURI(const CString& uri) 593 { 594 m_expectedCancelledResourceURI = uri; 595 } 596 597 CString m_expectedNewResourceURI; 598 CString m_expectedCancelledResourceURI; 599 }; 600 601 static void testWebResourceSendRequest(SendRequestTest* test, gconstpointer) 602 { 603 test->setExpectedNewResourceURI(kServer->getURIForPath("/javascript.js")); 604 test->loadURI(kServer->getURIForPath("relative-javascript.html").data()); 605 test->waitUntilResourceLoadFinished(); 606 g_assert(test->m_resource); 607 608 Vector<SingleResourceLoadTest::LoadEvents>& events = test->m_loadEvents; 609 g_assert_cmpint(events.size(), ==, 5); 610 g_assert_cmpint(events[0], ==, SingleResourceLoadTest::Started); 611 g_assert_cmpint(events[1], ==, SingleResourceLoadTest::SentRequest); 612 g_assert_cmpint(events[2], ==, SingleResourceLoadTest::ReceivedResponse); 613 g_assert_cmpint(events[3], ==, SingleResourceLoadTest::ReceivedData); 614 g_assert_cmpint(events[4], ==, SingleResourceLoadTest::Finished); 615 events.clear(); 616 617 // Cancel request. 618 test->setExpectedCancelledResourceURI(kServer->getURIForPath("/cancel-this.js")); 619 test->loadURI(kServer->getURIForPath("/resource-to-cancel.html").data()); 620 test->waitUntilResourceLoadFinished(); 621 g_assert(test->m_resource); 622 623 g_assert_cmpint(events.size(), ==, 3); 624 g_assert_cmpint(events[0], ==, SingleResourceLoadTest::Started); 625 g_assert_cmpint(events[1], ==, SingleResourceLoadTest::Failed); 626 g_assert_cmpint(events[2], ==, SingleResourceLoadTest::Finished); 627 events.clear(); 559 628 } 560 629 … … 612 681 soup_message_headers_append(message->response_headers, "Content-Type", "text/javascript"); 613 682 soup_message_headers_append(message->response_headers, "Content-Disposition", "filename=JavaScript.js"); 683 } else if (g_str_equal(path, "/relative-javascript.html")) { 684 static const char* javascriptRelativeHTML = "<html><head><script language='javascript' src='remove-this/javascript.js'></script></head><body></body></html>"; 685 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, javascriptRelativeHTML, strlen(javascriptRelativeHTML)); 686 } else if (g_str_equal(path, "/resource-to-cancel.html")) { 687 static const char* resourceToCancelHTML = "<html><head><script language='javascript' src='cancel-this.js'></script></head><body></body></html>"; 688 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, resourceToCancelHTML, strlen(resourceToCancelHTML)); 614 689 } else if (g_str_equal(path, "/blank.ico")) { 615 690 GOwnPtr<char> filePath(g_build_filename(Test::getWebKit1TestResoucesDir().data(), path, NULL)); … … 642 717 kServer->run(serverCallback); 643 718 719 webkit_web_context_set_web_extensions_directory(webkit_web_context_get_default(), WEBKIT_TEST_WEB_EXTENSIONS_DIR); 720 644 721 ResourcesTest::add("WebKitWebView", "resources", testWebViewResources); 645 722 SingleResourceLoadTest::add("WebKitWebResource", "loading", testWebResourceLoading); … … 650 727 ResourcesTest::add("WebKitWebResource", "get-data", testWebResourceGetData); 651 728 SingleResourceLoadTest::add("WebKitWebView", "history-cache", testWebViewResourcesHistoryCache); 729 SendRequestTest::add("WebKitWebPage", "send-request", testWebResourceSendRequest); 652 730 } 653 731 -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp
r144890 r144893 21 21 22 22 #include <gio/gio.h> 23 #include <string.h> 23 24 #include <webkit2/webkit-web-extension.h> 24 25 #include <wtf/gobject/GOwnPtr.h> … … 63 64 } 64 65 66 static gboolean sendRequestCallback(WebKitWebPage*, WebKitURIRequest* request, WebKitURIResponse*, gpointer) 67 { 68 const char* requestURI = webkit_uri_request_get_uri(request); 69 g_assert(requestURI); 70 71 if (const char* suffix = g_strrstr(requestURI, "/remove-this/javascript.js")) { 72 GOwnPtr<char> prefix(g_strndup(requestURI, strlen(requestURI) - strlen(suffix))); 73 GOwnPtr<char> newURI(g_strdup_printf("%s/javascript.js", prefix.get())); 74 webkit_uri_request_set_uri(request, newURI.get()); 75 } else if (g_str_has_suffix(requestURI, "/cancel-this.js")) 76 return TRUE; 77 78 return FALSE; 79 } 80 65 81 static void pageCreatedCallback(WebKitWebExtension*, WebKitWebPage* webPage, gpointer userData) 66 82 { 67 83 g_signal_connect(webPage, "document-loaded", G_CALLBACK(documentLoadedCallback), userData); 68 84 g_signal_connect(webPage, "notify::uri", G_CALLBACK(uriChangedCallback), userData); 85 g_signal_connect(webPage, "send-request", G_CALLBACK(sendRequestCallback), 0); 69 86 } 70 87 -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/webkit2marshal.list
r133867 r144893 4 4 BOOLEAN:OBJECT,BOXED,OBJECT 5 5 BOOLEAN:OBJECT,ENUM 6 BOOLEAN:OBJECT,OBJECT 6 7 BOOLEAN:STRING 7 8 BOOLEAN:VOID -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp
r144890 r144893 27 27 #include "WebFrame.h" 28 28 #include "WebKitDOMDocumentPrivate.h" 29 #include "WebKitMarshal.h" 29 30 #include "WebKitPrivate.h" 31 #include "WebKitURIRequestPrivate.h" 32 #include "WebKitURIResponsePrivate.h" 30 33 #include "WebKitWebPagePrivate.h" 31 34 #include "WebProcess.h" … … 41 44 enum { 42 45 DOCUMENT_LOADED, 46 SEND_REQUEST, 43 47 44 48 LAST_SIGNAL … … 118 122 } 119 123 120 static WKURLRequestRef willSendRequestForFrame(WKBundlePageRef page, WKBundleFrameRef, uint64_t identifier, WKURLRequestRef request, WKURLResponseRef redirectResponse, const void*) 121 { 122 ImmutableDictionary::MapType message; 123 message.set(String::fromUTF8("Page"), toImpl(page)); 124 message.set(String::fromUTF8("Identifier"), WebUInt64::create(identifier)); 125 message.set(String::fromUTF8("Request"), toImpl(request)); 126 if (!toImpl(redirectResponse)->resourceResponse().isNull()) 127 message.set(String::fromUTF8("RedirectResponse"), toImpl(redirectResponse)); 124 static WKURLRequestRef willSendRequestForFrame(WKBundlePageRef page, WKBundleFrameRef, uint64_t identifier, WKURLRequestRef wkRequest, WKURLResponseRef wkRedirectResponse, const void* clientInfo) 125 { 126 GRefPtr<WebKitURIRequest> request = adoptGRef(webkitURIRequestCreateForResourceRequest(toImpl(wkRequest)->resourceRequest())); 127 GRefPtr<WebKitURIResponse> redirectResponse = wkRedirectResponse ? adoptGRef(webkitURIResponseCreateForResourceResponse(toImpl(wkRedirectResponse)->resourceResponse())) : 0; 128 129 gboolean returnValue; 130 g_signal_emit(WEBKIT_WEB_PAGE(clientInfo), signals[SEND_REQUEST], 0, request.get(), redirectResponse.get(), &returnValue); 131 if (returnValue) 132 return 0; 133 134 WebURLRequest* newRequest = WebURLRequest::create(webkitURIRequestGetResourceRequest(request.get())).leakRef(); 135 136 ImmutableDictionary::MapType message; 137 message.set(String::fromUTF8("Page"), toImpl(page)); 138 message.set(String::fromUTF8("Identifier"), WebUInt64::create(identifier)); 139 message.set(String::fromUTF8("Request"), newRequest); 140 if (!toImpl(wkRedirectResponse)->resourceResponse().isNull()) 141 message.set(String::fromUTF8("RedirectResponse"), toImpl(wkRedirectResponse)); 128 142 WebProcess::shared().injectedBundle()->postMessage(String::fromUTF8("WebPage.DidSendRequestForResource"), ImmutableDictionary::adopt(message).get()); 129 143 130 WKRetain(request); 131 return request; 144 return toAPI(newRequest); 132 145 } 133 146 … … 218 231 g_cclosure_marshal_VOID__OBJECT, 219 232 G_TYPE_NONE, 0); 233 234 /** 235 * WebKitWebPage::send-request: 236 * @web_page: the #WebKitWebPage on which the signal is emitted 237 * @request: a #WebKitURIRequest 238 * @redirected_response: a #WebKitURIResponse, or %NULL 239 * 240 * This signal is emitted when @request is about to be sent to 241 * the server. This signal can be used to modify the #WebKitURIRequest 242 * that will be sent to the server. You can also cancel the resource load 243 * operation by connecting to this signal and returning %TRUE. 244 * 245 * In case of a server redirection this signal is 246 * emitted again with the @request argument containing the new 247 * request to be sent to the server due to the redirection and the 248 * @redirected_response parameter containing the response 249 * received by the server for the initial request. 250 * 251 * Returns: %TRUE to stop other handlers from being invoked for the event. 252 * %FALSE to continue emission of the event. 253 */ 254 signals[SEND_REQUEST] = g_signal_new( 255 "send-request", 256 G_TYPE_FROM_CLASS(klass), 257 G_SIGNAL_RUN_LAST, 258 0, 259 g_signal_accumulator_true_handled, 0, 260 webkit_marshal_BOOLEAN__OBJECT_OBJECT, 261 G_TYPE_BOOLEAN, 2, 262 WEBKIT_TYPE_URI_REQUEST, 263 WEBKIT_TYPE_URI_RESPONSE); 220 264 } 221 265 -
releases/WebKitGTK/webkit-2.0/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h
r139305 r144893 23 23 #define __WEBKIT_WEB_EXTENSION_H_INSIDE__ 24 24 25 #include <webkit2/WebKitURIRequest.h> 26 #include <webkit2/WebKitURIResponse.h> 25 27 #include <webkit2/WebKitWebExtension.h> 26 28 #include <webkit2/WebKitWebPage.h>
Note:
See TracChangeset
for help on using the changeset viewer.