OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 Extension::kUnlimitedStoragePermission, | 242 Extension::kUnlimitedStoragePermission, |
243 Extension::kWebstorePrivatePermission, | 243 Extension::kWebstorePrivatePermission, |
244 }; | 244 }; |
245 const size_t Extension::kNumHostedAppPermissions = | 245 const size_t Extension::kNumHostedAppPermissions = |
246 arraysize(Extension::kHostedAppPermissionNames); | 246 arraysize(Extension::kHostedAppPermissionNames); |
247 | 247 |
248 // We purposefully don't put this into kPermissionNames. | 248 // We purposefully don't put this into kPermissionNames. |
249 const char Extension::kOldUnlimitedStoragePermission[] = "unlimited_storage"; | 249 const char Extension::kOldUnlimitedStoragePermission[] = "unlimited_storage"; |
250 | 250 |
251 // | 251 // |
252 // Extension::RuntimeData | 252 // Extension |
253 // | 253 // |
254 | 254 |
255 Extension::RuntimeData::RuntimeData() | 255 // static |
256 : background_page_ready(false), | |
257 being_upgraded(false) { | |
258 } | |
259 | |
260 Extension::RuntimeData::~RuntimeData() { | |
261 } | 256 } |
262 | 257 |
263 // | 258 // |
264 // Extension | 259 // Extension |
265 // | 260 // |
266 | 261 |
267 // static | 262 // static |
268 scoped_refptr<Extension> Extension::Create(const FilePath& path, | 263 scoped_refptr<Extension> Extension::Create(const FilePath& path, |
269 Location location, | 264 Location location, |
270 const DictionaryValue& value, | 265 const DictionaryValue& value, |
(...skipping 1651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1922 return image_paths; | 1917 return image_paths; |
1923 } | 1918 } |
1924 | 1919 |
1925 GURL Extension::GetFullLaunchURL() const { | 1920 GURL Extension::GetFullLaunchURL() const { |
1926 if (!launch_local_path().empty()) | 1921 if (!launch_local_path().empty()) |
1927 return url().Resolve(launch_local_path()); | 1922 return url().Resolve(launch_local_path()); |
1928 else | 1923 else |
1929 return GURL(launch_web_url()); | 1924 return GURL(launch_web_url()); |
1930 } | 1925 } |
1931 | 1926 |
1932 bool Extension::GetBackgroundPageReady() const { | |
1933 return (GetRuntimeData()->background_page_ready || | |
1934 background_url().is_empty()); | |
1935 } | |
1936 | |
1937 void Extension::SetBackgroundPageReady() const { | |
1938 DCHECK(!background_url().is_empty()); | |
1939 GetRuntimeData()->background_page_ready = true; | |
1940 NotificationService::current()->Notify( | |
1941 NotificationType::EXTENSION_BACKGROUND_PAGE_READY, | |
1942 Source<Extension>(this), | |
1943 NotificationService::NoDetails()); | |
1944 } | |
1945 | |
1946 static std::string SizeToString(const gfx::Size& max_size) { | 1927 static std::string SizeToString(const gfx::Size& max_size) { |
1947 return base::IntToString(max_size.width()) + "x" + | 1928 return base::IntToString(max_size.width()) + "x" + |
1948 base::IntToString(max_size.height()); | 1929 base::IntToString(max_size.height()); |
1949 } | 1930 } |
1950 | 1931 |
1951 // static | 1932 // static |
1952 void Extension::SetScriptingWhitelist( | 1933 void Extension::SetScriptingWhitelist( |
1953 const std::vector<std::string>& whitelist) { | 1934 const std::vector<std::string>& whitelist) { |
1954 ScriptingWhitelist* current_whitelist = | 1935 ScriptingWhitelist* current_whitelist = |
1955 ExtensionConfig::GetSingleton()->whitelist(); | 1936 ExtensionConfig::GetSingleton()->whitelist(); |
1956 current_whitelist->clear(); | 1937 current_whitelist->clear(); |
1957 for (ScriptingWhitelist::const_iterator it = whitelist.begin(); | 1938 for (ScriptingWhitelist::const_iterator it = whitelist.begin(); |
1958 it != whitelist.end(); ++it) { | 1939 it != whitelist.end(); ++it) { |
1959 current_whitelist->push_back(*it); | 1940 current_whitelist->push_back(*it); |
1960 } | 1941 } |
1961 } | 1942 } |
1962 | 1943 |
1963 void Extension::SetCachedImage(const ExtensionResource& source, | 1944 void Extension::SetCachedImage(const ExtensionResource& source, |
1964 const SkBitmap& image, | 1945 const SkBitmap& image, |
1965 const gfx::Size& original_size) const { | 1946 const gfx::Size& original_size) const { |
1966 DCHECK(source.extension_root() == path()); // The resource must come from | 1947 DCHECK(source.extension_root() == path()); // The resource must come from |
1967 // this extension. | 1948 // this extension. |
1968 const FilePath& path = source.relative_path(); | 1949 const FilePath& path = source.relative_path(); |
1969 gfx::Size actual_size(image.width(), image.height()); | 1950 gfx::Size actual_size(image.width(), image.height()); |
1970 if (actual_size == original_size) { | 1951 if (actual_size == original_size) { |
1971 GetRuntimeData()->image_cache_[ | 1952 image_cache_[ImageCacheKey(path, std::string())] = image; |
1972 RuntimeData::ImageCacheKey(path, std::string())] = image; | |
1973 } else { | 1953 } else { |
1974 GetRuntimeData()->image_cache_[ | 1954 image_cache_[ImageCacheKey(path, SizeToString(actual_size))] = image; |
1975 RuntimeData::ImageCacheKey(path, SizeToString(actual_size))] = image; | |
1976 } | 1955 } |
1977 } | 1956 } |
1978 | 1957 |
1979 bool Extension::HasCachedImage(const ExtensionResource& source, | 1958 bool Extension::HasCachedImage(const ExtensionResource& source, |
1980 const gfx::Size& max_size) const { | 1959 const gfx::Size& max_size) const { |
1981 DCHECK(source.extension_root() == path()); // The resource must come from | 1960 DCHECK(source.extension_root() == path()); // The resource must come from |
1982 // this extension. | 1961 // this extension. |
1983 return GetCachedImageImpl(source, max_size) != NULL; | 1962 return GetCachedImageImpl(source, max_size) != NULL; |
1984 } | 1963 } |
1985 | 1964 |
1986 SkBitmap Extension::GetCachedImage(const ExtensionResource& source, | 1965 SkBitmap Extension::GetCachedImage(const ExtensionResource& source, |
1987 const gfx::Size& max_size) const { | 1966 const gfx::Size& max_size) const { |
1988 DCHECK(source.extension_root() == path()); // The resource must come from | 1967 DCHECK(source.extension_root() == path()); // The resource must come from |
1989 // this extension. | 1968 // this extension. |
1990 SkBitmap* image = GetCachedImageImpl(source, max_size); | 1969 SkBitmap* image = GetCachedImageImpl(source, max_size); |
1991 return image ? *image : SkBitmap(); | 1970 return image ? *image : SkBitmap(); |
1992 } | 1971 } |
1993 | 1972 |
1994 SkBitmap* Extension::GetCachedImageImpl(const ExtensionResource& source, | 1973 SkBitmap* Extension::GetCachedImageImpl(const ExtensionResource& source, |
1995 const gfx::Size& max_size) const { | 1974 const gfx::Size& max_size) const { |
1996 const FilePath& path = source.relative_path(); | 1975 const FilePath& path = source.relative_path(); |
1997 | 1976 |
1998 // Look for exact size match. | 1977 // Look for exact size match. |
1999 RuntimeData::ImageCache::iterator i = GetRuntimeData()->image_cache_.find( | 1978 ImageCache::iterator i = image_cache_.find( |
2000 RuntimeData::ImageCacheKey(path, SizeToString(max_size))); | 1979 ImageCacheKey(path, SizeToString(max_size))); |
2001 if (i != GetRuntimeData()->image_cache_.end()) | 1980 if (i != image_cache_.end()) |
2002 return &(i->second); | 1981 return &(i->second); |
2003 | 1982 |
2004 // If we have the original size version cached, return that if it's small | 1983 // If we have the original size version cached, return that if it's small |
2005 // enough. | 1984 // enough. |
2006 i = GetRuntimeData()->image_cache_.find( | 1985 i = image_cache_.find(ImageCacheKey(path, std::string())); |
2007 RuntimeData::ImageCacheKey(path, std::string())); | 1986 if (i != image_cache_.end()) { |
2008 if (i != GetRuntimeData()->image_cache_.end()) { | |
2009 SkBitmap& image = i->second; | 1987 SkBitmap& image = i->second; |
2010 if (image.width() <= max_size.width() && | 1988 if (image.width() <= max_size.width() && |
2011 image.height() <= max_size.height()) | 1989 image.height() <= max_size.height()) |
2012 return &(i->second); | 1990 return &(i->second); |
2013 } | 1991 } |
2014 | 1992 |
2015 return NULL; | 1993 return NULL; |
2016 } | 1994 } |
2017 | 1995 |
2018 ExtensionResource Extension::GetIconResource( | 1996 ExtensionResource Extension::GetIconResource( |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2217 for (ScriptingWhitelist::const_iterator it = whitelist->begin(); | 2195 for (ScriptingWhitelist::const_iterator it = whitelist->begin(); |
2218 it != whitelist->end(); ++it) { | 2196 it != whitelist->end(); ++it) { |
2219 if (id() == *it) { | 2197 if (id() == *it) { |
2220 return true; | 2198 return true; |
2221 } | 2199 } |
2222 } | 2200 } |
2223 | 2201 |
2224 return false; | 2202 return false; |
2225 } | 2203 } |
2226 | 2204 |
2227 Extension::RuntimeData* Extension::GetRuntimeData() const { | |
2228 // TODO(mpcomplete): it would be nice if I could verify we were on the UI | |
2229 // thread, but we're in common and don't have access to BrowserThread. | |
2230 return const_cast<Extension::RuntimeData*>(&runtime_data_); | |
2231 } | |
2232 | |
2233 ExtensionInfo::ExtensionInfo(const DictionaryValue* manifest, | 2205 ExtensionInfo::ExtensionInfo(const DictionaryValue* manifest, |
2234 const std::string& id, | 2206 const std::string& id, |
2235 const FilePath& path, | 2207 const FilePath& path, |
2236 Extension::Location location) | 2208 Extension::Location location) |
2237 : extension_id(id), | 2209 : extension_id(id), |
2238 extension_path(path), | 2210 extension_path(path), |
2239 extension_location(location) { | 2211 extension_location(location) { |
2240 if (manifest) | 2212 if (manifest) |
2241 extension_manifest.reset( | 2213 extension_manifest.reset( |
2242 static_cast<DictionaryValue*>(manifest->DeepCopy())); | 2214 static_cast<DictionaryValue*>(manifest->DeepCopy())); |
2243 } | 2215 } |
2244 | 2216 |
2245 ExtensionInfo::~ExtensionInfo() {} | 2217 ExtensionInfo::~ExtensionInfo() {} |
2246 | 2218 |
2247 UninstalledExtensionInfo::UninstalledExtensionInfo( | 2219 UninstalledExtensionInfo::UninstalledExtensionInfo( |
2248 const Extension& extension) | 2220 const Extension& extension) |
2249 : extension_id(extension.id()), | 2221 : extension_id(extension.id()), |
2250 extension_api_permissions(extension.api_permissions()), | 2222 extension_api_permissions(extension.api_permissions()), |
2251 is_theme(extension.is_theme()), | 2223 is_theme(extension.is_theme()), |
2252 is_app(extension.is_app()), | 2224 is_app(extension.is_app()), |
2253 converted_from_user_script(extension.converted_from_user_script()), | 2225 converted_from_user_script(extension.converted_from_user_script()), |
2254 update_url(extension.update_url()) {} | 2226 update_url(extension.update_url()) {} |
2255 | 2227 |
2256 UninstalledExtensionInfo::~UninstalledExtensionInfo() {} | 2228 UninstalledExtensionInfo::~UninstalledExtensionInfo() {} |
OLD | NEW |