• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 CHROME_COMMON_EXTENSIONS_MANIFEST_URL_HANDLER_H_
6 #define CHROME_COMMON_EXTENSIONS_MANIFEST_URL_HANDLER_H_
7 
8 #include <string>
9 
10 #include "extensions/common/extension.h"
11 #include "extensions/common/manifest_handler.h"
12 
13 namespace base {
14 class DictionaryValue;
15 }
16 
17 namespace extensions {
18 
19 // A structure to hold various URLs like devtools_page, homepage_url, etc
20 // that may be specified in the manifest of an extension.
21 struct ManifestURL : public Extension::ManifestData {
22   GURL url_;
23 
24   // Returns the DevTools Page for this extension.
25   static const GURL& GetDevToolsPage(const Extension* extension);
26 
27   // Returns the Homepage URL for this extension.
28   // If homepage_url was not specified in the manifest,
29   // this returns the Google Gallery URL. For third-party extensions,
30   // this returns a blank GURL.
31   static const GURL GetHomepageURL(const Extension* extension);
32 
33   // Returns true if the extension specified a valid home page url in the
34   // manifest.
35   static bool SpecifiedHomepageURL(const Extension* extension);
36 
37   // Returns the Update URL for this extension.
38   static const GURL& GetUpdateURL(const Extension* extension);
39 
40   // Returns true if this extension's update URL is the extension gallery.
41   static bool UpdatesFromGallery(const Extension* extension);
42   static bool UpdatesFromGallery(const base::DictionaryValue* manifest);
43 
44   // Returns the About Page for this extension.
45   static const GURL& GetAboutPage(const Extension* extension);
46 
47   // Returns the webstore page URL for this extension.
48   static const GURL GetDetailsURL(const Extension* extension);
49 };
50 
51 // A structure to hold the chrome URL overrides that may be specified
52 // in the manifest of an extension.
53 struct URLOverrides : public Extension::ManifestData {
54   typedef std::map<const std::string, GURL> URLOverrideMap;
55 
56   // Define out of line constructor/destructor to please Clang.
57   URLOverrides();
58   virtual ~URLOverrides();
59 
60   static const URLOverrideMap&
61       GetChromeURLOverrides(const Extension* extension);
62 
63   // A map of chrome:// hostnames (newtab, downloads, etc.) to Extension URLs
64   // which override the handling of those URLs. (see ExtensionOverrideUI).
65   URLOverrideMap chrome_url_overrides_;
66 };
67 
68 // Parses the "devtools_page" manifest key.
69 class DevToolsPageHandler : public ManifestHandler {
70  public:
71   DevToolsPageHandler();
72   virtual ~DevToolsPageHandler();
73 
74   virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
75 
76  private:
77   virtual const std::vector<std::string> Keys() const OVERRIDE;
78 
79   DISALLOW_COPY_AND_ASSIGN(DevToolsPageHandler);
80 };
81 
82 // Parses the "homepage_url" manifest key.
83 class HomepageURLHandler : public ManifestHandler {
84  public:
85   HomepageURLHandler();
86   virtual ~HomepageURLHandler();
87 
88   virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
89 
90  private:
91   virtual const std::vector<std::string> Keys() const OVERRIDE;
92 
93   DISALLOW_COPY_AND_ASSIGN(HomepageURLHandler);
94 };
95 
96 // Parses the "update_url" manifest key.
97 class UpdateURLHandler : public ManifestHandler {
98  public:
99   UpdateURLHandler();
100   virtual ~UpdateURLHandler();
101 
102   virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
103 
104  private:
105   virtual const std::vector<std::string> Keys() const OVERRIDE;
106 
107   DISALLOW_COPY_AND_ASSIGN(UpdateURLHandler);
108 };
109 
110 // Parses the "about_page" manifest key.
111 // TODO(sashab): Make this and any other similar handlers extend from the same
112 // abstract class, URLManifestHandler, which has pure virtual methods for
113 // detecting the required URL type (relative or absolute) and abstracts the
114 // URL parsing logic away.
115 class AboutPageHandler : public ManifestHandler {
116  public:
117   AboutPageHandler();
118   virtual ~AboutPageHandler();
119 
120   virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
121   virtual bool Validate(const Extension* extension,
122                         std::string* error,
123                         std::vector<InstallWarning>* warnings) const OVERRIDE;
124 
125  private:
126   virtual const std::vector<std::string> Keys() const OVERRIDE;
127 
128   DISALLOW_COPY_AND_ASSIGN(AboutPageHandler);
129 };
130 
131 // Parses the "chrome_url_overrides" manifest key.
132 class URLOverridesHandler : public ManifestHandler {
133  public:
134   URLOverridesHandler();
135   virtual ~URLOverridesHandler();
136 
137   virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
138 
139  private:
140   virtual const std::vector<std::string> Keys() const OVERRIDE;
141 
142   DISALLOW_COPY_AND_ASSIGN(URLOverridesHandler);
143 };
144 
145 }  // namespace extensions
146 
147 #endif  // CHROME_COMMON_EXTENSIONS_MANIFEST_URL_HANDLER_H_
148