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

Unified Diff: chrome/browser/prerender/prerender_message_filter.cc

Issue 7015026: Cancel prerenders for pages that call window.print() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Missed a data file. Created 9 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 side-by-side diff with in-line comments
Download patch
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));
+ }
+}
+
+}

Powered by Google App Engine
This is Rietveld 408576698