1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_WEBUI_WEB_UI_CONTROLLER_FACTORY_REGISTRY_H_
6#define CONTENT_BROWSER_WEBUI_WEB_UI_CONTROLLER_FACTORY_REGISTRY_H_
7
8#include "base/memory/singleton.h"
9#include "content/public/browser/web_ui_controller_factory.h"
10
11namespace content {
12
13// A singleton which holds on to all the registered WebUIControllerFactory
14// instances.
15class CONTENT_EXPORT WebUIControllerFactoryRegistry
16    : public WebUIControllerFactory {
17 public:
18  static WebUIControllerFactoryRegistry* GetInstance();
19
20  // WebUIControllerFactory implementation. Each method loops through the same
21  // method on all the factories.
22  virtual WebUIController* CreateWebUIControllerForURL(
23      WebUI* web_ui, const GURL& url) const OVERRIDE;
24  virtual WebUI::TypeID GetWebUIType(BrowserContext* browser_context,
25                                     const GURL& url) const OVERRIDE;
26  virtual bool UseWebUIForURL(BrowserContext* browser_context,
27                              const GURL& url) const OVERRIDE;
28  virtual bool UseWebUIBindingsForURL(BrowserContext* browser_context,
29                                      const GURL& url) const OVERRIDE;
30
31  // Returns true if the given URL can be loaded by Web UI system. This allows
32  // URLs that UseWebUIForURL returns true for, and also URLs that can be loaded
33  // by normal tabs such as javascript: URLs or about:hang.
34  bool IsURLAcceptableForWebUI(BrowserContext* browser_context,
35                               const GURL& url) const;
36
37 private:
38  friend struct DefaultSingletonTraits<WebUIControllerFactoryRegistry>;
39
40  WebUIControllerFactoryRegistry();
41  virtual ~WebUIControllerFactoryRegistry();
42
43  DISALLOW_COPY_AND_ASSIGN(WebUIControllerFactoryRegistry);
44};
45
46}  // namespace content
47
48#endif  // CONTENT_BROWSER_WEBUI_WEB_UI_CONTROLLER_FACTORY_REGISTRY_H_
49