| OLD | NEW | 
|    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 "ui/base/resource/resource_bundle.h" |    5 #include "ui/base/resource/resource_bundle.h" | 
|    6  |    6  | 
|    7 #include "base/logging.h" |    7 #include "base/logging.h" | 
|    8 #include "base/stl_util-inl.h" |    8 #include "base/stl_util-inl.h" | 
|    9 #include "base/string_piece.h" |    9 #include "base/string_piece.h" | 
|   10 #include "base/synchronization/lock.h" |   10 #include "base/synchronization/lock.h" | 
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  112   // Check to see if the image is already in the cache. |  112   // Check to see if the image is already in the cache. | 
|  113   { |  113   { | 
|  114     base::AutoLock lock_scope(*lock_); |  114     base::AutoLock lock_scope(*lock_); | 
|  115     ImageMap::const_iterator found = images_.find(resource_id); |  115     ImageMap::const_iterator found = images_.find(resource_id); | 
|  116     if (found != images_.end()) |  116     if (found != images_.end()) | 
|  117       return *found->second; |  117       return *found->second; | 
|  118   } |  118   } | 
|  119  |  119  | 
|  120   scoped_ptr<SkBitmap> bitmap(LoadBitmap(resources_data_, resource_id)); |  120   scoped_ptr<SkBitmap> bitmap(LoadBitmap(resources_data_, resource_id)); | 
|  121   if (bitmap.get()) { |  121   if (bitmap.get()) { | 
 |  122     // Check if there's a large version of the image as well. | 
 |  123     scoped_ptr<SkBitmap> large_bitmap; | 
 |  124     if (large_icon_resources_data_) | 
 |  125       large_bitmap.reset(LoadBitmap(large_icon_resources_data_, resource_id)); | 
 |  126  | 
|  122     // The load was successful, so cache the image. |  127     // The load was successful, so cache the image. | 
|  123     base::AutoLock lock_scope(*lock_); |  128     base::AutoLock lock_scope(*lock_); | 
|  124  |  129  | 
|  125     // Another thread raced the load and has already cached the image. |  130     // Another thread raced the load and has already cached the image. | 
|  126     if (images_.count(resource_id)) |  131     if (images_.count(resource_id)) | 
|  127       return *images_[resource_id]; |  132       return *images_[resource_id]; | 
|  128  |  133  | 
|  129     gfx::Image* image = new gfx::Image(bitmap.release()); |  134     std::vector<const SkBitmap*> bitmaps; | 
 |  135     bitmaps.push_back(bitmap.release()); | 
 |  136     if (large_bitmap.get()) | 
 |  137       bitmaps.push_back(large_bitmap.release()); | 
 |  138     gfx::Image* image = new gfx::Image(bitmaps); | 
|  130     images_[resource_id] = image; |  139     images_[resource_id] = image; | 
|  131     return *image; |  140     return *image; | 
|  132   } |  141   } | 
|  133  |  142  | 
|  134   // The load failed to retrieve the image; show a debugging red square. |  143   // The load failed to retrieve the image; show a debugging red square. | 
|  135   LOG(WARNING) << "Unable to load image with id " << resource_id; |  144   LOG(WARNING) << "Unable to load image with id " << resource_id; | 
|  136   NOTREACHED();  // Want to assert in debug mode. |  145   NOTREACHED();  // Want to assert in debug mode. | 
|  137   return *GetEmptyImage(); |  146   return *GetEmptyImage(); | 
|  138 } |  147 } | 
|  139  |  148  | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  183  |  192  | 
|  184 void ResourceBundle::ReloadFonts() { |  193 void ResourceBundle::ReloadFonts() { | 
|  185   base::AutoLock lock_scope(*lock_); |  194   base::AutoLock lock_scope(*lock_); | 
|  186   base_font_.reset(); |  195   base_font_.reset(); | 
|  187   LoadFontsIfNecessary(); |  196   LoadFontsIfNecessary(); | 
|  188 } |  197 } | 
|  189  |  198  | 
|  190 ResourceBundle::ResourceBundle() |  199 ResourceBundle::ResourceBundle() | 
|  191     : lock_(new base::Lock), |  200     : lock_(new base::Lock), | 
|  192       resources_data_(NULL), |  201       resources_data_(NULL), | 
 |  202       large_icon_resources_data_(NULL), | 
|  193       locale_resources_data_(NULL) { |  203       locale_resources_data_(NULL) { | 
|  194 } |  204 } | 
|  195  |  205  | 
|  196 void ResourceBundle::FreeImages() { |  206 void ResourceBundle::FreeImages() { | 
|  197   STLDeleteContainerPairSecondPointers(images_.begin(), |  207   STLDeleteContainerPairSecondPointers(images_.begin(), | 
|  198                                        images_.end()); |  208                                        images_.end()); | 
|  199   images_.clear(); |  209   images_.clear(); | 
|  200 } |  210 } | 
|  201  |  211  | 
|  202 void ResourceBundle::LoadFontsIfNecessary() { |  212 void ResourceBundle::LoadFontsIfNecessary() { | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  280     int resource_id, base::StringPiece* data) const { |  290     int resource_id, base::StringPiece* data) const { | 
|  281   return data_pack_->GetStringPiece(static_cast<uint32>(resource_id), data); |  291   return data_pack_->GetStringPiece(static_cast<uint32>(resource_id), data); | 
|  282 } |  292 } | 
|  283  |  293  | 
|  284 RefCountedStaticMemory* ResourceBundle::LoadedDataPack::GetStaticMemory( |  294 RefCountedStaticMemory* ResourceBundle::LoadedDataPack::GetStaticMemory( | 
|  285     int resource_id) const { |  295     int resource_id) const { | 
|  286   return data_pack_->GetStaticMemory(resource_id); |  296   return data_pack_->GetStaticMemory(resource_id); | 
|  287 } |  297 } | 
|  288  |  298  | 
|  289 }  // namespace ui |  299 }  // namespace ui | 
| OLD | NEW |