Commit 1328433c authored by Darin Fisher's avatar Darin Fisher Committed by Commit Bot

Convert offline pages IPC to use Mojo

Change-Id: Id5672338460fc8ceb4ad0acb93534f520c4f5c47
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2056759Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Commit-Queue: Darin Fisher <darin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#781474}
parent 5fcd0af5
...@@ -99,31 +99,33 @@ void NetErrorTabHelper::DidFinishNavigation( ...@@ -99,31 +99,33 @@ void NetErrorTabHelper::DidFinishNavigation(
} }
} }
bool NetErrorTabHelper::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
if (render_frame_host != web_contents()->GetMainFrame())
return false;
#if BUILDFLAG(ENABLE_OFFLINE_PAGES) #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
bool handled = true; void NetErrorTabHelper::DownloadPageLater() {
IPC_BEGIN_MESSAGE_MAP(NetErrorTabHelper, message) // Makes sure that this is coming from an error page.
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DownloadPageLater, content::NavigationEntry* entry =
OnDownloadPageLater) web_contents()->GetController().GetLastCommittedEntry();
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_SetIsShowingDownloadButtonInErrorPage, if (!entry || entry->GetPageType() != content::PAGE_TYPE_ERROR)
OnSetIsShowingDownloadButtonInErrorPage) return;
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP() // Only download the page for HTTP/HTTPS URLs.
GURL url(entry->GetVirtualURL());
return handled; if (!url.SchemeIsHTTPOrHTTPS())
#else return;
return false;
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) DownloadPageLaterHelper(url);
} }
void NetErrorTabHelper::SetIsShowingDownloadButtonInErrorPage(
bool showing_download_button) {
is_showing_download_button_in_error_page_ = showing_download_button;
}
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
NetErrorTabHelper::NetErrorTabHelper(WebContents* contents) NetErrorTabHelper::NetErrorTabHelper(WebContents* contents)
: WebContentsObserver(contents), : WebContentsObserver(contents),
network_diagnostics_receivers_(contents, this), network_diagnostics_receivers_(contents, this),
network_easter_egg_receivers_(contents, this), network_easter_egg_receivers_(contents, this),
net_error_page_support_(contents, this),
is_error_page_(false), is_error_page_(false),
dns_error_active_(false), dns_error_active_(false),
dns_error_page_committed_(false), dns_error_page_committed_(false),
...@@ -177,28 +179,6 @@ void NetErrorTabHelper::OnDnsProbeFinished(DnsProbeStatus result) { ...@@ -177,28 +179,6 @@ void NetErrorTabHelper::OnDnsProbeFinished(DnsProbeStatus result) {
SendInfo(); SendInfo();
} }
#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
void NetErrorTabHelper::OnDownloadPageLater() {
// Makes sure that this is coming from an error page.
content::NavigationEntry* entry =
web_contents()->GetController().GetLastCommittedEntry();
if (!entry || entry->GetPageType() != content::PAGE_TYPE_ERROR)
return;
// Only download the page for HTTP/HTTPS URLs.
GURL url(entry->GetVirtualURL());
if (!url.SchemeIsHTTPOrHTTPS())
return;
DownloadPageLaterHelper(url);
}
void NetErrorTabHelper::OnSetIsShowingDownloadButtonInErrorPage(
bool is_showing_download_button) {
is_showing_download_button_in_error_page_ = is_showing_download_button;
}
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
// static // static
void NetErrorTabHelper::RegisterProfilePrefs( void NetErrorTabHelper::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* prefs) { user_prefs::PrefRegistrySyncable* prefs) {
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "chrome/browser/net/dns_probe_service.h" #include "chrome/browser/net/dns_probe_service.h"
#include "chrome/common/net/net_error_page_support.mojom.h"
#include "chrome/common/network_diagnostics.mojom.h" #include "chrome/common/network_diagnostics.mojom.h"
#include "chrome/common/network_easter_egg.mojom.h" #include "chrome/common/network_easter_egg.mojom.h"
#include "components/error_page/common/net_error_info.h" #include "components/error_page/common/net_error_info.h"
...@@ -34,6 +35,7 @@ namespace chrome_browser_net { ...@@ -34,6 +35,7 @@ namespace chrome_browser_net {
class NetErrorTabHelper class NetErrorTabHelper
: public content::WebContentsObserver, : public content::WebContentsObserver,
public content::WebContentsUserData<NetErrorTabHelper>, public content::WebContentsUserData<NetErrorTabHelper>,
public chrome::mojom::NetErrorPageSupport,
public chrome::mojom::NetworkDiagnostics, public chrome::mojom::NetworkDiagnostics,
public chrome::mojom::NetworkEasterEgg { public chrome::mojom::NetworkEasterEgg {
public: public:
...@@ -70,8 +72,13 @@ class NetErrorTabHelper ...@@ -70,8 +72,13 @@ class NetErrorTabHelper
void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
void DidFinishNavigation( void DidFinishNavigation(
content::NavigationHandle* navigation_handle) override; content::NavigationHandle* navigation_handle) override;
bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override; // chrome::mojom::NetErrorPageSupport:
#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
void DownloadPageLater() override;
void SetIsShowingDownloadButtonInErrorPage(
bool showing_download_button) override;
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
protected: protected:
// |contents| is the WebContents of the tab this NetErrorTabHelper is // |contents| is the WebContents of the tab this NetErrorTabHelper is
...@@ -90,11 +97,6 @@ class NetErrorTabHelper ...@@ -90,11 +97,6 @@ class NetErrorTabHelper
return network_diagnostics_receivers_; return network_diagnostics_receivers_;
} }
#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
void OnDownloadPageLater();
void OnSetIsShowingDownloadButtonInErrorPage(bool is_showing_download_button);
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
private: private:
friend class content::WebContentsUserData<NetErrorTabHelper>; friend class content::WebContentsUserData<NetErrorTabHelper>;
...@@ -124,6 +126,8 @@ class NetErrorTabHelper ...@@ -124,6 +126,8 @@ class NetErrorTabHelper
network_diagnostics_receivers_; network_diagnostics_receivers_;
content::WebContentsFrameReceiverSet<chrome::mojom::NetworkEasterEgg> content::WebContentsFrameReceiverSet<chrome::mojom::NetworkEasterEgg>
network_easter_egg_receivers_; network_easter_egg_receivers_;
content::WebContentsFrameReceiverSet<chrome::mojom::NetErrorPageSupport>
net_error_page_support_;
// True if the last provisional load that started was for an error page. // True if the last provisional load that started was for an error page.
bool is_error_page_; bool is_error_page_;
......
...@@ -45,7 +45,7 @@ class TestNetErrorTabHelper : public NetErrorTabHelper { ...@@ -45,7 +45,7 @@ class TestNetErrorTabHelper : public NetErrorTabHelper {
int mock_sent_count() const { return mock_sent_count_; } int mock_sent_count() const { return mock_sent_count_; }
#if BUILDFLAG(ENABLE_OFFLINE_PAGES) #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
using NetErrorTabHelper::OnDownloadPageLater; using NetErrorTabHelper::DownloadPageLater;
const GURL& download_page_later_url() const { const GURL& download_page_later_url() const {
return download_page_later_url_; return download_page_later_url_;
...@@ -169,7 +169,7 @@ class NetErrorTabHelperTest : public ChromeRenderViewHostTestHarness { ...@@ -169,7 +169,7 @@ class NetErrorTabHelperTest : public ChromeRenderViewHostTestHarness {
bool succeeded) { bool succeeded) {
GURL url(url_string); GURL url(url_string);
LoadURL(url, succeeded); LoadURL(url, succeeded);
tab_helper()->OnDownloadPageLater(); tab_helper()->DownloadPageLater();
EXPECT_EQ(0, tab_helper()->times_download_page_later_invoked()); EXPECT_EQ(0, tab_helper()->times_download_page_later_invoked());
} }
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
...@@ -370,7 +370,7 @@ TEST_F(NetErrorTabHelperTest, NoDiagnosticsForNonHttpSchemes) { ...@@ -370,7 +370,7 @@ TEST_F(NetErrorTabHelperTest, NoDiagnosticsForNonHttpSchemes) {
TEST_F(NetErrorTabHelperTest, DownloadPageLater) { TEST_F(NetErrorTabHelperTest, DownloadPageLater) {
GURL url("http://somewhere:123/"); GURL url("http://somewhere:123/");
LoadURL(url, false /*succeeded*/); LoadURL(url, false /*succeeded*/);
tab_helper()->OnDownloadPageLater(); tab_helper()->DownloadPageLater();
EXPECT_EQ(url, tab_helper()->download_page_later_url()); EXPECT_EQ(url, tab_helper()->download_page_later_url());
EXPECT_EQ(1, tab_helper()->times_download_page_later_invoked()); EXPECT_EQ(1, tab_helper()->times_download_page_later_invoked());
} }
...@@ -378,7 +378,7 @@ TEST_F(NetErrorTabHelperTest, DownloadPageLater) { ...@@ -378,7 +378,7 @@ TEST_F(NetErrorTabHelperTest, DownloadPageLater) {
TEST_F(NetErrorTabHelperTest, NoDownloadPageLaterOnNonErrorPage) { TEST_F(NetErrorTabHelperTest, NoDownloadPageLaterOnNonErrorPage) {
GURL url("http://somewhere:123/"); GURL url("http://somewhere:123/");
LoadURL(url, true /*succeeded*/); LoadURL(url, true /*succeeded*/);
tab_helper()->OnDownloadPageLater(); tab_helper()->DownloadPageLater();
EXPECT_EQ(0, tab_helper()->times_download_page_later_invoked()); EXPECT_EQ(0, tab_helper()->times_download_page_later_invoked());
} }
......
...@@ -695,6 +695,7 @@ mojom("mojo_bindings") { ...@@ -695,6 +695,7 @@ mojom("mojo_bindings") {
"media/webrtc_logging.mojom", "media/webrtc_logging.mojom",
"metrics.mojom", "metrics.mojom",
"navigation_corrector.mojom", "navigation_corrector.mojom",
"net/net_error_page_support.mojom",
"net_benchmarking.mojom", "net_benchmarking.mojom",
"network_diagnostics.mojom", "network_diagnostics.mojom",
"network_easter_egg.mojom", "network_easter_egg.mojom",
...@@ -723,6 +724,7 @@ mojom("mojo_bindings") { ...@@ -723,6 +724,7 @@ mojom("mojo_bindings") {
if (enable_offline_pages) { if (enable_offline_pages) {
sources += [ "mhtml_page_notifier.mojom" ] sources += [ "mhtml_page_notifier.mojom" ]
deps += [ "//third_party/blink/public/mojom:mojom_mhtml_load_result" ] deps += [ "//third_party/blink/public/mojom:mojom_mhtml_load_result" ]
enabled_features = [ "enable_offline_pages" ]
} }
public_deps = [ public_deps = [
......
file://net/OWNERS file://net/OWNERS
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
# COMPONENT: Internals>Network # COMPONENT: Internals>Network
# TEAM: net-dev@chromium.org # TEAM: net-dev@chromium.org
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module chrome.mojom;
// A per-frame interface used to support network error pages.
// TODO(darin): Consolidate other such interfaces into this interface.
interface NetErrorPageSupport {
// Called to schedule a download of the current page at a later time.
[EnableIf=enable_offline_pages]
DownloadPageLater();
// Called to indicate if download button is being shown in the error page.
[EnableIf=enable_offline_pages]
SetIsShowingDownloadButtonInErrorPage(bool showing_download_button);
};
...@@ -45,19 +45,6 @@ ...@@ -45,19 +45,6 @@
IPC_MESSAGE_ROUTED1(ChromeViewMsg_LoadBlockedPlugins, IPC_MESSAGE_ROUTED1(ChromeViewMsg_LoadBlockedPlugins,
std::string /* identifier */) std::string /* identifier */)
// JavaScript related messages -----------------------------------------------
#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
// Message sent from the renderer to the browser to schedule to download the
// page at a later time.
IPC_MESSAGE_ROUTED0(ChromeViewHostMsg_DownloadPageLater)
// Message sent from the renderer to the browser to indicate if download button
// is being shown in error page.
IPC_MESSAGE_ROUTED1(ChromeViewHostMsg_SetIsShowingDownloadButtonInErrorPage,
bool /* showing download button */)
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Misc messages // Misc messages
// These are messages sent from the renderer to the browser process. // These are messages sent from the renderer to the browser process.
......
...@@ -317,6 +317,15 @@ chrome::mojom::NetworkEasterEgg* NetErrorHelper::GetRemoteNetworkEasterEgg() { ...@@ -317,6 +317,15 @@ chrome::mojom::NetworkEasterEgg* NetErrorHelper::GetRemoteNetworkEasterEgg() {
return remote_network_easter_egg_.get(); 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( LocalizedError::PageState NetErrorHelper::GenerateLocalizedErrorPage(
const error_page::Error& error, const error_page::Error& error,
bool is_failed_post, bool is_failed_post,
...@@ -470,18 +479,15 @@ void NetErrorHelper::DiagnoseError(const GURL& page_url) { ...@@ -470,18 +479,15 @@ void NetErrorHelper::DiagnoseError(const GURL& page_url) {
} }
void NetErrorHelper::DownloadPageLater() { void NetErrorHelper::DownloadPageLater() {
#if defined(OS_ANDROID) #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
render_frame()->Send(new ChromeViewHostMsg_DownloadPageLater( GetRemoteNetErrorPageSupport()->DownloadPageLater();
render_frame()->GetRoutingID())); #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
#endif // defined(OS_ANDROID)
} }
void NetErrorHelper::SetIsShowingDownloadButton(bool show) { void NetErrorHelper::SetIsShowingDownloadButton(bool show) {
#if defined(OS_ANDROID) #if BUILDFLAG(ENABLE_OFFLINE_PAGES)
render_frame()->Send( GetRemoteNetErrorPageSupport()->SetIsShowingDownloadButtonInErrorPage(show);
new ChromeViewHostMsg_SetIsShowingDownloadButtonInErrorPage( #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
render_frame()->GetRoutingID(), show));
#endif // defined(OS_ANDROID)
} }
void NetErrorHelper::OfflineContentAvailable( void NetErrorHelper::OfflineContentAvailable(
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/common/navigation_corrector.mojom.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_diagnostics.mojom.h"
#include "chrome/common/network_easter_egg.mojom.h" #include "chrome/common/network_easter_egg.mojom.h"
#include "chrome/renderer/net/net_error_helper_core.h" #include "chrome/renderer/net/net_error_helper_core.h"
...@@ -27,6 +28,7 @@ ...@@ -27,6 +28,7 @@
#include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "mojo/public/cpp/bindings/associated_receiver_set.h"
#include "mojo/public/cpp/bindings/associated_remote.h" #include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
class GURL; class GURL;
...@@ -109,6 +111,7 @@ class NetErrorHelper ...@@ -109,6 +111,7 @@ class NetErrorHelper
const GURL& url) const; const GURL& url) const;
chrome::mojom::NetworkDiagnostics* GetRemoteNetworkDiagnostics(); chrome::mojom::NetworkDiagnostics* GetRemoteNetworkDiagnostics();
chrome::mojom::NetworkEasterEgg* GetRemoteNetworkEasterEgg(); chrome::mojom::NetworkEasterEgg* GetRemoteNetworkEasterEgg();
chrome::mojom::NetErrorPageSupport* GetRemoteNetErrorPageSupport();
// NetErrorHelperCore::Delegate implementation: // NetErrorHelperCore::Delegate implementation:
error_page::LocalizedError::PageState GenerateLocalizedErrorPage( error_page::LocalizedError::PageState GenerateLocalizedErrorPage(
...@@ -188,6 +191,8 @@ class NetErrorHelper ...@@ -188,6 +191,8 @@ class NetErrorHelper
navigation_corrector_receivers_; navigation_corrector_receivers_;
mojo::AssociatedRemote<chrome::mojom::NetworkEasterEgg> mojo::AssociatedRemote<chrome::mojom::NetworkEasterEgg>
remote_network_easter_egg_; remote_network_easter_egg_;
mojo::AssociatedRemote<chrome::mojom::NetErrorPageSupport>
remote_net_error_page_support_;
// Weak factories for vending weak pointers to PageControllers. Weak // Weak factories for vending weak pointers to PageControllers. Weak
// pointers are invalidated on each commit, to prevent getting messages from // pointers are invalidated on each commit, to prevent getting messages from
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment