diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-10 21:27:25 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-10 21:27:25 +0000 |
commit | 07aa98646a9a57f4e5f5fdbf9012b34d0936492f (patch) | |
tree | 12ab41fad3a0b128f82dd7cbca61e54cbc501d26 /chrome/browser/ui/webui/extension_icon_source.cc | |
parent | 6cad5bfd4d5ad1f3ebf80c53bf205459fdef8ee3 (diff) | |
download | chromium_src-07aa98646a9a57f4e5f5fdbf9012b34d0936492f.zip chromium_src-07aa98646a9a57f4e5f5fdbf9012b34d0936492f.tar.gz chromium_src-07aa98646a9a57f4e5f5fdbf9012b34d0936492f.tar.bz2 |
Handle case where we can't find icon for extension
in ExtensionIconSource.
This prevents a crash when opening the extensions web ui page with an extension that has no icon.
BUG=none
TEST=manual
Review URL: http://codereview.chromium.org/6651013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77696 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/webui/extension_icon_source.cc')
-rw-r--r-- | chrome/browser/ui/webui/extension_icon_source.cc | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/chrome/browser/ui/webui/extension_icon_source.cc b/chrome/browser/ui/webui/extension_icon_source.cc index 321cd55..1dd64a2 100644 --- a/chrome/browser/ui/webui/extension_icon_source.cc +++ b/chrome/browser/ui/webui/extension_icon_source.cc @@ -123,15 +123,16 @@ void ExtensionIconSource::StartDataRequest(const std::string& path, ExtensionResource icon = request->extension->GetIconResource(request->size, request->match); - // We fall back to multiple sources, using the following order: - // 1) The icons as listed in the extension / app manifests. - // 2) If a 16px icon and the extension has a launch URL, see if Chrome - // has a corresponding favicon. - // 3) If still no matches, load the default extension / application icon. - if (!icon.relative_path().empty()) { + if (icon.relative_path().empty()) + LoadIconFailed(request_id); + else LoadExtensionImage(icon, request_id); - return; - } +} + +void ExtensionIconSource::LoadIconFailed(int request_id) { + ExtensionIconRequest* request = GetData(request_id); + ExtensionResource icon = + request->extension->GetIconResource(request->size, request->match); if (request->size == Extension::EXTENSION_ICON_BITTY) LoadFaviconImage(request_id); @@ -236,7 +237,11 @@ void ExtensionIconSource::OnImageLoaded(SkBitmap* image, int index) { int request_id = tracker_map_[index]; tracker_map_.erase(tracker_map_.find(index)); - FinalizeImage(image, request_id); + + if (!image || image->empty()) + LoadIconFailed(request_id); + else + FinalizeImage(image, request_id); } bool ExtensionIconSource::ParseData(const std::string& path, |