| Index: chrome/renderer/print_web_view_helper.cc
|
| ===================================================================
|
| --- chrome/renderer/print_web_view_helper.cc (revision 105366)
|
| +++ 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"
|
| @@ -533,8 +534,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());
|
| }
|
| @@ -555,6 +569,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;
|
| @@ -1321,6 +1337,15 @@
|
| l10n_util::GetStringUTF16(IDS_PRINT_SPOOL_FAILED_ERROR_TEXT));
|
| }
|
|
|
| +void PrintWebViewHelper::OnPrintPreviewDone() {
|
| + MessageLoop* message_loop = print_preview_context_.message_loop();
|
| + 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()));
|
| @@ -1379,6 +1404,7 @@
|
|
|
| PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext()
|
| : frame_(NULL),
|
| + message_loop_(NULL),
|
| total_page_count_(0),
|
| current_page_index_(0),
|
| generate_draft_pages_(true),
|
| @@ -1552,6 +1578,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_;
|
| }
|
| @@ -1560,6 +1592,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_;
|
|
|