Changeset 243972 in webkit
- Timestamp:
- Apr 8, 2019, 3:13:59 AM (7 years ago)
- Location:
- releases/WebKitGTK/webkit-2.24
- Files:
-
- 12 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/glib/WebKitWebViewPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/wpe/APIViewClient.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/wpe/PageClientImpl.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/wpe/PageClientImpl.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/wpe/WPEView.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/wpe/WPEView.h (modified) (1 diff)
-
Source/WebKit/UIProcess/PageLoadState.h (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
releases/WebKitGTK/webkit-2.24/Source/WebKit/ChangeLog
r243590 r243972 1 2019-03-12 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [WPE][GTK] Load events may occur in unexpected order when JS redirects page before subresource load finishes 4 https://bugs.webkit.org/show_bug.cgi?id=194131 5 6 Reviewed by Michael Catanzaro. 7 8 Ensure we emit the load-failed and load-changed with finished event when there's still an ongoing load when a 9 new provisional load strarts. Previous load fails with cancelled error. 10 11 * UIProcess/API/glib/WebKitWebView.cpp: 12 (webkitWebViewWillStartLoad): Call webkitWebViewLoadFailed() if current page load state is not finished. 13 * UIProcess/API/glib/WebKitWebViewPrivate.h: 14 * UIProcess/API/gtk/PageClientImpl.cpp: 15 (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame): Call webkitWebViewWillStartLoad(). 16 * UIProcess/API/wpe/APIViewClient.h: 17 (API::ViewClient::willStartLoad): Add willStartLoad() to API::ViewClient 18 * UIProcess/API/wpe/PageClientImpl.cpp: 19 (WebKit::PageClientImpl::didStartProvisionalLoadForMainFrame): Call WPEView::willStartLoad(). 20 * UIProcess/API/wpe/PageClientImpl.h: 21 * UIProcess/API/wpe/WPEView.cpp: 22 (WKWPE::View::willStartLoad): Call API::ViewClient::willStartLoad(). 23 * UIProcess/API/wpe/WPEView.h: 24 * UIProcess/PageLoadState.h: 25 (WebKit::PageLoadState::isProvisional const): 26 (WebKit::PageLoadState::isCommitted const): 27 (WebKit::PageLoadState::isFinished const): 28 1 29 2019-03-26 Philippe Normand <pnormand@igalia.com> 2 30 -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp
r242461 r243972 425 425 } 426 426 427 void willStartLoad(WKWPE::View&) override 428 { 429 webkitWebViewWillStartLoad(m_webView); 430 } 431 427 432 WebKitWebView* m_webView; 428 433 }; … … 2069 2074 { 2070 2075 return getPage(webView); 2076 } 2077 2078 void webkitWebViewWillStartLoad(WebKitWebView* webView) 2079 { 2080 // This is called before NavigationClient::didStartProvisionalNavigation(), the page load state hasn't been committed yet. 2081 auto& pageLoadState = getPage(webView).pageLoadState(); 2082 if (pageLoadState.isFinished()) 2083 return; 2084 2085 GUniquePtr<GError> error(g_error_new_literal(WEBKIT_NETWORK_ERROR, WEBKIT_NETWORK_ERROR_CANCELLED, _("Load request cancelled"))); 2086 webkitWebViewLoadFailed(webView, pageLoadState.isProvisional() ? WEBKIT_LOAD_STARTED : WEBKIT_LOAD_COMMITTED, 2087 webView->priv->activeURI.data(), error.get()); 2071 2088 } 2072 2089 -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebViewPrivate.h
r241000 r243972 42 42 void webkitWebViewCreatePage(WebKitWebView*, Ref<API::PageConfiguration>&&); 43 43 WebKit::WebPageProxy& webkitWebViewGetPage(WebKitWebView*); 44 void webkitWebViewWillStartLoad(WebKitWebView*); 44 45 void webkitWebViewLoadChanged(WebKitWebView*, WebKitLoadEvent); 45 46 void webkitWebViewLoadFailed(WebKitWebView*, WebKitLoadEvent, const char* failingURI, GError*); -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp
r241224 r243972 462 462 void PageClientImpl::didStartProvisionalLoadForMainFrame() 463 463 { 464 if (WEBKIT_IS_WEB_VIEW(m_viewWidget)) 465 webkitWebViewWillStartLoad(WEBKIT_WEB_VIEW(m_viewWidget)); 466 464 467 webkitWebViewBaseDidStartProvisionalLoadForMainFrame(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); 465 468 } -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/wpe/APIViewClient.h
r229799 r243972 44 44 virtual void frameDisplayed(WKWPE::View&) { } 45 45 virtual void handleDownloadRequest(WKWPE::View&, WebKit::DownloadProxy&) { } 46 virtual void willStartLoad(WKWPE::View&) { } 46 47 }; 47 48 -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/wpe/PageClientImpl.cpp
r241260 r243972 292 292 } 293 293 294 void PageClientImpl::didStartProvisionalLoadForMainFrame() 295 { 296 m_view.willStartLoad(); 297 } 298 294 299 void PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame() 295 300 { -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/wpe/PageClientImpl.h
r241260 r243972 113 113 void didRemoveNavigationGestureSnapshot() override; 114 114 115 void didStartProvisionalLoadForMainFrame() override; 115 116 void didFirstVisuallyNonEmptyLayoutForMainFrame() override; 116 117 void didFinishLoadForMainFrame() override; -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/wpe/WPEView.cpp
r242163 r243972 172 172 } 173 173 174 void View::willStartLoad() 175 { 176 m_client->willStartLoad(*this); 177 } 178 174 179 void View::setSize(const WebCore::IntSize& size) 175 180 { -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/wpe/WPEView.h
r241260 r243972 60 60 void frameDisplayed(); 61 61 void handleDownloadRequest(WebKit::DownloadProxy&); 62 void willStartLoad(); 62 63 63 64 WebKit::WebPageProxy& page() { return *m_pageProxy; } -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/PageLoadState.h
r238817 r243972 122 122 123 123 bool isLoading() const; 124 bool isProvisional() const { return m_committedState.state == State::Provisional; } 125 bool isCommitted() const { return m_committedState.state == State::Committed; } 126 bool isFinished() const { return m_committedState.state == State::Finished; } 124 127 125 128 const String& provisionalURL() const { return m_committedState.provisionalURL; } -
releases/WebKitGTK/webkit-2.24/Tools/ChangeLog
r243067 r243972 1 2019-03-12 Michael Catanzaro <mcatanzaro@igalia.com> 2 3 [WPE][GTK] Load events may occur in unexpected order when JS redirects page before subresource load finishes 4 https://bugs.webkit.org/show_bug.cgi?id=194131 5 6 Reviewed by Michael Catanzaro. 7 8 * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp: 9 (uriChanged): 10 (testUnfinishedSubresourceLoad): 11 (serverCallback): 12 (beforeAll): 13 1 14 2019-03-18 Adrian Perez de Castro <aperez@igalia.com> 2 15 -
releases/WebKitGTK/webkit-2.24/Tools/TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp
r239772 r243972 241 241 } 242 242 243 static void uriChanged(WebKitWebView* webView, GParamSpec*, LoadTrackingTest* test) 244 { 245 const char* uri = webkit_web_view_get_uri(webView); 246 if (g_str_has_suffix(uri, "/normal")) 247 test->m_activeURI = uri; 248 } 249 250 static void testUnfinishedSubresourceLoad(LoadTrackingTest* test, gconstpointer) 251 { 252 // Verify that LoadFinished occurs even if the next load starts before the 253 // previous load actually finishes. 254 test->loadURI(kServer->getURIForPath("/unfinished-subresource-load").data()); 255 auto signalID = g_signal_connect(test->m_webView, "notify::uri", G_CALLBACK(uriChanged), test); 256 test->waitUntilLoadFinished(); 257 test->waitUntilLoadFinished(); 258 g_signal_handler_disconnect(test->m_webView, signalID); 259 260 Vector<LoadTrackingTest::LoadEvents>& events = test->m_loadEvents; 261 g_assert_cmpint(events.size(), ==, 7); 262 g_assert_cmpint(events[0], ==, LoadTrackingTest::ProvisionalLoadStarted); 263 g_assert_cmpint(events[1], ==, LoadTrackingTest::LoadCommitted); 264 g_assert_cmpint(events[2], ==, LoadTrackingTest::LoadFailed); 265 g_assert_cmpint(events[3], ==, LoadTrackingTest::LoadFinished); 266 g_assert_cmpint(events[4], ==, LoadTrackingTest::ProvisionalLoadStarted); 267 g_assert_cmpint(events[5], ==, LoadTrackingTest::LoadCommitted); 268 g_assert_cmpint(events[6], ==, LoadTrackingTest::LoadFinished); 269 } 270 243 271 class ViewURITrackingTest: public LoadTrackingTest { 244 272 public: … … 590 618 "Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!" 591 619 "Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!</body></html>"; 620 621 static const char* unfinishedSubresourceLoadResponseString = "<html><body>" 622 "<img src=\"/stall\"/>" 623 "<script>" 624 " function run() {" 625 " location = '/normal';" 626 " }" 627 " setInterval(run(), 50);" 628 "</script>" 629 "</body></html>"; 592 630 593 631 if (message->method != SOUP_METHOD_GET) { … … 626 664 soup_message_set_status(message, SOUP_STATUS_MOVED_PERMANENTLY); 627 665 soup_message_headers_append(message->response_headers, "Location", "data:text/plain;charset=utf-8,data-uri"); 666 } else if (g_str_equal(path, "/unfinished-subresource-load")) { 667 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, unfinishedSubresourceLoadResponseString, strlen(unfinishedSubresourceLoadResponseString)); 668 } else if (g_str_equal(path, "/stall")) { 669 // This request is never unpaused and stalls forever. 670 soup_server_pause_message(server, message); 671 return; 628 672 } else 629 673 soup_message_set_status(message, SOUP_STATUS_NOT_FOUND); … … 656 700 LoadTrackingTest::add("WebKitWebView", "history-load", testWebViewHistoryLoad); 657 701 LoadTwiceAndReloadTest::add("WebKitWebView", "load-twice-and-reload", testWebViewLoadTwiceAndReload); 702 LoadTrackingTest::add("WebKitWebView", "unfinished-subresource-load", testUnfinishedSubresourceLoad); 658 703 659 704 // This test checks that web view notify::uri signal is correctly emitted
Note:
See TracChangeset
for help on using the changeset viewer.