diff options
author | simonhatch@chromium.org <simonhatch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-09 23:34:21 +0000 |
---|---|---|
committer | simonhatch@chromium.org <simonhatch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-09 23:34:21 +0000 |
commit | 681b4b88d953e52906a61d7f6a09539e0b8b2e03 (patch) | |
tree | 9a2dae4b78e805ddad95375279ea538b9411ca92 | |
parent | dbebe24b6efdcab99bf0674f79c845ff0997fc0c (diff) | |
download | chromium_src-681b4b88d953e52906a61d7f6a09539e0b8b2e03.zip chromium_src-681b4b88d953e52906a61d7f6a09539e0b8b2e03.tar.gz chromium_src-681b4b88d953e52906a61d7f6a09539e0b8b2e03.tar.bz2 |
Skip the cached icons if the icon can change (ie. exe/dll/ico on Windows).
BUG=226918
Review URL: https://chromiumcodereview.appspot.com/13812014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193259 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/icon_loader.cc | 3 | ||||
-rw-r--r-- | chrome/browser/icon_loader.h | 3 | ||||
-rw-r--r-- | chrome/browser/icon_loader_android.cc | 4 | ||||
-rw-r--r-- | chrome/browser/icon_loader_chromeos.cc | 4 | ||||
-rw-r--r-- | chrome/browser/icon_loader_linux.cc | 4 | ||||
-rw-r--r-- | chrome/browser/icon_loader_mac.mm | 4 | ||||
-rw-r--r-- | chrome/browser/icon_loader_win.cc | 11 |
7 files changed, 28 insertions, 5 deletions
diff --git a/chrome/browser/icon_loader.cc b/chrome/browser/icon_loader.cc index 6e16d0c..f8ea311b 100644 --- a/chrome/browser/icon_loader.cc +++ b/chrome/browser/icon_loader.cc @@ -35,7 +35,8 @@ void IconLoader::ReadGroup() { } void IconLoader::OnReadGroup() { - if (!delegate_->OnGroupLoaded(this, group_)) { + if (IsIconMutableFromFilepath(file_path_) || + !delegate_->OnGroupLoaded(this, group_)) { BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind(&IconLoader::ReadIcon, this)); } diff --git a/chrome/browser/icon_loader.h b/chrome/browser/icon_loader.h index 531a9b7..f6cd8a0 100644 --- a/chrome/browser/icon_loader.h +++ b/chrome/browser/icon_loader.h @@ -74,6 +74,9 @@ class IconLoader : public base::RefCountedThreadSafe<IconLoader> { // is in icon_loader_[platform].cc. static IconGroupID ReadGroupIDFromFilepath(const base::FilePath& path); + // Some icons (exe's on windows) can change as they're loaded. + static bool IsIconMutableFromFilepath(const base::FilePath& path); + void ReadGroup(); void OnReadGroup(); void ReadIcon(); diff --git a/chrome/browser/icon_loader_android.cc b/chrome/browser/icon_loader_android.cc index 691745a..5b327a1 100644 --- a/chrome/browser/icon_loader_android.cc +++ b/chrome/browser/icon_loader_android.cc @@ -12,6 +12,10 @@ IconGroupID IconLoader::ReadGroupIDFromFilepath( return 0; } +bool IconLoader::IsIconMutableFromFilepath(const base::FilePath&) { + return false; +} + void IconLoader::ReadIcon() { NOTIMPLEMENTED(); } diff --git a/chrome/browser/icon_loader_chromeos.cc b/chrome/browser/icon_loader_chromeos.cc index 260a45e..2b1f3a1 100644 --- a/chrome/browser/icon_loader_chromeos.cc +++ b/chrome/browser/icon_loader_chromeos.cc @@ -185,6 +185,10 @@ IconGroupID IconLoader::ReadGroupIDFromFilepath( return StringToLowerASCII(filepath.Extension()); } +bool IconLoader::IsIconMutableFromFilepath(const base::FilePath&) { + return false; +} + void IconLoader::ReadIcon() { static base::LazyInstance<IconMapper>::Leaky icon_mapper = LAZY_INSTANCE_INITIALIZER; diff --git a/chrome/browser/icon_loader_linux.cc b/chrome/browser/icon_loader_linux.cc index 6c9ff68..3860ea0 100644 --- a/chrome/browser/icon_loader_linux.cc +++ b/chrome/browser/icon_loader_linux.cc @@ -23,6 +23,10 @@ IconGroupID IconLoader::ReadGroupIDFromFilepath( return base::nix::GetFileMimeType(filepath); } +bool IconLoader::IsIconMutableFromFilepath(const base::FilePath&) { + return false; +} + void IconLoader::ReadIcon() { int size_pixels = 0; switch (icon_size_) { diff --git a/chrome/browser/icon_loader_mac.mm b/chrome/browser/icon_loader_mac.mm index 015dc6b..4a93736 100644 --- a/chrome/browser/icon_loader_mac.mm +++ b/chrome/browser/icon_loader_mac.mm @@ -20,6 +20,10 @@ IconGroupID IconLoader::ReadGroupIDFromFilepath( return filepath.Extension(); } +bool IconLoader::IsIconMutableFromFilepath(const base::FilePath&) { + return false; +} + void IconLoader::ReadIcon() { NSString* group = base::SysUTF8ToNSString(group_); NSWorkspace* workspace = [NSWorkspace sharedWorkspace]; diff --git a/chrome/browser/icon_loader_win.cc b/chrome/browser/icon_loader_win.cc index e686e73..62cb6f0 100644 --- a/chrome/browser/icon_loader_win.cc +++ b/chrome/browser/icon_loader_win.cc @@ -18,11 +18,14 @@ // static IconGroupID IconLoader::ReadGroupIDFromFilepath( const base::FilePath& filepath) { + if (!IsIconMutableFromFilepath(filepath)) + return filepath.Extension(); + return filepath.value(); +} + +bool IconLoader::IsIconMutableFromFilepath(const base::FilePath& filepath) { base::FilePath::StringType extension = filepath.Extension(); - if (extension != L".exe" && extension != L".dll" && extension != L".ico") - return extension; - else - return filepath.value(); + return extension == L".exe" || extension == L".dll" || extension == L".ico"; } void IconLoader::ReadIcon() { |