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(
}
}
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)
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(NetErrorTabHelper, message)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DownloadPageLater,
OnDownloadPageLater)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_SetIsShowingDownloadButtonInErrorPage,
OnSetIsShowingDownloadButtonInErrorPage)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
#else
return false;
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
void NetErrorTabHelper::DownloadPageLater() {
// 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::SetIsShowingDownloadButtonInErrorPage(
bool showing_download_button) {
is_showing_download_button_in_error_page_ = showing_download_button;
}
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
NetErrorTabHelper::NetErrorTabHelper(WebContents* contents)
: WebContentsObserver(contents),
network_diagnostics_receivers_(contents, this),
network_easter_egg_receivers_(contents, this),
net_error_page_support_(contents, this),
is_error_page_(false),
dns_error_active_(false),
dns_error_page_committed_(false),
......@@ -177,28 +179,6 @@ void NetErrorTabHelper::OnDnsProbeFinished(DnsProbeStatus result) {
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
void NetErrorTabHelper::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* prefs) {
......
......@@ -12,6 +12,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.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_easter_egg.mojom.h"
#include "components/error_page/common/net_error_info.h"
......@@ -34,6 +35,7 @@ namespace chrome_browser_net {
class NetErrorTabHelper
: public content::WebContentsObserver,
public content::WebContentsUserData<NetErrorTabHelper>,
public chrome::mojom::NetErrorPageSupport,
public chrome::mojom::NetworkDiagnostics,
public chrome::mojom::NetworkEasterEgg {
public:
......@@ -70,8 +72,13 @@ class NetErrorTabHelper
void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
void DidFinishNavigation(
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:
// |contents| is the WebContents of the tab this NetErrorTabHelper is
......@@ -90,11 +97,6 @@ class NetErrorTabHelper
return network_diagnostics_receivers_;
}
#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
void OnDownloadPageLater();
void OnSetIsShowingDownloadButtonInErrorPage(bool is_showing_download_button);
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
private:
friend class content::WebContentsUserData<NetErrorTabHelper>;
......@@ -124,6 +126,8 @@ class NetErrorTabHelper
network_diagnostics_receivers_;
content::WebContentsFrameReceiverSet<chrome::mojom::NetworkEasterEgg>
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.
bool is_error_page_;
......
......@@ -45,7 +45,7 @@ class TestNetErrorTabHelper : public NetErrorTabHelper {
int mock_sent_count() const { return mock_sent_count_; }
#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
using NetErrorTabHelper::OnDownloadPageLater;
using NetErrorTabHelper::DownloadPageLater;
const GURL& download_page_later_url() const {
return download_page_later_url_;
......@@ -169,7 +169,7 @@ class NetErrorTabHelperTest : public ChromeRenderViewHostTestHarness {
bool succeeded) {
GURL url(url_string);
LoadURL(url, succeeded);
tab_helper()->OnDownloadPageLater();
tab_helper()->DownloadPageLater();
EXPECT_EQ(0, tab_helper()->times_download_page_later_invoked());
}
#endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
......@@ -370,7 +370,7 @@ TEST_F(NetErrorTabHelperTest, NoDiagnosticsForNonHttpSchemes) {
TEST_F(NetErrorTabHelperTest, DownloadPageLater) {
GURL url("http://somewhere:123/");
LoadURL(url, false /*succeeded*/);
tab_helper()->OnDownloadPageLater();
tab_helper()->DownloadPageLater();
EXPECT_EQ(url, tab_helper()->download_page_later_url());
EXPECT_EQ(1, tab_helper()->times_download_page_later_invoked());
}
......@@ -378,7 +378,7 @@ TEST_F(NetErrorTabHelperTest, DownloadPageLater) {
TEST_F(NetErrorTabHelperTest, NoDownloadPageLaterOnNonErrorPage) {
GURL url("http://somewhere:123/");
LoadURL(url, true /*succeeded*/);
tab_helper()->OnDownloadPageLater();
tab_helper()->DownloadPageLater();
EXPECT_EQ(0, tab_helper()->times_download_page_later_invoked());
}
......
......@@ -695,6 +695,7 @@ mojom("mojo_bindings") {
"media/webrtc_logging.mojom",
"metrics.mojom",
"navigation_corrector.mojom",
"net/net_error_page_support.mojom",
"net_benchmarking.mojom",
"network_diagnostics.mojom",
"network_easter_egg.mojom",
......@@ -723,6 +724,7 @@ mojom("mojo_bindings") {
if (enable_offline_pages) {
sources += [ "mhtml_page_notifier.mojom" ]
deps += [ "//third_party/blink/public/mojom:mojom_mhtml_load_result" ]
enabled_features = [ "enable_offline_pages" ]
}
public_deps = [
......
file://net/OWNERS
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
# COMPONENT: Internals>Network
# 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 @@
IPC_MESSAGE_ROUTED1(ChromeViewMsg_LoadBlockedPlugins,
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
// These are messages sent from the renderer to the browser process.
......
......@@ -317,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,
......@@ -470,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(
......
......@@ -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;
......@@ -109,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(
......@@ -188,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
......
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