OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "chrome/common/extensions/extension.h" | 5 #include "chrome/common/extensions/extension.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 *target = 0; | 182 *target = 0; |
183 *error = ErrorUtils::FormatErrorMessageUTF16( | 183 *error = ErrorUtils::FormatErrorMessageUTF16( |
184 errors::kInvalidLaunchValue, | 184 errors::kInvalidLaunchValue, |
185 key); | 185 key); |
186 return false; | 186 return false; |
187 } | 187 } |
188 } | 188 } |
189 return true; | 189 return true; |
190 } | 190 } |
191 | 191 |
192 std::string SizeToString(const gfx::Size& max_size) { | |
193 return base::IntToString(max_size.width()) + "x" + | |
194 base::IntToString(max_size.height()); | |
195 } | |
196 | |
197 bool ContainsManifestForbiddenPermission(const APIPermissionSet& apis, | 192 bool ContainsManifestForbiddenPermission(const APIPermissionSet& apis, |
198 string16* error) { | 193 string16* error) { |
199 CHECK(error); | 194 CHECK(error); |
200 for (APIPermissionSet::const_iterator i = apis.begin(); | 195 for (APIPermissionSet::const_iterator i = apis.begin(); |
201 i != apis.end(); ++i) { | 196 i != apis.end(); ++i) { |
202 if ((*i)->ManifestEntryForbidden()) { | 197 if ((*i)->ManifestEntryForbidden()) { |
203 *error = ErrorUtils::FormatErrorMessageUTF16( | 198 *error = ErrorUtils::FormatErrorMessageUTF16( |
204 errors::kPermissionNotAllowedInManifest, | 199 errors::kPermissionNotAllowedInManifest, |
205 (*i)->info()->name()); | 200 (*i)->info()->name()); |
206 return true; | 201 return true; |
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 ExtensionIconSet::MatchType match_type) const { | 859 ExtensionIconSet::MatchType match_type) const { |
865 std::string path = icons().Get(size, match_type); | 860 std::string path = icons().Get(size, match_type); |
866 return path.empty() ? GURL() : GetResourceURL(path); | 861 return path.empty() ? GURL() : GetResourceURL(path); |
867 } | 862 } |
868 | 863 |
869 GURL Extension::GetFullLaunchURL() const { | 864 GURL Extension::GetFullLaunchURL() const { |
870 return launch_local_path().empty() ? GURL(launch_web_url()) : | 865 return launch_local_path().empty() ? GURL(launch_web_url()) : |
871 url().Resolve(launch_local_path()); | 866 url().Resolve(launch_local_path()); |
872 } | 867 } |
873 | 868 |
874 void Extension::SetCachedImage(const ExtensionResource& source, | |
875 const SkBitmap& image, | |
876 const gfx::Size& original_size) const { | |
877 DCHECK(source.extension_root() == path()); // The resource must come from | |
878 // this extension. | |
879 const base::FilePath& path = source.relative_path(); | |
880 gfx::Size actual_size(image.width(), image.height()); | |
881 std::string location; | |
882 if (actual_size != original_size) | |
883 location = SizeToString(actual_size); | |
884 image_cache_[ImageCacheKey(path, location)] = image; | |
885 } | |
886 | |
887 bool Extension::HasCachedImage(const ExtensionResource& source, | |
888 const gfx::Size& max_size) const { | |
889 DCHECK(source.extension_root() == path()); // The resource must come from | |
890 // this extension. | |
891 return GetCachedImageImpl(source, max_size) != NULL; | |
892 } | |
893 | |
894 SkBitmap Extension::GetCachedImage(const ExtensionResource& source, | |
895 const gfx::Size& max_size) const { | |
896 DCHECK(source.extension_root() == path()); // The resource must come from | |
897 // this extension. | |
898 SkBitmap* image = GetCachedImageImpl(source, max_size); | |
899 return image ? *image : SkBitmap(); | |
900 } | |
901 | |
902 bool Extension::CanExecuteScriptOnPage(const GURL& document_url, | 869 bool Extension::CanExecuteScriptOnPage(const GURL& document_url, |
903 const GURL& top_frame_url, | 870 const GURL& top_frame_url, |
904 int tab_id, | 871 int tab_id, |
905 const UserScript* script, | 872 const UserScript* script, |
906 std::string* error) const { | 873 std::string* error) const { |
907 base::AutoLock auto_lock(runtime_data_lock_); | 874 base::AutoLock auto_lock(runtime_data_lock_); |
908 // The gallery is special-cased as a restricted URL for scripting to prevent | 875 // The gallery is special-cased as a restricted URL for scripting to prevent |
909 // access to special JS bindings we expose to the gallery (and avoid things | 876 // access to special JS bindings we expose to the gallery (and avoid things |
910 // like extensions removing the "report abuse" link). | 877 // like extensions removing the "report abuse" link). |
911 // TODO(erikkay): This seems like the wrong test. Shouldn't we we testing | 878 // TODO(erikkay): This seems like the wrong test. Shouldn't we we testing |
(...skipping 1535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2447 // TODO(abarth): Should we continue to let extensions override the | 2414 // TODO(abarth): Should we continue to let extensions override the |
2448 // default Content-Security-Policy? | 2415 // default Content-Security-Policy? |
2449 content_security_policy_ = is_platform_app() ? | 2416 content_security_policy_ = is_platform_app() ? |
2450 kDefaultPlatformAppContentSecurityPolicy : | 2417 kDefaultPlatformAppContentSecurityPolicy : |
2451 kDefaultContentSecurityPolicy; | 2418 kDefaultContentSecurityPolicy; |
2452 CHECK(ContentSecurityPolicyIsSecure(content_security_policy_, GetType())); | 2419 CHECK(ContentSecurityPolicyIsSecure(content_security_policy_, GetType())); |
2453 } | 2420 } |
2454 return true; | 2421 return true; |
2455 } | 2422 } |
2456 | 2423 |
2457 SkBitmap* Extension::GetCachedImageImpl(const ExtensionResource& source, | |
2458 const gfx::Size& max_size) const { | |
2459 const base::FilePath& path = source.relative_path(); | |
2460 | |
2461 // Look for exact size match. | |
2462 ImageCache::iterator i = image_cache_.find( | |
2463 ImageCacheKey(path, SizeToString(max_size))); | |
2464 if (i != image_cache_.end()) | |
2465 return &(i->second); | |
2466 | |
2467 // If we have the original size version cached, return that if it's small | |
2468 // enough. | |
2469 i = image_cache_.find(ImageCacheKey(path, std::string())); | |
2470 if (i != image_cache_.end()) { | |
2471 const SkBitmap& image = i->second; | |
2472 if (image.width() <= max_size.width() && | |
2473 image.height() <= max_size.height()) { | |
2474 return &(i->second); | |
2475 } | |
2476 } | |
2477 | |
2478 return NULL; | |
2479 } | |
2480 | |
2481 // Helper method that loads a UserScript object from a dictionary in the | 2424 // Helper method that loads a UserScript object from a dictionary in the |
2482 // content_script list of the manifest. | 2425 // content_script list of the manifest. |
2483 bool Extension::LoadUserScriptHelper(const DictionaryValue* content_script, | 2426 bool Extension::LoadUserScriptHelper(const DictionaryValue* content_script, |
2484 int definition_index, | 2427 int definition_index, |
2485 string16* error, | 2428 string16* error, |
2486 UserScript* result) { | 2429 UserScript* result) { |
2487 // run_at | 2430 // run_at |
2488 if (content_script->HasKey(keys::kRunAt)) { | 2431 if (content_script->HasKey(keys::kRunAt)) { |
2489 std::string run_location; | 2432 std::string run_location; |
2490 if (!content_script->GetString(keys::kRunAt, &run_location)) { | 2433 if (!content_script->GetString(keys::kRunAt, &run_location)) { |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2892 | 2835 |
2893 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 2836 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
2894 const Extension* extension, | 2837 const Extension* extension, |
2895 const PermissionSet* permissions, | 2838 const PermissionSet* permissions, |
2896 Reason reason) | 2839 Reason reason) |
2897 : reason(reason), | 2840 : reason(reason), |
2898 extension(extension), | 2841 extension(extension), |
2899 permissions(permissions) {} | 2842 permissions(permissions) {} |
2900 | 2843 |
2901 } // namespace extensions | 2844 } // namespace extensions |
OLD | NEW |