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 the Update URL for this extension. 34 static const GURL& GetUpdateURL(const Extension* extension); 35 36 // Returns true if this extension's update URL is the extension gallery. 37 static bool UpdatesFromGallery(const Extension* extension); 38 static bool UpdatesFromGallery(const base::DictionaryValue* manifest); 39 40 // Returns the Options Page for this extension. 41 static const GURL& GetOptionsPage(const Extension* extension); 42 43 // Returns the webstore page URL for this extension. 44 static const GURL GetDetailsURL(const Extension* extension); 45 }; 46 47 // A structure to hold the chrome URL overrides that may be specified 48 // in the manifest of an extension. 49 struct URLOverrides : public Extension::ManifestData { 50 typedef std::map<const std::string, GURL> URLOverrideMap; 51 52 // Define out of line constructor/destructor to please Clang. 53 URLOverrides(); 54 virtual ~URLOverrides(); 55 56 static const URLOverrideMap& 57 GetChromeURLOverrides(const Extension* extension); 58 59 // A map of chrome:// hostnames (newtab, downloads, etc.) to Extension URLs 60 // which override the handling of those URLs. (see ExtensionOverrideUI). 61 URLOverrideMap chrome_url_overrides_; 62 }; 63 64 // Parses the "devtools_page" manifest key. 65 class DevToolsPageHandler : public ManifestHandler { 66 public: 67 DevToolsPageHandler(); 68 virtual ~DevToolsPageHandler(); 69 70 virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE; 71 72 private: 73 virtual const std::vector<std::string> Keys() const OVERRIDE; 74 75 DISALLOW_COPY_AND_ASSIGN(DevToolsPageHandler); 76 }; 77 78 // Parses the "homepage_url" manifest key. 79 class HomepageURLHandler : public ManifestHandler { 80 public: 81 HomepageURLHandler(); 82 virtual ~HomepageURLHandler(); 83 84 virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE; 85 86 private: 87 virtual const std::vector<std::string> Keys() const OVERRIDE; 88 89 DISALLOW_COPY_AND_ASSIGN(HomepageURLHandler); 90 }; 91 92 // Parses the "update_url" manifest key. 93 class UpdateURLHandler : public ManifestHandler { 94 public: 95 UpdateURLHandler(); 96 virtual ~UpdateURLHandler(); 97 98 virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE; 99 100 private: 101 virtual const std::vector<std::string> Keys() const OVERRIDE; 102 103 DISALLOW_COPY_AND_ASSIGN(UpdateURLHandler); 104 }; 105 106 // Parses the "options_page" manifest key. 107 class OptionsPageHandler : public ManifestHandler { 108 public: 109 OptionsPageHandler(); 110 virtual ~OptionsPageHandler(); 111 112 virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE; 113 virtual bool Validate(const Extension* extension, 114 std::string* error, 115 std::vector<InstallWarning>* warnings) const OVERRIDE; 116 117 private: 118 virtual const std::vector<std::string> Keys() const OVERRIDE; 119 120 DISALLOW_COPY_AND_ASSIGN(OptionsPageHandler); 121 }; 122 123 // Parses the "chrome_url_overrides" manifest key. 124 class URLOverridesHandler : public ManifestHandler { 125 public: 126 URLOverridesHandler(); 127 virtual ~URLOverridesHandler(); 128 129 virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE; 130 131 private: 132 virtual const std::vector<std::string> Keys() const OVERRIDE; 133 134 DISALLOW_COPY_AND_ASSIGN(URLOverridesHandler); 135 }; 136 137 } // namespace extensions 138 139 #endif // CHROME_COMMON_EXTENSIONS_MANIFEST_URL_HANDLER_H_ 140