blob: 8e14c260cc715065105720278e70e9fe1f3c7a50 [file] [log] [blame]
// Copyright 2020 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.
#ifndef UI_WEBUI_UNTRUSTED_WEB_UI_CONTROLLER_FACTORY_H_
#define UI_WEBUI_UNTRUSTED_WEB_UI_CONTROLLER_FACTORY_H_
#include "content/public/browser/web_ui_controller_factory.h"
class GURL;
namespace content {
class BrowserContext;
class WebUIController;
} // namespace content
namespace ui {
class WebUIConfig;
// Factory class for WebUIControllers for chrome-untrusted:// URLs.
//
// To add a new WebUIController, subclass ui::WebUIConfig and add it to
// `CreateConfigs()` in the .cc.
class UntrustedWebUIControllerFactory : public content::WebUIControllerFactory {
public:
UntrustedWebUIControllerFactory();
~UntrustedWebUIControllerFactory() override;
UntrustedWebUIControllerFactory(const UntrustedWebUIControllerFactory&) =
delete;
UntrustedWebUIControllerFactory& operator=(
const UntrustedWebUIControllerFactory&) = delete;
content::WebUI::TypeID GetWebUIType(content::BrowserContext* browser_context,
const GURL& url) final;
bool UseWebUIForURL(content::BrowserContext* browser_context,
const GURL& url) final;
std::unique_ptr<content::WebUIController> CreateWebUIControllerForURL(
content::WebUI* web_ui,
const GURL& url) final;
protected:
// Map of hosts to their corresponding WebUIConfigs.
using WebUIConfigMap =
base::flat_map<std::string, std::unique_ptr<ui::WebUIConfig>>;
virtual const WebUIConfigMap& GetWebUIConfigMap() = 0;
private:
// Returns the WebUIConfig for |url| if it's registered and the WebUI is
// enabled. (WebUIs can be disabled based on the profile or feature flags.)
ui::WebUIConfig* GetConfigIfWebUIEnabled(
content::BrowserContext* browser_context,
const GURL& url);
};
} // namespace ui
#endif // UI_WEBUI_UNTRUSTED_WEB_UI_CONTROLLER_FACTORY_H_