diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/chrome/renderer/net | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/chrome/renderer/net')
5 files changed, 71 insertions, 23 deletions
diff --git a/chromium/chrome/renderer/net/net_error_helper.cc b/chromium/chrome/renderer/net/net_error_helper.cc index b09c9aacc91..f9c56beebe6 100644 --- a/chromium/chrome/renderer/net/net_error_helper.cc +++ b/chromium/chrome/renderer/net/net_error_helper.cc @@ -225,13 +225,7 @@ void NetErrorHelper::DidStartNavigation( core_->OnStartLoad(GetFrameType(render_frame()), GetLoadingPageType(url)); } -void NetErrorHelper::DidCommitProvisionalLoad(bool is_same_document_navigation, - ui::PageTransition transition) { - // If this is a "same-document" navigation, it's not a real navigation. There - // wasn't a start event for it, either, so just ignore it. - if (is_same_document_navigation) - return; - +void NetErrorHelper::DidCommitProvisionalLoad(ui::PageTransition transition) { // Invalidate weak pointers from old error page controllers. If loading a new // error page, the controller has not yet been attached, so this won't affect // it. @@ -323,6 +317,15 @@ chrome::mojom::NetworkEasterEgg* NetErrorHelper::GetRemoteNetworkEasterEgg() { return remote_network_easter_egg_.get(); } +chrome::mojom::NetErrorPageSupport* +NetErrorHelper::GetRemoteNetErrorPageSupport() { + if (!remote_net_error_page_support_) { + render_frame()->GetRemoteAssociatedInterfaces()->GetInterface( + &remote_net_error_page_support_); + } + return remote_net_error_page_support_.get(); +} + LocalizedError::PageState NetErrorHelper::GenerateLocalizedErrorPage( const error_page::Error& error, bool is_failed_post, @@ -476,18 +479,15 @@ void NetErrorHelper::DiagnoseError(const GURL& page_url) { } void NetErrorHelper::DownloadPageLater() { -#if defined(OS_ANDROID) - render_frame()->Send(new ChromeViewHostMsg_DownloadPageLater( - render_frame()->GetRoutingID())); -#endif // defined(OS_ANDROID) +#if BUILDFLAG(ENABLE_OFFLINE_PAGES) + GetRemoteNetErrorPageSupport()->DownloadPageLater(); +#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) } void NetErrorHelper::SetIsShowingDownloadButton(bool show) { -#if defined(OS_ANDROID) - render_frame()->Send( - new ChromeViewHostMsg_SetIsShowingDownloadButtonInErrorPage( - render_frame()->GetRoutingID(), show)); -#endif // defined(OS_ANDROID) +#if BUILDFLAG(ENABLE_OFFLINE_PAGES) + GetRemoteNetErrorPageSupport()->SetIsShowingDownloadButtonInErrorPage(show); +#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) } void NetErrorHelper::OfflineContentAvailable( diff --git a/chromium/chrome/renderer/net/net_error_helper.h b/chromium/chrome/renderer/net/net_error_helper.h index 00ae60941fe..6ce1ed95f09 100644 --- a/chromium/chrome/renderer/net/net_error_helper.h +++ b/chromium/chrome/renderer/net/net_error_helper.h @@ -13,6 +13,7 @@ #include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "chrome/common/navigation_corrector.mojom.h" +#include "chrome/common/net/net_error_page_support.mojom.h" #include "chrome/common/network_diagnostics.mojom.h" #include "chrome/common/network_easter_egg.mojom.h" #include "chrome/renderer/net/net_error_helper_core.h" @@ -27,6 +28,7 @@ #include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/net_errors.h" class GURL; @@ -80,8 +82,7 @@ class NetErrorHelper void DidStartNavigation( const GURL& url, base::Optional<blink::WebNavigationType> navigation_type) override; - void DidCommitProvisionalLoad(bool is_same_document_navigation, - ui::PageTransition transition) override; + void DidCommitProvisionalLoad(ui::PageTransition transition) override; void DidFinishLoad() override; void OnStop() override; void WasShown() override; @@ -110,6 +111,7 @@ class NetErrorHelper const GURL& url) const; chrome::mojom::NetworkDiagnostics* GetRemoteNetworkDiagnostics(); chrome::mojom::NetworkEasterEgg* GetRemoteNetworkEasterEgg(); + chrome::mojom::NetErrorPageSupport* GetRemoteNetErrorPageSupport(); // NetErrorHelperCore::Delegate implementation: error_page::LocalizedError::PageState GenerateLocalizedErrorPage( @@ -189,6 +191,8 @@ class NetErrorHelper navigation_corrector_receivers_; mojo::AssociatedRemote<chrome::mojom::NetworkEasterEgg> remote_network_easter_egg_; + mojo::AssociatedRemote<chrome::mojom::NetErrorPageSupport> + remote_net_error_page_support_; // Weak factories for vending weak pointers to PageControllers. Weak // pointers are invalidated on each commit, to prevent getting messages from diff --git a/chromium/chrome/renderer/net/net_error_helper_core.cc b/chromium/chrome/renderer/net/net_error_helper_core.cc index 7ce51f9d9d2..e2e56100e63 100644 --- a/chromium/chrome/renderer/net/net_error_helper_core.cc +++ b/chromium/chrome/renderer/net/net_error_helper_core.cc @@ -469,9 +469,8 @@ bool NetErrorHelperCore::IsReloadableError( info.error.reason() != net::ERR_SSL_PROTOCOL_ERROR && // Do not trigger for blacklisted URLs. // https://crbug.com/803839 - info.error.reason() != net::ERR_BLOCKED_BY_ADMINISTRATOR && // Do not trigger for requests that were blocked by the browser itself. - info.error.reason() != net::ERR_BLOCKED_BY_CLIENT && + !net::IsRequestBlockedError(info.error.reason()) && !info.was_failed_post && // Do not trigger for this error code because it is used by Chrome // while an auth prompt is being displayed. @@ -501,7 +500,8 @@ NetErrorHelperCore::NetErrorHelperCore(Delegate* delegate, online_(content::RenderThread::Get()->IsOnline()), visible_(is_visible), auto_reload_count_(0), - navigation_from_button_(NO_BUTTON) + navigation_from_button_(NO_BUTTON), + custom_error_page_(false) #if defined(OS_ANDROID) , page_auto_fetcher_helper_( @@ -662,7 +662,8 @@ void NetErrorHelperCore::OnFinishLoad(FrameType frame_type) { committed_error_page_info_->error, *committed_error_page_info_->navigation_correction_params)); } else if (auto_reload_enabled_ && - IsReloadableError(*committed_error_page_info_)) { + IsReloadableError(*committed_error_page_info_) && + !custom_error_page_) { MaybeStartAutoReloadTimer(); } @@ -691,10 +692,13 @@ void NetErrorHelperCore::PrepareErrorPage(FrameType frame_type, PrepareErrorPageForMainFrame(pending_error_page_info_.get(), error_html); } else { if (error_html) { + custom_error_page_ = false; delegate_->GenerateLocalizedErrorPage( error, is_failed_post, false /* No diagnostics dialogs allowed for subframes. */, nullptr, error_html); + } else { + custom_error_page_ = true; } } } @@ -764,9 +768,12 @@ void NetErrorHelperCore::PrepareErrorPageForMainFrame( error = GetUpdatedError(*pending_error_page_info); } if (error_html) { + custom_error_page_ = false; pending_error_page_info->page_state = delegate_->GenerateLocalizedErrorPage( error, pending_error_page_info->was_failed_post, can_show_network_diagnostics_dialog_, nullptr, error_html); + } else { + custom_error_page_ = true; } } diff --git a/chromium/chrome/renderer/net/net_error_helper_core.h b/chromium/chrome/renderer/net/net_error_helper_core.h index a58cc7ee50b..25862bebe44 100644 --- a/chromium/chrome/renderer/net/net_error_helper_core.h +++ b/chromium/chrome/renderer/net/net_error_helper_core.h @@ -339,6 +339,10 @@ class NetErrorHelperCore { // in errors. Button navigation_from_button_; + // True if the current error page is displaying custom HTML (e.g. + // security interstitials). + bool custom_error_page_; + #if defined(OS_ANDROID) AvailableOfflineContentHelper available_content_helper_; std::unique_ptr<PageAutoFetcherHelper> page_auto_fetcher_helper_; diff --git a/chromium/chrome/renderer/net/net_error_helper_core_unittest.cc b/chromium/chrome/renderer/net/net_error_helper_core_unittest.cc index b7d13ca7f39..1220513a2d3 100644 --- a/chromium/chrome/renderer/net/net_error_helper_core_unittest.cc +++ b/chromium/chrome/renderer/net/net_error_helper_core_unittest.cc @@ -171,7 +171,7 @@ class NetErrorHelperCoreTest : public testing::Test, public NetErrorHelperCore::Delegate { public: NetErrorHelperCoreTest() - : timer_(NULL), + : timer_(nullptr), update_count_(0), error_html_update_count_(0), reload_count_(0), @@ -310,6 +310,20 @@ class NetErrorHelperCoreTest : public testing::Test, DoErrorLoadOfURL(error, GURL(kFailedUrl)); } + void DoErrorLoadWithCustomErrorPage(net::Error error) { + core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, + NetErrorHelperCore::NON_ERROR_PAGE); + // Custom error pages pass nullptr to PrepareErrorPage, since they set the + // error HTML on their own. + core()->PrepareErrorPage(NetErrorHelperCore::MAIN_FRAME, + NetErrorForURL(error, GURL(kFailedUrl)), + false /* is_failed_post */, nullptr); + core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, + NetErrorHelperCore::ERROR_PAGE); + core()->OnCommitLoad(NetErrorHelperCore::MAIN_FRAME, error_url()); + core()->OnFinishLoad(NetErrorHelperCore::MAIN_FRAME); + } + void DoSuccessLoad() { core()->OnStartLoad(NetErrorHelperCore::MAIN_FRAME, NetErrorHelperCore::NON_ERROR_PAGE); @@ -2421,6 +2435,25 @@ TEST_F(NetErrorHelperCoreAutoReloadTest, ManualReloadShowsError) { net::ERR_CONNECTION_RESET)); } +TEST_F(NetErrorHelperCoreAutoReloadTest, + AutoReloadDisabledForCustomErrorPages) { + // This error code would normally trigger auto-reloads, but shouldn't if we + // are showing a custom error page (e.g. an interstitial.). + DoErrorLoadWithCustomErrorPage(net::ERR_CONNECTION_RESET); + + EXPECT_FALSE(timer()->IsRunning()); + EXPECT_EQ(0, reload_count()); +} + +TEST_F(NetErrorHelperCoreAutoReloadTest, + AutoReloadEnabledAfterCustomErrorPage) { + DoErrorLoadWithCustomErrorPage(net::ERR_CONNECTION_RESET); + EXPECT_FALSE(timer()->IsRunning()); + EXPECT_EQ(0, reload_count()); + DoErrorLoad(net::ERR_CONNECTION_RESET); + EXPECT_TRUE(timer()->IsRunning()); +} + TEST_F(NetErrorHelperCoreTest, ExplicitReloadSucceeds) { DoErrorLoad(net::ERR_CONNECTION_RESET); EXPECT_EQ(0, reload_count()); |