123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // Copyright (c) 2012 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-CHROMIUM file.
- #include "brightray/browser/devtools_ui.h"
- #include <string>
- #include "base/memory/ref_counted_memory.h"
- #include "base/strings/string_util.h"
- #include "base/strings/stringprintf.h"
- #include "content/public/browser/devtools_frontend_host.h"
- #include "content/public/browser/url_data_source.h"
- #include "content/public/browser/web_contents.h"
- #include "content/public/browser/web_ui.h"
- namespace brightray {
- namespace {
- const char kChromeUIDevToolsHost[] = "devtools";
- const char kChromeUIDevToolsBundledPath[] = "bundled";
- std::string PathWithoutParams(const std::string& path) {
- return GURL(std::string("chrome-devtools://devtools/") + path)
- .path()
- .substr(1);
- }
- std::string GetMimeTypeForPath(const std::string& path) {
- std::string filename = PathWithoutParams(path);
- if (base::EndsWith(filename, ".html", base::CompareCase::INSENSITIVE_ASCII)) {
- return "text/html";
- } else if (base::EndsWith(filename, ".css",
- base::CompareCase::INSENSITIVE_ASCII)) {
- return "text/css";
- } else if (base::EndsWith(filename, ".js",
- base::CompareCase::INSENSITIVE_ASCII)) {
- return "application/javascript";
- } else if (base::EndsWith(filename, ".png",
- base::CompareCase::INSENSITIVE_ASCII)) {
- return "image/png";
- } else if (base::EndsWith(filename, ".gif",
- base::CompareCase::INSENSITIVE_ASCII)) {
- return "image/gif";
- } else if (base::EndsWith(filename, ".svg",
- base::CompareCase::INSENSITIVE_ASCII)) {
- return "image/svg+xml";
- } else if (base::EndsWith(filename, ".manifest",
- base::CompareCase::INSENSITIVE_ASCII)) {
- return "text/cache-manifest";
- }
- return "text/html";
- }
- class BundledDataSource : public content::URLDataSource {
- public:
- BundledDataSource() {}
- // content::URLDataSource implementation.
- std::string GetSource() const override { return kChromeUIDevToolsHost; }
- void StartDataRequest(
- const std::string& path,
- const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
- const GotDataCallback& callback) override {
- // Serve request from local bundle.
- std::string bundled_path_prefix(kChromeUIDevToolsBundledPath);
- bundled_path_prefix += "/";
- if (base::StartsWith(path, bundled_path_prefix,
- base::CompareCase::INSENSITIVE_ASCII)) {
- StartBundledDataRequest(path.substr(bundled_path_prefix.length()),
- callback);
- return;
- }
- // We do not handle remote and custom requests.
- callback.Run(nullptr);
- }
- std::string GetMimeType(const std::string& path) const override {
- return GetMimeTypeForPath(path);
- }
- bool ShouldAddContentSecurityPolicy() const override { return false; }
- bool ShouldDenyXFrameOptions() const override { return false; }
- bool ShouldServeMimeTypeAsContentTypeHeader() const override { return true; }
- void StartBundledDataRequest(const std::string& path,
- const GotDataCallback& callback) {
- std::string filename = PathWithoutParams(path);
- base::StringPiece resource =
- content::DevToolsFrontendHost::GetFrontendResource(filename);
- DLOG_IF(WARNING, resource.empty())
- << "Unable to find dev tool resource: " << filename
- << ". If you compiled with debug_devtools=1, try running with "
- "--debug-devtools.";
- scoped_refptr<base::RefCountedStaticMemory> bytes(
- new base::RefCountedStaticMemory(resource.data(), resource.length()));
- callback.Run(bytes.get());
- }
- private:
- ~BundledDataSource() override {}
- DISALLOW_COPY_AND_ASSIGN(BundledDataSource);
- };
- } // namespace
- DevToolsUI::DevToolsUI(content::BrowserContext* browser_context,
- content::WebUI* web_ui)
- : WebUIController(web_ui) {
- web_ui->SetBindings(0);
- content::URLDataSource::Add(browser_context, new BundledDataSource());
- }
- } // namespace brightray
|