REGRESSION (r143619): Crashes in three layout tests
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 15:43:07 +0000 (15:43 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 15:43:07 +0000 (15:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=110588

Patch by Martin Robinson <mrobinson@igalia.com> on 2013-02-26
Reviewed by Gustavo Noronha Silva.

Source/WebKit/gtk:

Guard against null main resource identifiers. The main resource
identifier can be null at various times during the load. A null
identifier is never equal to the ones we are looking to remove.

* WebCoreSupport/FrameLoaderClientGtk.cpp:
(WebKit::FrameLoaderClient::dispatchDidFinishLoading): Use the new webkitWebViewRemoveSubresource helper.
(WebKit::FrameLoaderClient::dispatchDidFailLoading): ditto.
* webkit/webkitwebview.cpp:
(webkitWebViewRemoveSubresource): Added this helper which removes a subresource, but
never touches the main resource. This is adapted from the old method, for which the
main resource branch was dead code.
* webkit/webkitwebviewprivate.h: Update the method list.

LayoutTests:

* platform/gtk/TestExpectations: Unskip some tests which are no longer
crashing.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@144055 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/gtk/TestExpectations
Source/WebKit/gtk/ChangeLog
Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
Source/WebKit/gtk/webkit/webkitwebview.cpp
Source/WebKit/gtk/webkit/webkitwebviewprivate.h

index bac5824..63cccfc 100644 (file)
@@ -1,3 +1,13 @@
+2013-02-26  Martin Robinson  <mrobinson@igalia.com>
+
+        REGRESSION (r143619): Crashes in three layout tests
+        https://bugs.webkit.org/show_bug.cgi?id=110588
+
+        Reviewed by Gustavo Noronha Silva.
+
+        * platform/gtk/TestExpectations: Unskip some tests which are no longer
+        crashing.
+
 2013-02-26  Andrey Kosyakov  <caseq@chromium.org>
 
         Unreviewed, rolling out r144041, r144044, and r144048.
index 40753af..7bd3627 100644 (file)
@@ -491,10 +491,6 @@ webkit.org/b/108927 http/tests/xmlhttprequest/workers/xmlhttprequest-file-not-fo
 
 webkit.org/b/110222 fast/events/platform-wheelevent-with-delta-zero-crash.html [ Crash ]
 
-webkit.org/b/110588 http/tests/misc/iframe-reparenting-id-collision.html [ Crash Pass ]
-webkit.org/b/110588 http/tests/misc/window-open-then-write.html [ Crash ]
-webkit.org/b/110588 http/tests/xmlhttprequest/request-from-popup.html [ Crash ]
-
 webkit.org/b/110695 http/tests/security/cross-origin-local-storage-allowed.html [ Crash Pass ]
 webkit.org/b/110695 http/tests/security/cross-origin-plugin-private-browsing-toggled-allowed.html [ Crash Pass ]
 
index 6ce6f03..0334acb 100644 (file)
@@ -1,3 +1,23 @@
+2013-02-26  Martin Robinson  <mrobinson@igalia.com>
+
+        REGRESSION (r143619): Crashes in three layout tests
+        https://bugs.webkit.org/show_bug.cgi?id=110588
+
+        Reviewed by Gustavo Noronha Silva.
+
+        Guard against null main resource identifiers. The main resource
+        identifier can be null at various times during the load. A null
+        identifier is never equal to the ones we are looking to remove.
+
+        * WebCoreSupport/FrameLoaderClientGtk.cpp:
+        (WebKit::FrameLoaderClient::dispatchDidFinishLoading): Use the new webkitWebViewRemoveSubresource helper.
+        (WebKit::FrameLoaderClient::dispatchDidFailLoading): ditto.
+        * webkit/webkitwebview.cpp:
+        (webkitWebViewRemoveSubresource): Added this helper which removes a subresource, but
+        never touches the main resource. This is adapted from the old method, for which the
+        main resource branch was dead code.
+        * webkit/webkitwebviewprivate.h: Update the method list.
+
 2013-02-25  Andreas Kling  <akling@apple.com>
 
         Reduce amount of code that includes StylePropertySet.h
index 6b40e29..cf9ac4b 100644 (file)
@@ -1021,8 +1021,7 @@ void FrameLoaderClient::dispatchDidFinishLoading(WebCore::DocumentLoader* loader
     g_signal_emit_by_name(m_frame, "resource-load-finished", webResource);
     g_signal_emit_by_name(webView, "resource-load-finished", m_frame, webResource);
 
-    if (!g_str_equal(identifierString.get(), webView->priv->mainResourceIdentifier.data()))
-        webkit_web_view_remove_resource(webView, identifierString.get());
+    webkitWebViewRemoveSubresource(webView, identifierString.get());
 }
 
 void FrameLoaderClient::dispatchDidFailLoading(WebCore::DocumentLoader* loader, unsigned long identifier, const ResourceError& error)
@@ -1046,8 +1045,7 @@ void FrameLoaderClient::dispatchDidFailLoading(WebCore::DocumentLoader* loader,
     g_signal_emit_by_name(m_frame, "resource-load-failed", webResource, webError.get());
     g_signal_emit_by_name(webView, "resource-load-failed", m_frame, webResource, webError.get());
 
-    if (!g_str_equal(identifierString.get(), webView->priv->mainResourceIdentifier.data()))
-        webkit_web_view_remove_resource(webView, identifierString.get());
+    webkitWebViewRemoveSubresource(webView, identifierString.get());
 }
 
 bool FrameLoaderClient::dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length)
index 3c02ff9..8579e18 100644 (file)
@@ -5066,14 +5066,15 @@ void webkit_web_view_add_resource(WebKitWebView* webView, const char* identifier
     g_hash_table_insert(priv->subResources.get(), g_strdup(identifier), webResource);
 }
 
-void webkit_web_view_remove_resource(WebKitWebView* webView, const char* identifier)
+void webkitWebViewRemoveSubresource(WebKitWebView* webView, const char* identifier)
 {
-    WebKitWebViewPrivate* priv = webView->priv;
-    if (g_str_equal(identifier, priv->mainResourceIdentifier.data())) {
-        priv->mainResourceIdentifier = "";
-        priv->mainResource = 0;
-    } else
-      g_hash_table_remove(priv->subResources.get(), identifier);
+    ASSERT(identifier);
+
+    // Don't remove the main resource.
+    const CString& mainResource = webView->priv->mainResourceIdentifier;
+    if (!mainResource.isNull() && g_str_equal(identifier, mainResource.data()))
+        return;
+    g_hash_table_remove(webView->priv->subResources.get(), identifier);
 }
 
 WebKitWebResource* webkit_web_view_get_resource(WebKitWebView* webView, char* identifier)
index 4665c33..aeefbd0 100644 (file)
@@ -129,7 +129,7 @@ void webkit_web_view_request_download(WebKitWebView*, WebKitNetworkRequest*, con
 
 void webkit_web_view_add_resource(WebKitWebView*, const char*, WebKitWebResource*);
 void webkit_web_view_add_main_resource(WebKitWebView*, const char*, WebKitWebResource*);
-void webkit_web_view_remove_resource(WebKitWebView*, const char*);
+void webkitWebViewRemoveSubresource(WebKitWebView*, const char*);
 WebKitWebResource* webkit_web_view_get_resource(WebKitWebView*, char*);
 WebKitWebResource* webkit_web_view_get_main_resource(WebKitWebView*);
 void webkit_web_view_clear_resources(WebKitWebView*);