| 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 "components/printing/renderer/print_web_view_helper.h" | 5 #include "components/printing/renderer/print_web_view_helper.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 |
| 10 #include <algorithm> |
| 9 #include <string> | 11 #include <string> |
| 10 #include <utility> | 12 #include <utility> |
| 11 | 13 |
| 12 #include "base/auto_reset.h" | 14 #include "base/auto_reset.h" |
| 13 #include "base/json/json_writer.h" | 15 #include "base/json/json_writer.h" |
| 14 #include "base/location.h" | 16 #include "base/location.h" |
| 15 #include "base/logging.h" | 17 #include "base/logging.h" |
| 16 #include "base/macros.h" | 18 #include "base/macros.h" |
| 17 #include "base/metrics/histogram_macros.h" | 19 #include "base/metrics/histogram_macros.h" |
| 18 #include "base/process/process_handle.h" | 20 #include "base/process/process_handle.h" |
| (...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 } | 823 } |
| 822 | 824 |
| 823 bool PrintWebViewHelper::Delegate::IsAskPrintSettingsEnabled() { | 825 bool PrintWebViewHelper::Delegate::IsAskPrintSettingsEnabled() { |
| 824 return true; | 826 return true; |
| 825 } | 827 } |
| 826 | 828 |
| 827 bool PrintWebViewHelper::Delegate::IsScriptedPrintEnabled() { | 829 bool PrintWebViewHelper::Delegate::IsScriptedPrintEnabled() { |
| 828 return true; | 830 return true; |
| 829 } | 831 } |
| 830 | 832 |
| 831 PrintWebViewHelper::PrintWebViewHelper(content::RenderView* render_view, | 833 PrintWebViewHelper::PrintWebViewHelper(content::RenderFrame* render_frame, |
| 832 std::unique_ptr<Delegate> delegate) | 834 std::unique_ptr<Delegate> delegate) |
| 833 : content::RenderViewObserver(render_view), | 835 : content::RenderFrameObserver(render_frame), |
| 834 content::RenderViewObserverTracker<PrintWebViewHelper>(render_view), | 836 content::RenderFrameObserverTracker<PrintWebViewHelper>(render_frame), |
| 835 reset_prep_frame_view_(false), | 837 reset_prep_frame_view_(false), |
| 836 is_print_ready_metafile_sent_(false), | 838 is_print_ready_metafile_sent_(false), |
| 837 ignore_css_margins_(false), | 839 ignore_css_margins_(false), |
| 838 is_scripted_printing_blocked_(false), | 840 is_printing_enabled_(true), |
| 839 notify_browser_of_print_failure_(true), | 841 notify_browser_of_print_failure_(true), |
| 840 print_for_preview_(false), | 842 print_for_preview_(false), |
| 841 delegate_(std::move(delegate)), | 843 delegate_(std::move(delegate)), |
| 842 print_node_in_progress_(false), | 844 print_node_in_progress_(false), |
| 843 is_loading_(false), | 845 is_loading_(false), |
| 844 is_scripted_preview_delayed_(false), | 846 is_scripted_preview_delayed_(false), |
| 845 ipc_nesting_level_(0), | 847 ipc_nesting_level_(0), |
| 846 weak_ptr_factory_(this) { | 848 weak_ptr_factory_(this) { |
| 847 if (!delegate_->IsPrintPreviewEnabled()) | 849 if (!delegate_->IsPrintPreviewEnabled()) |
| 848 DisablePreview(); | 850 DisablePreview(); |
| 849 } | 851 } |
| 850 | 852 |
| 851 PrintWebViewHelper::~PrintWebViewHelper() { | 853 PrintWebViewHelper::~PrintWebViewHelper() { |
| 852 } | 854 } |
| 853 | 855 |
| 854 // static | 856 // static |
| 855 void PrintWebViewHelper::DisablePreview() { | 857 void PrintWebViewHelper::DisablePreview() { |
| 856 g_is_preview_enabled = false; | 858 g_is_preview_enabled = false; |
| 857 } | 859 } |
| 858 | 860 |
| 859 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed(blink::WebFrame* frame, | 861 bool PrintWebViewHelper::IsScriptInitiatedPrintAllowed(blink::WebFrame* frame, |
| 860 bool user_initiated) { | 862 bool user_initiated) { |
| 861 if (!delegate_->IsScriptedPrintEnabled()) | 863 if (!is_printing_enabled_ || !delegate_->IsScriptedPrintEnabled()) |
| 862 return false; | 864 return false; |
| 863 | 865 |
| 864 // If preview is enabled, then the print dialog is tab modal, and the user | 866 // If preview is enabled, then the print dialog is tab modal, and the user |
| 865 // can always close the tab on a mis-behaving page (the system print dialog | 867 // can always close the tab on a mis-behaving page (the system print dialog |
| 866 // is app modal). If the print was initiated through user action, don't | 868 // is app modal). If the print was initiated through user action, don't |
| 867 // throttle. Or, if the command line flag to skip throttling has been set. | 869 // throttle. Or, if the command line flag to skip throttling has been set. |
| 868 return !is_scripted_printing_blocked_ && | 870 return user_initiated || g_is_preview_enabled || |
| 869 (user_initiated || g_is_preview_enabled || | 871 scripting_throttler_.IsAllowed(frame); |
| 870 scripting_throttler_.IsAllowed(frame)); | |
| 871 } | 872 } |
| 872 | 873 |
| 873 void PrintWebViewHelper::DidStartLoading() { | 874 void PrintWebViewHelper::DidStartLoading() { |
| 874 is_loading_ = true; | 875 is_loading_ = true; |
| 875 } | 876 } |
| 876 | 877 |
| 877 void PrintWebViewHelper::DidStopLoading() { | 878 void PrintWebViewHelper::DidStopLoading() { |
| 878 is_loading_ = false; | 879 is_loading_ = false; |
| 879 if (!on_stop_loading_closure_.is_null()) { | 880 if (!on_stop_loading_closure_.is_null()) { |
| 880 on_stop_loading_closure_.Run(); | 881 on_stop_loading_closure_.Run(); |
| 881 on_stop_loading_closure_.Reset(); | 882 on_stop_loading_closure_.Reset(); |
| 882 } | 883 } |
| 883 } | 884 } |
| 884 | 885 |
| 885 // Prints |frame| which called window.print(). | 886 void PrintWebViewHelper::ScriptedPrint(bool user_initiated) { |
| 886 void PrintWebViewHelper::PrintPage(blink::WebLocalFrame* frame, | |
| 887 bool user_initiated) { | |
| 888 DCHECK(frame); | |
| 889 | |
| 890 // Allow Prerendering to cancel this print request if necessary. | 887 // Allow Prerendering to cancel this print request if necessary. |
| 891 if (delegate_->CancelPrerender(render_view(), routing_id())) | 888 if (delegate_->CancelPrerender(render_frame(), routing_id())) |
| 892 return; | 889 return; |
| 893 | 890 |
| 894 if (!IsScriptInitiatedPrintAllowed(frame, user_initiated)) | 891 blink::WebLocalFrame* web_frame = render_frame()->GetWebFrame(); |
| 892 if (!IsScriptInitiatedPrintAllowed(web_frame, user_initiated)) { |
| 895 return; | 893 return; |
| 894 } |
| 896 | 895 |
| 897 if (delegate_->OverridePrint(frame)) | 896 if (delegate_->OverridePrint(web_frame)) |
| 898 return; | 897 return; |
| 899 | 898 |
| 900 if (g_is_preview_enabled) { | 899 if (g_is_preview_enabled) { |
| 901 #if defined(ENABLE_PRINT_PREVIEW) | 900 #if defined(ENABLE_PRINT_PREVIEW) |
| 902 print_preview_context_.InitWithFrame(frame); | 901 print_preview_context_.InitWithFrame(web_frame); |
| 903 RequestPrintPreview(PRINT_PREVIEW_SCRIPTED); | 902 RequestPrintPreview(PRINT_PREVIEW_SCRIPTED); |
| 904 #endif | 903 #endif |
| 905 } else { | 904 } else { |
| 906 #if defined(ENABLE_BASIC_PRINTING) | 905 #if defined(ENABLE_BASIC_PRINTING) |
| 907 Print(frame, blink::WebNode(), true); | 906 Print(web_frame, blink::WebNode(), true /* is_scripted? */); |
| 908 #endif | 907 #endif |
| 909 } | 908 } |
| 910 } | 909 } |
| 911 | 910 |
| 912 bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { | 911 bool PrintWebViewHelper::OnMessageReceived(const IPC::Message& message) { |
| 913 // The class is not designed to handle recursive messages. This is not | 912 // The class is not designed to handle recursive messages. This is not |
| 914 // expected during regular flow. However, during rendering of content for | 913 // expected during regular flow. However, during rendering of content for |
| 915 // printing, lower level code may run nested message loop. E.g. PDF may has | 914 // printing, lower level code may run nested message loop. E.g. PDF may has |
| 916 // script to show message box http://crbug.com/502562. In that moment browser | 915 // script to show message box http://crbug.com/502562. In that moment browser |
| 917 // may receive updated printer capabilities and decide to restart print | 916 // may receive updated printer capabilities and decide to restart print |
| 918 // preview generation. When this happened message handling function may | 917 // preview generation. When this happened message handling function may |
| 919 // choose to ignore message or safely crash process. | 918 // choose to ignore message or safely crash process. |
| 920 ++ipc_nesting_level_; | 919 ++ipc_nesting_level_; |
| 921 | 920 |
| 922 bool handled = true; | 921 bool handled = true; |
| 923 IPC_BEGIN_MESSAGE_MAP(PrintWebViewHelper, message) | 922 IPC_BEGIN_MESSAGE_MAP(PrintWebViewHelper, message) |
| 924 #if defined(ENABLE_BASIC_PRINTING) | 923 #if defined(ENABLE_BASIC_PRINTING) |
| 925 IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages) | 924 IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages) |
| 926 IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog) | 925 IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog) |
| 927 #endif // defined(ENABLE_BASIC_PRINTING) | 926 #endif // defined(ENABLE_BASIC_PRINTING) |
| 928 #if defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW) | 927 #if defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW) |
| 929 IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview) | 928 IPC_MESSAGE_HANDLER(PrintMsg_PrintForPrintPreview, OnPrintForPrintPreview) |
| 930 #endif | 929 #endif |
| 931 #if defined(ENABLE_PRINT_PREVIEW) | 930 #if defined(ENABLE_PRINT_PREVIEW) |
| 932 IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview) | 931 IPC_MESSAGE_HANDLER(PrintMsg_InitiatePrintPreview, OnInitiatePrintPreview) |
| 933 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview) | 932 IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview) |
| 934 IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone) | 933 IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone) |
| 935 #endif // defined(ENABLE_PRINT_PREVIEW) | 934 #endif // defined(ENABLE_PRINT_PREVIEW) |
| 936 IPC_MESSAGE_HANDLER(PrintMsg_SetScriptedPrintingBlocked, | 935 IPC_MESSAGE_HANDLER(PrintMsg_SetPrintingEnabled, SetPrintingEnabled) |
| 937 SetScriptedPrintBlocked) | |
| 938 IPC_MESSAGE_UNHANDLED(handled = false) | 936 IPC_MESSAGE_UNHANDLED(handled = false) |
| 939 IPC_END_MESSAGE_MAP() | 937 IPC_END_MESSAGE_MAP() |
| 940 | 938 |
| 941 --ipc_nesting_level_; | 939 --ipc_nesting_level_; |
| 942 return handled; | 940 return handled; |
| 943 } | 941 } |
| 944 | 942 |
| 945 void PrintWebViewHelper::OnDestruct() { | 943 void PrintWebViewHelper::OnDestruct() { |
| 946 delete this; | 944 delete this; |
| 947 } | 945 } |
| 948 | 946 |
| 949 bool PrintWebViewHelper::GetPrintFrame(blink::WebLocalFrame** frame) { | |
| 950 DCHECK(frame); | |
| 951 blink::WebView* webView = render_view()->GetWebView(); | |
| 952 DCHECK(webView); | |
| 953 if (!webView) | |
| 954 return false; | |
| 955 | |
| 956 // If the user has selected text in the currently focused frame we print | |
| 957 // only that frame (this makes print selection work for multiple frames). | |
| 958 blink::WebLocalFrame* focusedFrame = webView->focusedFrame(); | |
| 959 *frame = focusedFrame->hasSelection() | |
| 960 ? focusedFrame | |
| 961 : webView->mainFrame()->toWebLocalFrame(); | |
| 962 return true; | |
| 963 } | |
| 964 | |
| 965 #if defined(ENABLE_BASIC_PRINTING) | 947 #if defined(ENABLE_BASIC_PRINTING) |
| 966 void PrintWebViewHelper::OnPrintPages() { | 948 void PrintWebViewHelper::OnPrintPages() { |
| 967 if (ipc_nesting_level_> 1) | 949 if (ipc_nesting_level_> 1) |
| 968 return; | 950 return; |
| 969 blink::WebLocalFrame* frame; | 951 |
| 970 if (!GetPrintFrame(&frame)) | 952 blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); |
| 971 return; | 953 |
| 972 // If we are printing a PDF extension frame, find the plugin node and print | 954 // If we are printing a PDF extension frame, find the plugin node and print |
| 973 // that instead. | 955 // that instead. |
| 974 auto plugin = delegate_->GetPdfElement(frame); | 956 auto plugin = delegate_->GetPdfElement(frame); |
| 975 Print(frame, plugin, false); | 957 Print(frame, plugin, false /* is_scripted? */); |
| 976 } | 958 } |
| 977 | 959 |
| 978 void PrintWebViewHelper::OnPrintForSystemDialog() { | 960 void PrintWebViewHelper::OnPrintForSystemDialog() { |
| 979 if (ipc_nesting_level_> 1) | 961 if (ipc_nesting_level_> 1) |
| 980 return; | 962 return; |
| 981 blink::WebLocalFrame* frame = print_preview_context_.source_frame(); | 963 blink::WebLocalFrame* frame = print_preview_context_.source_frame(); |
| 982 if (!frame) { | 964 if (!frame) { |
| 983 NOTREACHED(); | 965 NOTREACHED(); |
| 984 return; | 966 return; |
| 985 } | 967 } |
| 986 Print(frame, print_preview_context_.source_node(), false); | 968 Print(frame, print_preview_context_.source_node(), false); |
| 987 } | 969 } |
| 988 #endif // defined(ENABLE_BASIC_PRINTING) | 970 #endif // defined(ENABLE_BASIC_PRINTING) |
| 989 | 971 |
| 990 #if defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW) | 972 #if defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW) |
| 991 void PrintWebViewHelper::OnPrintForPrintPreview( | 973 void PrintWebViewHelper::OnPrintForPrintPreview( |
| 992 const base::DictionaryValue& job_settings) { | 974 const base::DictionaryValue& job_settings) { |
| 993 CHECK_LE(ipc_nesting_level_, 1); | 975 CHECK_LE(ipc_nesting_level_, 1); |
| 994 // If still not finished with earlier print request simply ignore. | 976 // If still not finished with earlier print request simply ignore. |
| 995 if (prep_frame_view_) | 977 if (prep_frame_view_) |
| 996 return; | 978 return; |
| 997 | 979 |
| 980 NOTIMPLEMENTED(); |
| 981 #if 0 |
| 998 if (!render_view()->GetWebView()) | 982 if (!render_view()->GetWebView()) |
| 999 return; | 983 return; |
| 984 |
| 1000 blink::WebFrame* main_frame = render_view()->GetWebView()->mainFrame(); | 985 blink::WebFrame* main_frame = render_view()->GetWebView()->mainFrame(); |
| 1001 if (!main_frame) | 986 if (!main_frame) |
| 1002 return; | 987 return; |
| 1003 | 988 |
| 1004 blink::WebDocument document = main_frame->document(); | 989 blink::WebDocument document = main_frame->document(); |
| 1005 // <object>/<iframe> with id="pdf-viewer" is created in | 990 // <object>/<iframe> with id="pdf-viewer" is created in |
| 1006 // chrome/browser/resources/print_preview/print_preview.js | 991 // chrome/browser/resources/print_preview/print_preview.js |
| 1007 blink::WebElement pdf_element = document.getElementById("pdf-viewer"); | 992 blink::WebElement pdf_element = document.getElementById("pdf-viewer"); |
| 1008 if (pdf_element.isNull()) { | 993 if (pdf_element.isNull()) { |
| 1009 NOTREACHED(); | 994 NOTREACHED(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 // printing and it expects real printable_area value. | 1029 // printing and it expects real printable_area value. |
| 1045 // See http://crbug.com/123408 | 1030 // See http://crbug.com/123408 |
| 1046 PrintMsg_Print_Params& print_params = print_pages_params_->params; | 1031 PrintMsg_Print_Params& print_params = print_pages_params_->params; |
| 1047 print_params.printable_area = gfx::Rect(print_params.page_size); | 1032 print_params.printable_area = gfx::Rect(print_params.page_size); |
| 1048 | 1033 |
| 1049 // Render Pages for printing. | 1034 // Render Pages for printing. |
| 1050 if (!RenderPagesForPrint(plugin_frame, plugin_element)) { | 1035 if (!RenderPagesForPrint(plugin_frame, plugin_element)) { |
| 1051 LOG(ERROR) << "RenderPagesForPrint failed"; | 1036 LOG(ERROR) << "RenderPagesForPrint failed"; |
| 1052 DidFinishPrinting(FAIL_PRINT); | 1037 DidFinishPrinting(FAIL_PRINT); |
| 1053 } | 1038 } |
| 1039 #endif |
| 1054 } | 1040 } |
| 1055 #endif // defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW) | 1041 #endif // defined(ENABLE_BASIC_PRINTING) && defined(ENABLE_PRINT_PREVIEW) |
| 1056 | 1042 |
| 1057 void PrintWebViewHelper::GetPageSizeAndContentAreaFromPageLayout( | 1043 void PrintWebViewHelper::GetPageSizeAndContentAreaFromPageLayout( |
| 1058 const PageSizeMargins& page_layout_in_points, | 1044 const PageSizeMargins& page_layout_in_points, |
| 1059 gfx::Size* page_size, | 1045 gfx::Size* page_size, |
| 1060 gfx::Rect* content_area) { | 1046 gfx::Rect* content_area) { |
| 1061 *page_size = gfx::Size( | 1047 *page_size = gfx::Size( |
| 1062 page_layout_in_points.content_width + page_layout_in_points.margin_right + | 1048 page_layout_in_points.content_width + page_layout_in_points.margin_right + |
| 1063 page_layout_in_points.margin_left, | 1049 page_layout_in_points.margin_left, |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1141 if (prep_frame_view_ && prep_frame_view_->IsLoadingSelection()) { | 1127 if (prep_frame_view_ && prep_frame_view_->IsLoadingSelection()) { |
| 1142 reset_prep_frame_view_ = true; | 1128 reset_prep_frame_view_ = true; |
| 1143 return; | 1129 return; |
| 1144 } | 1130 } |
| 1145 | 1131 |
| 1146 const PrintMsg_Print_Params& print_params = print_pages_params_->params; | 1132 const PrintMsg_Print_Params& print_params = print_pages_params_->params; |
| 1147 prep_frame_view_.reset(new PrepareFrameAndViewForPrint( | 1133 prep_frame_view_.reset(new PrepareFrameAndViewForPrint( |
| 1148 print_params, print_preview_context_.source_frame(), | 1134 print_params, print_preview_context_.source_frame(), |
| 1149 print_preview_context_.source_node(), ignore_css_margins_)); | 1135 print_preview_context_.source_node(), ignore_css_margins_)); |
| 1150 prep_frame_view_->CopySelectionIfNeeded( | 1136 prep_frame_view_->CopySelectionIfNeeded( |
| 1151 render_view()->GetWebkitPreferences(), | 1137 render_frame()->GetWebkitPreferences(), |
| 1152 base::Bind(&PrintWebViewHelper::OnFramePreparedForPreviewDocument, | 1138 base::Bind(&PrintWebViewHelper::OnFramePreparedForPreviewDocument, |
| 1153 base::Unretained(this))); | 1139 base::Unretained(this))); |
| 1154 } | 1140 } |
| 1155 | 1141 |
| 1156 void PrintWebViewHelper::OnFramePreparedForPreviewDocument() { | 1142 void PrintWebViewHelper::OnFramePreparedForPreviewDocument() { |
| 1157 if (reset_prep_frame_view_) { | 1143 if (reset_prep_frame_view_) { |
| 1158 PrepareFrameForPreviewDocument(); | 1144 PrepareFrameForPreviewDocument(); |
| 1159 return; | 1145 return; |
| 1160 } | 1146 } |
| 1161 DidFinishPrinting(CreatePreviewDocument() ? OK : FAIL_PREVIEW); | 1147 DidFinishPrinting(CreatePreviewDocument() ? OK : FAIL_PREVIEW); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1302 | 1288 |
| 1303 void PrintWebViewHelper::OnPrintingDone(bool success) { | 1289 void PrintWebViewHelper::OnPrintingDone(bool success) { |
| 1304 if (ipc_nesting_level_ > 1) | 1290 if (ipc_nesting_level_ > 1) |
| 1305 return; | 1291 return; |
| 1306 notify_browser_of_print_failure_ = false; | 1292 notify_browser_of_print_failure_ = false; |
| 1307 if (!success) | 1293 if (!success) |
| 1308 LOG(ERROR) << "Failure in OnPrintingDone"; | 1294 LOG(ERROR) << "Failure in OnPrintingDone"; |
| 1309 DidFinishPrinting(success ? OK : FAIL_PRINT); | 1295 DidFinishPrinting(success ? OK : FAIL_PRINT); |
| 1310 } | 1296 } |
| 1311 | 1297 |
| 1312 void PrintWebViewHelper::SetScriptedPrintBlocked(bool blocked) { | 1298 void PrintWebViewHelper::SetPrintingEnabled(bool enabled) { |
| 1313 is_scripted_printing_blocked_ = blocked; | 1299 is_printing_enabled_ = enabled; |
| 1314 } | 1300 } |
| 1315 | 1301 |
| 1316 #if defined(ENABLE_PRINT_PREVIEW) | 1302 #if defined(ENABLE_PRINT_PREVIEW) |
| 1317 void PrintWebViewHelper::OnInitiatePrintPreview(bool selection_only) { | 1303 void PrintWebViewHelper::OnInitiatePrintPreview(bool has_selection) { |
| 1318 if (ipc_nesting_level_ > 1) | 1304 if (ipc_nesting_level_ > 1) |
| 1319 return; | 1305 return; |
| 1320 blink::WebLocalFrame* frame = NULL; | 1306 |
| 1321 GetPrintFrame(&frame); | 1307 blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); |
| 1322 DCHECK(frame); | 1308 |
| 1323 // If we are printing a PDF extension frame, find the plugin node and print | 1309 // If we are printing a PDF extension frame, find the plugin node and print |
| 1324 // that instead. | 1310 // that instead. |
| 1325 auto plugin = delegate_->GetPdfElement(frame); | 1311 auto plugin = delegate_->GetPdfElement(frame); |
| 1326 if (!plugin.isNull()) { | 1312 if (!plugin.isNull()) { |
| 1327 PrintNode(plugin); | 1313 PrintNode(plugin); |
| 1328 return; | 1314 return; |
| 1329 } | 1315 } |
| 1330 print_preview_context_.InitWithFrame(frame); | 1316 print_preview_context_.InitWithFrame(frame); |
| 1331 RequestPrintPreview(selection_only | 1317 RequestPrintPreview(has_selection |
| 1332 ? PRINT_PREVIEW_USER_INITIATED_SELECTION | 1318 ? PRINT_PREVIEW_USER_INITIATED_SELECTION |
| 1333 : PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME); | 1319 : PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME); |
| 1334 } | 1320 } |
| 1335 #endif | 1321 #endif |
| 1336 | 1322 |
| 1337 bool PrintWebViewHelper::IsPrintingEnabled() { | 1323 bool PrintWebViewHelper::IsPrintingEnabled() const { |
| 1338 bool result = false; | 1324 return is_printing_enabled_; |
| 1339 Send(new PrintHostMsg_IsPrintingEnabled(routing_id(), &result)); | |
| 1340 return result; | |
| 1341 } | 1325 } |
| 1342 | 1326 |
| 1343 void PrintWebViewHelper::PrintNode(const blink::WebNode& node) { | 1327 void PrintWebViewHelper::PrintNode(const blink::WebNode& node) { |
| 1344 if (node.isNull() || !node.document().frame()) { | 1328 if (node.isNull() || !node.document().frame()) { |
| 1345 // This can occur when the context menu refers to an invalid WebNode. | 1329 // This can occur when the context menu refers to an invalid WebNode. |
| 1346 // See http://crbug.com/100890#c17 for a repro case. | 1330 // See http://crbug.com/100890#c17 for a repro case. |
| 1347 return; | 1331 return; |
| 1348 } | 1332 } |
| 1349 | 1333 |
| 1350 if (print_node_in_progress_) { | 1334 if (print_node_in_progress_) { |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1725 if (!frame || prep_frame_view_) | 1709 if (!frame || prep_frame_view_) |
| 1726 return false; | 1710 return false; |
| 1727 | 1711 |
| 1728 const PrintMsg_PrintPages_Params& params = *print_pages_params_; | 1712 const PrintMsg_PrintPages_Params& params = *print_pages_params_; |
| 1729 const PrintMsg_Print_Params& print_params = params.params; | 1713 const PrintMsg_Print_Params& print_params = params.params; |
| 1730 prep_frame_view_.reset(new PrepareFrameAndViewForPrint( | 1714 prep_frame_view_.reset(new PrepareFrameAndViewForPrint( |
| 1731 print_params, frame, node, ignore_css_margins_)); | 1715 print_params, frame, node, ignore_css_margins_)); |
| 1732 DCHECK(!print_pages_params_->params.selection_only || | 1716 DCHECK(!print_pages_params_->params.selection_only || |
| 1733 print_pages_params_->pages.empty()); | 1717 print_pages_params_->pages.empty()); |
| 1734 prep_frame_view_->CopySelectionIfNeeded( | 1718 prep_frame_view_->CopySelectionIfNeeded( |
| 1735 render_view()->GetWebkitPreferences(), | 1719 render_frame()->GetWebkitPreferences(), |
| 1736 base::Bind(&PrintWebViewHelper::OnFramePreparedForPrintPages, | 1720 base::Bind(&PrintWebViewHelper::OnFramePreparedForPrintPages, |
| 1737 base::Unretained(this))); | 1721 base::Unretained(this))); |
| 1738 return true; | 1722 return true; |
| 1739 } | 1723 } |
| 1740 #endif // defined(ENABLE_BASIC_PRINTING) | 1724 #endif // defined(ENABLE_BASIC_PRINTING) |
| 1741 | 1725 |
| 1742 #if !defined(OS_MACOSX) | 1726 #if !defined(OS_MACOSX) |
| 1743 void PrintWebViewHelper::PrintPageInternal( | 1727 void PrintWebViewHelper::PrintPageInternal( |
| 1744 const PrintMsg_PrintPage_Params& params, | 1728 const PrintMsg_PrintPage_Params& params, |
| 1745 blink::WebLocalFrame* frame, | 1729 blink::WebLocalFrame* frame, |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2250 blink::WebConsoleMessage::LevelWarning, message)); | 2234 blink::WebConsoleMessage::LevelWarning, message)); |
| 2251 return false; | 2235 return false; |
| 2252 } | 2236 } |
| 2253 | 2237 |
| 2254 void PrintWebViewHelper::ScriptingThrottler::Reset() { | 2238 void PrintWebViewHelper::ScriptingThrottler::Reset() { |
| 2255 // Reset counter on successful print. | 2239 // Reset counter on successful print. |
| 2256 count_ = 0; | 2240 count_ = 0; |
| 2257 } | 2241 } |
| 2258 | 2242 |
| 2259 } // namespace printing | 2243 } // namespace printing |
| OLD | NEW |