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

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

Issue 9875026: **NOTFORLANDING** New link rel=prerender API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: patch sets 3-7 against trunk, for combined browsing Created 8 years, 8 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/prerender/prerender_link_manager.h"
9 #include "chrome/browser/prerender/prerender_link_manager_factory.h"
10 #include "chrome/common/prerender_messages.h"
11 #include "content/public/browser/browser_thread.h"
12
13 using content::BrowserThread;
14
15 namespace {
16
17 void OnChannelClosingInUIThread(Profile* profile, int render_process_id) {
18 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
19 prerender::PrerenderLinkManager* prerender_link_manager =
20 prerender::PrerenderLinkManagerFactory::GetForProfile(profile);
21 if (!prerender_link_manager)
22 return;
23 prerender_link_manager->OnChannelClosing(render_process_id);
24 }
25
26 }
27
28 namespace prerender {
29
30 PrerenderMessageFilter::PrerenderMessageFilter(int render_process_id,
31 Profile* profile)
32 : render_process_id_(render_process_id),
33 profile_(profile)
34 {
cbentzel 2012/04/24 15:42:59 Nit: move this up with profile_
gavinp 2012/04/26 23:55:39 Done. NitFromMeToTheUniverse: WebKit and chrome h
35 }
36
37 bool PrerenderMessageFilter::OnMessageReceived(const IPC::Message& message,
38 bool* message_was_ok) {
39 bool handled = true;
40 IPC_BEGIN_MESSAGE_MAP_EX(PrerenderMessageFilter, message, *message_was_ok)
41 IPC_MESSAGE_HANDLER(PrerenderHostMsg_AddPrerender, OnAddPrerender)
42 IPC_MESSAGE_HANDLER(PrerenderHostMsg_CancelPrerender, OnCancelPrerender)
43 IPC_MESSAGE_HANDLER(PrerenderHostMsg_AbandonPrerender, OnAbandonPrerender)
44 IPC_MESSAGE_UNHANDLED(handled = false)
45 IPC_END_MESSAGE_MAP()
46
47 return handled;
48 }
49
50 void PrerenderMessageFilter::OverrideThreadForMessage(
51 const IPC::Message& message, content::BrowserThread::ID* thread) {
52 if (message.type() == PrerenderHostMsg_AddPrerender::ID ||
cbentzel 2012/04/24 15:42:59 What are the lifetime guarantees for both Prerende
gavinp 2012/04/26 23:55:39 At creation, the PrerenderMessageFilter is placed
53 message.type() == PrerenderHostMsg_CancelPrerender::ID ||
54 message.type() == PrerenderHostMsg_AbandonPrerender::ID) {
55 *thread = BrowserThread::UI;
56 }
57 }
58
59 void PrerenderMessageFilter::OnAddPrerender(
60 int prerender_id,
61 const GURL& url,
62 const content::Referrer& referrer,
63 const gfx::Size& size,
64 int render_view_route_id) {
65 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
66 PrerenderLinkManager* prerender_link_manager =
67 PrerenderLinkManagerFactory::GetForProfile(profile_);
68 if (!prerender_link_manager)
69 return;
70 prerender_link_manager->OnAddPrerender(
71 prerender_id, render_process_id_,
72 url, referrer, size, render_view_route_id);
73 }
74
75 void PrerenderMessageFilter::OnCancelPrerender(
76 int prerender_id) {
77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
78 PrerenderLinkManager* prerender_link_manager =
79 PrerenderLinkManagerFactory::GetForProfile(profile_);
80 if (!prerender_link_manager)
81 return;
82 prerender_link_manager->OnCancelPrerender(
83 prerender_id, render_process_id_);
84 }
85
86 void PrerenderMessageFilter::OnAbandonPrerender(
87 int prerender_id) {
88 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
89 PrerenderLinkManager* prerender_link_manager =
90 PrerenderLinkManagerFactory::GetForProfile(profile_);
91 if (!prerender_link_manager)
92 return;
93 prerender_link_manager->OnAbandonPrerender(
94 prerender_id, render_process_id_);
95 }
96
97 void PrerenderMessageFilter::OnChannelClosing() {
98 BrowserThread::PostTask(
99 BrowserThread::UI, FROM_HERE,
100 base::Bind(&OnChannelClosingInUIThread, profile_, render_process_id_));
101 }
102
103 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698