OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/features/simple_feature.h" | 5 #include "extensions/common/features/simple_feature.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 extension_types["hosted_app"] = Manifest::TYPE_HOSTED_APP; | 256 extension_types["hosted_app"] = Manifest::TYPE_HOSTED_APP; |
257 extension_types["platform_app"] = Manifest::TYPE_PLATFORM_APP; | 257 extension_types["platform_app"] = Manifest::TYPE_PLATFORM_APP; |
258 extension_types["shared_module"] = Manifest::TYPE_SHARED_MODULE; | 258 extension_types["shared_module"] = Manifest::TYPE_SHARED_MODULE; |
259 | 259 |
260 contexts["blessed_extension"] = Feature::BLESSED_EXTENSION_CONTEXT; | 260 contexts["blessed_extension"] = Feature::BLESSED_EXTENSION_CONTEXT; |
261 contexts["unblessed_extension"] = Feature::UNBLESSED_EXTENSION_CONTEXT; | 261 contexts["unblessed_extension"] = Feature::UNBLESSED_EXTENSION_CONTEXT; |
262 contexts["content_script"] = Feature::CONTENT_SCRIPT_CONTEXT; | 262 contexts["content_script"] = Feature::CONTENT_SCRIPT_CONTEXT; |
263 contexts["web_page"] = Feature::WEB_PAGE_CONTEXT; | 263 contexts["web_page"] = Feature::WEB_PAGE_CONTEXT; |
264 contexts["blessed_web_page"] = Feature::BLESSED_WEB_PAGE_CONTEXT; | 264 contexts["blessed_web_page"] = Feature::BLESSED_WEB_PAGE_CONTEXT; |
265 contexts["webui"] = Feature::WEBUI_CONTEXT; | 265 contexts["webui"] = Feature::WEBUI_CONTEXT; |
266 contexts["extension_service_worker"] = Feature::SERVICE_WORKER_CONTEXT; | |
Devlin
2016/04/13 19:46:31
We should have this behind a flag (or just an inte
lazyboy
2016/04/14 02:07:53
I've added a bool in feature_util, used that to gu
Devlin
2016/04/14 22:34:52
See suggestion in ipc messages.
| |
266 | 267 |
267 locations["component"] = SimpleFeature::COMPONENT_LOCATION; | 268 locations["component"] = SimpleFeature::COMPONENT_LOCATION; |
268 locations["external_component"] = | 269 locations["external_component"] = |
269 SimpleFeature::EXTERNAL_COMPONENT_LOCATION; | 270 SimpleFeature::EXTERNAL_COMPONENT_LOCATION; |
270 locations["policy"] = SimpleFeature::POLICY_LOCATION; | 271 locations["policy"] = SimpleFeature::POLICY_LOCATION; |
271 | 272 |
272 platforms["chromeos"] = Feature::CHROMEOS_PLATFORM; | 273 platforms["chromeos"] = Feature::CHROMEOS_PLATFORM; |
273 platforms["linux"] = Feature::LINUX_PLATFORM; | 274 platforms["linux"] = Feature::LINUX_PLATFORM; |
274 platforms["mac"] = Feature::MACOSX_PLATFORM; | 275 platforms["mac"] = Feature::MACOSX_PLATFORM; |
275 platforms["win"] = Feature::WIN_PLATFORM; | 276 platforms["win"] = Feature::WIN_PLATFORM; |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
432 if (extension) { | 433 if (extension) { |
433 Availability result = IsAvailableToManifest(extension->id(), | 434 Availability result = IsAvailableToManifest(extension->id(), |
434 extension->GetType(), | 435 extension->GetType(), |
435 extension->location(), | 436 extension->location(), |
436 extension->manifest_version(), | 437 extension->manifest_version(), |
437 platform); | 438 platform); |
438 if (!result.is_available()) | 439 if (!result.is_available()) |
439 return result; | 440 return result; |
440 } | 441 } |
441 | 442 |
443 // TODO(lazyboy): This isn't quite right for Extension Service Worker | |
444 // extension API calls, since there's no guarantee that the extension is | |
445 // "active" in current renderer process when the API permission check is | |
446 // done. | |
442 if (!contexts_.empty() && !ContainsValue(contexts_, context)) | 447 if (!contexts_.empty() && !ContainsValue(contexts_, context)) |
443 return CreateAvailability(INVALID_CONTEXT, context); | 448 return CreateAvailability(INVALID_CONTEXT, context); |
444 | 449 |
445 // TODO(kalman): Consider checking |matches_| regardless of context type. | 450 // TODO(kalman): Consider checking |matches_| regardless of context type. |
446 // Fewer surprises, and if the feature configuration wants to isolate | 451 // Fewer surprises, and if the feature configuration wants to isolate |
447 // "matches" from say "blessed_extension" then they can use complex features. | 452 // "matches" from say "blessed_extension" then they can use complex features. |
448 if ((context == WEB_PAGE_CONTEXT || context == WEBUI_CONTEXT) && | 453 if ((context == WEB_PAGE_CONTEXT || context == WEBUI_CONTEXT) && |
449 !matches_.MatchesURL(url)) { | 454 !matches_.MatchesURL(url)) { |
450 return CreateAvailability(INVALID_URL, url); | 455 return CreateAvailability(INVALID_URL, url); |
451 } | 456 } |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
629 bool SimpleFeature::IsValidExtensionId(const std::string& extension_id) { | 634 bool SimpleFeature::IsValidExtensionId(const std::string& extension_id) { |
630 // Belt-and-suspenders philosophy here. We should be pretty confident by this | 635 // Belt-and-suspenders philosophy here. We should be pretty confident by this |
631 // point that we've validated the extension ID format, but in case something | 636 // point that we've validated the extension ID format, but in case something |
632 // slips through, we avoid a class of attack where creative ID manipulation | 637 // slips through, we avoid a class of attack where creative ID manipulation |
633 // leads to hash collisions. | 638 // leads to hash collisions. |
634 // 128 bits / 4 = 32 mpdecimal characters | 639 // 128 bits / 4 = 32 mpdecimal characters |
635 return (extension_id.length() == 32); | 640 return (extension_id.length() == 32); |
636 } | 641 } |
637 | 642 |
638 } // namespace extensions | 643 } // namespace extensions |
OLD | NEW |