Title: [195253] releases/WebKitGTK/webkit-2.10/Source/WebKit2
Revision
195253
Author
[email protected]
Date
2016-01-19 00:01:14 -0800 (Tue, 19 Jan 2016)

Log Message

Merge r194890 - [GTK] UI process crashes if webkit_web_view_get_tls_info is called before internal load-committed event
https://bugs.webkit.org/show_bug.cgi?id=142375

Reviewed by Michael Catanzaro.

Remove all the hacks to emit delayed load events now that the
page cache resource load delegates are consistent with all other
resource loads.

* UIProcess/API/gtk/WebKitWebView.cpp:
(webkitWebViewLoadChanged):
(webkitWebViewResourceLoadStarted):
(webkit_web_view_get_tls_info): Add a g_return_val_if_fail to
prevent this function from being misused.
(webkitWebViewDisconnectMainResourceResponseChangedSignalHandler): Deleted.
(webkitWebViewDispose): Deleted.
(webkitWebViewEmitLoadChanged): Deleted.
(webkitWebViewEmitDelayedLoadEvents): Deleted.
(mainResourceResponseChangedCallback): Deleted.
(waitForMainResourceResponseIfWaitingForResource): Deleted.

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.10/Source/WebKit2/ChangeLog (195252 => 195253)


--- releases/WebKitGTK/webkit-2.10/Source/WebKit2/ChangeLog	2016-01-19 07:57:57 UTC (rev 195252)
+++ releases/WebKitGTK/webkit-2.10/Source/WebKit2/ChangeLog	2016-01-19 08:01:14 UTC (rev 195253)
@@ -1,3 +1,26 @@
+2016-01-12  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] UI process crashes if webkit_web_view_get_tls_info is called before internal load-committed event
+        https://bugs.webkit.org/show_bug.cgi?id=142375
+
+        Reviewed by Michael Catanzaro.
+
+        Remove all the hacks to emit delayed load events now that the
+        page cache resource load delegates are consistent with all other
+        resource loads.
+
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkitWebViewLoadChanged):
+        (webkitWebViewResourceLoadStarted):
+        (webkit_web_view_get_tls_info): Add a g_return_val_if_fail to
+        prevent this function from being misused.
+        (webkitWebViewDisconnectMainResourceResponseChangedSignalHandler): Deleted.
+        (webkitWebViewDispose): Deleted.
+        (webkitWebViewEmitLoadChanged): Deleted.
+        (webkitWebViewEmitDelayedLoadEvents): Deleted.
+        (mainResourceResponseChangedCallback): Deleted.
+        (waitForMainResourceResponseIfWaitingForResource): Deleted.
+
 2016-01-11  Mario Sanchez Prada  <[email protected]>
 
         [WK2][GTK] Propagate motion-notify-event signals from the WebView

Modified: releases/WebKitGTK/webkit-2.10/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (195252 => 195253)


--- releases/WebKitGTK/webkit-2.10/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2016-01-19 07:57:57 UTC (rev 195252)
+++ releases/WebKitGTK/webkit-2.10/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2016-01-19 08:01:14 UTC (rev 195253)
@@ -178,9 +178,6 @@
     bool isLoading;
 
     std::unique_ptr<PageLoadStateObserver> loadObserver;
-    bool waitingForMainResource;
-    unsigned long mainResourceResponseHandlerID;
-    WebKitLoadEvent lastDelayedEvent;
 
     GRefPtr<WebKitBackForwardList> backForwardList;
     GRefPtr<WebKitSettings> settings;
@@ -249,11 +246,6 @@
     }
     virtual void didChangeIsLoading() override
     {
-        if (m_webView->priv->waitingForMainResource) {
-            // The actual load has finished but we haven't emitted the delayed load events yet, so we are still loading.
-            g_object_thaw_notify(G_OBJECT(m_webView));
-            return;
-        }
         webkitWebViewSetIsLoading(m_webView, getPage(m_webView)->pageLoadState().isLoading());
         g_object_thaw_notify(G_OBJECT(m_webView));
     }
@@ -500,14 +492,6 @@
     g_signal_handlers_disconnect_by_func(settings, reinterpret_cast<gpointer>(userAgentChanged), webView);
 }
 
-static void webkitWebViewDisconnectMainResourceResponseChangedSignalHandler(WebKitWebView* webView)
-{
-    WebKitWebViewPrivate* priv = webView->priv;
-    if (priv->mainResourceResponseHandlerID)
-        g_signal_handler_disconnect(priv->mainResource.get(), priv->mainResourceResponseHandlerID);
-    priv->mainResourceResponseHandlerID = 0;
-}
-
 static void webkitWebViewWatchForChangesInFavicon(WebKitWebView* webView)
 {
     WebKitWebViewPrivate* priv = webView->priv;
@@ -751,7 +735,6 @@
 {
     WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
     webkitWebViewCancelFaviconRequest(webView);
-    webkitWebViewDisconnectMainResourceResponseChangedSignalHandler(webView);
     webkitWebViewDisconnectSettingsSignalHandlers(webView);
     webkitWebViewDisconnectFaviconDatabaseSignalHandlers(webView);
 
@@ -1766,73 +1749,31 @@
     webView->priv->authenticationRequest.clear();
 }
 
-static void webkitWebViewEmitLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, bool isDelayedEvent)
-{
-    if (loadEvent == WEBKIT_LOAD_STARTED) {
-        webkitWebViewWatchForChangesInFavicon(webView);
-        webkitWebViewCancelAuthenticationRequest(webView);
-    } else if (loadEvent == WEBKIT_LOAD_FINISHED) {
-        if (isDelayedEvent) {
-            // In case of the delayed event, we need to manually set is-loading to false.
-            webkitWebViewSetIsLoading(webView, false);
-        }
-        webkitWebViewCancelAuthenticationRequest(webView);
-        webkitWebViewDisconnectMainResourceResponseChangedSignalHandler(webView);
-    }
-
-    g_signal_emit(webView, signals[LOAD_CHANGED], 0, loadEvent);
-
-    if (isDelayedEvent) {
-        if (loadEvent == WEBKIT_LOAD_COMMITTED)
-            webView->priv->waitingForMainResource = false;
-        else if (loadEvent == WEBKIT_LOAD_FINISHED) {
-            // Manually set is-loading again in case a new load was started.
-            webkitWebViewSetIsLoading(webView, getPage(webView)->pageLoadState().isLoading());
-        }
-    }
-}
-
-static void webkitWebViewEmitDelayedLoadEvents(WebKitWebView* webView)
-{
-    WebKitWebViewPrivate* priv = webView->priv;
-    if (!priv->waitingForMainResource)
-        return;
-    ASSERT(priv->lastDelayedEvent == WEBKIT_LOAD_COMMITTED || priv->lastDelayedEvent == WEBKIT_LOAD_FINISHED);
-
-    if (priv->lastDelayedEvent == WEBKIT_LOAD_FINISHED)
-        webkitWebViewEmitLoadChanged(webView, WEBKIT_LOAD_COMMITTED, true);
-    webkitWebViewEmitLoadChanged(webView, priv->lastDelayedEvent, true);
-}
-
 void webkitWebViewLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent)
 {
     WebKitWebViewPrivate* priv = webView->priv;
-    if (loadEvent == WEBKIT_LOAD_STARTED) {
-        // Finish a possible previous load waiting for main resource.
-        webkitWebViewEmitDelayedLoadEvents(webView);
-
+    switch (loadEvent) {
+    case WEBKIT_LOAD_STARTED:
         webkitWebViewCancelFaviconRequest(webView);
+        webkitWebViewWatchForChangesInFavicon(webView);
+        webkitWebViewCancelAuthenticationRequest(webView);
         priv->loadingResourcesMap.clear();
-        priv->mainResource = 0;
-        priv->waitingForMainResource = false;
-    } else if (loadEvent == WEBKIT_LOAD_COMMITTED) {
+        priv->mainResource = nullptr;
+        break;
+    case WEBKIT_LOAD_COMMITTED: {
         WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get());
         GUniquePtr<char> faviconURI(webkit_favicon_database_get_favicon_uri(database, priv->activeURI.data()));
         webkitWebViewUpdateFaviconURI(webView, faviconURI.get());
-
-        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
-            // main resource available when load has been committed, so we delay the emission of
-            // load-changed signal until main resource object has been created.
-            priv->waitingForMainResource = true;
-        }
+        break;
     }
+    case WEBKIT_LOAD_FINISHED:
+        webkitWebViewCancelAuthenticationRequest(webView);
+        break;
+    default:
+        break;
+    }
 
-    if (priv->waitingForMainResource)
-        priv->lastDelayedEvent = loadEvent;
-    else
-        webkitWebViewEmitLoadChanged(webView, loadEvent, false);
+    g_signal_emit(webView, signals[LOAD_CHANGED], 0, loadEvent);
 }
 
 void webkitWebViewLoadFailed(WebKitWebView* webView, WebKitLoadEvent loadEvent, const char* failingURI, GError *error)
@@ -1962,32 +1903,13 @@
     g_signal_connect(printOperation.leakRef(), "finished", G_CALLBACK(g_object_unref), 0);
 }
 
-static void mainResourceResponseChangedCallback(WebKitWebResource*, GParamSpec*, WebKitWebView* webView)
-{
-    webkitWebViewDisconnectMainResourceResponseChangedSignalHandler(webView);
-    webkitWebViewEmitDelayedLoadEvents(webView);
-}
-
-static void waitForMainResourceResponseIfWaitingForResource(WebKitWebView* webView)
-{
-    WebKitWebViewPrivate* priv = webView->priv;
-    if (!priv->waitingForMainResource)
-        return;
-
-    webkitWebViewDisconnectMainResourceResponseChangedSignalHandler(webView);
-    priv->mainResourceResponseHandlerID =
-        g_signal_connect(priv->mainResource.get(), "notify::response", G_CALLBACK(mainResourceResponseChangedCallback), webView);
-}
-
 void webkitWebViewResourceLoadStarted(WebKitWebView* webView, WebFrameProxy* frame, uint64_t resourceIdentifier, WebKitURIRequest* request)
 {
     WebKitWebViewPrivate* priv = webView->priv;
     bool isMainResource = frame->isMainFrame() && !priv->mainResource;
     WebKitWebResource* resource = webkitWebResourceCreate(frame, request, isMainResource);
-    if (isMainResource) {
+    if (isMainResource)
         priv->mainResource = resource;
-        waitForMainResourceResponseIfWaitingForResource(webView);
-    }
     priv->loadingResourcesMap.set(resourceIdentifier, adoptGRef(resource));
     g_signal_emit(webView, signals[RESOURCE_LOAD_STARTED], 0, resource, request);
 }
@@ -3463,7 +3385,10 @@
     if (!mainFrame)
         return FALSE;
 
-    const WebCore::CertificateInfo& certificateInfo = mainFrame->certificateInfo()->certificateInfo();
+    auto* wkCertificateInfo = mainFrame->certificateInfo();
+    g_return_val_if_fail(wkCertificateInfo, FALSE);
+
+    const auto& certificateInfo = wkCertificateInfo->certificateInfo();
     if (certificate)
         *certificate = certificateInfo.certificate();
     if (errors)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to