Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/printing/print_web_view_helper.h" | 5 #include "chrome/renderer/printing/print_web_view_helper.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 784 is_scripted_print_throttling_disabled_(IsPrintThrottlingDisabled()), | 784 is_scripted_print_throttling_disabled_(IsPrintThrottlingDisabled()), |
| 785 is_print_ready_metafile_sent_(false), | 785 is_print_ready_metafile_sent_(false), |
| 786 ignore_css_margins_(false), | 786 ignore_css_margins_(false), |
| 787 user_cancelled_scripted_print_count_(0), | 787 user_cancelled_scripted_print_count_(0), |
| 788 is_scripted_printing_blocked_(false), | 788 is_scripted_printing_blocked_(false), |
| 789 notify_browser_of_print_failure_(true), | 789 notify_browser_of_print_failure_(true), |
| 790 print_for_preview_(false), | 790 print_for_preview_(false), |
| 791 print_node_in_progress_(false), | 791 print_node_in_progress_(false), |
| 792 is_loading_(false), | 792 is_loading_(false), |
| 793 is_scripted_preview_delayed_(false), | 793 is_scripted_preview_delayed_(false), |
| 794 weak_ptr_factory_(this) { | 794 weak_ptr_factory_(this), |
| 795 on_stop_loading_type_(PRINT_PREVIEW_SCRIPTED) { | |
| 795 } | 796 } |
| 796 | 797 |
| 797 PrintWebViewHelper::~PrintWebViewHelper() {} | 798 PrintWebViewHelper::~PrintWebViewHelper() {} |
| 798 | 799 |
| 799 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed( | 800 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed( |
| 800 blink::WebFrame* frame, bool user_initiated) { | 801 blink::WebFrame* frame, bool user_initiated) { |
| 801 #if defined(OS_ANDROID) | 802 #if defined(OS_ANDROID) |
| 802 return false; | 803 return false; |
| 803 #endif // defined(OS_ANDROID) | 804 #endif // defined(OS_ANDROID) |
| 804 if (is_scripted_printing_blocked_) | 805 if (is_scripted_printing_blocked_) |
| 805 return false; | 806 return false; |
| 806 // If preview is enabled, then the print dialog is tab modal, and the user | 807 // If preview is enabled, then the print dialog is tab modal, and the user |
| 807 // can always close the tab on a mis-behaving page (the system print dialog | 808 // can always close the tab on a mis-behaving page (the system print dialog |
| 808 // is app modal). If the print was initiated through user action, don't | 809 // is app modal). If the print was initiated through user action, don't |
| 809 // throttle. Or, if the command line flag to skip throttling has been set. | 810 // throttle. Or, if the command line flag to skip throttling has been set. |
| 810 if (!is_scripted_print_throttling_disabled_ && | 811 if (!is_scripted_print_throttling_disabled_ && |
| 811 !is_preview_enabled_ && | 812 !is_preview_enabled_ && |
| 812 !user_initiated) | 813 !user_initiated) |
| 813 return !IsScriptInitiatedPrintTooFrequent(frame); | 814 return !IsScriptInitiatedPrintTooFrequent(frame); |
| 814 return true; | 815 return true; |
| 815 } | 816 } |
| 816 | 817 |
| 817 void PrintWebViewHelper::DidStartLoading() { | 818 void PrintWebViewHelper::DidStartLoading() { |
| 818 is_loading_ = true; | 819 is_loading_ = true; |
| 819 } | 820 } |
| 820 | 821 |
| 821 void PrintWebViewHelper::DidStopLoading() { | 822 void PrintWebViewHelper::DidStopLoading() { |
| 822 is_loading_ = false; | 823 is_loading_ = false; |
| 823 ShowScriptedPrintPreview(); | 824 |
| 825 // |on_stop_loading_type_| should be reset to the default value | |
| 826 // PRINT_PREVIEW_SCRIPTED after is its equal to | |
| 827 // PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME because the race condition has | |
| 828 // been handled. | |
| 829 if (on_stop_loading_type_ == PRINT_PREVIEW_SCRIPTED) { | |
| 830 ShowScriptedPrintPreview(); | |
| 831 } else if (on_stop_loading_type_ == | |
| 832 PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME) { | |
| 833 RequestPrintPreview(on_stop_loading_type_); | |
| 834 on_stop_loading_type_ = PRINT_PREVIEW_SCRIPTED; | |
| 835 } | |
| 824 } | 836 } |
| 825 | 837 |
| 826 // Prints |frame| which called window.print(). | 838 // Prints |frame| which called window.print(). |
| 827 void PrintWebViewHelper::PrintPage(blink::WebLocalFrame* frame, | 839 void PrintWebViewHelper::PrintPage(blink::WebLocalFrame* frame, |
| 828 bool user_initiated) { | 840 bool user_initiated) { |
| 829 DCHECK(frame); | 841 DCHECK(frame); |
| 830 | 842 |
| 831 // Allow Prerendering to cancel this print request if necessary. | 843 // Allow Prerendering to cancel this print request if necessary. |
| 832 if (prerender::PrerenderHelper::IsPrerendering( | 844 if (prerender::PrerenderHelper::IsPrerendering( |
| 833 render_view()->GetMainRenderFrame())) { | 845 render_view()->GetMainRenderFrame())) { |
| (...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1717 base::Bind(&PrintWebViewHelper::ShowScriptedPrintPreview, | 1729 base::Bind(&PrintWebViewHelper::ShowScriptedPrintPreview, |
| 1718 weak_ptr_factory_.GetWeakPtr())); | 1730 weak_ptr_factory_.GetWeakPtr())); |
| 1719 } | 1731 } |
| 1720 IPC::SyncMessage* msg = | 1732 IPC::SyncMessage* msg = |
| 1721 new PrintHostMsg_SetupScriptedPrintPreview(routing_id()); | 1733 new PrintHostMsg_SetupScriptedPrintPreview(routing_id()); |
| 1722 msg->EnableMessagePumping(); | 1734 msg->EnableMessagePumping(); |
| 1723 Send(msg); | 1735 Send(msg); |
| 1724 is_scripted_preview_delayed_ = false; | 1736 is_scripted_preview_delayed_ = false; |
| 1725 return; | 1737 return; |
| 1726 } | 1738 } |
| 1727 case PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME: { | 1739 case PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME: { |
|
ivandavid
2014/08/13 20:58:55
This is the only case where we should handle the r
Vitaly Buka (NO REVIEWS)
2014/08/13 23:39:45
No, it is not.
Try to
1. open huge pdf (for exam
ivandavid
2014/08/14 03:38:13
Done.
ivandavid
2014/08/14 03:38:13
Oh OK. I figured why the PRINT_PREVIEW_USER_INITIA
| |
| 1740 // Handles case where this function has been called, but DidStopLoading() | |
| 1741 // hasn't been called yet. RequestPrintPreview() will be called again, at | |
| 1742 // the end of DidStopLoading() with the same value for |type|. | |
| 1743 if (is_loading_ && GetPlugin(print_preview_context_.source_frame())) { | |
| 1744 on_stop_loading_type_ = PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME; | |
| 1745 return; | |
| 1746 } | |
| 1747 | |
| 1728 break; | 1748 break; |
| 1729 } | 1749 } |
| 1730 case PRINT_PREVIEW_USER_INITIATED_SELECTION: { | 1750 case PRINT_PREVIEW_USER_INITIATED_SELECTION: { |
| 1731 DCHECK(has_selection); | 1751 DCHECK(has_selection); |
| 1732 params.selection_only = has_selection; | 1752 params.selection_only = has_selection; |
|
Vitaly Buka (NO REVIEWS)
2014/08/13 23:39:45
could you please put DCHECK(!GetPlugin(print_previ
| |
| 1733 break; | 1753 break; |
| 1734 } | 1754 } |
| 1735 case PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE: { | 1755 case PRINT_PREVIEW_USER_INITIATED_CONTEXT_NODE: { |
| 1736 params.webnode_only = true; | 1756 params.webnode_only = true; |
| 1737 break; | 1757 break; |
| 1738 } | 1758 } |
| 1739 default: { | 1759 default: { |
| 1740 NOTREACHED(); | 1760 NOTREACHED(); |
| 1741 return; | 1761 return; |
| 1742 } | 1762 } |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2031 } | 2051 } |
| 2032 | 2052 |
| 2033 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { | 2053 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { |
| 2034 prep_frame_view_.reset(); | 2054 prep_frame_view_.reset(); |
| 2035 metafile_.reset(); | 2055 metafile_.reset(); |
| 2036 pages_to_render_.clear(); | 2056 pages_to_render_.clear(); |
| 2037 error_ = PREVIEW_ERROR_NONE; | 2057 error_ = PREVIEW_ERROR_NONE; |
| 2038 } | 2058 } |
| 2039 | 2059 |
| 2040 } // namespace printing | 2060 } // namespace printing |
| OLD | NEW |