OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/extensions/extension_icon_source.h" | 5 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/memory/ref_counted_memory.h" | 9 #include "base/memory/ref_counted_memory.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 | 53 |
54 ExtensionIconSource::ExtensionIconSource(Profile* profile) | 54 ExtensionIconSource::ExtensionIconSource(Profile* profile) |
55 : DataSource(chrome::kChromeUIExtensionIconHost, MessageLoop::current()), | 55 : DataSource(chrome::kChromeUIExtensionIconHost, MessageLoop::current()), |
56 profile_(profile), | 56 profile_(profile), |
57 next_tracker_id_(0) { | 57 next_tracker_id_(0) { |
58 tracker_.reset(new ImageLoadingTracker(this)); | 58 tracker_.reset(new ImageLoadingTracker(this)); |
59 } | 59 } |
60 | 60 |
61 struct ExtensionIconSource::ExtensionIconRequest { | 61 struct ExtensionIconSource::ExtensionIconRequest { |
62 int request_id; | 62 int request_id; |
63 const Extension* extension; | 63 const extensions::Extension* extension; |
64 bool grayscale; | 64 bool grayscale; |
65 int size; | 65 int size; |
66 ExtensionIconSet::MatchType match; | 66 ExtensionIconSet::MatchType match; |
67 }; | 67 }; |
68 | 68 |
69 // static | 69 // static |
70 GURL ExtensionIconSource::GetIconURL(const Extension* extension, | 70 GURL ExtensionIconSource::GetIconURL(const extensions::Extension* extension, |
71 int icon_size, | 71 int icon_size, |
72 ExtensionIconSet::MatchType match, | 72 ExtensionIconSet::MatchType match, |
73 bool grayscale, | 73 bool grayscale, |
74 bool* exists) { | 74 bool* exists) { |
75 if (exists) | 75 if (exists) |
76 *exists = true; | 76 *exists = true; |
77 if (exists && extension->GetIconURL(icon_size, match) == GURL()) | 77 if (exists && extension->GetIconURL(icon_size, match) == GURL()) |
78 *exists = false; | 78 *exists = false; |
79 | 79 |
80 GURL icon_url(base::StringPrintf("%s%s/%d/%d%s", | 80 GURL icon_url(base::StringPrintf("%s%s/%d/%d%s", |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 int match_num; | 289 int match_num; |
290 if (!base::StringToInt(match_param, &match_num)) | 290 if (!base::StringToInt(match_param, &match_num)) |
291 return false; | 291 return false; |
292 match_type = static_cast<ExtensionIconSet::MatchType>(match_num); | 292 match_type = static_cast<ExtensionIconSet::MatchType>(match_num); |
293 if (!(match_type == ExtensionIconSet::MATCH_EXACTLY || | 293 if (!(match_type == ExtensionIconSet::MATCH_EXACTLY || |
294 match_type == ExtensionIconSet::MATCH_SMALLER || | 294 match_type == ExtensionIconSet::MATCH_SMALLER || |
295 match_type == ExtensionIconSet::MATCH_BIGGER)) | 295 match_type == ExtensionIconSet::MATCH_BIGGER)) |
296 match_type = ExtensionIconSet::MATCH_EXACTLY; | 296 match_type = ExtensionIconSet::MATCH_EXACTLY; |
297 | 297 |
298 std::string extension_id = path_parts.at(0); | 298 std::string extension_id = path_parts.at(0); |
299 const Extension* extension = | 299 const extensions::Extension* extension = |
300 profile_->GetExtensionService()->GetInstalledExtension(extension_id); | 300 profile_->GetExtensionService()->GetInstalledExtension(extension_id); |
301 if (!extension) | 301 if (!extension) |
302 return false; | 302 return false; |
303 | 303 |
304 bool grayscale = path_lower.find("grayscale=true") != std::string::npos; | 304 bool grayscale = path_lower.find("grayscale=true") != std::string::npos; |
305 | 305 |
306 SetData(request_id, extension, grayscale, size, match_type); | 306 SetData(request_id, extension, grayscale, size, match_type); |
307 | 307 |
308 return true; | 308 return true; |
309 } | 309 } |
310 | 310 |
311 void ExtensionIconSource::SendDefaultResponse(int request_id) { | 311 void ExtensionIconSource::SendDefaultResponse(int request_id) { |
312 // We send back the default application icon (not resized or desaturated) | 312 // We send back the default application icon (not resized or desaturated) |
313 // as the default response, like when there is no data. | 313 // as the default response, like when there is no data. |
314 ClearData(request_id); | 314 ClearData(request_id); |
315 SendResponse(request_id, BitmapToMemory(GetDefaultAppImage())); | 315 SendResponse(request_id, BitmapToMemory(GetDefaultAppImage())); |
316 } | 316 } |
317 | 317 |
318 void ExtensionIconSource::SetData(int request_id, | 318 void ExtensionIconSource::SetData(int request_id, |
319 const Extension* extension, | 319 const extensions::Extension* extension, |
320 bool grayscale, | 320 bool grayscale, |
321 int size, | 321 int size, |
322 ExtensionIconSet::MatchType match) { | 322 ExtensionIconSet::MatchType match) { |
323 ExtensionIconRequest* request = new ExtensionIconRequest(); | 323 ExtensionIconRequest* request = new ExtensionIconRequest(); |
324 request->request_id = request_id; | 324 request->request_id = request_id; |
325 request->extension = extension; | 325 request->extension = extension; |
326 request->grayscale = grayscale; | 326 request->grayscale = grayscale; |
327 request->size = size; | 327 request->size = size; |
328 request->match = match; | 328 request->match = match; |
329 request_map_[request_id] = request; | 329 request_map_[request_id] = request; |
330 } | 330 } |
331 | 331 |
332 ExtensionIconSource::ExtensionIconRequest* ExtensionIconSource::GetData( | 332 ExtensionIconSource::ExtensionIconRequest* ExtensionIconSource::GetData( |
333 int request_id) { | 333 int request_id) { |
334 return request_map_[request_id]; | 334 return request_map_[request_id]; |
335 } | 335 } |
336 | 336 |
337 void ExtensionIconSource::ClearData(int request_id) { | 337 void ExtensionIconSource::ClearData(int request_id) { |
338 std::map<int, ExtensionIconRequest*>::iterator i = | 338 std::map<int, ExtensionIconRequest*>::iterator i = |
339 request_map_.find(request_id); | 339 request_map_.find(request_id); |
340 if (i == request_map_.end()) | 340 if (i == request_map_.end()) |
341 return; | 341 return; |
342 | 342 |
343 delete i->second; | 343 delete i->second; |
344 request_map_.erase(i); | 344 request_map_.erase(i); |
345 } | 345 } |
OLD | NEW |