summaryrefslogtreecommitdiffstats
path: root/chrome/common
diff options
context:
space:
mode:
authorfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-06 20:32:23 +0000
committerfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-06 20:32:23 +0000
commitae2e0f96d38961c160bf54962a55eb1f44a0f943 (patch)
treeb20537320a6e9dc635152cad2c3418caddd25ba6 /chrome/common
parentb47d5024a1fcfee3fad78a660adf454775a5ae7a (diff)
downloadchromium_src-ae2e0f96d38961c160bf54962a55eb1f44a0f943.zip
chromium_src-ae2e0f96d38961c160bf54962a55eb1f44a0f943.tar.gz
chromium_src-ae2e0f96d38961c160bf54962a55eb1f44a0f943.tar.bz2
Make sure DecodeIcon is only called from the File thread.
BUG=38521 TEST=None, Chrome should work as before. Review URL: http://codereview.chromium.org/1525009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43751 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common')
-rw-r--r--chrome/common/extensions/extension.cc4
-rw-r--r--chrome/common/extensions/extension.h14
-rw-r--r--chrome/common/extensions/extension_resource.cc12
-rw-r--r--chrome/common/extensions/extension_resource.h4
4 files changed, 21 insertions, 13 deletions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 63d0b28..7e60ee4 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -851,6 +851,8 @@ void Extension::DecodeIcon(Extension* extension,
void Extension::DecodeIconFromPath(const FilePath& icon_path,
Icons icon_size,
scoped_ptr<SkBitmap>* result) {
+ ExtensionResource::CheckFileAccessFromFileThread();
+
if (icon_path.empty())
return;
@@ -1492,8 +1494,8 @@ void Extension::SetCachedImage(const ExtensionResource& source,
DCHECK(source.extension_root() == path()); // The resource must come from
// this extension.
image_cache_[source.relative_path()] = image;
-
}
+
bool Extension::HasCachedImage(const ExtensionResource& source) {
DCHECK(source.extension_root() == path()); // The resource must come from
// this extension.
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
index 7559162..165436a 100644
--- a/chrome/common/extensions/extension.h
+++ b/chrome/common/extensions/extension.h
@@ -187,20 +187,18 @@ class Extension {
static bool IsPrivilegeIncrease(Extension* old_extension,
Extension* new_extension);
- // *** HITS THE FILESYSTEM. Do not call on UI thread! ***
// Given an extension and icon size, read it if present and decode it into
- // result.
- // NOTE: If you need the icon on the UI thread, please use the
- // ImageLoadingTracker, which uses the File thread internally to decode.
+ // result. In the browser process, this will DCHECK if not called on the
+ // file thread. To easily load extension images on the UI thread, see
+ // ImageLoadingTracker.
static void DecodeIcon(Extension* extension,
Icons icon_size,
scoped_ptr<SkBitmap>* result);
- // *** HITS THE FILESYSTEM. Do not call on UI thread! ***
// Given an icon_path and icon size, read it if present and decode it into
- // result.
- // NOTE: If you need the icon on the UI thread, please use the
- // ImageLoadingTracker, which uses the File thread internally to decode.
+ // result. In the browser process, this will DCHECK if not called on the
+ // file thread. To easily load extension images on the UI thread, see
+ // ImageLoadingTracker.
static void DecodeIconFromPath(const FilePath& icon_path,
Icons icon_size,
scoped_ptr<SkBitmap>* result);
diff --git a/chrome/common/extensions/extension_resource.cc b/chrome/common/extensions/extension_resource.cc
index eda2d26..eb5b3626 100644
--- a/chrome/common/extensions/extension_resource.cc
+++ b/chrome/common/extensions/extension_resource.cc
@@ -36,8 +36,7 @@ const FilePath& ExtensionResource::GetFilePathOnAnyThreadHack() const {
}
const FilePath& ExtensionResource::GetFilePath() const {
- DCHECK(!check_for_file_thread_ ||
- ExtensionResource::file_thread_id_ == PlatformThread::CurrentId());
+ ExtensionResource::CheckFileAccessFromFileThread();
return GetFilePathOnAnyThreadHack();
}
@@ -71,11 +70,16 @@ FilePath ExtensionResource::GetFilePathOnAnyThreadHack(
// static
FilePath ExtensionResource::GetFilePath(
const FilePath& extension_root, const FilePath& relative_path) {
- DCHECK(!check_for_file_thread_ ||
- ExtensionResource::file_thread_id_ == PlatformThread::CurrentId());
+ CheckFileAccessFromFileThread();
return GetFilePathOnAnyThreadHack(extension_root, relative_path);
}
+// static
+void ExtensionResource::CheckFileAccessFromFileThread() {
+ DCHECK(!check_for_file_thread_ ||
+ file_thread_id_ == PlatformThread::CurrentId());
+}
+
// Unit-testing helpers.
FilePath::StringType ExtensionResource::NormalizeSeperators(
FilePath::StringType path) const {
diff --git a/chrome/common/extensions/extension_resource.h b/chrome/common/extensions/extension_resource.h
index 755c959..8856414 100644
--- a/chrome/common/extensions/extension_resource.h
+++ b/chrome/common/extensions/extension_resource.h
@@ -46,6 +46,10 @@ class ExtensionResource {
check_for_file_thread_ = true;
}
+ // Checks whether we are running on the file thread and DCHECKs if not. Relies
+ // on set_file_thread_id being called first, otherwise, it will not DCHECK.
+ static void CheckFileAccessFromFileThread();
+
// Getters
const FilePath& extension_root() const { return extension_root_; }
const FilePath& relative_path() const { return relative_path_; }