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

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: 80 columns 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 } // 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 PrerenderMessageFilter::~PrerenderMessageFilter() {
41 }
42
43 bool PrerenderMessageFilter::OnMessageReceived(const IPC::Message& message,
44 bool* message_was_ok) {
45 bool handled = true;
46 IPC_BEGIN_MESSAGE_MAP_EX(PrerenderMessageFilter, message, *message_was_ok)
47 IPC_MESSAGE_HANDLER(PrerenderHostMsg_AddLinkRelPrerender, OnAddPrerender)
48 IPC_MESSAGE_HANDLER(
49 PrerenderHostMsg_CancelLinkRelPrerender, OnCancelPrerender)
50 IPC_MESSAGE_HANDLER(
51 PrerenderHostMsg_AbandonLinkRelPrerender, OnAbandonPrerender)
52 IPC_MESSAGE_UNHANDLED(handled = false)
53 IPC_END_MESSAGE_MAP()
54
55 return handled;
56 }
57
58 void PrerenderMessageFilter::OverrideThreadForMessage(
59 const IPC::Message& message, content::BrowserThread::ID* thread) {
60 if (message.type() == PrerenderHostMsg_AddLinkRelPrerender::ID ||
61 message.type() == PrerenderHostMsg_CancelLinkRelPrerender::ID ||
62 message.type() == PrerenderHostMsg_AbandonLinkRelPrerender::ID) {
63 *thread = BrowserThread::UI;
64 }
65 }
66
67 void PrerenderMessageFilter::OnChannelClosing() {
68 BrowserThread::PostTask(
69 BrowserThread::UI, FROM_HERE,
70 base::Bind(&OnChannelClosingInUIThread, profile_, render_process_id_));
71 }
72
73 void PrerenderMessageFilter::OnAddPrerender(
74 int prerender_id,
75 const GURL& url,
76 const content::Referrer& referrer,
77 const gfx::Size& size,
78 int render_view_route_id) {
79 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
80 PrerenderLinkManager* prerender_link_manager =
81 PrerenderLinkManagerFactory::GetForProfile(profile_);
82 if (!prerender_link_manager)
83 return;
84 prerender_link_manager->OnAddPrerender(
85 render_process_id_, prerender_id,
86 url, referrer, size, render_view_route_id);
87 }
88
89 void PrerenderMessageFilter::OnCancelPrerender(
90 int prerender_id) {
91 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
92 PrerenderLinkManager* prerender_link_manager =
93 PrerenderLinkManagerFactory::GetForProfile(profile_);
94 if (!prerender_link_manager)
95 return;
96 prerender_link_manager->OnCancelPrerender(render_process_id_, prerender_id);
97 }
98
99 void PrerenderMessageFilter::OnAbandonPrerender(
100 int prerender_id) {
101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
102 PrerenderLinkManager* prerender_link_manager =
103 PrerenderLinkManagerFactory::GetForProfile(profile_);
104 if (!prerender_link_manager)
105 return;
106 prerender_link_manager->OnAbandonPrerender(render_process_id_, prerender_id);
107 }
108
109 } // namespace prerender
110
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_message_filter.h ('k') | chrome/browser/prerender/prerender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698