summaryrefslogtreecommitdiff
path: root/chromium/chrome/renderer/net
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/renderer/net')
-rw-r--r--chromium/chrome/renderer/net/net_error_helper.cc32
-rw-r--r--chromium/chrome/renderer/net/net_error_helper.h8
-rw-r--r--chromium/chrome/renderer/net/net_error_helper_core.cc15
-rw-r--r--chromium/chrome/renderer/net/net_error_helper_core.h4
-rw-r--r--chromium/chrome/renderer/net/net_error_helper_core_unittest.cc35
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());