Chromium Code Reviews| Index: chrome/renderer/print_web_view_helper.cc |
| =================================================================== |
| --- chrome/renderer/print_web_view_helper.cc (revision 105826) |
| +++ chrome/renderer/print_web_view_helper.cc (working copy) |
| @@ -8,6 +8,7 @@ |
| #include "base/command_line.h" |
| #include "base/logging.h" |
| +#include "base/message_loop.h" |
| #include "base/metrics/histogram.h" |
| #include "base/string_number_conversions.h" |
| #include "base/utf_string_conversions.h" |
| @@ -467,8 +468,21 @@ |
| IncrementScriptedPrintCount(); |
| if (is_preview_) { |
| + // Ignore window.print() if this view is already doing window.print(). |
| + if (print_preview_context_.message_loop()) |
| + return; |
| + |
| print_preview_context_.InitWithFrame(frame); |
| RequestPrintPreview(); |
| + |
| + WebView::willEnterModalLoop(); |
| + MessageLoop* message_loop = MessageLoop::current(); |
| + print_preview_context_.set_message_loop(message_loop); |
| + bool old_state = message_loop->NestableTasksAllowed(); |
| + message_loop->SetNestableTasksAllowed(true); |
| + message_loop->Run(); |
| + message_loop->SetNestableTasksAllowed(old_state); |
| + WebView::didExitModalLoop(); |
| } else { |
| Print(frame, WebNode()); |
| } |
| @@ -489,6 +503,8 @@ |
| ResetScriptedPrintCount) |
| IPC_MESSAGE_HANDLER(PrintMsg_PreviewPrintingRequestCancelled, |
| DisplayPrintJobError) |
| + IPC_MESSAGE_HANDLER(PrintMsg_PrintPreviewDone, |
| + OnPrintPreviewDone) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -1259,6 +1275,15 @@ |
| l10n_util::GetStringUTF16(IDS_PRINT_SPOOL_FAILED_ERROR_TEXT)); |
| } |
| +void PrintWebViewHelper::OnPrintPreviewDone() { |
| + MessageLoop* message_loop = print_preview_context_.message_loop(); |
|
darin (slow to review)
2011/10/17 19:41:39
why do you need the MessageLoop member here? just
Lei Zhang
2011/10/17 20:07:06
Done.
|
| + if (message_loop) { |
| + MessageLoop* message_loop = print_preview_context_.message_loop(); |
| + print_preview_context_.set_message_loop(NULL); |
| + message_loop->QuitNow(); |
| + } |
| +} |
| + |
| void PrintWebViewHelper::RequestPrintPreview() { |
| old_print_pages_params_.reset(); |
| Send(new PrintHostMsg_RequestPrintPreview(routing_id())); |
| @@ -1317,6 +1342,7 @@ |
| PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() |
| : frame_(NULL), |
| + message_loop_(NULL), |
| total_page_count_(0), |
| current_page_index_(0), |
| generate_draft_pages_(true), |
| @@ -1490,6 +1516,12 @@ |
| error_ = error; |
| } |
| +void PrintWebViewHelper::PrintPreviewContext::set_message_loop( |
| + MessageLoop* message_loop) { |
| + CHECK(!message_loop || !message_loop_); |
| + message_loop_ = message_loop; |
| +} |
| + |
| WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const { |
| return frame_; |
| } |
| @@ -1498,6 +1530,10 @@ |
| return node_; |
| } |
| +MessageLoop* PrintWebViewHelper::PrintPreviewContext::message_loop() const { |
| + return message_loop_; |
| +} |
| + |
| int PrintWebViewHelper::PrintPreviewContext::total_page_count() const { |
| DCHECK(IsReadyToRender()); |
| return total_page_count_; |