blob: 76167784e4a2fc8ea8fa1ad39eee3b86250a6814 [file] [log] [blame]
// Copyright 2021 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 "ash/webui/firmware_update_ui/firmware_update_app_ui.h"
#include <memory>
#include <utility>
#include "ash/components/fwupd/firmware_update_manager.h"
#include "ash/grit/ash_firmware_update_app_resources.h"
#include "ash/grit/ash_firmware_update_app_resources_map.h"
#include "ash/webui/firmware_update_ui/mojom/firmware_update.mojom.h"
#include "ash/webui/firmware_update_ui/url_constants.h"
#include "chromeos/strings/grit/chromeos_strings.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
#include "ui/resources/grit/webui_generated_resources.h"
#include "ui/resources/grit/webui_resources.h"
#include "ui/webui/mojo_web_ui_controller.h"
namespace ash {
namespace {
void SetUpWebUIDataSource(content::WebUIDataSource* source,
base::span<const webui::ResourcePath> resources,
int default_resource) {
source->AddResourcePaths(resources);
source->SetDefaultResource(default_resource);
source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER_HTML);
source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER_JS);
source->AddResourcePath("test_loader_util.js",
IDR_WEBUI_JS_TEST_LOADER_UTIL_JS);
}
void AddFirmwareUpdateAppStrings(content::WebUIDataSource* source) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"appTitle", IDS_FIRMWARE_TITLE_TEXT},
{"criticalUpdate", IDS_FIRMWARE_CRITICAL_UPDATE_TEXT},
{"prepareDevice", IDS_FIRMWARE_PREPARE_DEVICE_TEXT},
{"nextButton", IDS_FIRMWARE_NEXT_BUTTON_TEXT},
{"cancelButton", IDS_FIRMWARE_CANCEL_BUTTON_TEXT},
{"doneButton", IDS_FIRMWARE_DONE_BUTTON_TEXT},
{"updateButton", IDS_FIRMWARE_UPDATE_BUTTON_TEXT},
{"updating", IDS_FIRMWARE_UPDATING_TEXT},
{"deviceUpToDate", IDS_FIRMWARE_DEVICE_UP_TO_DATE_TEXT},
{"hasBeenUpdated", IDS_FIRMWARE_HAS_BEEN_UPDATED_TEXT},
{"updatingInfo", IDS_FIRMWARE_UPDATING_INFO_TEXT},
{"installing", IDS_FIRMWARE_INSTALLING_TEXT},
{"restartingBodyText", IDS_FIRMWARE_RESTARTING_BODY_TEXT},
{"restartingFooterText", IDS_FIRMWARE_RESTARTING_FOOTER_TEXT},
{"restartingTitleText", IDS_FIRMWARE_RESTARTING_TITLE_TEXT},
{"upToDate", IDS_FIRMWARE_UP_TO_DATE_TEXT},
{"versionText", IDS_FIRMWARE_VERSION_TEXT}};
source->AddLocalizedStrings(kLocalizedStrings);
source->UseStringsJs();
}
} // namespace
FirmwareUpdateAppUI::FirmwareUpdateAppUI(content::WebUI* web_ui)
: ui::MojoWebDialogUI(web_ui) {
auto source = base::WrapUnique(
content::WebUIDataSource::Create(kChromeUIFirmwareUpdateAppHost));
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::ScriptSrc,
"script-src chrome://resources chrome://test 'self';");
source->DisableTrustedTypesCSP();
const auto resources = base::make_span(kAshFirmwareUpdateAppResources,
kAshFirmwareUpdateAppResourcesSize);
SetUpWebUIDataSource(source.get(), resources,
IDR_ASH_FIRMWARE_UPDATE_APP_INDEX_HTML);
AddFirmwareUpdateAppStrings(source.get());
auto* browser_context = web_ui->GetWebContents()->GetBrowserContext();
content::WebUIDataSource::Add(browser_context, source.release());
}
FirmwareUpdateAppUI::~FirmwareUpdateAppUI() = default;
void FirmwareUpdateAppUI::BindInterface(
mojo::PendingReceiver<firmware_update::mojom::UpdateProvider> receiver) {
FirmwareUpdateManager::Get()->BindInterface(std::move(receiver));
}
WEB_UI_CONTROLLER_TYPE_IMPL(FirmwareUpdateAppUI)
} // namespace ash