| 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_toolbar_model.h" | 5 #include "chrome/browser/extensions/extension_toolbar_model.h" |
| 6 | 6 |
| 7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
| 8 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" | 8 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" |
| 9 #include "chrome/browser/extensions/browser_event_router.h" | 9 #include "chrome/browser/extensions/browser_event_router.h" |
| 10 #include "chrome/browser/extensions/extension_action.h" | 10 #include "chrome/browser/extensions/extension_action.h" |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 extensions::ExtensionIdList::const_iterator pos = | 345 extensions::ExtensionIdList::const_iterator pos = |
| 346 std::find(positions.begin(), positions.end(), extension->id()); | 346 std::find(positions.begin(), positions.end(), extension->id()); |
| 347 if (pos != positions.end()) | 347 if (pos != positions.end()) |
| 348 sorted[pos - positions.begin()] = extension; | 348 sorted[pos - positions.begin()] = extension; |
| 349 else | 349 else |
| 350 unsorted.push_back(make_scoped_refptr(extension)); | 350 unsorted.push_back(make_scoped_refptr(extension)); |
| 351 } | 351 } |
| 352 | 352 |
| 353 // Erase current icons. | 353 // Erase current icons. |
| 354 for (size_t i = 0; i < toolbar_items_.size(); i++) { | 354 for (size_t i = 0; i < toolbar_items_.size(); i++) { |
| 355 FOR_EACH_OBSERVER(Observer, observers_, | 355 FOR_EACH_OBSERVER( |
| 356 BrowserActionRemoved(toolbar_items_[i])); | 356 Observer, observers_, BrowserActionRemoved(toolbar_items_[i].get())); |
| 357 } | 357 } |
| 358 toolbar_items_.clear(); | 358 toolbar_items_.clear(); |
| 359 | 359 |
| 360 // Merge the lists. | 360 // Merge the lists. |
| 361 toolbar_items_.reserve(sorted.size() + unsorted.size()); | 361 toolbar_items_.reserve(sorted.size() + unsorted.size()); |
| 362 for (ExtensionList::const_iterator iter = sorted.begin(); | 362 for (ExtensionList::const_iterator iter = sorted.begin(); |
| 363 iter != sorted.end(); ++iter) { | 363 iter != sorted.end(); ++iter) { |
| 364 // It's possible for the extension order to contain items that aren't | 364 // It's possible for the extension order to contain items that aren't |
| 365 // actually loaded on this machine. For example, when extension sync is on, | 365 // actually loaded on this machine. For example, when extension sync is on, |
| 366 // we sync the extension order as-is but double-check with the user before | 366 // we sync the extension order as-is but double-check with the user before |
| 367 // syncing NPAPI-containing extensions, so if one of those is not actually | 367 // syncing NPAPI-containing extensions, so if one of those is not actually |
| 368 // synced, we'll get a NULL in the list. This sort of case can also happen | 368 // synced, we'll get a NULL in the list. This sort of case can also happen |
| 369 // if some error prevents an extension from loading. | 369 // if some error prevents an extension from loading. |
| 370 if (*iter != NULL) | 370 if (iter->get() != NULL) |
| 371 toolbar_items_.push_back(*iter); | 371 toolbar_items_.push_back(*iter); |
| 372 } | 372 } |
| 373 toolbar_items_.insert(toolbar_items_.end(), unsorted.begin(), | 373 toolbar_items_.insert(toolbar_items_.end(), unsorted.begin(), |
| 374 unsorted.end()); | 374 unsorted.end()); |
| 375 | 375 |
| 376 // Inform observers. | 376 // Inform observers. |
| 377 for (size_t i = 0; i < toolbar_items_.size(); i++) { | 377 for (size_t i = 0; i < toolbar_items_.size(); i++) { |
| 378 FOR_EACH_OBSERVER(Observer, observers_, | 378 FOR_EACH_OBSERVER( |
| 379 BrowserActionAdded(toolbar_items_[i], i)); | 379 Observer, observers_, BrowserActionAdded(toolbar_items_[i].get(), i)); |
| 380 } | 380 } |
| 381 } | 381 } |
| 382 | 382 |
| 383 void ExtensionToolbarModel::FillExtensionList( | 383 void ExtensionToolbarModel::FillExtensionList( |
| 384 const extensions::ExtensionIdList& order) { | 384 const extensions::ExtensionIdList& order) { |
| 385 toolbar_items_.clear(); | 385 toolbar_items_.clear(); |
| 386 toolbar_items_.reserve(order.size()); | 386 toolbar_items_.reserve(order.size()); |
| 387 for (size_t i = 0; i < order.size(); ++i) { | 387 for (size_t i = 0; i < order.size(); ++i) { |
| 388 const extensions::Extension* extension = | 388 const extensions::Extension* extension = |
| 389 service_->GetExtensionById(order[i], false); | 389 service_->GetExtensionById(order[i], false); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 | 452 |
| 453 if (last_known_positions_.size() > pref_position_size) { | 453 if (last_known_positions_.size() > pref_position_size) { |
| 454 // Need to update pref because we have extra icons. But can't call | 454 // Need to update pref because we have extra icons. But can't call |
| 455 // UpdatePrefs() directly within observation closure. | 455 // UpdatePrefs() directly within observation closure. |
| 456 base::MessageLoop::current()->PostTask( | 456 base::MessageLoop::current()->PostTask( |
| 457 FROM_HERE, | 457 FROM_HERE, |
| 458 base::Bind(&ExtensionToolbarModel::UpdatePrefs, | 458 base::Bind(&ExtensionToolbarModel::UpdatePrefs, |
| 459 weak_ptr_factory_.GetWeakPtr())); | 459 weak_ptr_factory_.GetWeakPtr())); |
| 460 } | 460 } |
| 461 } | 461 } |
| OLD | NEW |