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/browser/ui/webui/print_preview/print_preview_handler.h" | 5 #include "chrome/browser/ui/webui/print_preview/print_preview_handler.h" |
6 | 6 |
7 #include <ctype.h> | 7 #include <ctype.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 #include "content/public/browser/web_contents_delegate.h" | 52 #include "content/public/browser/web_contents_delegate.h" |
53 #include "content/public/browser/web_ui.h" | 53 #include "content/public/browser/web_ui.h" |
54 #include "printing/backend/print_backend.h" | 54 #include "printing/backend/print_backend.h" |
55 #include "printing/metafile.h" | 55 #include "printing/metafile.h" |
56 #include "printing/metafile_impl.h" | 56 #include "printing/metafile_impl.h" |
57 #include "printing/page_range.h" | 57 #include "printing/page_range.h" |
58 #include "printing/page_size_margins.h" | 58 #include "printing/page_size_margins.h" |
59 #include "printing/print_settings.h" | 59 #include "printing/print_settings.h" |
60 #include "unicode/ulocdata.h" | 60 #include "unicode/ulocdata.h" |
61 | 61 |
| 62 #ifdef OS_CHROMEOS |
| 63 // TODO(kinaba): provide more non-intrusive way for handling local/remote |
| 64 // distinction and remove these ugly #ifdef's. http://crbug.com/140425 |
| 65 #include "chrome/browser/chromeos/gdata/gdata_util.h" |
| 66 #endif |
| 67 |
62 #if !defined(OS_MACOSX) | 68 #if !defined(OS_MACOSX) |
63 #include "base/command_line.h" | 69 #include "base/command_line.h" |
64 #include "chrome/common/chrome_switches.h" | 70 #include "chrome/common/chrome_switches.h" |
65 #endif | 71 #endif |
66 | 72 |
67 using content::BrowserThread; | 73 using content::BrowserThread; |
68 using content::NavigationEntry; | 74 using content::NavigationEntry; |
69 using content::OpenURLParams; | 75 using content::OpenURLParams; |
70 using content::RenderViewHost; | 76 using content::RenderViewHost; |
71 using content::Referrer; | 77 using content::Referrer; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 void ReportPrintSettingHistogram(enum PrintSettingsBuckets setting) { | 121 void ReportPrintSettingHistogram(enum PrintSettingsBuckets setting) { |
116 UMA_HISTOGRAM_ENUMERATION("PrintPreview.PrintSettings", setting, | 122 UMA_HISTOGRAM_ENUMERATION("PrintPreview.PrintSettings", setting, |
117 PRINT_SETTINGS_BUCKET_BOUNDARY); | 123 PRINT_SETTINGS_BUCKET_BOUNDARY); |
118 } | 124 } |
119 | 125 |
120 void ReportPrintDestinationHistogram(enum PrintDestinationBuckets event) { | 126 void ReportPrintDestinationHistogram(enum PrintDestinationBuckets event) { |
121 UMA_HISTOGRAM_ENUMERATION("PrintPreview.DestinationAction", event, | 127 UMA_HISTOGRAM_ENUMERATION("PrintPreview.DestinationAction", event, |
122 PRINT_DESTINATION_BUCKET_BOUNDARY); | 128 PRINT_DESTINATION_BUCKET_BOUNDARY); |
123 } | 129 } |
124 | 130 |
125 // Name of a dictionary fielad holdong cloud print related data; | 131 // Name of a dictionary field holding cloud print related data; |
126 const char kCloudPrintData[] = "cloudPrintData"; | 132 const char kCloudPrintData[] = "cloudPrintData"; |
127 // Name of a dictionary field holding the initiator tab title. | 133 // Name of a dictionary field holding the initiator tab title. |
128 const char kInitiatorTabTitle[] = "initiatorTabTitle"; | 134 const char kInitiatorTabTitle[] = "initiatorTabTitle"; |
129 // Name of a dictionary field holding the measurement system according to the | 135 // Name of a dictionary field holding the measurement system according to the |
130 // locale. | 136 // locale. |
131 const char kMeasurementSystem[] = "measurementSystem"; | 137 const char kMeasurementSystem[] = "measurementSystem"; |
132 // Name of a dictionary field holding the number format according to the locale. | 138 // Name of a dictionary field holding the number format according to the locale. |
133 const char kNumberFormat[] = "numberFormat"; | 139 const char kNumberFormat[] = "numberFormat"; |
134 // Name of a dictionary field specifying whether to print automatically in | 140 // Name of a dictionary field specifying whether to print automatically in |
135 // kiosk mode. See http://crbug.com/31395. | 141 // kiosk mode. See http://crbug.com/31395. |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 | 212 |
207 // Callback that stores a PDF file on disk. | 213 // Callback that stores a PDF file on disk. |
208 void PrintToPdfCallback(Metafile* metafile, const FilePath& path) { | 214 void PrintToPdfCallback(Metafile* metafile, const FilePath& path) { |
209 metafile->SaveTo(path); | 215 metafile->SaveTo(path); |
210 // |metafile| must be deleted on the UI thread. | 216 // |metafile| must be deleted on the UI thread. |
211 BrowserThread::PostTask( | 217 BrowserThread::PostTask( |
212 BrowserThread::UI, FROM_HERE, | 218 BrowserThread::UI, FROM_HERE, |
213 base::Bind(&base::DeletePointer<Metafile>, metafile)); | 219 base::Bind(&base::DeletePointer<Metafile>, metafile)); |
214 } | 220 } |
215 | 221 |
| 222 #ifdef OS_CHROMEOS |
| 223 void PrintToPdfCallbackWithCheck(Metafile* metafile, |
| 224 gdata::GDataFileError error, |
| 225 const FilePath& path) { |
| 226 if (error != gdata::GDATA_FILE_OK) { |
| 227 LOG(ERROR) << "Save to pdf failed to write: " << error; |
| 228 } else { |
| 229 metafile->SaveTo(path); |
| 230 } |
| 231 // |metafile| must be deleted on the UI thread. |
| 232 BrowserThread::PostTask( |
| 233 BrowserThread::UI, FROM_HERE, |
| 234 base::Bind(&base::DeletePointer<Metafile>, metafile)); |
| 235 } |
| 236 #endif |
| 237 |
216 static base::LazyInstance<printing::StickySettings> sticky_settings = | 238 static base::LazyInstance<printing::StickySettings> sticky_settings = |
217 LAZY_INSTANCE_INITIALIZER; | 239 LAZY_INSTANCE_INITIALIZER; |
218 | 240 |
219 } // namespace | 241 } // namespace |
220 | 242 |
221 // static | 243 // static |
222 printing::StickySettings* PrintPreviewHandler::GetStickySettings() { | 244 printing::StickySettings* PrintPreviewHandler::GetStickySettings() { |
223 return sticky_settings.Pointer(); | 245 return sticky_settings.Pointer(); |
224 } | 246 } |
225 | 247 |
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
904 } | 926 } |
905 | 927 |
906 void PrintPreviewHandler::PostPrintToPdfTask(base::RefCountedBytes* data) { | 928 void PrintPreviewHandler::PostPrintToPdfTask(base::RefCountedBytes* data) { |
907 if (!data) { | 929 if (!data) { |
908 NOTREACHED(); | 930 NOTREACHED(); |
909 return; | 931 return; |
910 } | 932 } |
911 printing::PreviewMetafile* metafile = new printing::PreviewMetafile; | 933 printing::PreviewMetafile* metafile = new printing::PreviewMetafile; |
912 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); | 934 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); |
913 // PrintToPdfCallback takes ownership of |metafile|. | 935 // PrintToPdfCallback takes ownership of |metafile|. |
| 936 #ifdef OS_CHROMEOS |
| 937 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 938 gdata::util::PrepareWritableFileAndRun( |
| 939 Profile::FromBrowserContext(preview_web_contents()->GetBrowserContext()), |
| 940 *print_to_pdf_path_, |
| 941 base::Bind(&PrintToPdfCallbackWithCheck, metafile)); |
| 942 #else |
914 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 943 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
915 base::Bind(&PrintToPdfCallback, metafile, | 944 base::Bind(&PrintToPdfCallback, metafile, |
916 *print_to_pdf_path_)); | 945 *print_to_pdf_path_)); |
| 946 #endif |
| 947 |
917 print_to_pdf_path_.reset(); | 948 print_to_pdf_path_.reset(); |
918 ActivateInitiatorTabAndClosePreviewTab(); | 949 ActivateInitiatorTabAndClosePreviewTab(); |
919 } | 950 } |
920 | 951 |
921 void PrintPreviewHandler::FileSelectionCanceled(void* params) { | 952 void PrintPreviewHandler::FileSelectionCanceled(void* params) { |
922 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( | 953 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( |
923 web_ui()->GetController()); | 954 web_ui()->GetController()); |
924 print_preview_ui->OnFileSelectionCancelled(); | 955 print_preview_ui->OnFileSelectionCancelled(); |
925 } | 956 } |
926 | 957 |
927 void PrintPreviewHandler::ClearInitiatorTabDetails() { | 958 void PrintPreviewHandler::ClearInitiatorTabDetails() { |
928 TabContents* initiator_tab = GetInitiatorTab(); | 959 TabContents* initiator_tab = GetInitiatorTab(); |
929 if (!initiator_tab) | 960 if (!initiator_tab) |
930 return; | 961 return; |
931 | 962 |
932 // We no longer require the initiator tab details. Remove those details | 963 // We no longer require the initiator tab details. Remove those details |
933 // associated with the preview tab to allow the initiator tab to create | 964 // associated with the preview tab to allow the initiator tab to create |
934 // another preview tab. | 965 // another preview tab. |
935 printing::PrintPreviewTabController* tab_controller = | 966 printing::PrintPreviewTabController* tab_controller = |
936 printing::PrintPreviewTabController::GetInstance(); | 967 printing::PrintPreviewTabController::GetInstance(); |
937 if (tab_controller) | 968 if (tab_controller) |
938 tab_controller->EraseInitiatorTabInfo(preview_tab_contents()); | 969 tab_controller->EraseInitiatorTabInfo(preview_tab_contents()); |
939 } | 970 } |
OLD | NEW |