| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |