Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: chrome/browser/ui/webui/extension_icon_source.cc

Issue 7790002: Fixed extension icon source handling of component extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/webui/extension_icon_source.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/browser/ui/webui/extension_icon_source.h" 5 #include "chrome/browser/ui/webui/extension_icon_source.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/memory/ref_counted_memory.h" 8 #include "base/memory/ref_counted_memory.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
11 #include "base/string_split.h" 11 #include "base/string_split.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
14 #include "base/task.h" 14 #include "base/task.h"
15 #include "base/threading/thread.h" 15 #include "base/threading/thread.h"
16 #include "chrome/browser/extensions/extension_prefs.h" 16 #include "chrome/browser/extensions/extension_prefs.h"
17 #include "chrome/browser/extensions/extension_service.h" 17 #include "chrome/browser/extensions/extension_service.h"
18 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/common/extensions/extension.h" 19 #include "chrome/common/extensions/extension.h"
20 #include "chrome/common/extensions/extension_resource.h" 20 #include "chrome/common/extensions/extension_resource.h"
21 #include "chrome/common/url_constants.h" 21 #include "chrome/common/url_constants.h"
22 #include "grit/component_extension_resources_map.h"
22 #include "grit/theme_resources.h" 23 #include "grit/theme_resources.h"
23 #include "googleurl/src/gurl.h" 24 #include "googleurl/src/gurl.h"
24 #include "skia/ext/image_operations.h" 25 #include "skia/ext/image_operations.h"
25 #include "ui/base/resource/resource_bundle.h" 26 #include "ui/base/resource/resource_bundle.h"
26 #include "ui/gfx/codec/png_codec.h" 27 #include "ui/gfx/codec/png_codec.h"
27 #include "ui/gfx/color_utils.h" 28 #include "ui/gfx/color_utils.h"
28 #include "ui/gfx/skbitmap_operations.h" 29 #include "ui/gfx/skbitmap_operations.h"
29 #include "webkit/glue/image_decoder.h" 30 #include "webkit/glue/image_decoder.h"
30 31
31 namespace { 32 namespace {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 // the request data available for later. 120 // the request data available for later.
120 if (!ParseData(path, request_id)) { 121 if (!ParseData(path, request_id)) {
121 SendDefaultResponse(request_id); 122 SendDefaultResponse(request_id);
122 return; 123 return;
123 } 124 }
124 125
125 ExtensionIconRequest* request = GetData(request_id); 126 ExtensionIconRequest* request = GetData(request_id);
126 ExtensionResource icon = 127 ExtensionResource icon =
127 request->extension->GetIconResource(request->size, request->match); 128 request->extension->GetIconResource(request->size, request->match);
128 129
129 if (icon.relative_path().empty()) 130 if (icon.relative_path().empty()) {
130 LoadIconFailed(request_id); 131 LoadIconFailed(request_id);
131 else 132 } else {
133 if (request->extension->location() == Extension::COMPONENT &&
134 TryLoadingComponentExtensionImage(icon, request_id)) {
135 return;
136 }
132 LoadExtensionImage(icon, request_id); 137 LoadExtensionImage(icon, request_id);
138 }
133 } 139 }
134 140
135 void ExtensionIconSource::LoadIconFailed(int request_id) { 141 void ExtensionIconSource::LoadIconFailed(int request_id) {
136 ExtensionIconRequest* request = GetData(request_id); 142 ExtensionIconRequest* request = GetData(request_id);
137 ExtensionResource icon = 143 ExtensionResource icon =
138 request->extension->GetIconResource(request->size, request->match); 144 request->extension->GetIconResource(request->size, request->match);
139 145
140 if (request->size == Extension::EXTENSION_ICON_BITTY) 146 if (request->size == Extension::EXTENSION_ICON_BITTY)
141 LoadFaviconImage(request_id); 147 LoadFaviconImage(request_id);
142 else 148 else
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 else 182 else
177 decoded = GetDefaultExtensionImage(); 183 decoded = GetDefaultExtensionImage();
178 184
179 *decoded = skia::ImageOperations::Resize( 185 *decoded = skia::ImageOperations::Resize(
180 *decoded, skia::ImageOperations::RESIZE_LANCZOS3, 186 *decoded, skia::ImageOperations::RESIZE_LANCZOS3,
181 request->size, request->size); 187 request->size, request->size);
182 188
183 FinalizeImage(decoded, request_id); 189 FinalizeImage(decoded, request_id);
184 } 190 }
185 191
192 bool ExtensionIconSource::TryLoadingComponentExtensionImage(
193 const ExtensionResource& icon, int request_id) {
194 ExtensionIconRequest* request = GetData(request_id);
195 FilePath directory_path = request->extension->path();
196 FilePath relative_path = directory_path.BaseName().Append(
197 icon.relative_path());
198 for (size_t i = 0; i < kComponentExtensionResourcesSize; ++i) {
199 FilePath bm_resource_path =
200 FilePath().AppendASCII(kComponentExtensionResources[i].name);
201 #if defined(OS_WIN)
202 bm_resource_path = bm_resource_path.NormalizeWindowsPathSeparators();
203 #endif
204 if (relative_path == bm_resource_path) {
dgozman 2011/08/30 10:45:32 Shouldn't you also normalize |relative_path| befor
zel 2011/08/30 22:16:27 i don't think we need to do that that with relativ
205 scoped_ptr<SkBitmap> decoded(LoadImageByResourceId(
206 kComponentExtensionResources[i].value));
207 FinalizeImage(decoded.get(), request_id);
208 return true;
209 }
210 }
211 return false;
212 }
213
186 void ExtensionIconSource::LoadExtensionImage(const ExtensionResource& icon, 214 void ExtensionIconSource::LoadExtensionImage(const ExtensionResource& icon,
187 int request_id) { 215 int request_id) {
188 ExtensionIconRequest* request = GetData(request_id); 216 ExtensionIconRequest* request = GetData(request_id);
189 tracker_map_[next_tracker_id_++] = request_id; 217 tracker_map_[next_tracker_id_++] = request_id;
190 tracker_->LoadImage(request->extension, 218 tracker_->LoadImage(request->extension,
191 icon, 219 icon,
192 gfx::Size(request->size, request->size), 220 gfx::Size(request->size, request->size),
193 ImageLoadingTracker::DONT_CACHE); 221 ImageLoadingTracker::DONT_CACHE);
194 } 222 }
195 223
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 351
324 void ExtensionIconSource::ClearData(int request_id) { 352 void ExtensionIconSource::ClearData(int request_id) {
325 std::map<int, ExtensionIconRequest*>::iterator i = 353 std::map<int, ExtensionIconRequest*>::iterator i =
326 request_map_.find(request_id); 354 request_map_.find(request_id);
327 if (i == request_map_.end()) 355 if (i == request_map_.end())
328 return; 356 return;
329 357
330 delete i->second; 358 delete i->second;
331 request_map_.erase(i); 359 request_map_.erase(i);
332 } 360 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/extension_icon_source.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698