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 |