OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/ui/webui/print_preview/print_preview_data_source.h" |
| 6 |
| 7 #include <algorithm> |
| 8 #include <vector> |
| 9 |
| 10 #include "base/memory/ref_counted_memory.h" |
| 11 #include "base/message_loop.h" |
| 12 #include "base/string_number_conversions.h" |
| 13 #include "base/string_piece.h" |
| 14 #include "base/string_split.h" |
| 15 #include "base/string_util.h" |
| 16 #include "base/utf_string_conversions.h" |
| 17 #include "base/values.h" |
| 18 #include "chrome/browser/printing/print_preview_data_service.h" |
| 19 #include "chrome/common/url_constants.h" |
| 20 #include "grit/browser_resources.h" |
| 21 #include "grit/chromium_strings.h" |
| 22 #include "grit/generated_resources.h" |
| 23 #include "grit/google_chrome_strings.h" |
| 24 #include "ui/base/l10n/l10n_util.h" |
| 25 |
| 26 namespace { |
| 27 |
| 28 #if defined(OS_MACOSX) |
| 29 // U+0028 U+21E7 U+2318 U+0050 U+0029 in UTF8 |
| 30 const char kAdvancedPrintShortcut[] = "\x28\xE2\x8c\xA5\xE2\x8C\x98\x50\x29"; |
| 31 #elif defined(OS_WIN) |
| 32 const char kAdvancedPrintShortcut[] = "(Ctrl+Shift+P)"; |
| 33 #else |
| 34 const char kAdvancedPrintShortcut[] = "(Shift+Ctrl+P)"; |
| 35 #endif |
| 36 |
| 37 }; // namespace |
| 38 |
| 39 PrintPreviewDataSource::PrintPreviewDataSource() |
| 40 : ChromeWebUIDataSource(chrome::kChromeUIPrintHost) { |
| 41 Init(); |
| 42 } |
| 43 |
| 44 void PrintPreviewDataSource::Init() { |
| 45 #if defined(OS_CHROMEOS) |
| 46 AddLocalizedString("title", IDS_PRINT_PREVIEW_GOOGLE_CLOUD_PRINT_TITLE); |
| 47 #else |
| 48 AddLocalizedString("title", IDS_PRINT_PREVIEW_TITLE); |
| 49 #endif |
| 50 AddLocalizedString("loading", IDS_PRINT_PREVIEW_LOADING); |
| 51 AddLocalizedString("noPlugin", IDS_PRINT_PREVIEW_NO_PLUGIN); |
| 52 AddLocalizedString("launchNativeDialog", IDS_PRINT_PREVIEW_NATIVE_DIALOG); |
| 53 AddLocalizedString("previewFailed", IDS_PRINT_PREVIEW_FAILED); |
| 54 AddLocalizedString("invalidPrinterSettings", |
| 55 IDS_PRINT_PREVIEW_INVALID_PRINTER_SETTINGS); |
| 56 AddLocalizedString("printButton", IDS_PRINT_PREVIEW_PRINT_BUTTON); |
| 57 AddLocalizedString("saveButton", IDS_PRINT_PREVIEW_SAVE_BUTTON); |
| 58 AddLocalizedString("cancelButton", IDS_PRINT_PREVIEW_CANCEL_BUTTON); |
| 59 AddLocalizedString("printing", IDS_PRINT_PREVIEW_PRINTING); |
| 60 AddLocalizedString("printingToPDFInProgress", |
| 61 IDS_PRINT_PREVIEW_PRINTING_TO_PDF_IN_PROGRESS); |
| 62 #if defined(OS_MACOSX) |
| 63 AddLocalizedString("openingPDFInPreview", |
| 64 IDS_PRINT_PREVIEW_OPENING_PDF_IN_PREVIEW); |
| 65 #endif |
| 66 AddLocalizedString("destinationLabel", IDS_PRINT_PREVIEW_DESTINATION_LABEL); |
| 67 AddLocalizedString("copiesLabel", IDS_PRINT_PREVIEW_COPIES_LABEL); |
| 68 AddLocalizedString("examplePageRangeText", |
| 69 IDS_PRINT_PREVIEW_EXAMPLE_PAGE_RANGE_TEXT); |
| 70 AddLocalizedString("layoutLabel", IDS_PRINT_PREVIEW_LAYOUT_LABEL); |
| 71 AddLocalizedString("optionAllPages", IDS_PRINT_PREVIEW_OPTION_ALL_PAGES); |
| 72 AddLocalizedString("optionBw", IDS_PRINT_PREVIEW_OPTION_BW); |
| 73 AddLocalizedString("optionCollate", IDS_PRINT_PREVIEW_OPTION_COLLATE); |
| 74 AddLocalizedString("optionColor", IDS_PRINT_PREVIEW_OPTION_COLOR); |
| 75 AddLocalizedString("optionLandscape", IDS_PRINT_PREVIEW_OPTION_LANDSCAPE); |
| 76 AddLocalizedString("optionPortrait", IDS_PRINT_PREVIEW_OPTION_PORTRAIT); |
| 77 AddLocalizedString("optionTwoSided", IDS_PRINT_PREVIEW_OPTION_TWO_SIDED); |
| 78 AddLocalizedString("pagesLabel", IDS_PRINT_PREVIEW_PAGES_LABEL); |
| 79 AddLocalizedString("pageRangeTextBox", IDS_PRINT_PREVIEW_PAGE_RANGE_TEXT); |
| 80 AddLocalizedString("pageRangeRadio", IDS_PRINT_PREVIEW_PAGE_RANGE_RADIO); |
| 81 AddLocalizedString("printToPDF", IDS_PRINT_PREVIEW_PRINT_TO_PDF); |
| 82 AddLocalizedString("printPreviewSummaryFormatShort", |
| 83 IDS_PRINT_PREVIEW_SUMMARY_FORMAT_SHORT); |
| 84 AddLocalizedString("printPreviewSummaryFormatLong", |
| 85 IDS_PRINT_PREVIEW_SUMMARY_FORMAT_LONG); |
| 86 AddLocalizedString("printPreviewSheetsLabelSingular", |
| 87 IDS_PRINT_PREVIEW_SHEETS_LABEL_SINGULAR); |
| 88 AddLocalizedString("printPreviewSheetsLabelPlural", |
| 89 IDS_PRINT_PREVIEW_SHEETS_LABEL_PLURAL); |
| 90 AddLocalizedString("printPreviewPageLabelSingular", |
| 91 IDS_PRINT_PREVIEW_PAGE_LABEL_SINGULAR); |
| 92 AddLocalizedString("printPreviewPageLabelPlural", |
| 93 IDS_PRINT_PREVIEW_PAGE_LABEL_PLURAL); |
| 94 const string16 shortcut_text(UTF8ToUTF16(kAdvancedPrintShortcut)); |
| 95 #if defined(OS_CHROMEOS) |
| 96 AddString("systemDialogOption", l10n_util::GetStringFUTF16( |
| 97 IDS_PRINT_PREVIEW_CLOUD_DIALOG_OPTION, |
| 98 l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT), |
| 99 shortcut_text)); |
| 100 #else |
| 101 AddString("systemDialogOption", l10n_util::GetStringFUTF16( |
| 102 IDS_PRINT_PREVIEW_SYSTEM_DIALOG_OPTION, |
| 103 shortcut_text)); |
| 104 #endif |
| 105 AddString("cloudPrintDialogOption", |
| 106 l10n_util::GetStringFUTF16( |
| 107 IDS_PRINT_PREVIEW_CLOUD_DIALOG_OPTION_NO_SHORTCUT, |
| 108 l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT))); |
| 109 #if defined(OS_MACOSX) |
| 110 AddLocalizedString("openPdfInPreviewOption", |
| 111 IDS_PRINT_PREVIEW_OPEN_PDF_IN_PREVIEW_APP); |
| 112 #endif |
| 113 AddString("printWithCloudPrintWait", l10n_util::GetStringFUTF16( |
| 114 IDS_PRINT_PREVIEW_PRINT_WITH_CLOUD_PRINT_WAIT, |
| 115 l10n_util::GetStringUTF16(IDS_GOOGLE_CLOUD_PRINT))); |
| 116 AddLocalizedString("pageRangeInstruction", |
| 117 IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION); |
| 118 AddLocalizedString("copiesInstruction", IDS_PRINT_PREVIEW_COPIES_INSTRUCTION); |
| 119 AddLocalizedString("incrementTitle", IDS_PRINT_PREVIEW_INCREMENT_TITLE); |
| 120 AddLocalizedString("decrementTitle", IDS_PRINT_PREVIEW_DECREMENT_TITLE); |
| 121 AddLocalizedString("printPagesLabel", IDS_PRINT_PREVIEW_PRINT_PAGES_LABEL); |
| 122 AddLocalizedString("optionsLabel", IDS_PRINT_PREVIEW_OPTIONS_LABEL); |
| 123 AddLocalizedString("optionHeaderFooter", |
| 124 IDS_PRINT_PREVIEW_OPTION_HEADER_FOOTER); |
| 125 AddLocalizedString("optionFitToPage", |
| 126 IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAGE); |
| 127 AddLocalizedString("optionBackgroundColorsAndImages", |
| 128 IDS_PRINT_PREVIEW_OPTION_BACKGROUND_COLORS_AND_IMAGES); |
| 129 AddLocalizedString("marginsLabel", IDS_PRINT_PREVIEW_MARGINS_LABEL); |
| 130 AddLocalizedString("defaultMargins", IDS_PRINT_PREVIEW_DEFAULT_MARGINS); |
| 131 AddLocalizedString("noMargins", IDS_PRINT_PREVIEW_NO_MARGINS); |
| 132 AddLocalizedString("customMargins", IDS_PRINT_PREVIEW_CUSTOM_MARGINS); |
| 133 AddLocalizedString("minimumMargins", IDS_PRINT_PREVIEW_MINIMUM_MARGINS); |
| 134 AddLocalizedString("top", IDS_PRINT_PREVIEW_TOP_MARGIN_LABEL); |
| 135 AddLocalizedString("bottom", IDS_PRINT_PREVIEW_BOTTOM_MARGIN_LABEL); |
| 136 AddLocalizedString("left", IDS_PRINT_PREVIEW_LEFT_MARGIN_LABEL); |
| 137 AddLocalizedString("right", IDS_PRINT_PREVIEW_RIGHT_MARGIN_LABEL); |
| 138 AddLocalizedString("destinationSearchTitle", |
| 139 IDS_PRINT_PREVIEW_DESTINATION_SEARCH_TITLE); |
| 140 AddLocalizedString("userInfo", IDS_PRINT_PREVIEW_USER_INFO); |
| 141 AddLocalizedString("cloudPrintPromotion", |
| 142 IDS_PRINT_PREVIEW_CLOUD_PRINT_PROMOTION); |
| 143 AddLocalizedString("searchBoxPlaceholder", |
| 144 IDS_PRINT_PREVIEW_SEARCH_BOX_PLACEHOLDER); |
| 145 AddLocalizedString("noDestinationsMessage", |
| 146 IDS_PRINT_PREVIEW_NO_DESTINATIONS_MESSAGE); |
| 147 AddLocalizedString("showAllButtonText", |
| 148 IDS_PRINT_PREVIEW_SHOW_ALL_BUTTON_TEXT); |
| 149 AddLocalizedString("destinationCount", IDS_PRINT_PREVIEW_DESTINATION_COUNT); |
| 150 AddLocalizedString("recentDestinationsTitle", |
| 151 IDS_PRINT_PREVIEW_RECENT_DESTINATIONS_TITLE); |
| 152 AddLocalizedString("localDestinationsTitle", |
| 153 IDS_PRINT_PREVIEW_LOCAL_DESTINATIONS_TITLE); |
| 154 AddLocalizedString("cloudDestinationsTitle", |
| 155 IDS_PRINT_PREVIEW_CLOUD_DESTINATIONS_TITLE); |
| 156 AddLocalizedString("manage", IDS_PRINT_PREVIEW_MANAGE); |
| 157 AddLocalizedString("setupCloudPrinters", |
| 158 IDS_PRINT_PREVIEW_SETUP_CLOUD_PRINTERS); |
| 159 AddLocalizedString("changeDestination", |
| 160 IDS_PRINT_PREVIEW_CHANGE_DESTINATION); |
| 161 AddLocalizedString("offlineForYear", IDS_PRINT_PREVIEW_OFFLINE_FOR_YEAR); |
| 162 AddLocalizedString("offlineForMonth", IDS_PRINT_PREVIEW_OFFLINE_FOR_MONTH); |
| 163 AddLocalizedString("offlineForWeek", IDS_PRINT_PREVIEW_OFFLINE_FOR_WEEK); |
| 164 AddLocalizedString("offline", IDS_PRINT_PREVIEW_OFFLINE); |
| 165 AddLocalizedString("fedexTos", IDS_PRINT_PREVIEW_FEDEX_TOS); |
| 166 AddLocalizedString("tosCheckboxLabel", IDS_PRINT_PREVIEW_TOS_CHECKBOX_LABEL); |
| 167 AddLocalizedString("noDestsPromoTitle", |
| 168 IDS_PRINT_PREVIEW_NO_DESTS_PROMO_TITLE); |
| 169 AddLocalizedString("noDestsPromoBody", IDS_PRINT_PREVIEW_NO_DESTS_PROMO_BODY); |
| 170 AddLocalizedString("noDestsPromoGcpDesc", |
| 171 IDS_PRINT_PREVIEW_NO_DESTS_GCP_DESC); |
| 172 AddLocalizedString("noDestsPromoAddPrinterButtonLabel", |
| 173 IDS_PRINT_PREVIEW_NO_DESTS_PROMO_ADD_PRINTER_BUTTON_LABEL); |
| 174 AddLocalizedString("noDestsPromoNotNowButtonLabel", |
| 175 IDS_PRINT_PREVIEW_NO_DESTS_PROMO_NOT_NOW_BUTTON_LABEL); |
| 176 |
| 177 set_json_path("strings.js"); |
| 178 add_resource_path("print_preview.js", IDR_PRINT_PREVIEW_JS); |
| 179 add_resource_path("images/printer.png", IDR_PRINT_PREVIEW_IMAGES_PRINTER); |
| 180 add_resource_path("images/printer_shared.png", |
| 181 IDR_PRINT_PREVIEW_IMAGES_PRINTER_SHARED); |
| 182 add_resource_path("images/third_party.png", |
| 183 IDR_PRINT_PREVIEW_IMAGES_THIRD_PARTY); |
| 184 add_resource_path("images/third_party_fedex.png", |
| 185 IDR_PRINT_PREVIEW_IMAGES_THIRD_PARTY_FEDEX); |
| 186 add_resource_path("images/google_doc.png", |
| 187 IDR_PRINT_PREVIEW_IMAGES_GOOGLE_DOC); |
| 188 add_resource_path("images/pdf.png", IDR_PRINT_PREVIEW_IMAGES_PDF); |
| 189 add_resource_path("images/mobile.png", IDR_PRINT_PREVIEW_IMAGES_MOBILE); |
| 190 add_resource_path("images/mobile_shared.png", |
| 191 IDR_PRINT_PREVIEW_IMAGES_MOBILE_SHARED); |
| 192 set_default_resource(IDR_PRINT_PREVIEW_HTML); |
| 193 } |
| 194 |
| 195 PrintPreviewDataSource::~PrintPreviewDataSource() { |
| 196 } |
| 197 |
| 198 void PrintPreviewDataSource::StartDataRequest(const std::string& path, |
| 199 bool is_incognito, |
| 200 int request_id) { |
| 201 // Parent class handles most requests except for the print preview data. |
| 202 if (!EndsWith(path, "/print.pdf", true)) { |
| 203 ChromeWebUIDataSource::StartDataRequest(path, is_incognito, request_id); |
| 204 return; |
| 205 } |
| 206 |
| 207 // Print Preview data. |
| 208 scoped_refptr<base::RefCountedBytes> data; |
| 209 std::vector<std::string> url_substr; |
| 210 base::SplitString(path, '/', &url_substr); |
| 211 int preview_ui_id = -1; |
| 212 int page_index = 0; |
| 213 if (url_substr.size() == 3 && |
| 214 base::StringToInt(url_substr[0], &preview_ui_id), |
| 215 base::StringToInt(url_substr[1], &page_index) && |
| 216 preview_ui_id >= 0) { |
| 217 PrintPreviewDataService::GetInstance()->GetDataEntry( |
| 218 preview_ui_id, page_index, &data); |
| 219 } |
| 220 if (data.get()) { |
| 221 SendResponse(request_id, data); |
| 222 return; |
| 223 } |
| 224 // Invalid request. |
| 225 scoped_refptr<base::RefCountedBytes> empty_bytes(new base::RefCountedBytes); |
| 226 SendResponse(request_id, empty_bytes); |
| 227 } |
OLD | NEW |