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..a250b1eea042e95b0edaebf1a2373ec1a9ac566d |
| --- /dev/null |
| +++ b/chrome/browser/prerender/prerender_message_filter.cc |
| @@ -0,0 +1,61 @@ |
| +// 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) { |
| +} |
| + |
| +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) { |
|
cbentzel
2011/05/13 12:00:28
DCHECK that this on the UI thread? You'll get that
dominich
2011/05/13 15:05:33
Done.
|
| + // Destroy all prerenders for this RenderViewHost. |
| + // The print query will be destroyed by the TabContents destruction. |
|
cbentzel
2011/05/13 14:36:21
BUG: The PrerenderContents may have gone away at t
dominich
2011/05/13 15:05:33
Done.
|
| + prerender_manager_->DestroyPreloadForChildRouteIdPair( |
| + std::make_pair(browser_render_process_host_->id(), params.routing_id), |
| + FINAL_STATUS_WINDOW_PRINT); |
| + |
| + // Shamelessly ripped from PrintViewManager to clean up the print worker. |
|
cbentzel
2011/05/13 12:00:28
Should this be abstracted to a separate function?
dominich
2011/05/13 15:05:33
Done.
|
| + scoped_refptr<printing::PrinterQuery> printer_query; |
| + g_browser_process->print_job_manager()->PopPrinterQuery(params.cookie, |
| + &printer_query); |
| + if (printer_query.get()) { |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + NewRunnableMethod(printer_query.get(), |
| + &printing::PrinterQuery::StopWorker)); |
| + } |
| +} |
| + |
| +} |