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));
}