Commit 36155b58 authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

[prerender] Convert PrerenderHostMsg_PrefetchFinished to mojo

This CL converts PrerenderHostMsg_PrefetchFinished to FrameHost
Mojo message and removes the unused PrerenderMessageFilter.

Bug: 798712
Change-Id: I72721a011ebfb9951f4e7c01a96e09139f3c5e48
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2256116
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Reviewed-by: default avatarDave Tapuska <dtapuska@chromium.org>
Reviewed-by: default avatarDarin Fisher <darin@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#783862}
parent e9db0b8b
...@@ -1286,8 +1286,6 @@ static_library("browser") { ...@@ -1286,8 +1286,6 @@ static_library("browser") {
"prerender/prerender_manager.h", "prerender/prerender_manager.h",
"prerender/prerender_manager_factory.cc", "prerender/prerender_manager_factory.cc",
"prerender/prerender_manager_factory.h", "prerender/prerender_manager_factory.h",
"prerender/prerender_message_filter.cc",
"prerender/prerender_message_filter.h",
"prerender/prerender_processor_impl.cc", "prerender/prerender_processor_impl.cc",
"prerender/prerender_processor_impl.h", "prerender/prerender_processor_impl.h",
"prerender/prerender_tab_helper.cc", "prerender/prerender_tab_helper.cc",
......
...@@ -96,7 +96,6 @@ ...@@ -96,7 +96,6 @@
#include "chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor.h" #include "chrome/browser/prerender/isolated/isolated_prerender_url_loader_interceptor.h"
#include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_manager_factory.h" #include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/prerender/prerender_message_filter.h"
#include "chrome/browser/prerender/prerender_util.h" #include "chrome/browser/prerender/prerender_util.h"
#include "chrome/browser/previews/previews_content_util.h" #include "chrome/browser/previews/previews_content_util.h"
#include "chrome/browser/previews/previews_service.h" #include "chrome/browser/previews/previews_service.h"
...@@ -1506,7 +1505,6 @@ void ChromeContentBrowserClient::RenderProcessWillLaunch( ...@@ -1506,7 +1505,6 @@ void ChromeContentBrowserClient::RenderProcessWillLaunch(
#if BUILDFLAG(ENABLE_PRINTING) #if BUILDFLAG(ENABLE_PRINTING)
host->AddFilter(new printing::PrintingMessageFilter(id, profile)); host->AddFilter(new printing::PrintingMessageFilter(id, profile));
#endif #endif
host->AddFilter(new prerender::PrerenderMessageFilter(id));
WebRtcLoggingController::AttachToRenderProcessHost( WebRtcLoggingController::AttachToRenderProcessHost(
host, g_browser_process->webrtc_log_uploader()); host, g_browser_process->webrtc_log_uploader());
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include "chrome/common/prerender_util.h" #include "chrome/common/prerender_util.h"
#include "components/history/core/browser/history_types.h" #include "components/history/core/browser/history_types.h"
#include "components/prerender/common/prerender_final_status.h" #include "components/prerender/common/prerender_final_status.h"
#include "components/prerender/common/prerender_messages.h"
#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_handle.h"
...@@ -650,10 +649,14 @@ void PrerenderContents::PrepareForUse() { ...@@ -650,10 +649,14 @@ void PrerenderContents::PrepareForUse() {
NotifyPrerenderStop(); NotifyPrerenderStop();
} }
void PrerenderContents::CancelPrerenderForUnsupportedScheme(const GURL& url) { void PrerenderContents::CancelPrerenderForUnsupportedScheme() {
Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME);
} }
void PrerenderContents::CancelPrerenderForNoStatePrefetch() {
Destroy(FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
}
void PrerenderContents::AddPrerenderCancelerReceiver( void PrerenderContents::AddPrerenderCancelerReceiver(
mojo::PendingReceiver<prerender::mojom::PrerenderCanceler> receiver) { mojo::PendingReceiver<prerender::mojom::PrerenderCanceler> receiver) {
prerender_canceler_receiver_set_.Add(this, std::move(receiver)); prerender_canceler_receiver_set_.Add(this, std::move(receiver));
......
...@@ -293,7 +293,8 @@ class PrerenderContents : public content::NotificationObserver, ...@@ -293,7 +293,8 @@ class PrerenderContents : public content::NotificationObserver,
std::unique_ptr<memory_instrumentation::GlobalMemoryDump> dump); std::unique_ptr<memory_instrumentation::GlobalMemoryDump> dump);
// prerender::mojom::PrerenderCanceler: // prerender::mojom::PrerenderCanceler:
void CancelPrerenderForUnsupportedScheme(const GURL& url) override; void CancelPrerenderForUnsupportedScheme() override;
void CancelPrerenderForNoStatePrefetch() override;
mojo::ReceiverSet<prerender::mojom::PrerenderCanceler> mojo::ReceiverSet<prerender::mojom::PrerenderCanceler>
prerender_canceler_receiver_set_; prerender_canceler_receiver_set_;
......
// Copyright (c) 2012 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.
#include "chrome/browser/prerender/prerender_message_filter.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "components/prerender/common/prerender_final_status.h"
#include "components/prerender/common/prerender_messages.h"
#include "content/public/browser/render_process_host.h"
namespace prerender {
PrerenderMessageFilter::PrerenderMessageFilter(int render_process_id)
: BrowserMessageFilter(PrerenderMsgStart),
render_process_id_(render_process_id) {}
PrerenderMessageFilter::~PrerenderMessageFilter() = default;
bool PrerenderMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PrerenderMessageFilter, message)
IPC_MESSAGE_HANDLER(PrerenderHostMsg_PrefetchFinished, OnPrefetchFinished)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void PrerenderMessageFilter::OverrideThreadForMessage(
const IPC::Message& message, content::BrowserThread::ID* thread) {
if (message.type() == PrerenderHostMsg_PrefetchFinished::ID)
*thread = content::BrowserThread::UI;
}
void PrerenderMessageFilter::OnPrefetchFinished() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::RenderProcessHost* render_process_host =
content::RenderProcessHost::FromID(render_process_id_);
if (!render_process_host)
return;
PrerenderManager* prerender_manager =
PrerenderManagerFactory::GetForBrowserContext(
render_process_host->GetBrowserContext());
if (!prerender_manager)
return;
// Kill the process doing the prefetch. Only one prefetch per renderer is
// possible, also prefetches are not shared with other renderer processes.
PrerenderContents* prerender_contents =
prerender_manager->GetPrerenderContentsForProcess(render_process_id_);
if (prerender_contents)
prerender_contents->Destroy(FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
}
} // namespace prerender
// Copyright (c) 2012 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.
#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_MESSAGE_FILTER_H_
#define CHROME_BROWSER_PRERENDER_PRERENDER_MESSAGE_FILTER_H_
#include <memory>
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "content/public/browser/browser_message_filter.h"
#include "content/public/browser/browser_thread.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace IPC {
class Message;
}
namespace prerender {
class PrerenderMessageFilter : public content::BrowserMessageFilter {
public:
explicit PrerenderMessageFilter(int render_process_id);
private:
friend struct content::BrowserThread::DeleteOnThread<
content::BrowserThread::UI>;
friend class base::DeleteHelper<PrerenderMessageFilter>;
~PrerenderMessageFilter() override;
// Overridden from content::BrowserMessageFilter.
bool OnMessageReceived(const IPC::Message& message) override;
void OverrideThreadForMessage(const IPC::Message& message,
content::BrowserThread::ID* thread) override;
void OnPrefetchFinished();
const int render_process_id_;
DISALLOW_COPY_AND_ASSIGN(PrerenderMessageFilter);
};
} // namespace prerender
#endif // CHROME_BROWSER_PRERENDER_PRERENDER_MESSAGE_FILTER_H_
...@@ -58,7 +58,6 @@ ...@@ -58,7 +58,6 @@
#include "chrome/browser/prefs/pref_metrics_service.h" #include "chrome/browser/prefs/pref_metrics_service.h"
#include "chrome/browser/prerender/prerender_link_manager_factory.h" #include "chrome/browser/prerender/prerender_link_manager_factory.h"
#include "chrome/browser/prerender/prerender_manager_factory.h" #include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/prerender/prerender_message_filter.h"
#include "chrome/browser/profiles/gaia_info_update_service_factory.h" #include "chrome/browser/profiles/gaia_info_update_service_factory.h"
#include "chrome/browser/profiles/renderer_updater_factory.h" #include "chrome/browser/profiles/renderer_updater_factory.h"
#include "chrome/browser/safe_browsing/certificate_reporting_service_factory.h" #include "chrome/browser/safe_browsing/certificate_reporting_service_factory.h"
......
...@@ -6,12 +6,6 @@ ...@@ -6,12 +6,6 @@
#include "chrome/common/search/instant_mojom_traits.h" #include "chrome/common/search/instant_mojom_traits.h"
#include "services/network/public/cpp/p2p_param_traits.h" #include "services/network/public/cpp/p2p_param_traits.h"
#undef COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_
#include "components/prerender/common/prerender_messages.h"
#ifndef COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_
#error \
"Failed to include header components/prerender/common/prerender_messages.h"
#endif
#undef CHROME_COMMON_RENDER_MESSAGES_H_ #undef CHROME_COMMON_RENDER_MESSAGES_H_
#include "chrome/common/render_messages.h" #include "chrome/common/render_messages.h"
#ifndef CHROME_COMMON_RENDER_MESSAGES_H_ #ifndef CHROME_COMMON_RENDER_MESSAGES_H_
......
...@@ -24,10 +24,9 @@ const char kPurposeHeaderName[] = "Purpose"; ...@@ -24,10 +24,9 @@ const char kPurposeHeaderName[] = "Purpose";
const char kPurposeHeaderValue[] = "prefetch"; const char kPurposeHeaderValue[] = "prefetch";
void CallCancelPrerenderForUnsupportedScheme( void CallCancelPrerenderForUnsupportedScheme(
mojo::PendingRemote<prerender::mojom::PrerenderCanceler> canceler, mojo::PendingRemote<prerender::mojom::PrerenderCanceler> canceler) {
const GURL& url) {
mojo::Remote<prerender::mojom::PrerenderCanceler>(std::move(canceler)) mojo::Remote<prerender::mojom::PrerenderCanceler>(std::move(canceler))
->CancelPrerenderForUnsupportedScheme(url); ->CancelPrerenderForUnsupportedScheme();
} }
// Returns true if the response has a "no-store" cache control header. // Returns true if the response has a "no-store" cache control header.
...@@ -96,7 +95,7 @@ void PrerenderURLLoaderThrottle::WillStartRequest( ...@@ -96,7 +95,7 @@ void PrerenderURLLoaderThrottle::WillStartRequest(
// WillRedirectRequest() and PrerenderContents::CheckURL(). See // WillRedirectRequest() and PrerenderContents::CheckURL(). See
// http://crbug.com/673771. // http://crbug.com/673771.
delegate_->CancelWithError(net::ERR_ABORTED); delegate_->CancelWithError(net::ERR_ABORTED);
CallCancelPrerenderForUnsupportedScheme(std::move(canceler_), request->url); CallCancelPrerenderForUnsupportedScheme(std::move(canceler_));
return; return;
} }
...@@ -154,8 +153,7 @@ void PrerenderURLLoaderThrottle::WillRedirectRequest( ...@@ -154,8 +153,7 @@ void PrerenderURLLoaderThrottle::WillRedirectRequest(
// Abort any prerenders with requests which redirect to invalid schemes. // Abort any prerenders with requests which redirect to invalid schemes.
if (!DoesURLHaveValidScheme(redirect_info->new_url)) { if (!DoesURLHaveValidScheme(redirect_info->new_url)) {
delegate_->CancelWithError(net::ERR_ABORTED); delegate_->CancelWithError(net::ERR_ABORTED);
CallCancelPrerenderForUnsupportedScheme(std::move(canceler_), CallCancelPrerenderForUnsupportedScheme(std::move(canceler_));
redirect_info->new_url);
} else if (follow_only_when_prerender_shown_header == "1" && } else if (follow_only_when_prerender_shown_header == "1" &&
resource_type_ != blink::mojom::ResourceType::kMainFrame) { resource_type_ != blink::mojom::ResourceType::kMainFrame) {
// Only defer redirects with the Follow-Only-When-Prerender-Shown // Only defer redirects with the Follow-Only-When-Prerender-Shown
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include "chrome/renderer/web_apps.h" #include "chrome/renderer/web_apps.h"
#include "components/crash/core/common/crash_key.h" #include "components/crash/core/common/crash_key.h"
#include "components/offline_pages/buildflags/buildflags.h" #include "components/offline_pages/buildflags/buildflags.h"
#include "components/prerender/common/prerender_messages.h"
#include "components/translate/content/renderer/translate_agent.h" #include "components/translate/content/renderer/translate_agent.h"
#include "components/translate/core/common/translate_util.h" #include "components/translate/core/common/translate_util.h"
#include "components/web_cache/renderer/web_cache_impl.h" #include "components/web_cache/renderer/web_cache_impl.h"
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include "chrome/renderer/plugins/plugin_uma.h" #include "chrome/renderer/plugins/plugin_uma.h"
#include "chrome/renderer/prerender/prerender_observer_list.h" #include "chrome/renderer/prerender/prerender_observer_list.h"
#include "components/content_settings/renderer/content_settings_agent_impl.h" #include "components/content_settings/renderer/content_settings_agent_impl.h"
#include "components/prerender/common/prerender_messages.h"
#include "components/strings/grit/components_strings.h" #include "components/strings/grit/components_strings.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "content/public/common/untrustworthy_context_menu_params.h" #include "content/public/common/untrustworthy_context_menu_params.h"
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "base/metrics/field_trial.h" #include "base/metrics/field_trial.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "chrome/common/prerender_url_loader_throttle.h" #include "chrome/common/prerender_url_loader_throttle.h"
#include "components/prerender/common/prerender_messages.h"
#include "content/public/renderer/document_state.h" #include "content/public/renderer/document_state.h"
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_thread.h"
...@@ -134,8 +133,11 @@ void PrerenderHelper::SendPrefetchFinished() { ...@@ -134,8 +133,11 @@ void PrerenderHelper::SendPrefetchFinished() {
DCHECK(prefetch_count_ == 0 && prefetch_finished_); DCHECK(prefetch_count_ == 0 && prefetch_finished_);
UMA_HISTOGRAM_MEDIUM_TIMES("Prerender.NoStatePrefetchRendererParseTime", UMA_HISTOGRAM_MEDIUM_TIMES("Prerender.NoStatePrefetchRendererParseTime",
parsed_time_ - start_time_); parsed_time_ - start_time_);
// TODO(darin): Perhaps this should be a routed message (frame level).
content::RenderThread::Get()->Send(new PrerenderHostMsg_PrefetchFinished()); mojo::Remote<prerender::mojom::PrerenderCanceler> canceler;
render_frame()->GetBrowserInterfaceBroker()->GetInterface(
canceler.BindNewPipeAndPassReceiver());
canceler->CancelPrerenderForNoStatePrefetch();
} }
} // namespace prerender } // namespace prerender
...@@ -8,7 +8,6 @@ static_library("common") { ...@@ -8,7 +8,6 @@ static_library("common") {
sources = [ sources = [
"prerender_final_status.cc", "prerender_final_status.cc",
"prerender_final_status.h", "prerender_final_status.h",
"prerender_messages.h",
"prerender_origin.cc", "prerender_origin.cc",
"prerender_origin.h", "prerender_origin.h",
] ]
......
...@@ -4,12 +4,14 @@ ...@@ -4,12 +4,14 @@
module prerender.mojom; module prerender.mojom;
import "url/mojom/url.mojom";
// This interface is provided to a renderer that is used for prerendering. It // This interface is provided to a renderer that is used for prerendering. It
// enables the renderer to detect and respond to cases that should cause the // enables the renderer to detect and respond to cases that should cause the
// prerendering to be cancelled. // prerendering to be cancelled.
interface PrerenderCanceler { interface PrerenderCanceler {
// Cancels prerendering because of an unsupported scheme. // Cancels prerendering because of an unsupported scheme.
CancelPrerenderForUnsupportedScheme(url.mojom.Url url); CancelPrerenderForUnsupportedScheme();
// Cancels prerendering because the resource prefetcher has discovered all
// possible subresources and issued requests for them.
CancelPrerenderForNoStatePrefetch();
}; };
// Copyright (c) 2012 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.
#ifndef COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_
#define COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_
#include "ipc/ipc_message.h"
#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_param_traits.h"
#define IPC_MESSAGE_START PrerenderMsgStart
// PrerenderLinkManager Messages
// Sent by the renderer process to notify that the resource prefetcher has
// discovered all possible subresources and issued requests for them.
IPC_MESSAGE_CONTROL0(PrerenderHostMsg_PrefetchFinished)
#endif // COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_
...@@ -28,7 +28,6 @@ enum IPCMessageStart { ...@@ -28,7 +28,6 @@ enum IPCMessageStart {
PrintMsgStart, PrintMsgStart,
ExtensionMsgStart, ExtensionMsgStart,
TextInputClientMsgStart, TextInputClientMsgStart,
PrerenderMsgStart,
ChromotingMsgStart, ChromotingMsgStart,
AndroidWebViewMsgStart, AndroidWebViewMsgStart,
NaClHostMsgStart, NaClHostMsgStart,
......
...@@ -67,9 +67,6 @@ void WriteIpcMessageIdAsProtozero(uint32_t message_id, ...@@ -67,9 +67,6 @@ void WriteIpcMessageIdAsProtozero(uint32_t message_id,
case TextInputClientMsgStart: case TextInputClientMsgStart:
message_class = ChromeLegacyIpc::CLASS_TEXT_INPUT_CLIENT; message_class = ChromeLegacyIpc::CLASS_TEXT_INPUT_CLIENT;
break; break;
case PrerenderMsgStart:
message_class = ChromeLegacyIpc::CLASS_PRERENDER;
break;
case ChromotingMsgStart: case ChromotingMsgStart:
message_class = ChromeLegacyIpc::CLASS_CHROMOTING; message_class = ChromeLegacyIpc::CLASS_CHROMOTING;
break; break;
......
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