| 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/extensions/extension_action.h" | 5 #include "chrome/browser/extensions/extension_action.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 | 125 |
| 126 bool ExtensionAction::HasPopup(int tab_id) const { | 126 bool ExtensionAction::HasPopup(int tab_id) const { |
| 127 return !GetPopupUrl(tab_id).is_empty(); | 127 return !GetPopupUrl(tab_id).is_empty(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 GURL ExtensionAction::GetPopupUrl(int tab_id) const { | 130 GURL ExtensionAction::GetPopupUrl(int tab_id) const { |
| 131 return GetValue(&popup_url_, tab_id); | 131 return GetValue(&popup_url_, tab_id); |
| 132 } | 132 } |
| 133 | 133 |
| 134 void ExtensionAction::SetIcon(int tab_id, const gfx::Image& image) { | 134 void ExtensionAction::SetIcon(int tab_id, const gfx::Image& image) { |
| 135 SetValue(&icon_, tab_id, image.AsImageSkia()); | 135 SetValue(&icon_, tab_id, image); |
| 136 } | 136 } |
| 137 | 137 |
| 138 bool ExtensionAction::ParseIconFromCanvasDictionary( | 138 bool ExtensionAction::ParseIconFromCanvasDictionary( |
| 139 const base::DictionaryValue& dict, | 139 const base::DictionaryValue& dict, |
| 140 gfx::ImageSkia* icon) { | 140 gfx::ImageSkia* icon) { |
| 141 // Try to extract an icon for each known scale. | 141 // Try to extract an icon for each known scale. |
| 142 for (size_t i = 0; i < arraysize(kIconSizes); i++) { | 142 for (size_t i = 0; i < arraysize(kIconSizes); i++) { |
| 143 const base::BinaryValue* image_data; | 143 const base::BinaryValue* image_data; |
| 144 std::string binary_string64; | 144 std::string binary_string64; |
| 145 IPC::Message pickle; | 145 IPC::Message pickle; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 157 SkBitmap bitmap; | 157 SkBitmap bitmap; |
| 158 if (!IPC::ReadParam(&pickle, &iter, &bitmap)) | 158 if (!IPC::ReadParam(&pickle, &iter, &bitmap)) |
| 159 return false; | 159 return false; |
| 160 CHECK(!bitmap.isNull()); | 160 CHECK(!bitmap.isNull()); |
| 161 float scale = ui::GetScaleForScaleFactor(kIconSizes[i].scale); | 161 float scale = ui::GetScaleForScaleFactor(kIconSizes[i].scale); |
| 162 icon->AddRepresentation(gfx::ImageSkiaRep(bitmap, scale)); | 162 icon->AddRepresentation(gfx::ImageSkiaRep(bitmap, scale)); |
| 163 } | 163 } |
| 164 return true; | 164 return true; |
| 165 } | 165 } |
| 166 | 166 |
| 167 gfx::ImageSkia ExtensionAction::GetExplicitlySetIcon(int tab_id) const { | 167 gfx::Image ExtensionAction::GetExplicitlySetIcon(int tab_id) const { |
| 168 return GetValue(&icon_, tab_id); | 168 return GetValue(&icon_, tab_id); |
| 169 } | 169 } |
| 170 | 170 |
| 171 bool ExtensionAction::SetIsVisible(int tab_id, bool new_visibility) { | 171 bool ExtensionAction::SetIsVisible(int tab_id, bool new_visibility) { |
| 172 const bool old_visibility = GetValue(&is_visible_, tab_id); | 172 const bool old_visibility = GetValue(&is_visible_, tab_id); |
| 173 | 173 |
| 174 if (old_visibility == new_visibility) | 174 if (old_visibility == new_visibility) |
| 175 return false; | 175 return false; |
| 176 | 176 |
| 177 SetValue(&is_visible_, tab_id, new_visibility); | 177 SetValue(&is_visible_, tab_id, new_visibility); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 204 std::vector<gfx::Image>& icons = declarative_icon_[tab_id][priority]; | 204 std::vector<gfx::Image>& icons = declarative_icon_[tab_id][priority]; |
| 205 for (std::vector<gfx::Image>::iterator it = icons.begin(); it != icons.end(); | 205 for (std::vector<gfx::Image>::iterator it = icons.begin(); it != icons.end(); |
| 206 ++it) { | 206 ++it) { |
| 207 if (it->AsImageSkia().BackedBySameObjectAs(icon.AsImageSkia())) { | 207 if (it->AsImageSkia().BackedBySameObjectAs(icon.AsImageSkia())) { |
| 208 icons.erase(it); | 208 icons.erase(it); |
| 209 return; | 209 return; |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 } | 212 } |
| 213 | 213 |
| 214 const gfx::ImageSkia ExtensionAction::GetDeclarativeIcon(int tab_id) const { | 214 const gfx::Image ExtensionAction::GetDeclarativeIcon(int tab_id) const { |
| 215 if (declarative_icon_.find(tab_id) != declarative_icon_.end() && | 215 if (declarative_icon_.find(tab_id) != declarative_icon_.end() && |
| 216 !declarative_icon_.find(tab_id)->second.rbegin()->second.empty()) { | 216 !declarative_icon_.find(tab_id)->second.rbegin()->second.empty()) { |
| 217 return declarative_icon_.find(tab_id)->second.rbegin() | 217 return declarative_icon_.find(tab_id)->second.rbegin()->second.back(); |
| 218 ->second.back().AsImageSkia(); | |
| 219 } | 218 } |
| 220 return gfx::ImageSkia(); | 219 return gfx::Image(); |
| 221 } | 220 } |
| 222 | 221 |
| 223 void ExtensionAction::ClearAllValuesForTab(int tab_id) { | 222 void ExtensionAction::ClearAllValuesForTab(int tab_id) { |
| 224 popup_url_.erase(tab_id); | 223 popup_url_.erase(tab_id); |
| 225 title_.erase(tab_id); | 224 title_.erase(tab_id); |
| 226 icon_.erase(tab_id); | 225 icon_.erase(tab_id); |
| 227 badge_text_.erase(tab_id); | 226 badge_text_.erase(tab_id); |
| 228 badge_text_color_.erase(tab_id); | 227 badge_text_color_.erase(tab_id); |
| 229 badge_background_color_.erase(tab_id); | 228 badge_background_color_.erase(tab_id); |
| 230 is_visible_.erase(tab_id); | 229 is_visible_.erase(tab_id); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 browser_context, | 272 browser_context, |
| 274 &extension, | 273 &extension, |
| 275 *default_icon(), | 274 *default_icon(), |
| 276 GetIconSizeForType(action_type_), | 275 GetIconSizeForType(action_type_), |
| 277 *GetDefaultIcon().ToImageSkia(), | 276 *GetDefaultIcon().ToImageSkia(), |
| 278 nullptr)); | 277 nullptr)); |
| 279 } | 278 } |
| 280 return default_icon_image_.get(); | 279 return default_icon_image_.get(); |
| 281 } | 280 } |
| 282 | 281 |
| 283 gfx::ImageSkia ExtensionAction::GetDefaultIconImage() const { | 282 gfx::Image ExtensionAction::GetDefaultIconImage() const { |
| 284 // If we have a default icon, it should be loaded before trying to use it. | 283 // If we have a default icon, it should be loaded before trying to use it. |
| 285 DCHECK(!default_icon_image_ == !default_icon_); | 284 DCHECK(!default_icon_image_ == !default_icon_); |
| 286 return default_icon_image_ ? default_icon_image_->image_skia() : | 285 return default_icon_image_ ? default_icon_image_->image() : GetDefaultIcon(); |
| 287 *GetDefaultIcon().ToImageSkia(); | |
| 288 } | 286 } |
| 289 | 287 |
| 290 bool ExtensionAction::HasPopupUrl(int tab_id) const { | 288 bool ExtensionAction::HasPopupUrl(int tab_id) const { |
| 291 return HasValue(popup_url_, tab_id); | 289 return HasValue(popup_url_, tab_id); |
| 292 } | 290 } |
| 293 | 291 |
| 294 bool ExtensionAction::HasTitle(int tab_id) const { | 292 bool ExtensionAction::HasTitle(int tab_id) const { |
| 295 return HasValue(title_, tab_id); | 293 return HasValue(title_, tab_id); |
| 296 } | 294 } |
| 297 | 295 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 set_id(manifest_data.id); | 329 set_id(manifest_data.id); |
| 332 | 330 |
| 333 // Initialize the specified icon set. | 331 // Initialize the specified icon set. |
| 334 if (!manifest_data.default_icon.empty()) | 332 if (!manifest_data.default_icon.empty()) |
| 335 default_icon_.reset(new ExtensionIconSet(manifest_data.default_icon)); | 333 default_icon_.reset(new ExtensionIconSet(manifest_data.default_icon)); |
| 336 | 334 |
| 337 const ExtensionIconSet& extension_icons = | 335 const ExtensionIconSet& extension_icons = |
| 338 extensions::IconsInfo::GetIcons(&extension); | 336 extensions::IconsInfo::GetIcons(&extension); |
| 339 // Look for any other icons. | 337 // Look for any other icons. |
| 340 std::string largest_icon = extension_icons.Get( | 338 std::string largest_icon = extension_icons.Get( |
| 341 extension_misc::EXTENSION_ICON_GIGANTOR, | 339 extension_misc::EXTENSION_ICON_GIGANTOR, ExtensionIconSet::MATCH_SMALLER); |
| 342 ExtensionIconSet::MATCH_SMALLER); | |
| 343 | 340 |
| 344 if (!largest_icon.empty()) { | 341 if (!largest_icon.empty()) { |
| 345 // We found an icon to use, so create an icon set if one doesn't exist. | 342 // We found an icon to use, so create an icon set if one doesn't exist. |
| 346 if (!default_icon_) | 343 if (!default_icon_) |
| 347 default_icon_.reset(new ExtensionIconSet()); | 344 default_icon_.reset(new ExtensionIconSet()); |
| 348 int largest_icon_size = extension_icons.GetIconSizeFromPath(largest_icon); | 345 int largest_icon_size = extension_icons.GetIconSizeFromPath(largest_icon); |
| 349 // Replace any missing extension action icons with the largest icon | 346 // Replace any missing extension action icons with the largest icon |
| 350 // retrieved from |extension|'s manifest so long as the largest icon is | 347 // retrieved from |extension|'s manifest so long as the largest icon is |
| 351 // larger than the current key. | 348 // larger than the current key. |
| 352 for (int i = extension_misc::kNumExtensionActionIconSizes - 1; | 349 for (int i = extension_misc::kNumExtensionActionIconSizes - 1; i >= 0; |
| 353 i >= 0; --i) { | 350 --i) { |
| 354 int size = extension_misc::kExtensionActionIconSizes[i].size; | 351 int size = extension_misc::kExtensionActionIconSizes[i].size; |
| 355 if (default_icon_->Get(size, ExtensionIconSet::MATCH_BIGGER).empty() | 352 if (default_icon_->Get(size, ExtensionIconSet::MATCH_BIGGER).empty() && |
| 356 && largest_icon_size > size) { | 353 largest_icon_size > size) { |
| 357 default_icon_->Add(size, largest_icon); | 354 default_icon_->Add(size, largest_icon); |
| 358 break; | 355 break; |
| 359 } | 356 } |
| 360 } | 357 } |
| 361 } | 358 } |
| 362 } | 359 } |
| 363 | 360 |
| 364 // Determines which icon would be returned by |GetIcon|, and returns its width. | 361 // Determines which icon would be returned by |GetIcon|, and returns its width. |
| 365 int ExtensionAction::GetIconWidth(int tab_id) const { | 362 int ExtensionAction::GetIconWidth(int tab_id) const { |
| 366 // If icon has been set, return its width. | 363 // If icon has been set, return its width. |
| 367 gfx::ImageSkia icon = GetValue(&icon_, tab_id); | 364 gfx::Image icon = GetValue(&icon_, tab_id); |
| 368 if (!icon.isNull()) | 365 if (!icon.IsEmpty()) |
| 369 return icon.width(); | 366 return icon.Width(); |
| 370 // If there is a default icon, the icon width will be set depending on our | 367 // If there is a default icon, the icon width will be set depending on our |
| 371 // action type. | 368 // action type. |
| 372 if (default_icon_) | 369 if (default_icon_) |
| 373 return GetIconSizeForType(action_type()); | 370 return GetIconSizeForType(action_type()); |
| 374 | 371 |
| 375 // If no icon has been set and there is no default icon, we need favicon | 372 // If no icon has been set and there is no default icon, we need favicon |
| 376 // width. | 373 // width. |
| 377 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( | 374 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
| 378 IDR_EXTENSIONS_FAVICON).Width(); | 375 IDR_EXTENSIONS_FAVICON).Width(); |
| 379 } | 376 } |
| OLD | NEW |