Changeset 112227 in webkit
- Timestamp:
- Mar 27, 2012 1:56:45 AM (12 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r112221 r112227 1 2012-03-27 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add method webkit_web_resource_get_data() to WebKit2 GTK+ API 4 https://bugs.webkit.org/show_bug.cgi?id=79667 5 6 Reviewed by Gustavo Noronha Silva. 7 8 * UIProcess/API/gtk/WebKitWebResource.cpp: 9 (webkitWebResourceCreate): Add isMainResource parameter indication 10 whether the resource is the main one of the frame. 11 (resourceDataCallback): C API callback called when resource data 12 is available. 13 (webkit_web_resource_get_data): Asynchronously get the raw data of 14 the resource. 15 (webkit_web_resource_get_data_finish): Finish asynchronous 16 operation started by webkit_web_resource_get_data(). 17 * UIProcess/API/gtk/WebKitWebResource.h: 18 * UIProcess/API/gtk/WebKitWebResourcePrivate.h: 19 * UIProcess/API/gtk/WebKitWebView.cpp: 20 (webkitWebViewResourceLoadStarted): Pass isMainResource parameter 21 to webkitWebResourceCreate(). 22 * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols. 23 * UIProcess/API/gtk/tests/TestResources.cpp: 24 (testWebResourceGetData): 25 (serverCallback): 26 (beforeAll): 27 1 28 2012-03-27 Carlos Garcia Campos <cgarcia@igalia.com> 2 29 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.cpp
r112221 r112227 51 51 CString uri; 52 52 GRefPtr<WebKitURIResponse> response; 53 bool isMainResource; 53 54 }; 54 55 … … 205 206 } 206 207 207 WebKitWebResource* webkitWebResourceCreate(WKFrameRef wkFrame, WebKitURIRequest* request )208 WebKitWebResource* webkitWebResourceCreate(WKFrameRef wkFrame, WebKitURIRequest* request, bool isMainResource) 208 209 { 209 210 ASSERT(wkFrame); … … 211 212 resource->priv->wkFrame = wkFrame; 212 213 resource->priv->uri = webkit_uri_request_get_uri(request); 214 resource->priv->isMainResource = isMainResource; 213 215 return resource; 214 216 } … … 300 302 } 301 303 304 static void resourceDataCallback(WKDataRef data, WKErrorRef, void* context) 305 { 306 GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context)); 307 g_simple_async_result_set_op_res_gpointer(result.get(), const_cast<OpaqueWKData*>(data), 0); 308 g_simple_async_result_complete(result.get()); 309 } 310 311 /** 312 * webkit_web_resource_get_data: 313 * @resource: a #WebKitWebResource 314 * @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied 315 * @user_data: (closure): the data to pass to callback function 316 * 317 * Asynchronously get the raw data for @resource. 318 * 319 * When the operation is finished, @callback will be called. You can then call 320 * webkit_web_resource_get_data_finish() to get the result of the operation. 321 */ 322 void webkit_web_resource_get_data(WebKitWebResource* resource, GAsyncReadyCallback callback, gpointer userData) 323 { 324 g_return_if_fail(WEBKIT_IS_WEB_RESOURCE(resource)); 325 326 GSimpleAsyncResult* result = g_simple_async_result_new(G_OBJECT(resource), callback, userData, 327 reinterpret_cast<gpointer>(webkit_web_resource_get_data)); 328 if (resource->priv->isMainResource) 329 WKFrameGetMainResourceData(resource->priv->wkFrame.get(), resourceDataCallback, result); 330 else { 331 WKRetainPtr<WKURLRef> url(AdoptWK, WKURLCreateWithUTF8CString(resource->priv->uri.data())); 332 WKFrameGetResourceData(resource->priv->wkFrame.get(), url.get(), resourceDataCallback, result); 333 } 334 } 335 336 /** 337 * webkit_web_resource_get_data_finish: 338 * @resource: a #WebKitWebResource 339 * @result: a #GAsyncResult 340 * @length: (out): return location for the length of the resource data 341 * @error: return location for error or %NULL to ignore 342 * 343 * Finish an asynchronous operation started with webkit_web_resource_get_data(). 344 * 345 * Returns: (transfer full): a string with the data of @resource, or %NULL in case 346 * of error. if @length is not %NULL, the size of the data will be assigned to it. 347 */ 348 guchar* webkit_web_resource_get_data_finish(WebKitWebResource* resource, GAsyncResult* result, gsize* length, GError** error) 349 { 350 g_return_val_if_fail(WEBKIT_IS_WEB_RESOURCE(resource), 0); 351 g_return_val_if_fail(G_IS_ASYNC_RESULT(result), 0); 352 353 GSimpleAsyncResult* simple = G_SIMPLE_ASYNC_RESULT(result); 354 g_warn_if_fail(g_simple_async_result_get_source_tag(simple) == webkit_web_resource_get_data); 355 356 if (g_simple_async_result_propagate_error(simple, error)) 357 return 0; 358 359 WKDataRef wkData = static_cast<WKDataRef>(g_simple_async_result_get_op_res_gpointer(simple)); 360 if (length) 361 *length = WKDataGetSize(wkData); 362 return static_cast<guchar*>(g_memdup(WKDataGetBytes(wkData), WKDataGetSize(wkData))); 363 } -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.h
r112221 r112227 26 26 27 27 #include <glib-object.h> 28 #include <gio/gio.h> 28 29 #include <webkit2/WebKitDefines.h> 29 30 #include <webkit2/WebKitURIResponse.h> … … 61 62 webkit_web_resource_get_response (WebKitWebResource *resource); 62 63 64 WEBKIT_API void 65 webkit_web_resource_get_data (WebKitWebResource *resource, 66 GAsyncReadyCallback callback, 67 gpointer user_data); 68 69 WEBKIT_API guchar * 70 webkit_web_resource_get_data_finish (WebKitWebResource *resource, 71 GAsyncResult *result, 72 gsize *length, 73 GError **error); 74 63 75 G_END_DECLS 64 76 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResourcePrivate.h
r112221 r112227 24 24 #include "WebKitWebResource.h" 25 25 26 WebKitWebResource* webkitWebResourceCreate(WKFrameRef, WebKitURIRequest* );26 WebKitWebResource* webkitWebResourceCreate(WKFrameRef, WebKitURIRequest*, bool isMainResource); 27 27 void webkitWebResourceSentRequest(WebKitWebResource*, WebKitURIRequest*, WebKitURIResponse*); 28 28 void webkitWebResourceSetResponse(WebKitWebResource*, WebKitURIResponse*); -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
r112221 r112227 871 871 { 872 872 // FIXME: ignore resources when replacing content. 873 WebKitWebResource* resource = webkitWebResourceCreate(wkFrame, request );873 WebKitWebResource* resource = webkitWebResourceCreate(wkFrame, request, isMainResource); 874 874 WebKitWebViewPrivate* priv = webView->priv; 875 875 if (WKFrameIsMainFrame(wkFrame) && isMainResource) -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt
r112221 r112227 481 481 webkit_web_resource_get_uri 482 482 webkit_web_resource_get_response 483 webkit_web_resource_get_data 484 webkit_web_resource_get_data_finish 483 485 484 486 <SUBSECTION Standard> -
trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp
r112221 r112227 26 26 static WebKitTestServer* kServer; 27 27 28 static const char* kIndexHtml = 29 "<html><head>" 30 " <link rel='stylesheet' href='/style.css' type='text/css'>" 31 " <script language='javascript' src='/javascript.js'></script>" 32 "</head><body>WebKitGTK+ resources test</body></html>"; 33 34 static const char* kStyleCSS = 35 "body {" 36 " margin: 0px;" 37 " padding: 0px;" 38 " font-family: sans-serif;" 39 " background: url(/blank.ico) 0 0 no-repeat;" 40 " color: black;" 41 "}"; 42 43 static const char* kJavascript = "function foo () { var a = 1; }"; 44 28 45 class ResourcesTest: public WebViewTest { 29 46 public: … … 76 93 , m_resourcesLoaded(0) 77 94 , m_resourcesToLoad(0) 95 , m_resourceDataSize(0) 78 96 { 79 97 g_signal_connect(m_webView, "resource-load-started", G_CALLBACK(resourceLoadStartedCallback), this); … … 115 133 } 116 134 135 static void resourceGetDataCallback(GObject* object, GAsyncResult* result, gpointer userData) 136 { 137 size_t dataSize; 138 GOwnPtr<GError> error; 139 unsigned char* data = webkit_web_resource_get_data_finish(WEBKIT_WEB_RESOURCE(object), result, &dataSize, &error.outPtr()); 140 g_assert(!error.get()); 141 g_assert(data); 142 g_assert_cmpint(dataSize, >, 0); 143 144 ResourcesTest* test = static_cast<ResourcesTest*>(userData); 145 test->m_resourceData.set(reinterpret_cast<char*>(data)); 146 test->m_resourceDataSize = dataSize; 147 g_main_loop_quit(test->m_mainLoop); 148 } 149 150 void checkResourceData(WebKitWebResource* resource) 151 { 152 m_resourceDataSize = 0; 153 webkit_web_resource_get_data(resource, resourceGetDataCallback, this); 154 g_main_loop_run(m_mainLoop); 155 156 const char* uri = webkit_web_resource_get_uri(resource); 157 if (uri == kServer->getURIForPath("/")) { 158 g_assert_cmpint(m_resourceDataSize, ==, strlen(kIndexHtml)); 159 g_assert(!strncmp(m_resourceData.get(), kIndexHtml, m_resourceDataSize)); 160 } else if (uri == kServer->getURIForPath("/style.css")) { 161 g_assert_cmpint(m_resourceDataSize, ==, strlen(kStyleCSS)); 162 g_assert(!strncmp(m_resourceData.get(), kStyleCSS, m_resourceDataSize)); 163 } else if (uri == kServer->getURIForPath("/javascript.js")) { 164 g_assert_cmpint(m_resourceDataSize, ==, strlen(kJavascript)); 165 g_assert(!strncmp(m_resourceData.get(), kJavascript, m_resourceDataSize)); 166 } else 167 g_assert_not_reached(); 168 m_resourceData.clear(); 169 } 170 117 171 size_t m_resourcesLoaded; 118 172 size_t m_resourcesToLoad; 173 GOwnPtr<char> m_resourceData; 174 size_t m_resourceDataSize; 119 175 }; 120 176 … … 410 466 } 411 467 468 static void testWebResourceGetData(ResourcesTest* test, gconstpointer) 469 { 470 test->loadURI(kServer->getURIForPath("/").data()); 471 // FIXME: this should be 4 instead of 3, but we don't get the css image resource 472 // due to bug https://bugs.webkit.org/show_bug.cgi?id=78510. 473 test->waitUntilResourcesLoaded(3); 474 475 WebKitWebResource* resource = webkit_web_view_get_main_resource(test->m_webView); 476 g_assert(resource); 477 test->checkResourceData(resource); 478 479 GOwnPtr<GList> subresources(webkit_web_view_get_subresources(test->m_webView)); 480 for (GList* item = subresources.get(); item; item = g_list_next(item)) 481 test->checkResourceData(WEBKIT_WEB_RESOURCE(item->data)); 482 } 483 412 484 static void addCacheHTTPHeadersToResponse(SoupMessage* message) 413 485 { … … 440 512 441 513 if (g_str_equal(path, "/")) { 442 static const char* indexHtml = 443 "<html><head>" 444 " <link rel='stylesheet' href='/style.css' type='text/css'>" 445 " <script language='javascript' src='/javascript.js'></script>" 446 "</head><body>WebKitGTK+ resources test</body></html>"; 447 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, indexHtml, strlen(indexHtml)); 514 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, kIndexHtml, strlen(kIndexHtml)); 448 515 } else if (g_str_equal(path, "/javascript.html")) { 449 516 static const char* javascriptHtml = "<html><head><script language='javascript' src='/javascript.js'></script></head><body></body></html>"; … … 459 526 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, invalidCSSHtml, strlen(invalidCSSHtml)); 460 527 } else if (g_str_equal(path, "/style.css")) { 461 static const char* css = 462 "body {" 463 " margin: 0px;" 464 " padding: 0px;" 465 " font-family: sans-serif;" 466 " background: url(/blank.ico) 0 0 no-repeat;" 467 " color: black;" 468 "}"; 469 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, css, strlen(css)); 528 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, kStyleCSS, strlen(kStyleCSS)); 470 529 addCacheHTTPHeadersToResponse(message); 471 530 } else if (g_str_equal(path, "/javascript.js")) { 472 static const char* javascript = "function foo () { var a = 1; }"; 473 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, javascript, strlen(javascript)); 531 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, kJavascript, strlen(kJavascript)); 474 532 } else if (g_str_equal(path, "/blank.ico")) { 475 533 GOwnPtr<char> filePath(g_build_filename(Test::getWebKit1TestResoucesDir().data(), path, NULL)); … … 503 561 SingleResourceLoadTest::add("WebKitWebResource", "response", testWebResourceResponse); 504 562 ResourceURITrackingTest::add("WebKitWebResource", "active-uri", testWebResourceActiveURI); 563 ResourcesTest::add("WebKitWebResource", "get-data", testWebResourceGetData); 505 564 } 506 565
Note: See TracChangeset
for help on using the changeset viewer.