123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2014 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 "ios/web/webui/shared_resources_data_source_ios.h"
- #include <stddef.h>
- #include "base/check.h"
- #include "base/memory/ref_counted_memory.h"
- #include "base/strings/string_util.h"
- #import "ios/web/public/web_client.h"
- #include "net/base/mime_util.h"
- #include "ui/base/webui/resource_path.h"
- #include "ui/base/webui/web_ui_util.h"
- #include "ui/resources/grit/webui_generated_resources.h"
- #include "ui/resources/grit/webui_generated_resources_map.h"
- #if !defined(__has_feature) || !__has_feature(objc_arc)
- #error "This file requires ARC support."
- #endif
- namespace web {
- namespace {
- // Value duplicated from content/public/common/url_constants.h
- // TODO(stuartmorgan): Revisit how to share this in a more maintainable way.
- const char kWebUIResourcesHost[] = "resources";
- // Maps a path name (i.e. "/js/path.js") to a resource map entry. Returns
- // nullptr if not found.
- const webui::ResourcePath* PathToResource(const std::string& path) {
- for (size_t i = 0; i < kWebuiGeneratedResourcesSize; ++i) {
- if (path == kWebuiGeneratedResources[i].path)
- return &kWebuiGeneratedResources[i];
- }
- return nullptr;
- }
- } // namespace
- SharedResourcesDataSourceIOS::SharedResourcesDataSourceIOS() {}
- SharedResourcesDataSourceIOS::~SharedResourcesDataSourceIOS() {}
- std::string SharedResourcesDataSourceIOS::GetSource() const {
- return kWebUIResourcesHost;
- }
- void SharedResourcesDataSourceIOS::StartDataRequest(
- const std::string& path,
- URLDataSourceIOS::GotDataCallback callback) {
- const webui::ResourcePath* resource = PathToResource(path);
- DCHECK(resource) << " path: " << path;
- scoped_refptr<base::RefCountedMemory> bytes;
- WebClient* web_client = GetWebClient();
- int idr = resource ? resource->id : -1;
- if (idr == IDR_WEBUI_CSS_TEXT_DEFAULTS_CSS) {
- std::string css = webui::GetWebUiCssTextDefaults();
- bytes = base::RefCountedString::TakeString(&css);
- } else {
- bytes = web_client->GetDataResourceBytes(idr);
- }
- std::move(callback).Run(bytes.get());
- }
- std::string SharedResourcesDataSourceIOS::GetMimeType(
- const std::string& path) const {
- std::string mime_type;
- net::GetMimeTypeFromFile(base::FilePath().AppendASCII(path), &mime_type);
- return mime_type;
- }
- } // namespace web
|