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

Side by Side Diff: chrome/renderer/print_web_view_helper.cc

Issue 8136027: Print Preview: Make print preview tab modal. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rename ReloadCloudPrintersList to ReloadPrintersList Created 9 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/print_web_view_helper.h" 5 #include "chrome/renderer/print_web_view_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/message_loop.h"
11 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
12 #include "base/string_number_conversions.h" 13 #include "base/string_number_conversions.h"
13 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
14 #include "chrome/common/chrome_switches.h" 15 #include "chrome/common/chrome_switches.h"
15 #include "chrome/common/print_messages.h" 16 #include "chrome/common/print_messages.h"
16 #include "chrome/common/render_messages.h" 17 #include "chrome/common/render_messages.h"
17 #include "chrome/common/url_constants.h" 18 #include "chrome/common/url_constants.h"
18 #include "chrome/renderer/prerender/prerender_helper.h" 19 #include "chrome/renderer/prerender/prerender_helper.h"
19 #include "content/public/renderer/render_thread.h" 20 #include "content/public/renderer/render_thread.h"
20 #include "content/public/renderer/render_view.h" 21 #include "content/public/renderer/render_view.h"
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 if (prerender::PrerenderHelper::IsPrerendering(render_view())) { 461 if (prerender::PrerenderHelper::IsPrerendering(render_view())) {
461 Send(new ChromeViewHostMsg_CancelPrerenderForPrinting(routing_id())); 462 Send(new ChromeViewHostMsg_CancelPrerenderForPrinting(routing_id()));
462 return; 463 return;
463 } 464 }
464 465
465 if (IsScriptInitiatedPrintTooFrequent(frame)) 466 if (IsScriptInitiatedPrintTooFrequent(frame))
466 return; 467 return;
467 IncrementScriptedPrintCount(); 468 IncrementScriptedPrintCount();
468 469
469 if (is_preview_) { 470 if (is_preview_) {
471 // Ignore window.print() if this view is already doing window.print().
472 if (print_preview_context_.message_loop())
473 return;
474
470 print_preview_context_.InitWithFrame(frame); 475 print_preview_context_.InitWithFrame(frame);
471 RequestPrintPreview(); 476 RequestPrintPreview();
477
478 WebView::willEnterModalLoop();
479 MessageLoop* message_loop = MessageLoop::current();
480 print_preview_context_.set_message_loop(message_loop);
481 bool old_state = message_loop->NestableTasksAllowed();
482 message_loop->SetNestableTasksAllowed(true);
483 message_loop->Run();
484 message_loop->SetNestableTasksAllowed(old_state);
485 WebView::didExitModalLoop();
472 } else { 486 } else {
473 Print(frame, WebNode()); 487 Print(frame, WebNode());
474 } 488 }
475 } 489 }
476 490
477 bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { 491 bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) {
478 bool handled = true; 492 bool handled = true;
479 IPC_BEGIN_MESSAGE_MAP(PrintWebViewHelper, message) 493 IPC_BEGIN_MESSAGE_MAP(PrintWebViewHelper, message)
480 IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages) 494 IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages)
481 IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog) 495 IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog)
482 IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview) 496 IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview)
483 IPC_MESSAGE_HANDLER(PrintMsg_PrintNodeUnderContextMenu, 497 IPC_MESSAGE_HANDLER(PrintMsg_PrintNodeUnderContextMenu,
484 OnPrintNodeUnderContextMenu) 498 OnPrintNodeUnderContextMenu)
485 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview) 499 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview)
486 IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview) 500 IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview)
487 IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone) 501 IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone)
488 IPC_MESSAGE_HANDLER(PrintMsg_ResetScriptedPrintCount, 502 IPC_MESSAGE_HANDLER(PrintMsg_ResetScriptedPrintCount,
489 ResetScriptedPrintCount) 503 ResetScriptedPrintCount)
490 IPC_MESSAGE_HANDLER(PrintMsg_PreviewPrintingRequestCancelled, 504 IPC_MESSAGE_HANDLER(PrintMsg_PreviewPrintingRequestCancelled,
491 DisplayPrintJobError) 505 DisplayPrintJobError)
506 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreviewDone,
507 OnPrintPreviewDone)
492 IPC_MESSAGE_UNHANDLED(handled = false) 508 IPC_MESSAGE_UNHANDLED(handled = false)
493 IPC_END_MESSAGE_MAP() 509 IPC_END_MESSAGE_MAP()
494 return handled; 510 return handled;
495 } 511 }
496 512
497 void PrintWebViewHelper::OnPrintForPrintPreview( 513 void PrintWebViewHelper::OnPrintForPrintPreview(
498 const DictionaryValue& job_settings) { 514 const DictionaryValue& job_settings) {
499 DCHECK(is_preview_); 515 DCHECK(is_preview_);
500 // If still not finished with earlier print request simply ignore. 516 // If still not finished with earlier print request simply ignore.
501 if (print_web_view_) 517 if (print_web_view_)
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 void PrintWebViewHelper::DisplayPrintJobError() { 1268 void PrintWebViewHelper::DisplayPrintJobError() {
1253 WebView* web_view = print_web_view_; 1269 WebView* web_view = print_web_view_;
1254 if (!web_view) 1270 if (!web_view)
1255 web_view = render_view()->GetWebView(); 1271 web_view = render_view()->GetWebView();
1256 1272
1257 render_view()->RunModalAlertDialog( 1273 render_view()->RunModalAlertDialog(
1258 web_view->mainFrame(), 1274 web_view->mainFrame(),
1259 l10n_util::GetStringUTF16(IDS_PRINT_SPOOL_FAILED_ERROR_TEXT)); 1275 l10n_util::GetStringUTF16(IDS_PRINT_SPOOL_FAILED_ERROR_TEXT));
1260 } 1276 }
1261 1277
1278 void PrintWebViewHelper::OnPrintPreviewDone() {
1279 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.
1280 if (message_loop) {
1281 MessageLoop* message_loop = print_preview_context_.message_loop();
1282 print_preview_context_.set_message_loop(NULL);
1283 message_loop->QuitNow();
1284 }
1285 }
1286
1262 void PrintWebViewHelper::RequestPrintPreview() { 1287 void PrintWebViewHelper::RequestPrintPreview() {
1263 old_print_pages_params_.reset(); 1288 old_print_pages_params_.reset();
1264 Send(new PrintHostMsg_RequestPrintPreview(routing_id())); 1289 Send(new PrintHostMsg_RequestPrintPreview(routing_id()));
1265 } 1290 }
1266 1291
1267 bool PrintWebViewHelper::CheckForCancel() { 1292 bool PrintWebViewHelper::CheckForCancel() {
1268 bool cancel = false; 1293 bool cancel = false;
1269 Send(new PrintHostMsg_CheckForCancel( 1294 Send(new PrintHostMsg_CheckForCancel(
1270 routing_id(), 1295 routing_id(),
1271 print_pages_params_->params.preview_ui_addr, 1296 print_pages_params_->params.preview_ui_addr,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 preview_page_params.page_number = page_number; 1335 preview_page_params.page_number = page_number;
1311 preview_page_params.preview_request_id = 1336 preview_page_params.preview_request_id =
1312 print_pages_params_->params.preview_request_id; 1337 print_pages_params_->params.preview_request_id;
1313 1338
1314 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); 1339 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params));
1315 return true; 1340 return true;
1316 } 1341 }
1317 1342
1318 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() 1343 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext()
1319 : frame_(NULL), 1344 : frame_(NULL),
1345 message_loop_(NULL),
1320 total_page_count_(0), 1346 total_page_count_(0),
1321 current_page_index_(0), 1347 current_page_index_(0),
1322 generate_draft_pages_(true), 1348 generate_draft_pages_(true),
1323 print_ready_metafile_page_count_(0), 1349 print_ready_metafile_page_count_(0),
1324 error_(PREVIEW_ERROR_NONE), 1350 error_(PREVIEW_ERROR_NONE),
1325 state_(UNINITIALIZED) { 1351 state_(UNINITIALIZED) {
1326 } 1352 }
1327 1353
1328 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() { 1354 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() {
1329 } 1355 }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1483 void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages( 1509 void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages(
1484 bool generate_draft_pages) { 1510 bool generate_draft_pages) {
1485 generate_draft_pages_ = generate_draft_pages; 1511 generate_draft_pages_ = generate_draft_pages;
1486 } 1512 }
1487 1513
1488 void PrintWebViewHelper::PrintPreviewContext::set_error( 1514 void PrintWebViewHelper::PrintPreviewContext::set_error(
1489 enum PrintPreviewErrorBuckets error) { 1515 enum PrintPreviewErrorBuckets error) {
1490 error_ = error; 1516 error_ = error;
1491 } 1517 }
1492 1518
1519 void PrintWebViewHelper::PrintPreviewContext::set_message_loop(
1520 MessageLoop* message_loop) {
1521 CHECK(!message_loop || !message_loop_);
1522 message_loop_ = message_loop;
1523 }
1524
1493 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const { 1525 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const {
1494 return frame_; 1526 return frame_;
1495 } 1527 }
1496 1528
1497 const WebKit::WebNode& PrintWebViewHelper::PrintPreviewContext::node() const { 1529 const WebKit::WebNode& PrintWebViewHelper::PrintPreviewContext::node() const {
1498 return node_; 1530 return node_;
1499 } 1531 }
1500 1532
1533 MessageLoop* PrintWebViewHelper::PrintPreviewContext::message_loop() const {
1534 return message_loop_;
1535 }
1536
1501 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const { 1537 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const {
1502 DCHECK(IsReadyToRender()); 1538 DCHECK(IsReadyToRender());
1503 return total_page_count_; 1539 return total_page_count_;
1504 } 1540 }
1505 1541
1506 bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() { 1542 bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() {
1507 return generate_draft_pages_; 1543 return generate_draft_pages_;
1508 } 1544 }
1509 1545
1510 printing::PreviewMetafile* 1546 printing::PreviewMetafile*
(...skipping 14 matching lines...) Expand all
1525 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { 1561 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const {
1526 return prep_frame_view_->GetPrintCanvasSize(); 1562 return prep_frame_view_->GetPrintCanvasSize();
1527 } 1563 }
1528 1564
1529 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1565 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1530 prep_frame_view_.reset(); 1566 prep_frame_view_.reset();
1531 metafile_.reset(); 1567 metafile_.reset();
1532 pages_to_render_.clear(); 1568 pages_to_render_.clear();
1533 error_ = PREVIEW_ERROR_NONE; 1569 error_ = PREVIEW_ERROR_NONE;
1534 } 1570 }
OLDNEW
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | chrome/test/base/test_tab_strip_model_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698