Changeset 243973 in webkit
- Timestamp:
- Apr 8, 2019, 3:14:04 AM (7 years ago)
- Location:
- releases/WebKitGTK/webkit-2.24
- Files:
-
- 5 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (modified) (4 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp (modified) (4 diffs)
-
Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
releases/WebKitGTK/webkit-2.24/Source/WebKit/ChangeLog
r243972 r243973 1 2019-03-25 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] Do not allow changes in active URI before provisional load starts for non-API requests 4 https://bugs.webkit.org/show_bug.cgi?id=194208 5 6 Reviewed by Michael Catanzaro. 7 8 * UIProcess/API/glib/WebKitWebView.cpp: 9 (webkitWebViewWillStartLoad): Block updates of active URL. 10 (webkitWebViewLoadChanged): Unblock updates of active URL on WEBKIT_LOAD_STARTED. 11 1 12 2019-03-12 Carlos Garcia Campos <cgarcia@igalia.com> 2 13 -
releases/WebKitGTK/webkit-2.24/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp
r243972 r243973 247 247 CString customTextEncoding; 248 248 CString activeURI; 249 bool isActiveURIChangeBlocked; 249 250 bool isLoading; 250 251 bool isEphemeral; … … 356 357 void willChangeActiveURL() override 357 358 { 359 if (m_webView->priv->isActiveURIChangeBlocked) 360 return; 358 361 g_object_freeze_notify(G_OBJECT(m_webView)); 359 362 } 360 363 void didChangeActiveURL() override 361 364 { 365 if (m_webView->priv->isActiveURIChangeBlocked) 366 return; 362 367 m_webView->priv->activeURI = getPage(m_webView).pageLoadState().activeURL().utf8(); 363 368 g_object_notify(G_OBJECT(m_webView), "uri"); … … 2078 2083 void webkitWebViewWillStartLoad(WebKitWebView* webView) 2079 2084 { 2085 // Ignore the active URI changes happening before WEBKIT_LOAD_STARTED. If they are not user-initiated, 2086 // they could be a malicious attempt to trick users by loading an invalid URI on a trusted host, with the load 2087 // intended to stall, or perhaps be repeated. If we trust the URI here and display it to the user, then the user's 2088 // only indication that something is wrong would be a page loading indicator. If the load request is not 2089 // user-initiated, we must not trust it until WEBKIT_LOAD_COMMITTED. If the load is triggered by API 2090 // request, then the active URI is already the pending API request URL, so the blocking is harmless and the 2091 // client application will still see the URI update immediately. Otherwise, the URI update will be delayed a bit. 2092 webView->priv->isActiveURIChangeBlocked = true; 2093 2080 2094 // This is called before NavigationClient::didStartProvisionalNavigation(), the page load state hasn't been committed yet. 2081 2095 auto& pageLoadState = getPage(webView).pageLoadState(); … … 2100 2114 priv->loadingResourcesMap.clear(); 2101 2115 priv->mainResource = nullptr; 2116 webView->priv->isActiveURIChangeBlocked = false; 2102 2117 break; 2118 case WEBKIT_LOAD_COMMITTED: { 2119 auto activeURL = getPage(webView).pageLoadState().activeURL().utf8(); 2120 // Active URL is trusted now. If it's different to our active URI, due to the 2121 // update block before WEBKIT_LOAD_STARTED, we update it here to be in sync 2122 // again with the page load state. 2123 if (activeURL != priv->activeURI) { 2124 priv->activeURI = activeURL; 2125 g_object_notify(G_OBJECT(webView), "uri"); 2126 } 2103 2127 #if PLATFORM(GTK) 2104 case WEBKIT_LOAD_COMMITTED: {2105 2128 WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get()); 2106 2129 GUniquePtr<char> faviconURI(webkit_favicon_database_get_favicon_uri(database, priv->activeURI.data())); 2107 2130 webkitWebViewUpdateFaviconURI(webView, faviconURI.get()); 2131 #endif 2108 2132 break; 2109 2133 } 2110 #endif2111 2134 case WEBKIT_LOAD_FINISHED: 2112 2135 webkitWebViewCancelAuthenticationRequest(webView); -
releases/WebKitGTK/webkit-2.24/Tools/ChangeLog
r243972 r243973 1 2019-03-27 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 Unreviewed. Add GLib API test cases after r243434. 4 5 * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp: 6 (testWebViewActiveURI): 7 (serverCallback): 8 * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp: 9 (sendRequestCallback): 10 1 11 2019-03-12 Michael Catanzaro <mcatanzaro@igalia.com> 2 12 -
releases/WebKitGTK/webkit-2.24/Tools/TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp
r243972 r243973 369 369 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/request-changed-on-redirect"); 370 370 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/request-changed-on-redirect"); 371 372 // Non-API request loads. 373 test->loadURI(kServer->getURIForPath("/redirect-js/normal").data()); 374 test->waitUntilLoadFinished(); 375 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/normal"); 376 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, nullptr); 377 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/redirect-js/normal"); 378 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/redirect-js/normal"); 379 test->waitUntilLoadFinished(); 380 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/normal"); 381 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, nullptr); 382 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/normal"); 383 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/normal"); 384 385 test->loadURI(kServer->getURIForPath("/redirect-js/redirect").data()); 386 test->waitUntilLoadFinished(); 387 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/redirect"); 388 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, nullptr); 389 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/redirect-js/redirect"); 390 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/redirect-js/redirect"); 391 test->waitUntilLoadFinished(); 392 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/redirect"); 393 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, "/normal"); 394 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/normal"); 395 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/normal"); 396 397 test->loadURI(kServer->getURIForPath("/redirect-js/normal-change-request").data()); 398 test->waitUntilLoadFinished(); 399 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/normal-change-request"); 400 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, nullptr); 401 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/redirect-js/normal-change-request"); 402 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/redirect-js/normal-change-request"); 403 test->waitUntilLoadFinished(); 404 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/normal-change-request"); 405 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, nullptr); 406 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/request-changed"); 407 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/request-changed"); 408 409 test->loadURI(kServer->getURIForPath("/redirect-js/redirect-to-change-request").data()); 410 test->waitUntilLoadFinished(); 411 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/redirect-to-change-request"); 412 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, nullptr); 413 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/redirect-js/redirect-to-change-request"); 414 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/redirect-js/redirect-to-change-request"); 415 test->waitUntilLoadFinished(); 416 test->checkURIAtState(ViewURITrackingTest::State::Provisional, "/redirect-js/redirect-to-change-request"); 417 test->checkURIAtState(ViewURITrackingTest::State::ProvisionalAfterRedirect, "/normal-change-request"); 418 test->checkURIAtState(ViewURITrackingTest::State::Commited, "/request-changed-on-redirect"); 419 test->checkURIAtState(ViewURITrackingTest::State::Finished, "/request-changed-on-redirect"); 371 420 } 372 421 … … 619 668 "Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!Testing!</body></html>"; 620 669 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>";630 631 670 if (message->method != SOUP_METHOD_GET) { 632 671 soup_message_set_status(message, SOUP_STATUS_NOT_IMPLEMENTED); … … 646 685 soup_message_set_status(message, SOUP_STATUS_MOVED_PERMANENTLY); 647 686 soup_message_headers_append(message->response_headers, "Location", "/normal-change-request"); 687 } else if (g_str_has_prefix(path, "/redirect-js/")) { 688 static const char* redirectJSFormat = "<html><body><script>location = '%s';</script></body></html>"; 689 char* redirectJS = g_strdup_printf(redirectJSFormat, g_strrstr(path, "/")); 690 soup_message_body_append(message->response_body, SOUP_MEMORY_TAKE, redirectJS, strlen(redirectJS)); 648 691 } else if (g_str_equal(path, "/cancelled")) { 649 692 soup_message_headers_set_encoding(message->response_headers, SOUP_ENCODING_CHUNKED); … … 665 708 soup_message_headers_append(message->response_headers, "Location", "data:text/plain;charset=utf-8,data-uri"); 666 709 } else if (g_str_equal(path, "/unfinished-subresource-load")) { 710 static const char* unfinishedSubresourceLoadResponseString = "<html><body>" 711 "<img src=\"/stall\"/>" 712 "<script>" 713 " function run() {" 714 " location = '/normal';" 715 " }" 716 " setInterval(run(), 50);" 717 "</script>" 718 "</body></html>"; 667 719 soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, unfinishedSubresourceLoadResponseString, strlen(unfinishedSubresourceLoadResponseString)); 668 720 } else if (g_str_equal(path, "/stall")) { -
releases/WebKitGTK/webkit-2.24/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp
r239772 r243973 206 206 g_assert_nonnull(headers); 207 207 soup_message_headers_append(headers, "DNT", "1"); 208 } else if (g_str_has_suffix(requestURI, "/normal-change-request") ) {208 } else if (g_str_has_suffix(requestURI, "/normal-change-request") && !g_strrstr(requestURI, "/redirect-js/")) { 209 209 GUniquePtr<char> prefix(g_strndup(requestURI, strlen(requestURI) - strlen("/normal-change-request"))); 210 210 GUniquePtr<char> newURI(g_strdup_printf("%s/request-changed%s", prefix.get(), redirectResponse ? "-on-redirect" : ""));
Note:
See TracChangeset
for help on using the changeset viewer.