Chromium Code Reviews| Index: chrome/browser/prerender/prerender_message_filter.cc |
| diff --git a/chrome/browser/prerender/prerender_message_filter.cc b/chrome/browser/prerender/prerender_message_filter.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..dece2325af9636039e32ef06903a3771d86ecdf8 |
| --- /dev/null |
| +++ b/chrome/browser/prerender/prerender_message_filter.cc |
| @@ -0,0 +1,58 @@ |
| +// Copyright (c) 2011 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/browser_process.h" |
| +#include "chrome/browser/prerender/prerender_final_status.h" |
| +#include "chrome/browser/prerender/prerender_manager.h" |
| +#include "chrome/browser/printing/print_job_manager.h" |
| +#include "chrome/browser/printing/printer_query.h" |
| +#include "chrome/common/print_messages.h" |
| +#include "content/browser/renderer_host/browser_render_process_host.h" |
| + |
| +namespace prerender { |
| + |
| +PrerenderMessageFilter::PrerenderMessageFilter( |
| + BrowserRenderProcessHost* browser_render_process_host, |
| + PrerenderManager* prerender_manager) |
| + : browser_render_process_host_(browser_render_process_host), |
| + prerender_manager_(prerender_manager->AsWeakPtr()) { |
|
cbentzel
2011/05/13 15:35:33
Is this created on the UI thread? If not, you'll n
dominich
2011/05/13 16:25:08
Added a DCHECK to make sure.
|
| +} |
| + |
| +void PrerenderMessageFilter::OverrideThreadForMessage( |
| + const IPC::Message& message, BrowserThread::ID* thread) { |
| + if (message.type() == PrintHostMsg_ScriptedPrint::ID) |
| + *thread = BrowserThread::UI; |
| +} |
| + |
| +bool PrerenderMessageFilter::OnMessageReceived(const IPC::Message& message, |
| + bool* message_was_ok) { |
| + bool handled = true; |
| + IPC_BEGIN_MESSAGE_MAP_EX(PrerenderMessageFilter, message, *message_was_ok) |
| + IPC_MESSAGE_HANDLER(PrintHostMsg_ScriptedPrint, OnScriptedPrint) |
| + IPC_MESSAGE_UNHANDLED(handled = false) |
| + IPC_END_MESSAGE_MAP() |
| + return handled; |
| +} |
| + |
| +void PrerenderMessageFilter::OnScriptedPrint( |
| + const PrintHostMsg_ScriptedPrint_Params& params, |
| + PrintMsg_PrintPages_Params* settings) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + if (!prerender_manager_) |
| + return; |
| + |
| + // Destroy all prerenders for this RenderViewHost. |
| + // The print query will be destroyed by the TabContents destruction. |
| + if (prerender_manager_->DestroyPreloadForChildRouteIdPair( |
| + std::make_pair(browser_render_process_host_->id(), params.routing_id), |
| + FINAL_STATUS_WINDOW_PRINT)) { |
| + // Clean up the print worker. |
| + g_browser_process->print_job_manager()->PopAndStopPrinterQuery( |
| + params.cookie); |
| + } |
| +} |
| + |
| +} |
|
cbentzel
2011/05/13 15:35:33
Nit: add // namespace prerender
dominich
2011/05/13 16:25:08
Done.
|