blob: 24faa7952aff09bd208dc6273ab5aed2c8becf0e [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/api/resources_private/resources_private_api.h"
#include <memory>
#include <string>
#include <utility>
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/ui/webui/webui_util.h"
#include "chrome/common/extensions/api/resources_private.h"
#include "chrome/grit/generated_resources.h"
#include "components/strings/grit/components_strings.h"
#include "components/zoom/page_zoom_constants.h"
#include "pdf/buildflags.h"
#include "printing/buildflags/buildflags.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/webui/web_ui_util.h"
#if BUILDFLAG(ENABLE_PDF)
#include "pdf/pdf_features.h"
#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/login/ui/login_display_host.h"
#endif // defined(OS_CHROMEOS)
#endif // BUILDFLAG(ENABLE_PDF)
// To add a new component to this API, simply:
// 1. Add your component to the Component enum in
// chrome/common/extensions/api/resources_private.idl
// 2. Create an AddStringsForMyComponent(base::DictionaryValue * dict) method.
// 3. Tie in that method to the switch statement in Run()
namespace extensions {
namespace {
void AddStringsForIdentity(base::DictionaryValue* dict) {
dict->SetString("window-title",
l10n_util::GetStringUTF16(IDS_EXTENSION_CONFIRM_PERMISSIONS));
}
void AddStringsForPdf(base::DictionaryValue* dict) {
#if BUILDFLAG(ENABLE_PDF)
static constexpr webui::LocalizedString kPdfResources[] = {
{"passwordDialogTitle", IDS_PDF_PASSWORD_DIALOG_TITLE},
{"passwordPrompt", IDS_PDF_NEED_PASSWORD},
{"passwordSubmit", IDS_PDF_PASSWORD_SUBMIT},
{"passwordInvalid", IDS_PDF_PASSWORD_INVALID},
{"pageLoading", IDS_PDF_PAGE_LOADING},
{"pageLoadFailed", IDS_PDF_PAGE_LOAD_FAILED},
{"errorDialogTitle", IDS_PDF_ERROR_DIALOG_TITLE},
{"pageReload", IDS_PDF_PAGE_RELOAD_BUTTON},
{"bookmarks", IDS_PDF_BOOKMARKS},
{"labelPageNumber", IDS_PDF_LABEL_PAGE_NUMBER},
{"tooltipRotateCW", IDS_PDF_TOOLTIP_ROTATE_CW},
{"tooltipDownload", IDS_PDF_TOOLTIP_DOWNLOAD},
{"tooltipPrint", IDS_PDF_TOOLTIP_PRINT},
{"tooltipFitToPage", IDS_PDF_TOOLTIP_FIT_PAGE},
{"tooltipFitToWidth", IDS_PDF_TOOLTIP_FIT_WIDTH},
{"tooltipTwoUpViewEnable", IDS_PDF_TOOLTIP_TWO_UP_VIEW_ENABLE},
{"tooltipTwoUpViewDisable", IDS_PDF_TOOLTIP_TWO_UP_VIEW_DISABLE},
{"tooltipZoomIn", IDS_PDF_TOOLTIP_ZOOM_IN},
{"tooltipZoomOut", IDS_PDF_TOOLTIP_ZOOM_OUT},
#if defined(OS_CHROMEOS)
{"tooltipAnnotate", IDS_PDF_ANNOTATION_ANNOTATE},
{"annotationDocumentTooLarge", IDS_PDF_ANNOTATION_DOCUMENT_TOO_LARGE},
{"annotationDocumentProtected", IDS_PDF_ANNOTATION_DOCUMENT_PROTECTED},
{"annotationDocumentRotated", IDS_PDF_ANNOTATION_DOCUMENT_ROTATED},
{"annotationPen", IDS_PDF_ANNOTATION_PEN},
{"annotationHighlighter", IDS_PDF_ANNOTATION_HIGHLIGHTER},
{"annotationEraser", IDS_PDF_ANNOTATION_ERASER},
{"annotationUndo", IDS_PDF_ANNOTATION_UNDO},
{"annotationRedo", IDS_PDF_ANNOTATION_REDO},
{"annotationExpand", IDS_PDF_ANNOTATION_EXPAND},
{"annotationColorBlack", IDS_PDF_ANNOTATION_COLOR_BLACK},
{"annotationColorRed", IDS_PDF_ANNOTATION_COLOR_RED},
{"annotationColorYellow", IDS_PDF_ANNOTATION_COLOR_YELLOW},
{"annotationColorGreen", IDS_PDF_ANNOTATION_COLOR_GREEN},
{"annotationColorCyan", IDS_PDF_ANNOTATION_COLOR_CYAN},
{"annotationColorPurple", IDS_PDF_ANNOTATION_COLOR_PURPLE},
{"annotationColorBrown", IDS_PDF_ANNOTATION_COLOR_BROWN},
{"annotationColorWhite", IDS_PDF_ANNOTATION_COLOR_WHITE},
{"annotationColorCrimson", IDS_PDF_ANNOTATION_COLOR_CRIMSON},
{"annotationColorAmber", IDS_PDF_ANNOTATION_COLOR_AMBER},
{"annotationColorAvocadoGreen", IDS_PDF_ANNOTATION_COLOR_AVOCADO_GREEN},
{"annotationColorCobaltBlue", IDS_PDF_ANNOTATION_COLOR_COBALT_BLUE},
{"annotationColorDeepPurple", IDS_PDF_ANNOTATION_COLOR_DEEP_PURPLE},
{"annotationColorDarkBrown", IDS_PDF_ANNOTATION_COLOR_DARK_BROWN},
{"annotationColorDarkGrey", IDS_PDF_ANNOTATION_COLOR_DARK_GREY},
{"annotationColorHotPink", IDS_PDF_ANNOTATION_COLOR_HOT_PINK},
{"annotationColorOrange", IDS_PDF_ANNOTATION_COLOR_ORANGE},
{"annotationColorLime", IDS_PDF_ANNOTATION_COLOR_LIME},
{"annotationColorBlue", IDS_PDF_ANNOTATION_COLOR_BLUE},
{"annotationColorViolet", IDS_PDF_ANNOTATION_COLOR_VIOLET},
{"annotationColorTeal", IDS_PDF_ANNOTATION_COLOR_TEAL},
{"annotationColorLightGrey", IDS_PDF_ANNOTATION_COLOR_LIGHT_GREY},
{"annotationColorLightPink", IDS_PDF_ANNOTATION_COLOR_LIGHT_PINK},
{"annotationColorLightOrange", IDS_PDF_ANNOTATION_COLOR_LIGHT_ORANGE},
{"annotationColorLightGreen", IDS_PDF_ANNOTATION_COLOR_LIGHT_GREEN},
{"annotationColorLightBlue", IDS_PDF_ANNOTATION_COLOR_LIGHT_BLUE},
{"annotationColorLavender", IDS_PDF_ANNOTATION_COLOR_LAVENDER},
{"annotationColorLightTeal", IDS_PDF_ANNOTATION_COLOR_LIGHT_TEAL},
{"annotationSize1", IDS_PDF_ANNOTATION_SIZE1},
{"annotationSize2", IDS_PDF_ANNOTATION_SIZE2},
{"annotationSize3", IDS_PDF_ANNOTATION_SIZE3},
{"annotationSize4", IDS_PDF_ANNOTATION_SIZE4},
{"annotationSize8", IDS_PDF_ANNOTATION_SIZE8},
{"annotationSize12", IDS_PDF_ANNOTATION_SIZE12},
{"annotationSize16", IDS_PDF_ANNOTATION_SIZE16},
{"annotationSize20", IDS_PDF_ANNOTATION_SIZE20},
{"annotationFormWarningTitle", IDS_PDF_DISCARD_FORM_CHANGES},
{"annotationFormWarningDetail", IDS_PDF_DISCARD_FORM_CHANGES_DETAIL},
{"annotationFormWarningKeepEditing", IDS_PDF_KEEP_EDITING},
{"annotationFormWarningDiscard", IDS_PDF_DISCARD},
#endif // defined(OS_CHROMEOS)
};
for (const auto& resource : kPdfResources)
dict->SetString(resource.name, l10n_util::GetStringUTF16(resource.id));
dict->SetString("presetZoomFactors", zoom::GetPresetZoomFactorsAsJSON());
#endif // BUILDFLAG(ENABLE_PDF)
}
void AddAdditionalDataForPdf(base::DictionaryValue* dict) {
#if BUILDFLAG(ENABLE_PDF)
dict->SetKey("pdfFormSaveEnabled",
base::Value(base::FeatureList::IsEnabled(
chrome_pdf::features::kSaveEditedPDFForm)));
dict->SetKey("pdfAnnotationsEnabled",
base::Value(base::FeatureList::IsEnabled(
chrome_pdf::features::kPDFAnnotations)));
dict->SetKey("pdfTwoUpViewEnabled",
base::Value(base::FeatureList::IsEnabled(
chrome_pdf::features::kPDFTwoUpView)));
bool enable_printing = true;
#if defined(OS_CHROMEOS)
// For Chrome OS, enable printing only if we are not at OOBE.
enable_printing = !chromeos::LoginDisplayHost::default_host();
#endif // defined(OS_CHROMEOS)
dict->SetKey("printingEnabled", base::Value(enable_printing));
#endif // BUILDFLAG(ENABLE_PDF)
}
} // namespace
namespace get_strings = api::resources_private::GetStrings;
ResourcesPrivateGetStringsFunction::ResourcesPrivateGetStringsFunction() {}
ResourcesPrivateGetStringsFunction::~ResourcesPrivateGetStringsFunction() {}
ExtensionFunction::ResponseAction ResourcesPrivateGetStringsFunction::Run() {
std::unique_ptr<get_strings::Params> params(
get_strings::Params::Create(*args_));
auto dict = std::make_unique<base::DictionaryValue>();
api::resources_private::Component component = params->component;
switch (component) {
case api::resources_private::COMPONENT_IDENTITY:
AddStringsForIdentity(dict.get());
break;
case api::resources_private::COMPONENT_PDF:
AddStringsForPdf(dict.get());
AddAdditionalDataForPdf(dict.get());
break;
case api::resources_private::COMPONENT_NONE:
NOTREACHED();
}
const std::string& app_locale = g_browser_process->GetApplicationLocale();
webui::SetLoadTimeDataDefaults(app_locale, dict.get());
return RespondNow(OneArgument(std::move(dict)));
}
} // namespace extensions