Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(477)

Side by Side Diff: chrome/browser/prerender/prerender_message_filter.cc

Issue 2455653005: Revert "Revert of [NoStatePrefetch] Kill renderer after preload scanning (patchset #12 id:240001 of… (Closed)
Patch Set: rebased Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prerender/prerender_message_filter.h" 5 #include "chrome/browser/prerender/prerender_message_filter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/singleton.h" 9 #include "base/memory/singleton.h"
10 #include "chrome/browser/prerender/prerender_final_status.h"
10 #include "chrome/browser/prerender/prerender_link_manager.h" 11 #include "chrome/browser/prerender/prerender_link_manager.h"
11 #include "chrome/browser/prerender/prerender_link_manager_factory.h" 12 #include "chrome/browser/prerender/prerender_link_manager_factory.h"
13 #include "chrome/browser/prerender/prerender_manager_factory.h"
12 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/common/prerender_messages.h" 15 #include "chrome/common/prerender_messages.h"
14 #include "components/keyed_service/content/browser_context_keyed_service_shutdow n_notifier_factory.h" 16 #include "components/keyed_service/content/browser_context_keyed_service_shutdow n_notifier_factory.h"
15 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
16 18
17 using content::BrowserThread; 19 using content::BrowserThread;
18 20
19 namespace prerender { 21 namespace prerender {
20 22
21 namespace { 23 namespace {
(...skipping 16 matching lines...) Expand all
38 ~ShutdownNotifierFactory() override {} 40 ~ShutdownNotifierFactory() override {}
39 41
40 DISALLOW_COPY_AND_ASSIGN(ShutdownNotifierFactory); 42 DISALLOW_COPY_AND_ASSIGN(ShutdownNotifierFactory);
41 }; 43 };
42 44
43 } // namespace 45 } // namespace
44 46
45 PrerenderMessageFilter::PrerenderMessageFilter(int render_process_id, 47 PrerenderMessageFilter::PrerenderMessageFilter(int render_process_id,
46 Profile* profile) 48 Profile* profile)
47 : BrowserMessageFilter(PrerenderMsgStart), 49 : BrowserMessageFilter(PrerenderMsgStart),
50 prerender_manager_(
51 PrerenderManagerFactory::GetForBrowserContext(profile)),
48 render_process_id_(render_process_id), 52 render_process_id_(render_process_id),
49 prerender_link_manager_( 53 prerender_link_manager_(
50 PrerenderLinkManagerFactory::GetForProfile(profile)) { 54 PrerenderLinkManagerFactory::GetForProfile(profile)) {
51 shutdown_notifier_ = 55 shutdown_notifier_ =
52 ShutdownNotifierFactory::GetInstance()->Get(profile)->Subscribe( 56 ShutdownNotifierFactory::GetInstance()->Get(profile)->Subscribe(
53 base::Bind(&PrerenderMessageFilter::ShutdownOnUIThread, 57 base::Bind(&PrerenderMessageFilter::ShutdownOnUIThread,
54 base::Unretained(this))); 58 base::Unretained(this)));
55 } 59 }
56 60
57 PrerenderMessageFilter::~PrerenderMessageFilter() { 61 PrerenderMessageFilter::~PrerenderMessageFilter() {
58 DCHECK_CURRENTLY_ON(BrowserThread::UI); 62 DCHECK_CURRENTLY_ON(BrowserThread::UI);
59 } 63 }
60 64
61 // static 65 // static
62 void PrerenderMessageFilter::EnsureShutdownNotifierFactoryBuilt() { 66 void PrerenderMessageFilter::EnsureShutdownNotifierFactoryBuilt() {
63 ShutdownNotifierFactory::GetInstance(); 67 ShutdownNotifierFactory::GetInstance();
64 } 68 }
65 69
66 bool PrerenderMessageFilter::OnMessageReceived(const IPC::Message& message) { 70 bool PrerenderMessageFilter::OnMessageReceived(const IPC::Message& message) {
67 bool handled = true; 71 bool handled = true;
68 IPC_BEGIN_MESSAGE_MAP(PrerenderMessageFilter, message) 72 IPC_BEGIN_MESSAGE_MAP(PrerenderMessageFilter, message)
69 IPC_MESSAGE_HANDLER(PrerenderHostMsg_AddLinkRelPrerender, OnAddPrerender) 73 IPC_MESSAGE_HANDLER(PrerenderHostMsg_AddLinkRelPrerender, OnAddPrerender)
70 IPC_MESSAGE_HANDLER( 74 IPC_MESSAGE_HANDLER(
71 PrerenderHostMsg_CancelLinkRelPrerender, OnCancelPrerender) 75 PrerenderHostMsg_CancelLinkRelPrerender, OnCancelPrerender)
72 IPC_MESSAGE_HANDLER( 76 IPC_MESSAGE_HANDLER(
73 PrerenderHostMsg_AbandonLinkRelPrerender, OnAbandonPrerender) 77 PrerenderHostMsg_AbandonLinkRelPrerender, OnAbandonPrerender)
78 IPC_MESSAGE_HANDLER(PrerenderHostMsg_PrefetchFinished, OnPrefetchFinished)
74 IPC_MESSAGE_UNHANDLED(handled = false) 79 IPC_MESSAGE_UNHANDLED(handled = false)
75 IPC_END_MESSAGE_MAP() 80 IPC_END_MESSAGE_MAP()
76 81
77 return handled; 82 return handled;
78 } 83 }
79 84
80 void PrerenderMessageFilter::OverrideThreadForMessage( 85 void PrerenderMessageFilter::OverrideThreadForMessage(
81 const IPC::Message& message, content::BrowserThread::ID* thread) { 86 const IPC::Message& message, content::BrowserThread::ID* thread) {
82 if (message.type() == PrerenderHostMsg_AddLinkRelPrerender::ID || 87 if (message.type() == PrerenderHostMsg_AddLinkRelPrerender::ID ||
83 message.type() == PrerenderHostMsg_CancelLinkRelPrerender::ID || 88 message.type() == PrerenderHostMsg_CancelLinkRelPrerender::ID ||
84 message.type() == PrerenderHostMsg_AbandonLinkRelPrerender::ID) { 89 message.type() == PrerenderHostMsg_AbandonLinkRelPrerender::ID ||
90 message.type() == PrerenderHostMsg_PrefetchFinished::ID) {
85 *thread = BrowserThread::UI; 91 *thread = BrowserThread::UI;
86 } 92 }
87 } 93 }
88 94
89 void PrerenderMessageFilter::OnChannelClosing() { 95 void PrerenderMessageFilter::OnChannelClosing() {
90 BrowserThread::PostTask( 96 BrowserThread::PostTask(
91 BrowserThread::UI, FROM_HERE, 97 BrowserThread::UI, FROM_HERE,
92 base::Bind(&PrerenderMessageFilter::OnChannelClosingInUIThread, this)); 98 base::Bind(&PrerenderMessageFilter::OnChannelClosingInUIThread, this));
93 } 99 }
94 100
(...skipping 26 matching lines...) Expand all
121 } 127 }
122 128
123 void PrerenderMessageFilter::OnAbandonPrerender( 129 void PrerenderMessageFilter::OnAbandonPrerender(
124 int prerender_id) { 130 int prerender_id) {
125 DCHECK_CURRENTLY_ON(BrowserThread::UI); 131 DCHECK_CURRENTLY_ON(BrowserThread::UI);
126 if (!prerender_link_manager_) 132 if (!prerender_link_manager_)
127 return; 133 return;
128 prerender_link_manager_->OnAbandonPrerender(render_process_id_, prerender_id); 134 prerender_link_manager_->OnAbandonPrerender(render_process_id_, prerender_id);
129 } 135 }
130 136
137 void PrerenderMessageFilter::OnPrefetchFinished() {
138 DCHECK_CURRENTLY_ON(BrowserThread::UI);
139 DCHECK(prerender_manager_);
140 // Kill the process doing the prefetch. Only one prefetch per renderer is
141 // possible, also prefetches are not shared with other renderer processes.
142 if (prerender_manager_) {
143 PrerenderContents* prerender_contents =
144 prerender_manager_->GetPrerenderContentsForProcess(render_process_id_);
145 if (prerender_contents)
146 prerender_contents->Destroy(FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
147 }
148 }
149
131 void PrerenderMessageFilter::ShutdownOnUIThread() { 150 void PrerenderMessageFilter::ShutdownOnUIThread() {
132 prerender_link_manager_ = nullptr; 151 prerender_link_manager_ = nullptr;
133 shutdown_notifier_.reset(); 152 shutdown_notifier_.reset();
134 } 153 }
135 154
136 void PrerenderMessageFilter::OnChannelClosingInUIThread() { 155 void PrerenderMessageFilter::OnChannelClosingInUIThread() {
137 DCHECK_CURRENTLY_ON(BrowserThread::UI); 156 DCHECK_CURRENTLY_ON(BrowserThread::UI);
138 if (!prerender_link_manager_) 157 if (!prerender_link_manager_)
139 return; 158 return;
140 prerender_link_manager_->OnChannelClosing(render_process_id_); 159 prerender_link_manager_->OnChannelClosing(render_process_id_);
141 } 160 }
142 161
143 } // namespace prerender 162 } // namespace prerender
144 163
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698