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

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: address preview tab navigation, cancelling print to pdf issues 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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 if (prerender::PrerenderHelper::IsPrerendering(render_view())) { 527 if (prerender::PrerenderHelper::IsPrerendering(render_view())) {
527 Send(new ChromeViewHostMsg_CancelPrerenderForPrinting(routing_id())); 528 Send(new ChromeViewHostMsg_CancelPrerenderForPrinting(routing_id()));
528 return; 529 return;
529 } 530 }
530 531
531 if (IsScriptInitiatedPrintTooFrequent(frame)) 532 if (IsScriptInitiatedPrintTooFrequent(frame))
532 return; 533 return;
533 IncrementScriptedPrintCount(); 534 IncrementScriptedPrintCount();
534 535
535 if (is_preview_) { 536 if (is_preview_) {
537 // Ignore window.print() if this view is already doing window.print().
538 if (print_preview_context_.message_loop())
539 return;
540
536 print_preview_context_.InitWithFrame(frame); 541 print_preview_context_.InitWithFrame(frame);
537 RequestPrintPreview(); 542 RequestPrintPreview();
543
544 WebView::willEnterModalLoop();
545 MessageLoop* message_loop = MessageLoop::current();
546 print_preview_context_.set_message_loop(message_loop);
547 bool old_state = message_loop->NestableTasksAllowed();
548 message_loop->SetNestableTasksAllowed(true);
549 message_loop->Run();
550 message_loop->SetNestableTasksAllowed(old_state);
551 WebView::didExitModalLoop();
538 } else { 552 } else {
539 Print(frame, WebNode()); 553 Print(frame, WebNode());
540 } 554 }
541 } 555 }
542 556
543 bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { 557 bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) {
544 bool handled = true; 558 bool handled = true;
545 IPC_BEGIN_MESSAGE_MAP(PrintWebViewHelper, message) 559 IPC_BEGIN_MESSAGE_MAP(PrintWebViewHelper, message)
546 IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages) 560 IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages)
547 IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog) 561 IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog)
548 IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview) 562 IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview)
549 IPC_MESSAGE_HANDLER(PrintMsg_PrintNodeUnderContextMenu, 563 IPC_MESSAGE_HANDLER(PrintMsg_PrintNodeUnderContextMenu,
550 OnPrintNodeUnderContextMenu) 564 OnPrintNodeUnderContextMenu)
551 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview) 565 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview)
552 IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview) 566 IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview)
553 IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone) 567 IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone)
554 IPC_MESSAGE_HANDLER(PrintMsg_ResetScriptedPrintCount, 568 IPC_MESSAGE_HANDLER(PrintMsg_ResetScriptedPrintCount,
555 ResetScriptedPrintCount) 569 ResetScriptedPrintCount)
556 IPC_MESSAGE_HANDLER(PrintMsg_PreviewPrintingRequestCancelled, 570 IPC_MESSAGE_HANDLER(PrintMsg_PreviewPrintingRequestCancelled,
557 DisplayPrintJobError) 571 DisplayPrintJobError)
572 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreviewDone,
573 OnPrintPreviewDone)
558 IPC_MESSAGE_UNHANDLED(handled = false) 574 IPC_MESSAGE_UNHANDLED(handled = false)
559 IPC_END_MESSAGE_MAP() 575 IPC_END_MESSAGE_MAP()
560 return handled; 576 return handled;
561 } 577 }
562 578
563 void PrintWebViewHelper::OnPrintForPrintPreview( 579 void PrintWebViewHelper::OnPrintForPrintPreview(
564 const DictionaryValue& job_settings) { 580 const DictionaryValue& job_settings) {
565 DCHECK(is_preview_); 581 DCHECK(is_preview_);
566 // If still not finished with earlier print request simply ignore. 582 // If still not finished with earlier print request simply ignore.
567 if (print_web_view_) 583 if (print_web_view_)
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after
1314 void PrintWebViewHelper::DisplayPrintJobError() { 1330 void PrintWebViewHelper::DisplayPrintJobError() {
1315 WebView* web_view = print_web_view_; 1331 WebView* web_view = print_web_view_;
1316 if (!web_view) 1332 if (!web_view)
1317 web_view = render_view()->GetWebView(); 1333 web_view = render_view()->GetWebView();
1318 1334
1319 render_view()->RunModalAlertDialog( 1335 render_view()->RunModalAlertDialog(
1320 web_view->mainFrame(), 1336 web_view->mainFrame(),
1321 l10n_util::GetStringUTF16(IDS_PRINT_SPOOL_FAILED_ERROR_TEXT)); 1337 l10n_util::GetStringUTF16(IDS_PRINT_SPOOL_FAILED_ERROR_TEXT));
1322 } 1338 }
1323 1339
1340 void PrintWebViewHelper::OnPrintPreviewDone() {
1341 MessageLoop* message_loop = print_preview_context_.message_loop();
1342 if (message_loop) {
1343 MessageLoop* message_loop = print_preview_context_.message_loop();
1344 print_preview_context_.set_message_loop(NULL);
1345 message_loop->QuitNow();
1346 }
1347 }
1348
1324 void PrintWebViewHelper::RequestPrintPreview() { 1349 void PrintWebViewHelper::RequestPrintPreview() {
1325 old_print_pages_params_.reset(); 1350 old_print_pages_params_.reset();
1326 Send(new PrintHostMsg_RequestPrintPreview(routing_id())); 1351 Send(new PrintHostMsg_RequestPrintPreview(routing_id()));
1327 } 1352 }
1328 1353
1329 bool PrintWebViewHelper::CheckForCancel() { 1354 bool PrintWebViewHelper::CheckForCancel() {
1330 bool cancel = false; 1355 bool cancel = false;
1331 Send(new PrintHostMsg_CheckForCancel( 1356 Send(new PrintHostMsg_CheckForCancel(
1332 routing_id(), 1357 routing_id(),
1333 print_pages_params_->params.preview_ui_addr, 1358 print_pages_params_->params.preview_ui_addr,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 preview_page_params.page_number = page_number; 1397 preview_page_params.page_number = page_number;
1373 preview_page_params.preview_request_id = 1398 preview_page_params.preview_request_id =
1374 print_pages_params_->params.preview_request_id; 1399 print_pages_params_->params.preview_request_id;
1375 1400
1376 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params)); 1401 Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params));
1377 return true; 1402 return true;
1378 } 1403 }
1379 1404
1380 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() 1405 PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext()
1381 : frame_(NULL), 1406 : frame_(NULL),
1407 message_loop_(NULL),
1382 total_page_count_(0), 1408 total_page_count_(0),
1383 current_page_index_(0), 1409 current_page_index_(0),
1384 generate_draft_pages_(true), 1410 generate_draft_pages_(true),
1385 print_ready_metafile_page_count_(0), 1411 print_ready_metafile_page_count_(0),
1386 error_(PREVIEW_ERROR_NONE), 1412 error_(PREVIEW_ERROR_NONE),
1387 state_(UNINITIALIZED) { 1413 state_(UNINITIALIZED) {
1388 } 1414 }
1389 1415
1390 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() { 1416 PrintWebViewHelper::PrintPreviewContext::~PrintPreviewContext() {
1391 } 1417 }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1545 void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages( 1571 void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages(
1546 bool generate_draft_pages) { 1572 bool generate_draft_pages) {
1547 generate_draft_pages_ = generate_draft_pages; 1573 generate_draft_pages_ = generate_draft_pages;
1548 } 1574 }
1549 1575
1550 void PrintWebViewHelper::PrintPreviewContext::set_error( 1576 void PrintWebViewHelper::PrintPreviewContext::set_error(
1551 enum PrintPreviewErrorBuckets error) { 1577 enum PrintPreviewErrorBuckets error) {
1552 error_ = error; 1578 error_ = error;
1553 } 1579 }
1554 1580
1581 void PrintWebViewHelper::PrintPreviewContext::set_message_loop(
1582 MessageLoop* message_loop) {
1583 CHECK(!message_loop || !message_loop_);
1584 message_loop_ = message_loop;
1585 }
1586
1555 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const { 1587 WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const {
1556 return frame_; 1588 return frame_;
1557 } 1589 }
1558 1590
1559 const WebKit::WebNode& PrintWebViewHelper::PrintPreviewContext::node() const { 1591 const WebKit::WebNode& PrintWebViewHelper::PrintPreviewContext::node() const {
1560 return node_; 1592 return node_;
1561 } 1593 }
1562 1594
1595 MessageLoop* PrintWebViewHelper::PrintPreviewContext::message_loop() const {
1596 return message_loop_;
1597 }
1598
1563 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const { 1599 int PrintWebViewHelper::PrintPreviewContext::total_page_count() const {
1564 DCHECK(IsReadyToRender()); 1600 DCHECK(IsReadyToRender());
1565 return total_page_count_; 1601 return total_page_count_;
1566 } 1602 }
1567 1603
1568 bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() { 1604 bool PrintWebViewHelper::PrintPreviewContext::generate_draft_pages() {
1569 return generate_draft_pages_; 1605 return generate_draft_pages_;
1570 } 1606 }
1571 1607
1572 printing::PreviewMetafile* 1608 printing::PreviewMetafile*
(...skipping 14 matching lines...) Expand all
1587 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const { 1623 PrintWebViewHelper::PrintPreviewContext::GetPrintCanvasSize() const {
1588 return prep_frame_view_->GetPrintCanvasSize(); 1624 return prep_frame_view_->GetPrintCanvasSize();
1589 } 1625 }
1590 1626
1591 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1627 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1592 prep_frame_view_.reset(); 1628 prep_frame_view_.reset();
1593 metafile_.reset(); 1629 metafile_.reset();
1594 pages_to_render_.clear(); 1630 pages_to_render_.clear();
1595 error_ = PREVIEW_ERROR_NONE; 1631 error_ = PREVIEW_ERROR_NONE;
1596 } 1632 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698