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

Side by Side Diff: extensions/common/manifest_handlers/background_info.cc

Issue 178253007: Parse manifest file with app.service_worker.script. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: destructor added Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/common/manifest_handlers/background_info.h" 5 #include "extensions/common/manifest_handlers/background_info.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 // static 57 // static
58 GURL BackgroundInfo::GetBackgroundURL(const Extension* extension) { 58 GURL BackgroundInfo::GetBackgroundURL(const Extension* extension) {
59 const BackgroundInfo& info = GetBackgroundInfo(extension); 59 const BackgroundInfo& info = GetBackgroundInfo(extension);
60 if (info.background_scripts_.empty()) 60 if (info.background_scripts_.empty())
61 return info.background_url_; 61 return info.background_url_;
62 return extension->GetResourceURL(kGeneratedBackgroundPageFilename); 62 return extension->GetResourceURL(kGeneratedBackgroundPageFilename);
63 } 63 }
64 64
65 // static 65 // static
66 bool BackgroundInfo::HasGeneratedBackgroundPage(const Extension* extension) {
67 const BackgroundInfo& info = GetBackgroundInfo(extension);
68 return !info.background_scripts_.empty();
69 }
70
71 // static
72 const std::vector<std::string>& BackgroundInfo::GetBackgroundScripts( 66 const std::vector<std::string>& BackgroundInfo::GetBackgroundScripts(
73 const Extension* extension) { 67 const Extension* extension) {
74 return GetBackgroundInfo(extension).background_scripts_; 68 return GetBackgroundInfo(extension).background_scripts_;
75 } 69 }
76 70
77 // static 71 // static
72 std::string BackgroundInfo::GetServiceWorkerScript(const Extension* extension) {
73 return GetBackgroundInfo(extension).service_worker_script_;
74 }
75
76 // static
78 bool BackgroundInfo::HasBackgroundPage(const Extension* extension) { 77 bool BackgroundInfo::HasBackgroundPage(const Extension* extension) {
79 return GetBackgroundInfo(extension).has_background_page(); 78 return GetBackgroundInfo(extension).has_background_page();
80 } 79 }
81 80
82 // static 81 // static
83 bool BackgroundInfo::AllowJSAccess(const Extension* extension) {
84 return GetBackgroundInfo(extension).allow_js_access_;
85 }
86
87 // static
88 bool BackgroundInfo::HasPersistentBackgroundPage(const Extension* extension) { 82 bool BackgroundInfo::HasPersistentBackgroundPage(const Extension* extension) {
89 return GetBackgroundInfo(extension).has_persistent_background_page(); 83 return GetBackgroundInfo(extension).has_persistent_background_page();
90 } 84 }
91 85
92 // static 86 // static
93 bool BackgroundInfo::HasLazyBackgroundPage(const Extension* extension) { 87 bool BackgroundInfo::HasLazyBackgroundPage(const Extension* extension) {
94 return GetBackgroundInfo(extension).has_lazy_background_page(); 88 return GetBackgroundInfo(extension).has_lazy_background_page();
95 } 89 }
96 90
91 // static
92 bool BackgroundInfo::HasGeneratedBackgroundPage(const Extension* extension) {
93 const BackgroundInfo& info = GetBackgroundInfo(extension);
94 return !info.background_scripts_.empty();
95 }
96
97 // static
98 bool BackgroundInfo::HasServiceWorker(const Extension* extension) {
99 return GetBackgroundInfo(extension).has_service_worker();
100 }
101
102 // static
103 bool BackgroundInfo::AllowJSAccess(const Extension* extension) {
104 return GetBackgroundInfo(extension).allow_js_access_;
105 }
106
97 bool BackgroundInfo::Parse(const Extension* extension, base::string16* error) { 107 bool BackgroundInfo::Parse(const Extension* extension, base::string16* error) {
98 const std::string& bg_scripts_key = extension->is_platform_app() ? 108 const std::string& bg_scripts_key = extension->is_platform_app() ?
99 keys::kPlatformAppBackgroundScripts : keys::kBackgroundScripts; 109 keys::kPlatformAppBackgroundScripts : keys::kBackgroundScripts;
100 if (!LoadBackgroundScripts(extension, bg_scripts_key, error) || 110 const std::string& sw_scripts_key =
111 extension->is_platform_app()
112 ? keys::kPlatformAppServiceWorkerScript
113 : ""; // TODO(scheib): Support extensions crbug.com/346885
114 if (!LoadServiceWorkerScript(extension, sw_scripts_key, error) ||
115 !LoadBackgroundScripts(extension, bg_scripts_key, error) ||
101 !LoadBackgroundPage(extension, error) || 116 !LoadBackgroundPage(extension, error) ||
102 !LoadBackgroundPersistent(extension, error) || 117 !LoadBackgroundPersistent(extension, error) ||
103 !LoadAllowJSAccess(extension, error)) { 118 !LoadAllowJSAccess(extension, error)) {
104 return false; 119 return false;
105 } 120 }
106 return true; 121 return true;
107 } 122 }
108 123
124 bool BackgroundInfo::LoadServiceWorkerScript(const Extension* extension,
Jeffrey Yasskin 2014/02/28 01:54:37 The Service Worker is only going to actually work
Yoyo Zhou 2014/02/28 17:59:09 Set *error to a relevant message. By the way, you
scheib 2014/03/03 19:54:00 Done.
125 const std::string& key,
126 base::string16* error) {
127 const base::Value* service_worker_script_value = NULL;
128 if (!extension->manifest()->Get(key, &service_worker_script_value))
129 return true;
130
131 CHECK(service_worker_script_value);
132 if (!service_worker_script_value->GetAsString(&service_worker_script_)) {
133 *error = ASCIIToUTF16(errors::kInvalidServiceWorkerScript);
134 return false;
135 }
136 return true;
137 }
138
109 bool BackgroundInfo::LoadBackgroundScripts(const Extension* extension, 139 bool BackgroundInfo::LoadBackgroundScripts(const Extension* extension,
110 const std::string& key, 140 const std::string& key,
111 base::string16* error) { 141 base::string16* error) {
112 const base::Value* background_scripts_value = NULL; 142 const base::Value* background_scripts_value = NULL;
113 if (!extension->manifest()->Get(key, &background_scripts_value)) 143 if (!extension->manifest()->Get(key, &background_scripts_value))
114 return true; 144 return true;
115 145
146 if (has_service_worker()) {
Jeffrey Yasskin 2014/02/28 01:54:37 Could you put this in BgInfo::Parse so that its co
scheib 2014/03/03 19:54:00 Done.
147 *error = ASCIIToUTF16(errors::kInvalidBackgroundCombination);
148 return false;
149 }
150
116 CHECK(background_scripts_value); 151 CHECK(background_scripts_value);
117 if (background_scripts_value->GetType() != base::Value::TYPE_LIST) { 152 if (background_scripts_value->GetType() != base::Value::TYPE_LIST) {
118 *error = ASCIIToUTF16(errors::kInvalidBackgroundScripts); 153 *error = ASCIIToUTF16(errors::kInvalidBackgroundScripts);
119 return false; 154 return false;
120 } 155 }
121 156
122 const base::ListValue* background_scripts = NULL; 157 const base::ListValue* background_scripts = NULL;
123 background_scripts_value->GetAsList(&background_scripts); 158 background_scripts_value->GetAsList(&background_scripts);
124 for (size_t i = 0; i < background_scripts->GetSize(); ++i) { 159 for (size_t i = 0; i < background_scripts->GetSize(); ++i) {
125 std::string script; 160 std::string script;
126 if (!background_scripts->GetString(i, &script)) { 161 if (!background_scripts->GetString(i, &script)) {
127 *error = ErrorUtils::FormatErrorMessageUTF16( 162 *error = ErrorUtils::FormatErrorMessageUTF16(
128 errors::kInvalidBackgroundScript, base::IntToString(i)); 163 errors::kInvalidBackgroundScript, base::IntToString(i));
129 return false; 164 return false;
130 } 165 }
131 background_scripts_.push_back(script); 166 background_scripts_.push_back(script);
132 } 167 }
133 168
134 return true; 169 return true;
135 } 170 }
136 171
137 bool BackgroundInfo::LoadBackgroundPage(const Extension* extension, 172 bool BackgroundInfo::LoadBackgroundPage(const Extension* extension,
138 const std::string& key, 173 const std::string& key,
139 base::string16* error) { 174 base::string16* error) {
140 const base::Value* background_page_value = NULL; 175 const base::Value* background_page_value = NULL;
141 if (!extension->manifest()->Get(key, &background_page_value)) 176 if (!extension->manifest()->Get(key, &background_page_value))
142 return true; 177 return true;
143 178
144 if (!background_scripts_.empty()) { 179 if (!background_scripts_.empty() || has_service_worker()) {
145 *error = ASCIIToUTF16(errors::kInvalidBackgroundCombination); 180 *error = ASCIIToUTF16(errors::kInvalidBackgroundCombination);
146 return false; 181 return false;
147 } 182 }
148 183
149 std::string background_str; 184 std::string background_str;
150 if (!background_page_value->GetAsString(&background_str)) { 185 if (!background_page_value->GetAsString(&background_str)) {
151 *error = ASCIIToUTF16(errors::kInvalidBackground); 186 *error = ASCIIToUTF16(errors::kInvalidBackground);
152 return false; 187 return false;
153 } 188 }
154 189
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 275
241 BackgroundManifestHandler::~BackgroundManifestHandler() { 276 BackgroundManifestHandler::~BackgroundManifestHandler() {
242 } 277 }
243 278
244 bool BackgroundManifestHandler::Parse(Extension* extension, 279 bool BackgroundManifestHandler::Parse(Extension* extension,
245 base::string16* error) { 280 base::string16* error) {
246 scoped_ptr<BackgroundInfo> info(new BackgroundInfo); 281 scoped_ptr<BackgroundInfo> info(new BackgroundInfo);
247 if (!info->Parse(extension, error)) 282 if (!info->Parse(extension, error))
248 return false; 283 return false;
249 284
250 // Platform apps must have background pages. 285 // Platform apps must have background pages or service workers.
251 if (extension->is_platform_app() && !info->has_background_page()) { 286 if (extension->is_platform_app() && !info->has_background_page() &&
287 !info->has_service_worker()) {
252 *error = ASCIIToUTF16(errors::kBackgroundRequiredForPlatformApps); 288 *error = ASCIIToUTF16(errors::kBackgroundRequiredForPlatformApps);
253 return false; 289 return false;
254 } 290 }
255 // Lazy background pages are incompatible with the webRequest API. 291 // Lazy background pages are incompatible with the webRequest API.
256 if (info->has_lazy_background_page() && 292 if (info->has_lazy_background_page() &&
257 PermissionsData::GetInitialAPIPermissions(extension)->count( 293 PermissionsData::GetInitialAPIPermissions(extension)->count(
258 APIPermission::kWebRequest)) { 294 APIPermission::kWebRequest)) {
259 *error = ASCIIToUTF16(errors::kWebRequestConflictsWithLazyBackground); 295 *error = ASCIIToUTF16(errors::kWebRequestConflictsWithLazyBackground);
260 return false; 296 return false;
261 } 297 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 } 341 }
306 342
307 const std::vector<std::string> BackgroundManifestHandler::Keys() const { 343 const std::vector<std::string> BackgroundManifestHandler::Keys() const {
308 static const char* keys[] = { 344 static const char* keys[] = {
309 keys::kBackgroundAllowJsAccess, 345 keys::kBackgroundAllowJsAccess,
310 keys::kBackgroundPage, 346 keys::kBackgroundPage,
311 keys::kBackgroundPageLegacy, 347 keys::kBackgroundPageLegacy,
312 keys::kBackgroundPersistent, 348 keys::kBackgroundPersistent,
313 keys::kBackgroundScripts, 349 keys::kBackgroundScripts,
314 keys::kPlatformAppBackgroundPage, 350 keys::kPlatformAppBackgroundPage,
315 keys::kPlatformAppBackgroundScripts 351 keys::kPlatformAppBackgroundScripts
not at google - send to devlin 2014/02/28 17:48:14 (partly as a response to Jeffrey's comment) I woul
Yoyo Zhou 2014/02/28 17:59:09 This is the list of keys which, if any is present,
scheib 2014/03/03 19:54:00 Done.
316 }; 352 };
317 return std::vector<std::string>(keys, keys + arraysize(keys)); 353 return std::vector<std::string>(keys, keys + arraysize(keys));
318 } 354 }
319 355
320 } // namespace extensions 356 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698