Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: chrome/browser/extensions/extension_toolbar_model.cc

Issue 296983014: Fix issue with browser action toolbar putting all extension icons in overflow once sync happens. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Polish Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_toolbar_model_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <string> 7 #include <string>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/metrics/histogram_base.h" 10 #include "base/metrics/histogram_base.h"
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 } 380 }
381 381
382 ExtensionIdList::const_iterator pos = 382 ExtensionIdList::const_iterator pos =
383 std::find(positions.begin(), positions.end(), extension->id()); 383 std::find(positions.begin(), positions.end(), extension->id());
384 if (pos != positions.end()) 384 if (pos != positions.end())
385 sorted[pos - positions.begin()] = extension; 385 sorted[pos - positions.begin()] = extension;
386 else 386 else
387 unsorted.push_back(make_scoped_refptr(extension)); 387 unsorted.push_back(make_scoped_refptr(extension));
388 } 388 }
389 389
390 // Erase current icons. 390 size_t items_count = toolbar_items_.size();
391 for (size_t i = 0; i < toolbar_items_.size(); i++) { 391 for (size_t i = 0; i < items_count; i++) {
392 const Extension* extension = toolbar_items_.back();
393 toolbar_items_.pop_back();
Finnur 2014/05/23 16:30:44 By popping the extension here (before calling Brow
Devlin 2014/05/23 17:18:26 Good comment. Such a good comment, it should prob
392 FOR_EACH_OBSERVER( 394 FOR_EACH_OBSERVER(
393 Observer, observers_, BrowserActionRemoved(toolbar_items_[i].get())); 395 Observer, observers_, BrowserActionRemoved(extension));
394 } 396 }
395 toolbar_items_.clear(); 397 DCHECK(toolbar_items_.empty());
396 398
397 // Merge the lists. 399 // Merge the lists.
398 toolbar_items_.reserve(sorted.size() + unsorted.size()); 400 toolbar_items_.reserve(sorted.size() + unsorted.size());
401
402 int count = 0;
Devlin 2014/05/23 17:18:26 I wonder if this is worth keeping, even. Isn't co
399 for (ExtensionList::const_iterator iter = sorted.begin(); 403 for (ExtensionList::const_iterator iter = sorted.begin();
400 iter != sorted.end(); ++iter) { 404 iter != sorted.end(); ++iter) {
Devlin 2014/05/23 17:18:26 nit: I think the "four-space line continuation" ru
401 // It's possible for the extension order to contain items that aren't 405 // It's possible for the extension order to contain items that aren't
402 // actually loaded on this machine. For example, when extension sync is on, 406 // actually loaded on this machine. For example, when extension sync is on,
403 // we sync the extension order as-is but double-check with the user before 407 // we sync the extension order as-is but double-check with the user before
404 // syncing NPAPI-containing extensions, so if one of those is not actually 408 // syncing NPAPI-containing extensions, so if one of those is not actually
405 // synced, we'll get a NULL in the list. This sort of case can also happen 409 // synced, we'll get a NULL in the list. This sort of case can also happen
406 // if some error prevents an extension from loading. 410 // if some error prevents an extension from loading.
407 if (iter->get() != NULL) 411 if (iter->get() != NULL) {
408 toolbar_items_.push_back(*iter); 412 toolbar_items_.push_back(*iter);
413 FOR_EACH_OBSERVER(
414 Observer, observers_, BrowserActionAdded(*iter, count));
415 count++;
Devlin 2014/05/23 17:18:26 nit: ++count in chromium, unless there's a specifi
416 }
409 } 417 }
410 toolbar_items_.insert(toolbar_items_.end(), unsorted.begin(), 418 for (ExtensionList::const_iterator iter = unsorted.begin();
411 unsorted.end()); 419 iter != unsorted.end(); ++iter) {
420 if (iter->get() != NULL) {
421 toolbar_items_.push_back(*iter);
422 FOR_EACH_OBSERVER(
423 Observer, observers_, BrowserActionAdded(*iter, count));
424 count++;
425 }
426 }
412 427
413 UMA_HISTOGRAM_COUNTS_100( 428 UMA_HISTOGRAM_COUNTS_100(
414 "ExtensionToolbarModel.BrowserActionsPermanentlyHidden", hidden); 429 "ExtensionToolbarModel.BrowserActionsPermanentlyHidden", hidden);
415 UMA_HISTOGRAM_COUNTS_100("ExtensionToolbarModel.BrowserActionsCount", 430 UMA_HISTOGRAM_COUNTS_100("ExtensionToolbarModel.BrowserActionsCount",
416 toolbar_items_.size()); 431 toolbar_items_.size());
417 432
418 if (!toolbar_items_.empty()) { 433 if (!toolbar_items_.empty()) {
419 // Visible count can be -1, meaning: 'show all'. Since UMA converts negative 434 // Visible count can be -1, meaning: 'show all'. Since UMA converts negative
420 // values to 0, this would be counted as 'show none' unless we convert it to 435 // values to 0, this would be counted as 'show none' unless we convert it to
421 // max. 436 // max.
422 UMA_HISTOGRAM_COUNTS_100("ExtensionToolbarModel.BrowserActionsVisible", 437 UMA_HISTOGRAM_COUNTS_100("ExtensionToolbarModel.BrowserActionsVisible",
423 visible_icon_count_ == -1 ? 438 visible_icon_count_ == -1 ?
424 base::HistogramBase::kSampleType_MAX : 439 base::HistogramBase::kSampleType_MAX :
425 visible_icon_count_); 440 visible_icon_count_);
426 } 441 }
427
428 // Inform observers.
429 for (size_t i = 0; i < toolbar_items_.size(); i++) {
430 FOR_EACH_OBSERVER(
431 Observer, observers_, BrowserActionAdded(toolbar_items_[i].get(), i));
432 }
433 } 442 }
434 443
435 void ExtensionToolbarModel::UpdatePrefs() { 444 void ExtensionToolbarModel::UpdatePrefs() {
436 if (!extension_prefs_) 445 if (!extension_prefs_)
437 return; 446 return;
438 447
439 // Don't observe change caused by self. 448 // Don't observe change caused by self.
440 pref_change_registrar_.Remove(pref_names::kToolbar); 449 pref_change_registrar_.Remove(pref_names::kToolbar);
441 extension_prefs_->SetToolbarOrder(last_known_positions_); 450 extension_prefs_->SetToolbarOrder(last_known_positions_);
442 pref_change_registrar_.Add(pref_names::kToolbar, pref_change_callback_); 451 pref_change_registrar_.Add(pref_names::kToolbar, pref_change_callback_);
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 void ExtensionToolbarModel::StopHighlighting() { 591 void ExtensionToolbarModel::StopHighlighting() {
583 if (is_highlighting_) { 592 if (is_highlighting_) {
584 highlighted_items_.clear(); 593 highlighted_items_.clear();
585 is_highlighting_ = false; 594 is_highlighting_ = false;
586 if (old_visible_icon_count_ != visible_icon_count_) { 595 if (old_visible_icon_count_ != visible_icon_count_) {
587 SetVisibleIconCount(old_visible_icon_count_); 596 SetVisibleIconCount(old_visible_icon_count_);
588 FOR_EACH_OBSERVER(Observer, observers_, VisibleCountChanged()); 597 FOR_EACH_OBSERVER(Observer, observers_, VisibleCountChanged());
589 } 598 }
590 FOR_EACH_OBSERVER(Observer, observers_, HighlightModeChanged(false)); 599 FOR_EACH_OBSERVER(Observer, observers_, HighlightModeChanged(false));
591 } 600 }
592 }; 601 }
593 602
594 } // namespace extensions 603 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_toolbar_model_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698