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 |