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

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: Comment responses. 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..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.

Powered by Google App Engine
This is Rietveld 408576698