Title: [143302] trunk/Source/WebKit2
Revision
143302
Author
[email protected]
Date
2013-02-18 23:48:40 -0800 (Mon, 18 Feb 2013)

Log Message

[GTK] Remove webkit_web_view_get_subresources from WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=110125

Reviewed by Anders Carlsson.

This API is currently implemented caching all resources in the
WebView which causes some problems in documents loading resources
indefinitely. This API was used in WebKit1 mainly to implement
webkit_web_view_save(), but we already have such API in
WebKit2.

* UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
(didReceiveWebViewMessageFromInjectedBundle):
* UIProcess/API/gtk/WebKitWebView.cpp:
(_WebKitWebViewPrivate):
(webkitWebViewLoadChanged):
* UIProcess/API/gtk/WebKitWebView.h:
* UIProcess/API/gtk/WebKitWebViewPrivate.h:
* UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
* UIProcess/API/gtk/tests/TestResources.cpp:
(testWebViewResources):
(testWebResourceGetData):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (143301 => 143302)


--- trunk/Source/WebKit2/ChangeLog	2013-02-19 07:39:46 UTC (rev 143301)
+++ trunk/Source/WebKit2/ChangeLog	2013-02-19 07:48:40 UTC (rev 143302)
@@ -1,3 +1,28 @@
+2013-02-18  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Remove webkit_web_view_get_subresources from WebKit2 GTK+ API
+        https://bugs.webkit.org/show_bug.cgi?id=110125
+
+        Reviewed by Anders Carlsson.
+
+        This API is currently implemented caching all resources in the
+        WebView which causes some problems in documents loading resources
+        indefinitely. This API was used in WebKit1 mainly to implement
+        webkit_web_view_save(), but we already have such API in
+        WebKit2.
+
+        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
+        (didReceiveWebViewMessageFromInjectedBundle):
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (_WebKitWebViewPrivate):
+        (webkitWebViewLoadChanged):
+        * UIProcess/API/gtk/WebKitWebView.h:
+        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
+        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
+        * UIProcess/API/gtk/tests/TestResources.cpp:
+        (testWebViewResources):
+        (testWebResourceGetData):
+
 2013-02-18  Christophe Dumez  <[email protected]>
 
         [WK2][EFL] Stop using internal C++ API in ewk_error

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitInjectedBundleClient.cpp (143301 => 143302)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitInjectedBundleClient.cpp	2013-02-19 07:39:46 UTC (rev 143301)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitInjectedBundleClient.cpp	2013-02-19 07:48:40 UTC (rev 143302)
@@ -71,11 +71,12 @@
         webkitWebResourceNotifyProgress(resource.get(), contentLength->value());
     } else if (g_str_equal(messageName, "DidFinishLoadForResource")) {
         WebUInt64* resourceIdentifier = static_cast<WebUInt64*>(message.get(String::fromUTF8("Identifier")));
-        GRefPtr<WebKitWebResource> resource = webkitWebViewResourceLoadFinished(webView, resourceIdentifier->value());
+        GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier->value());
         if (!resource)
             return;
 
         webkitWebResourceFinished(resource.get());
+        webkitWebViewRemoveLoadingWebResource(webView, resourceIdentifier->value());
     } else if (g_str_equal(messageName, "DidFailLoadForResource")) {
         WebUInt64* resourceIdentifier = static_cast<WebUInt64*>(message.get(String::fromUTF8("Identifier")));
         GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier->value());

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (143301 => 143302)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2013-02-19 07:39:46 UTC (rev 143301)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2013-02-19 07:48:40 UTC (rev 143302)
@@ -130,7 +130,6 @@
 };
 
 typedef HashMap<uint64_t, GRefPtr<WebKitWebResource> > LoadingResourcesMap;
-typedef HashMap<String, GRefPtr<WebKitWebResource> > ResourcesMap;
 
 struct _WebKitWebViewPrivate {
     ~_WebKitWebViewPrivate()
@@ -169,7 +168,6 @@
 
     GRefPtr<WebKitWebResource> mainResource;
     LoadingResourcesMap loadingResourcesMap;
-    ResourcesMap subresourcesMap;
 
     GRefPtr<WebKitWebInspector> inspector;
 
@@ -1363,7 +1361,6 @@
         GOwnPtr<char> faviconURI(webkit_favicon_database_get_favicon_uri(database, priv->activeURI.data()));
         webkitWebViewUpdateFaviconURI(webView, faviconURI.get());
 
-        priv->subresourcesMap.clear();
         if (!priv->mainResource) {
             // When a page is loaded from the history cache, the main resource load callbacks
             // are called when the main frame load is finished. We want to make sure there's a
@@ -1572,16 +1569,6 @@
     priv->loadingResourcesMap.remove(resourceIdentifier);
 }
 
-WebKitWebResource* webkitWebViewResourceLoadFinished(WebKitWebView* webView, uint64_t resourceIdentifier)
-{
-    WebKitWebViewPrivate* priv = webView->priv;
-    WebKitWebResource* resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier);
-    if (resource != priv->mainResource)
-        priv->subresourcesMap.set(String::fromUTF8(webkit_web_resource_get_uri(resource)), resource);
-    webkitWebViewRemoveLoadingWebResource(webView, resourceIdentifier);
-    return resource;
-}
-
 bool webkitWebViewEnterFullScreen(WebKitWebView* webView)
 {
     gboolean returnValue;
@@ -2640,7 +2627,6 @@
  * @web_view: a #WebKitWebView
  *
  * Return the main resource of @web_view.
- * See also webkit_web_view_get_subresources():
  *
  * Returns: (transfer none): the main #WebKitWebResource of the view
  *    or %NULL if nothing has been loaded.
@@ -2653,28 +2639,6 @@
 }
 
 /**
- * webkit_web_view_get_subresources:
- * @web_view: a #WebKitWebView
- *
- * Return the list of subresources of @web_view.
- * See also webkit_web_view_get_main_resource().
- *
- * Returns: (element-type WebKitWebResource) (transfer container): a list of #WebKitWebResource.
- */
-GList* webkit_web_view_get_subresources(WebKitWebView* webView)
-{
-    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
-
-    GList* subresources = 0;
-    WebKitWebViewPrivate* priv = webView->priv;
-    ResourcesMap::const_iterator end = priv->subresourcesMap.end();
-    for (ResourcesMap::const_iterator it = priv->subresourcesMap.begin(); it != end; ++it)
-        subresources = g_list_prepend(subresources, it->value.get());
-
-    return g_list_reverse(subresources);
-}
-
-/**
  * webkit_web_view_get_inspector:
  * @web_view: a #WebKitWebView
  *

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h (143301 => 143302)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2013-02-19 07:39:46 UTC (rev 143301)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2013-02-19 07:48:40 UTC (rev 143302)
@@ -371,9 +371,6 @@
 WEBKIT_API WebKitWebResource *
 webkit_web_view_get_main_resource                    (WebKitWebView             *web_view);
 
-WEBKIT_API GList *
-webkit_web_view_get_subresources                     (WebKitWebView             *web_view);
-
 WEBKIT_API WebKitWebInspector *
 webkit_web_view_get_inspector                        (WebKitWebView             *web_view);
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h (143301 => 143302)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2013-02-19 07:39:46 UTC (rev 143301)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2013-02-19 07:48:40 UTC (rev 143302)
@@ -51,7 +51,6 @@
 void webkitWebViewRunFileChooserRequest(WebKitWebView*, WebKitFileChooserRequest*);
 WebKitWebResource* webkitWebViewGetLoadingWebResource(WebKitWebView*, uint64_t resourceIdentifier);
 void webkitWebViewRemoveLoadingWebResource(WebKitWebView*, uint64_t resourceIdentifier);
-WebKitWebResource* webkitWebViewResourceLoadFinished(WebKitWebView*, uint64_t resourceIdentifier);
 bool webkitWebViewEnterFullScreen(WebKitWebView*);
 bool webkitWebViewLeaveFullScreen(WebKitWebView*);
 void webkitWebViewPopulateContextMenu(WebKitWebView*, WebKit::ImmutableArray* proposedMenu, WebKit::WebHitTestResult*);

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt (143301 => 143302)


--- trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt	2013-02-19 07:39:46 UTC (rev 143301)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt	2013-02-19 07:48:40 UTC (rev 143302)
@@ -150,7 +150,6 @@
 webkit_script_dialog_prompt_get_default_text
 webkit_script_dialog_prompt_set_text
 webkit_web_view_get_main_resource
-webkit_web_view_get_subresources
 
 <SUBSECTION Standard>
 WebKitWebViewClass

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp (143301 => 143302)


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp	2013-02-19 07:39:46 UTC (rev 143301)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp	2013-02-19 07:48:40 UTC (rev 143302)
@@ -93,15 +93,27 @@
         g_signal_connect(resource, "failed", G_CALLBACK(resourceFailedCallback), test);
     }
 
+    void clearSubresources()
+    {
+        g_list_free_full(m_subresources, reinterpret_cast<GDestroyNotify>(g_object_unref));
+        m_subresources = 0;
+    }
+
     ResourcesTest()
         : WebViewTest()
         , m_resourcesLoaded(0)
         , m_resourcesToLoad(0)
         , m_resourceDataSize(0)
+        , m_subresources(0)
     {
         g_signal_connect(m_webView, "resource-load-started", G_CALLBACK(resourceLoadStartedCallback), this);
     }
 
+    ~ResourcesTest()
+    {
+        clearSubresources();
+    }
+
     virtual void resourceLoadStarted(WebKitWebResource* resource, WebKitURIRequest* request)
     {
     }
@@ -121,6 +133,8 @@
     virtual void resourceFinished(WebKitWebResource* resource)
     {
         g_signal_handlers_disconnect_matched(resource, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this);
+        if (webkit_web_view_get_main_resource(m_webView) != resource)
+            m_subresources = g_list_prepend(m_subresources, g_object_ref(resource));
         if (++m_resourcesLoaded == m_resourcesToLoad)
             g_main_loop_quit(m_mainLoop);
     }
@@ -134,9 +148,15 @@
     {
         m_resourcesLoaded = 0;
         m_resourcesToLoad = resourcesCount;
+        clearSubresources();
         g_main_loop_run(m_mainLoop);
     }
 
+    GList* subresources()
+    {
+        return m_subresources;
+    }
+
     static void resourceGetDataCallback(GObject* object, GAsyncResult* result, gpointer userData)
     {
         size_t dataSize;
@@ -177,13 +197,14 @@
     size_t m_resourcesToLoad;
     GOwnPtr<char> m_resourceData;
     size_t m_resourceDataSize;
+    GList* m_subresources;
 };
 
 static void testWebViewResources(ResourcesTest* test, gconstpointer)
 {
     // Nothing loaded yet, there shoulnd't be resources.
     g_assert(!webkit_web_view_get_main_resource(test->m_webView));
-    g_assert(!webkit_web_view_get_subresources(test->m_webView));
+    g_assert(!test->subresources());
 
     // Load simple page without subresources.
     test->loadHtml("<html><body>Testing WebKitGTK+</body></html>", 0);
@@ -191,7 +212,7 @@
     WebKitWebResource* resource = webkit_web_view_get_main_resource(test->m_webView);
     g_assert(resource);
     g_assert_cmpstr(webkit_web_view_get_uri(test->m_webView), ==, webkit_web_resource_get_uri(resource));
-    g_assert(!webkit_web_view_get_subresources(test->m_webView));
+    g_assert(!test->subresources());
 
     // Load simple page with subresources.
     test->loadURI(kServer->getURIForPath("/").data());
@@ -200,9 +221,9 @@
     resource = webkit_web_view_get_main_resource(test->m_webView);
     g_assert(resource);
     g_assert_cmpstr(webkit_web_view_get_uri(test->m_webView), ==, webkit_web_resource_get_uri(resource));
-    GOwnPtr<GList> subresources(webkit_web_view_get_subresources(test->m_webView));
+    GList* subresources = test->subresources();
     g_assert(subresources);
-    g_assert_cmpint(g_list_length(subresources.get()), ==, 3);
+    g_assert_cmpint(g_list_length(subresources), ==, 3);
 
 #if 0
     // Load the same URI again.
@@ -505,8 +526,8 @@
     g_assert(resource);
     test->checkResourceData(resource);
 
-    GOwnPtr<GList> subresources(webkit_web_view_get_subresources(test->m_webView));
-    for (GList* item = subresources.get(); item; item = g_list_next(item))
+    GList* subresources = test->subresources();
+    for (GList* item = subresources; item; item = g_list_next(item))
         test->checkResourceData(WEBKIT_WEB_RESOURCE(item->data));
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to