Diff
Modified: trunk/Source/WebKit2/ChangeLog (114718 => 114719)
--- trunk/Source/WebKit2/ChangeLog 2012-04-20 06:18:46 UTC (rev 114718)
+++ trunk/Source/WebKit2/ChangeLog 2012-04-20 06:44:45 UTC (rev 114719)
@@ -1,3 +1,34 @@
+2012-04-19 Carlos Garcia Campos <cgar...@igalia.com>
+
+ [GTK] Ignore resources while replacing content in WebKit2 GTK+ API
+ https://bugs.webkit.org/show_bug.cgi?id=79777
+
+ Reviewed by Philippe Normand.
+
+ * UIProcess/API/gtk/WebKitResourceLoadClient.cpp:
+ (didSendRequestForResource): Return early if resources is Null.
+ (didReceiveResponseForResource): Ditto.
+ (didReceiveContentLengthForResource): Ditto.
+ (didFinishLoadForResource): Ditto.
+ (didFailLoadForResource): Ditto.
+ * UIProcess/API/gtk/WebKitWebView.cpp:
+ (webkitWebViewLoadChanged): Clear resources before checking
+ whether we are replacing content.
+ (webkitWebViewIsReplacingContentOrDidReplaceContent): Helper
+ function to check whether view is replacing content or current
+ content is replaced.
+ (webkitWebViewResourceLoadStarted): Do not create resources when
+ replacing content.
+ (webkitWebViewGetLoadingWebResource): Ignore when replacing
+ content. Also add an assert when getting a loading resources to
+ make sure we only return Null when replacing content.
+ (webkitWebViewRemoveLoadingWebResource): Ditto.
+ (webkitWebViewResourceLoadFinished): Ditto.
+ * UIProcess/API/gtk/tests/TestResources.cpp:
+ (replacedContentResourceLoadStartedCallback):
+ (testWebViewResourcesReplacedContent):
+ (beforeAll):
+
2012-04-19 Viatcheslav Ostapenko <ostapenko.viatches...@nokia.com>
[Qt] ASSERT(m_thread == currentThread()) on Mac when threaded rendering is enabled for the Qt scenegraph
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitResourceLoadClient.cpp (114718 => 114719)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitResourceLoadClient.cpp 2012-04-20 06:18:46 UTC (rev 114718)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitResourceLoadClient.cpp 2012-04-20 06:44:45 UTC (rev 114719)
@@ -44,6 +44,9 @@
static void didSendRequestForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, WKURLRequestRef wkRequest, WKURLResponseRef wkRedirectResponse, const void* clientInfo)
{
GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(WEBKIT_WEB_VIEW(clientInfo), resourceIdentifier);
+ if (!resource)
+ return;
+
GRefPtr<WebKitURIRequest> request = adoptGRef(webkitURIRequestCreateForResourceRequest(toImpl(wkRequest)->resourceRequest()));
GRefPtr<WebKitURIResponse> redirectResponse = wkRedirectResponse ? adoptGRef(webkitURIResponseCreateForResourceResponse(toImpl(wkRedirectResponse)->resourceResponse())) : 0;
webkitWebResourceSentRequest(resource.get(), request.get(), redirectResponse.get());
@@ -52,6 +55,9 @@
static void didReceiveResponseForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, WKURLResponseRef wkResponse, const void* clientInfo)
{
GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(WEBKIT_WEB_VIEW(clientInfo), resourceIdentifier);
+ if (!resource)
+ return;
+
GRefPtr<WebKitURIResponse> response = adoptGRef(webkitURIResponseCreateForResourceResponse(toImpl(wkResponse)->resourceResponse()));
webkitWebResourceSetResponse(resource.get(), response.get());
}
@@ -59,12 +65,18 @@
static void didReceiveContentLengthForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, uint64_t contentLength, const void* clientInfo)
{
GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(WEBKIT_WEB_VIEW(clientInfo), resourceIdentifier);
+ if (!resource)
+ return;
+
webkitWebResourceNotifyProgress(resource.get(), contentLength);
}
static void didFinishLoadForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, const void* clientInfo)
{
GRefPtr<WebKitWebResource> resource = webkitWebViewResourceLoadFinished(WEBKIT_WEB_VIEW(clientInfo), resourceIdentifier);
+ if (!resource)
+ return;
+
webkitWebResourceFinished(resource.get());
}
@@ -72,6 +84,9 @@
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(clientInfo);
GRefPtr<WebKitWebResource> resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier);
+ if (!resource)
+ return;
+
const ResourceError& resourceError = toImpl(wkError)->platformError();
GOwnPtr<GError> webError(g_error_new_literal(g_quark_from_string(resourceError.domain().utf8().data()),
resourceError.errorCode(),
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (114718 => 114719)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp 2012-04-20 06:18:46 UTC (rev 114718)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp 2012-04-20 06:44:45 UTC (rev 114719)
@@ -780,14 +780,15 @@
void webkitWebViewLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent)
{
+ if (loadEvent == WEBKIT_LOAD_STARTED) {
+ webView->priv->loadingResourcesMap.clear();
+ webView->priv->mainResource = 0;
+ } else if (loadEvent == WEBKIT_LOAD_COMMITTED)
+ webView->priv->subresourcesMap.clear();
+
if (updateReplaceContentStatus(webView, loadEvent))
return;
- if (loadEvent == WEBKIT_LOAD_STARTED)
- webView->priv->loadingResourcesMap.clear();
- else if (loadEvent == WEBKIT_LOAD_COMMITTED)
- webView->priv->subresourcesMap.clear();
-
if (loadEvent != WEBKIT_LOAD_FINISHED)
webkitWebViewUpdateURI(webView);
g_signal_emit(webView, signals[LOAD_CHANGED], 0, loadEvent);
@@ -918,11 +919,18 @@
g_signal_connect(printOperation.leakRef(), "finished", G_CALLBACK(g_object_unref), 0);
}
+static inline bool webkitWebViewIsReplacingContentOrDidReplaceContent(WebKitWebView* webView)
+{
+ return (webView->priv->replaceContentStatus == ReplacingContent || webView->priv->replaceContentStatus == DidReplaceContent);
+}
+
void webkitWebViewResourceLoadStarted(WebKitWebView* webView, WKFrameRef wkFrame, uint64_t resourceIdentifier, WebKitURIRequest* request, bool isMainResource)
{
- // FIXME: ignore resources when replacing content.
+ if (webkitWebViewIsReplacingContentOrDidReplaceContent(webView))
+ return;
+
+ WebKitWebViewPrivate* priv = webView->priv;
WebKitWebResource* resource = webkitWebResourceCreate(wkFrame, request, isMainResource);
- WebKitWebViewPrivate* priv = webView->priv;
if (WKFrameIsMainFrame(wkFrame) && isMainResource)
priv->mainResource = resource;
priv->loadingResourcesMap.set(resourceIdentifier, adoptGRef(resource));
@@ -931,19 +939,31 @@
WebKitWebResource* webkitWebViewGetLoadingWebResource(WebKitWebView* webView, uint64_t resourceIdentifier)
{
+ if (webkitWebViewIsReplacingContentOrDidReplaceContent(webView))
+ return 0;
+
GRefPtr<WebKitWebResource> resource = webView->priv->loadingResourcesMap.get(resourceIdentifier);
+ ASSERT(resource.get());
return resource.get();
}
void webkitWebViewRemoveLoadingWebResource(WebKitWebView* webView, uint64_t resourceIdentifier)
{
- webView->priv->loadingResourcesMap.remove(resourceIdentifier);
+ if (webkitWebViewIsReplacingContentOrDidReplaceContent(webView))
+ return;
+
+ WebKitWebViewPrivate* priv = webView->priv;
+ ASSERT(priv->loadingResourcesMap.contains(resourceIdentifier));
+ priv->loadingResourcesMap.remove(resourceIdentifier);
}
WebKitWebResource* webkitWebViewResourceLoadFinished(WebKitWebView* webView, uint64_t resourceIdentifier)
{
+ if (webkitWebViewIsReplacingContentOrDidReplaceContent(webView))
+ return 0;
+
+ WebKitWebViewPrivate* priv = webView->priv;
WebKitWebResource* resource = webkitWebViewGetLoadingWebResource(webView, resourceIdentifier);
- WebKitWebViewPrivate* priv = webView->priv;
if (resource != priv->mainResource)
priv->subresourcesMap.set(String::fromUTF8(webkit_web_resource_get_uri(resource)), resource);
webkitWebViewRemoveLoadingWebResource(webView, resourceIdentifier);
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp (114718 => 114719)
--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp 2012-04-20 06:18:46 UTC (rev 114718)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp 2012-04-20 06:44:45 UTC (rev 114719)
@@ -481,6 +481,32 @@
test->checkResourceData(WEBKIT_WEB_RESOURCE(item->data));
}
+static void replacedContentResourceLoadStartedCallback()
+{
+ g_assert_not_reached();
+}
+
+static void testWebViewResourcesReplacedContent(ResourcesTest* test, gconstpointer)
+{
+ test->loadURI(kServer->getURIForPath("/").data());
+ // FIXME: this should be 4 instead of 3, but we don't get the css image resource
+ // due to bug https://bugs.webkit.org/show_bug.cgi?id=78510.
+ test->waitUntilResourcesLoaded(3);
+
+ static const char* replacedHtml =
+ "<html><head>"
+ " <title>Content Replaced</title>"
+ " <link rel='stylesheet' href='' type='text/css'>"
+ " <script language='_javascript_' src=''></script>"
+ "</head><body _onload_='document.title=\"Loaded\"'>WebKitGTK+ resources on replaced content test</body></html>";
+ g_signal_connect(test->m_webView, "resource-load-started", G_CALLBACK(replacedContentResourceLoadStartedCallback), test);
+ test->replaceContent(replacedHtml, "http://error-page.foo", 0);
+ test->waitUntilTitleChangedTo("Loaded");
+
+ g_assert(!webkit_web_view_get_main_resource(test->m_webView));
+ g_assert(!webkit_web_view_get_subresources(test->m_webView));
+}
+
static void addCacheHTTPHeadersToResponse(SoupMessage* message)
{
// The actual date doesn't really matter.
@@ -561,6 +587,7 @@
SingleResourceLoadTest::add("WebKitWebResource", "response", testWebResourceResponse);
ResourceURITrackingTest::add("WebKitWebResource", "active-uri", testWebResourceActiveURI);
ResourcesTest::add("WebKitWebResource", "get-data", testWebResourceGetData);
+ ResourcesTest::add("WebKitWebView", "replaced-content", testWebViewResourcesReplacedContent);
}
void afterAll()