blob: d97d38c78b9c2b74d686bddae09fa9d214e16e3f [file] [log] [blame]
[email protected]44e329a2012-07-14 01:13:061// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]ea0f18b2009-07-27 22:16:112// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]8f9d4eb2011-02-05 01:39:105#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_
[email protected]811bfe372009-07-01 08:46:257
dchengc963c7142016-04-08 03:55:228#include <memory>
[email protected]b27257562009-11-16 23:28:269#include <string>
10
xidachen2f98b6b2016-10-31 21:18:0611#include "base/macros.h"
rockot3b99b8e2014-10-14 21:54:3512#include "chrome/common/extensions/chrome_manifest_url_handlers.h"
[email protected]8823c502014-05-22 03:11:1613#include "components/favicon_base/favicon_callback.h"
[email protected]e14c959122012-01-13 16:58:2514#include "content/public/browser/web_ui_controller.h"
[email protected]811bfe372009-07-01 08:46:2515
[email protected]443e9312013-05-06 06:17:3416class Profile;
17
[email protected]44e329a2012-07-14 01:13:0618namespace content {
[email protected]70482642012-12-19 22:25:2419class BrowserContext;
[email protected]44e329a2012-07-14 01:13:0620}
21
[email protected]443e9312013-05-06 06:17:3422namespace user_prefs {
[email protected]c753f142013-02-10 13:14:0423class PrefRegistrySyncable;
[email protected]443e9312013-05-06 06:17:3424}
[email protected]86c008e82009-08-28 20:26:0525
rdevlin.cronina32a0902016-11-09 15:50:2026// A collection of methods to handle Chrome URL overrides that are managed by
27// extensions (such as overriding the new tab page).
28// TODO(devlin): Rename this class to ExtensionURLOverrides.
29class ExtensionWebUI {
[email protected]811bfe372009-07-01 08:46:2530 public:
[email protected]e2194742010-08-12 05:54:3431 static const char kExtensionURLOverrides[];
[email protected]c5b8ab42010-04-14 22:06:5032
[email protected]3d7474ff2011-07-27 17:47:3733 static bool HandleChromeURLOverride(GURL* url,
34 content::BrowserContext* browser_context);
35 static bool HandleChromeURLOverrideReverse(
36 GURL* url, content::BrowserContext* browser_context);
[email protected]86c008e82009-08-28 20:26:0537
rdevlin.cronin5fafa5a2015-12-30 03:42:0238 // Initialize the Chrome URL overrides. This must happen *before* any further
39 // calls for URL overrides!
40 static void InitializeChromeURLOverrides(Profile* profile);
41
42 // Validate the Chrome URL overrides, ensuring that each is valid and points
43 // to an existing extension. To be called once all extensions are loaded.
44 static void ValidateChromeURLOverrides(Profile* profile);
45
46 // Add new Chrome URL overrides. If an entry exists, it is marked as active.
47 // If one doesn't exist, it is added at the beginning of the list of
48 // overrides (meaning it has priority).
49 static void RegisterOrActivateChromeURLOverrides(
50 Profile* profile,
[email protected]636ee43282013-01-12 15:58:0051 const extensions::URLOverrides::URLOverrideMap& overrides);
rdevlin.cronin5fafa5a2015-12-30 03:42:0252
53 // Deactivate overrides without removing them from the list or modifying their
54 // positions in the list.
55 static void DeactivateChromeURLOverrides(
56 Profile* profile,
[email protected]636ee43282013-01-12 15:58:0057 const extensions::URLOverrides::URLOverrideMap& overrides);
rdevlin.cronin5fafa5a2015-12-30 03:42:0258
59 // Completely unregister overrides, removing them from the list.
60 static void UnregisterChromeURLOverrides(
61 Profile* profile,
62 const extensions::URLOverrides::URLOverrideMap& overrides);
[email protected]86c008e82009-08-28 20:26:0563
64 // Called from BrowserPrefs
[email protected]37ca3fe02013-07-05 15:32:4465 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
[email protected]86c008e82009-08-28 20:26:0566
[email protected]4b91f1f2010-07-14 20:01:0467 // Get the favicon for the extension by getting an icon from the manifest.
[email protected]0ea3db52012-12-07 01:32:0168 // Note. |callback| is always run asynchronously.
Sylvain Defresne6de2926e2019-05-21 14:15:1069 static void GetFaviconForURL(Profile* profile,
70 const GURL& page_url,
71 favicon_base::FaviconResultsCallback callback);
[email protected]591948962010-03-12 19:37:5272
[email protected]811bfe372009-07-01 08:46:2573 private:
[email protected]86c008e82009-08-28 20:26:0574 // Unregister the specified override, and if it's the currently active one,
75 // ensure that something takes its place.
76 static void UnregisterAndReplaceOverride(const std::string& page,
77 Profile* profile,
[email protected]f3a1c642011-07-12 19:15:0378 base::ListValue* list,
[email protected]5d30f92bf2012-08-03 08:43:3779 const base::Value* override);
[email protected]811bfe372009-07-01 08:46:2580};
81
[email protected]8f9d4eb2011-02-05 01:39:1082#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_