blob: e27b04b5fc39ca082ef448c7f5d9206f13191d6f [file] [log] [blame]
// Copyright 2018 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/ui/webui/webui_util.h"
#include "build/build_config.h"
#include "chrome/common/buildflags.h"
#include "content/public/browser/web_ui_data_source.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
#include "ui/base/webui/web_ui_util.h"
#include "ui/resources/grit/webui_resources.h"
#include "ui/resources/grit/webui_resources_map.h"
#if defined(OS_CHROMEOS)
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_process_platform_part.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#elif defined(OS_WIN) || defined(OS_MAC)
#include "base/enterprise_util.h"
#endif
namespace webui {
namespace {
void SetupPolymer3Defaults(content::WebUIDataSource* source) {
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::ScriptSrc,
"script-src chrome://resources chrome://test 'self';");
// TODO(crbug.com/1098690): Trusted Type Polymer
source->DisableTrustedTypesCSP();
source->UseStringsJs();
source->EnableReplaceI18nInJS();
source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER);
source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER);
}
} // namespace
void SetupWebUIDataSource(content::WebUIDataSource* source,
base::span<const GritResourceMap> resources,
const std::string& generated_path,
int default_resource) {
SetupPolymer3Defaults(source);
for (const GritResourceMap& resource : resources) {
std::string path = resource.name;
if (path.rfind(generated_path, 0) == 0) {
path = path.substr(generated_path.size());
}
source->AddResourcePath(path, resource.value);
}
source->AddResourcePath("", default_resource);
}
#if BUILDFLAG(OPTIMIZE_WEBUI)
void SetupBundledWebUIDataSource(content::WebUIDataSource* source,
base::StringPiece bundled_path,
int bundle,
int default_resource) {
SetupPolymer3Defaults(source);
source->AddResourcePath(bundled_path, bundle);
source->AddResourcePath("", default_resource);
}
#endif
void AddLocalizedStringsBulk(content::WebUIDataSource* html_source,
base::span<const LocalizedString> strings) {
for (const auto& str : strings)
html_source->AddLocalizedString(str.name, str.id);
}
void AddResourcePathsBulk(content::WebUIDataSource* source,
base::span<const ResourcePath> paths) {
for (const auto& path : paths)
source->AddResourcePath(path.path, path.id);
}
void AddResourcePathsBulk(content::WebUIDataSource* source,
base::span<const GritResourceMap> resources) {
for (const auto& resource : resources)
source->AddResourcePath(resource.name, resource.value);
}
bool IsEnterpriseManaged() {
#if defined(OS_CHROMEOS)
policy::BrowserPolicyConnectorChromeOS* connector =
g_browser_process->platform_part()->browser_policy_connector_chromeos();
return connector->IsEnterpriseManaged();
#elif defined(OS_WIN) || defined(OS_MAC)
return base::IsMachineExternallyManaged();
#else
return false;
#endif
}
} // namespace webui