Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Side by Side Diff: chrome/common/extensions/api/extension_urls/extension_urls_handler.cc

Issue 11742005: Move [Homepage,Options,Update,DevTools]URL out of Extension (Closed) Base URL: http://git.chromium.org/chromium/src.git@dc_unref_browser_action
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 #include "chrome/common/extensions/api/extension_urls/extension_urls_handler.h"
6
7 #include "base/utf_string_conversions.h"
8 #include "base/values.h"
9 #include "chrome/common/extensions/extension_constants.h"
10 #include "chrome/common/extensions/extension_manifest_constants.h"
11 #include "extensions/common/error_utils.h"
12
13 namespace extensions {
14
15 namespace {
16
17 namespace errors = extension_manifest_errors;
18 namespace keys = extension_manifest_keys;
19
20 const GURL& GetExtensionURL(const Extension* extension,
21 const std::string& key) {
22 ExtensionURL* extension_url = static_cast<ExtensionURL*>(
23 extension->GetManifestData(key));
24 return extension_url ? extension_url->url : GURL::EmptyGURL();
25 }
26
27 } // namespace
28
29 ExtensionURL::ExtensionURL(const GURL& extension_url) : url(extension_url) {
30 }
31
32 ExtensionURL::~ExtensionURL() {
33 }
34
35 // static
36 const GURL& ExtensionURL::GetDevToolsURL(const Extension* extension) {
37 return GetExtensionURL(extension, keys::kDevToolsPage);
38 }
39
40 // static
41 // Not const GURL& because if we have an invalid homepage_url, we try to
42 // construct one, and we cannot return a reference to a temporary.
43 GURL ExtensionURL::GetHomepageURL(const Extension* extension) {
44 const GURL& homepage_url = GetExtensionURL(extension, keys::kHomepageURL);
45 if (homepage_url.is_valid())
46 return homepage_url;
47 return extension->UpdatesFromGallery() ?
48 GURL(extension_urls::GetWebstoreItemDetailURLPrefix() + extension->id()) :
49 GURL::EmptyGURL();
50 }
51
52 // static
53 const GURL& ExtensionURL::GetOptionsURL(const Extension* extension) {
54 return GetExtensionURL(extension, keys::kOptionsPage);
55 }
56
57 // static
58 const GURL& ExtensionURL::GetUpdateURL(const Extension* extension) {
59 return GetExtensionURL(extension, keys::kUpdateURL);
60 }
61
62 DevToolsPageHandler::DevToolsPageHandler() {
63 }
64
65 DevToolsPageHandler::~DevToolsPageHandler() {
66 }
67
68 bool DevToolsPageHandler::Parse(const base::Value* value,
69 Extension* extension,
70 string16* error) {
71 std::string devtools_str;
72 if (!value->GetAsString(&devtools_str)) {
73 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage);
74 return false;
75 }
76
77 extension->SetManifestData(
78 keys::kDevToolsPage,
79 new ExtensionURL(extension->GetResourceURL(devtools_str)));
80 return true;
81 }
82
83 HomepageURLHandler::HomepageURLHandler() {
84 }
85
86 HomepageURLHandler::~HomepageURLHandler() {
87 }
88
89 bool HomepageURLHandler::Parse(const base::Value* value,
90 Extension* extension,
91 string16* error) {
92 std::string homepage_str;
93 if (!value->GetAsString(&homepage_str)) {
94 *error = ErrorUtils::FormatErrorMessageUTF16(
95 errors::kInvalidHomepageURL, "");
96 return false;
97 }
98 GURL homepage_url(homepage_str);
99 if (!homepage_url.is_valid() ||
100 (!homepage_url.SchemeIs("http") && !homepage_url.SchemeIs("https"))) {
101 *error = ErrorUtils::FormatErrorMessageUTF16(
102 errors::kInvalidHomepageURL, homepage_str);
103 return false;
104 }
105
106 extension->SetManifestData(keys::kHomepageURL,
107 new ExtensionURL(homepage_url));
108 return true;
109 }
110
111 OptionsPageHandler::OptionsPageHandler() {
112 }
113
114 OptionsPageHandler::~OptionsPageHandler() {
115 }
116
117 bool OptionsPageHandler::Parse(const base::Value* value,
118 Extension* extension,
119 string16* error) {
120 std::string options_str;
121 if (!value->GetAsString(&options_str)) {
122 *error = ASCIIToUTF16(errors::kInvalidOptionsPage);
123 return false;
124 }
125
126 GURL options_url;
127 if (extension->is_hosted_app()) {
128 // hosted apps require an absolute URL.
129 options_url = GURL(options_str);
130 if (!options_url.is_valid() ||
131 !(options_url.SchemeIs("http") || options_url.SchemeIs("https"))) {
132 *error = ASCIIToUTF16(errors::kInvalidOptionsPageInHostedApp);
133 return false;
134 }
135 } else {
136 options_url = GURL(options_str);
137 if (options_url.is_valid()) {
138 *error = ASCIIToUTF16(errors::kInvalidOptionsPageExpectUrlInPackage);
139 return false;
140 }
141 options_url = extension->GetResourceURL(options_str);
142 if (!options_url.is_valid()) {
143 *error = ASCIIToUTF16(errors::kInvalidOptionsPage);
144 return false;
145 }
146 }
147
148 extension->SetManifestData(keys::kOptionsPage, new ExtensionURL(options_url));
149 return true;
150 }
151
152 UpdateURLHandler::UpdateURLHandler() {
153 }
154
155 UpdateURLHandler::~UpdateURLHandler() {
156 }
157
158 bool UpdateURLHandler::Parse(const base::Value* value,
159 Extension* extension,
160 string16* error) {
161 std::string update_str;
162 if (!value->GetAsString(&update_str)) {
163 *error = ErrorUtils::FormatErrorMessageUTF16(
164 errors::kInvalidUpdateURL, "");
165 return false;
166 }
167 GURL update_url = GURL(update_str);
168 if (!update_url.is_valid() || update_url.has_ref()) {
169 *error = ErrorUtils::FormatErrorMessageUTF16(
170 errors::kInvalidUpdateURL, update_str);
171 return false;
172 }
173
174 extension->SetManifestData(keys::kUpdateURL, new ExtensionURL(update_url));
175 return true;
176 }
177
178 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698