Index: chrome/renderer/render_view.cc |
=================================================================== |
--- chrome/renderer/render_view.cc (revision 71495) |
+++ chrome/renderer/render_view.cc (working copy) |
@@ -981,6 +981,9 @@ |
IPC_MESSAGE_HANDLER(ViewMsg_CaptureSnapshot, OnCaptureSnapshot) |
IPC_MESSAGE_HANDLER(ViewMsg_PrintPages, OnPrintPages) |
IPC_MESSAGE_HANDLER(ViewMsg_PrintingDone, OnPrintingDone) |
+ IPC_MESSAGE_HANDLER(ViewMsg_PrintPreview, OnPrintPreview) |
+ IPC_MESSAGE_HANDLER(ViewMsg_PrintNodeUnderContextMenu, |
+ OnPrintNodeUnderContextMenu) |
IPC_MESSAGE_HANDLER(ViewMsg_Navigate, OnNavigate) |
IPC_MESSAGE_HANDLER(ViewMsg_Stop, OnStop) |
IPC_MESSAGE_HANDLER(ViewMsg_ReloadFrame, OnReloadFrame) |
@@ -1109,9 +1112,9 @@ |
#if defined(OS_MACOSX) |
IPC_MESSAGE_HANDLER(ViewMsg_SelectPopupMenuItem, OnSelectPopupMenuItem) |
#endif |
- IPC_MESSAGE_HANDLER(ViewMsg_PrintPreview, OnPrintPreview) |
IPC_MESSAGE_HANDLER(ViewMsg_JavaScriptStressTestControl, |
OnJavaScriptStressTestControl) |
+ IPC_MESSAGE_HANDLER(ViewMsg_ContextMenuClosed, OnContextMenuClosed) |
// Have the super handle all other messages. |
IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) |
@@ -1193,6 +1196,18 @@ |
} |
} |
+void RenderView::OnPrintNodeUnderContextMenu() { |
+ if (context_menu_node_.isNull()) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ // Make a copy of the node, since we will do a sync call to the browser and |
+ // during that time OnContextMenuClosed might reset context_menu_node_. |
+ WebNode context_menu_node(context_menu_node_); |
+ GetPrintWebViewHelper()->PrintNode(&context_menu_node, false, false); |
+} |
+ |
void RenderView::CapturePageInfo(int load_id, bool preliminary_capture) { |
if (load_id != page_id_) |
return; // this capture call is no longer relevant due to navigation |
@@ -2513,6 +2528,7 @@ |
// data encoded images. We should have a way to save them. |
if (params.src_url.spec().size() > chrome::kMaxURLChars) |
params.src_url = GURL(); |
+ context_menu_node_ = data.node; |
Send(new ViewHostMsg_ContextMenu(routing_id_, params)); |
} |
@@ -5410,10 +5426,13 @@ |
bool script_initiated, |
bool is_preview) { |
DCHECK(frame); |
- if (print_helper_.get() == NULL) { |
+ GetPrintWebViewHelper()->PrintFrame(frame, script_initiated, is_preview); |
+} |
+ |
+PrintWebViewHelper* RenderView::GetPrintWebViewHelper() { |
+ if (print_helper_.get() == NULL) |
print_helper_.reset(new PrintWebViewHelper(this)); |
- } |
- print_helper_->Print(frame, script_initiated, is_preview); |
+ return print_helper_.get(); |
} |
void RenderView::OnSetEditCommandsForNextKeyEvent( |
@@ -5803,3 +5822,7 @@ |
v8::Testing::PrepareStressRun(param); |
} |
} |
+ |
+void RenderView::OnContextMenuClosed() { |
+ context_menu_node_.reset(); |
+} |