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

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

Issue 10198040: New link rel=prerender api, using WebKit::WebPrerenderingPlatform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remediate to dominich review Created 8 years, 7 months 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/prerender/prerender_message_filter.h"
6
7 #include "base/bind.h"
8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/prerender/prerender_link_manager.h"
10 #include "chrome/browser/prerender/prerender_link_manager_factory.h"
11 #include "chrome/browser/profiles/profile_manager.h"
12 #include "chrome/common/prerender_messages.h"
13 #include "content/public/browser/browser_thread.h"
14
15 using content::BrowserThread;
16
17 namespace {
18
19 void OnChannelClosingInUIThread(Profile* profile, int render_process_id) {
20 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
21 if (!g_browser_process->profile_manager()->IsValidProfile(profile))
22 return;
23 prerender::PrerenderLinkManager* prerender_link_manager =
24 prerender::PrerenderLinkManagerFactory::GetForProfile(profile);
25 if (!prerender_link_manager)
26 return;
27 prerender_link_manager->OnChannelClosing(render_process_id);
28 }
29
30 } // end namespace
31
32 namespace prerender {
33
34 PrerenderMessageFilter::PrerenderMessageFilter(int render_process_id,
35 Profile* profile)
36 : render_process_id_(render_process_id),
37 profile_(profile) {
38 }
39
40 bool PrerenderMessageFilter::OnMessageReceived(const IPC::Message& message,
41 bool* message_was_ok) {
42 bool handled = true;
43 IPC_BEGIN_MESSAGE_MAP_EX(PrerenderMessageFilter, message, *message_was_ok)
44 IPC_MESSAGE_HANDLER(PrerenderHostMsg_AddPrerender, OnAddPrerender)
45 IPC_MESSAGE_HANDLER(PrerenderHostMsg_CancelPrerender, OnCancelPrerender)
46 IPC_MESSAGE_HANDLER(PrerenderHostMsg_AbandonPrerender, OnAbandonPrerender)
47 IPC_MESSAGE_UNHANDLED(handled = false)
48 IPC_END_MESSAGE_MAP()
49
50 return handled;
51 }
52
53 void PrerenderMessageFilter::OverrideThreadForMessage(
54 const IPC::Message& message, content::BrowserThread::ID* thread) {
55 if (message.type() == PrerenderHostMsg_AddPrerender::ID ||
56 message.type() == PrerenderHostMsg_CancelPrerender::ID ||
57 message.type() == PrerenderHostMsg_AbandonPrerender::ID) {
58 *thread = BrowserThread::UI;
59 }
60 }
61
62 PrerenderMessageFilter::~PrerenderMessageFilter() {
63 }
64
65 void PrerenderMessageFilter::OnAddPrerender(
66 int prerender_id,
67 const GURL& url,
68 const content::Referrer& referrer,
69 const gfx::Size& size,
70 int render_view_route_id) {
71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
72 PrerenderLinkManager* prerender_link_manager =
73 PrerenderLinkManagerFactory::GetForProfile(profile_);
74 if (!prerender_link_manager)
75 return;
76 prerender_link_manager->OnAddPrerender(
77 render_process_id_, prerender_id,
78 url, referrer, size, render_view_route_id);
79 }
80
81 void PrerenderMessageFilter::OnCancelPrerender(
82 int prerender_id) {
83 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
84 PrerenderLinkManager* prerender_link_manager =
85 PrerenderLinkManagerFactory::GetForProfile(profile_);
86 if (!prerender_link_manager)
mmenke 2012/04/30 18:35:22 Can this happen?
gavinp 2012/04/30 23:55:39 We return NULL if there's no prerender_manager in
mmenke 2012/05/01 16:23:21 Right. I'd forgotten that we use NULL when disabl
87 return;
88 prerender_link_manager->OnCancelPrerender(
89 prerender_id, render_process_id_);
90 }
91
92 void PrerenderMessageFilter::OnAbandonPrerender(
93 int prerender_id) {
94 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
95 PrerenderLinkManager* prerender_link_manager =
96 PrerenderLinkManagerFactory::GetForProfile(profile_);
97 if (!prerender_link_manager)
98 return;
99 prerender_link_manager->OnAbandonPrerender(
100 prerender_id, render_process_id_);
101 }
102
103 void PrerenderMessageFilter::OnChannelClosing() {
104 BrowserThread::PostTask(
105 BrowserThread::UI, FROM_HERE,
106 base::Bind(&OnChannelClosingInUIThread, profile_, render_process_id_));
107 }
108
109 } // namespace prerender
110
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698