blob: dbb81facc14963d962a1cedffeac5e527220175e [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/webui/file_manager/resource_loader.h"
#include "ash/constants/ash_features.h"
#include "base/files/file_path.h"
#include "base/strings/string_util.h"
namespace ash {
namespace file_manager {
void AddFilesAppResources(content::WebUIDataSource* source,
const webui::ResourcePath* entries,
size_t size) {
// For Jelly we need to remap some resource dependencies.
std::map<std::string, int> resource_map;
if (ash::features::IsJellyEnabled()) {
for (size_t i = 0; i < size; ++i) {
const base::FilePath file_path(entries[i].path);
if (file_path.Extension() == ".css") {
resource_map[std::string(entries[i].path)] = entries[i].id;
}
}
}
for (size_t i = 0; i < size; ++i) {
std::string path(entries[i].path);
// Only load resources for Files app.
if (base::StartsWith(path, "file_manager/") &&
path.find("untrusted_resources/") == std::string::npos) {
// Files app UI has all paths relative to //ui/file_manager/file_manager/
// so we remove the leading file_manager/ to match the existing paths.
base::ReplaceFirstSubstringAfterOffset(&path, 0, "file_manager/", "");
if (ash::features::IsJellyEnabled()) {
// Serve CSS files that have the suffix _gm3.css as if they were named
// without the suffix, serve the content of foo_gm3.css for requests
// for foo.css.
const base::FilePath file_path(entries[i].path);
if (file_path.Extension() == ".css") {
const std::string gm3_counterpart(
file_path.RemoveExtension().value() + "_gm3" +
file_path.Extension());
auto gm3_resource = resource_map.find(gm3_counterpart);
if (gm3_resource != resource_map.end()) {
source->AddResourcePath(path, gm3_resource->second);
continue;
}
}
}
source->AddResourcePath(path, entries[i].id);
}
}
}
} // namespace file_manager
} // namespace ash