diff options
author | finnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-08 22:58:31 +0000 |
---|---|---|
committer | finnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-08 22:58:31 +0000 |
commit | 1e8c93fe918da7180751eecca190a2a867c9addf (patch) | |
tree | 4579751f5aeb2598fd826959a435745f9c4e7ace /chrome/browser/extensions/extension_toolbar_model.cc | |
parent | 67b9363d125be4454015da11e1a233beab667943 (diff) | |
download | chromium_src-1e8c93fe918da7180751eecca190a2a867c9addf.zip chromium_src-1e8c93fe918da7180751eecca190a2a867c9addf.tar.gz chromium_src-1e8c93fe918da7180751eecca190a2a867c9addf.tar.bz2 |
Preserve order of extensions when they auto-update.
Also added tests for the ExtensionToolbarModel.
BUG=33401
TEST=ExtensionToolbarModelTest (new test).
Review URL: http://codereview.chromium.org/587002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38407 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_toolbar_model.cc')
-rw-r--r-- | chrome/browser/extensions/extension_toolbar_model.cc | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc index d561120..4c9bd39 100644 --- a/chrome/browser/extensions/extension_toolbar_model.cc +++ b/chrome/browser/extensions/extension_toolbar_model.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -92,9 +92,19 @@ void ExtensionToolbarModel::AddExtension(Extension* extension) { if (!extension->browser_action()) return; - toolitems_.push_back(extension); - FOR_EACH_OBSERVER(Observer, observers_, - BrowserActionAdded(extension, toolitems_.size() - 1)); + if (extension->id() == last_extension_removed_ && + last_extension_removed_index_ < toolitems_.size()) { + toolitems_.insert(begin() + last_extension_removed_index_, extension); + FOR_EACH_OBSERVER(Observer, observers_, + BrowserActionAdded(extension, last_extension_removed_index_)); + } else { + toolitems_.push_back(extension); + FOR_EACH_OBSERVER(Observer, observers_, + BrowserActionAdded(extension, toolitems_.size() - 1)); + } + + last_extension_removed_ = ""; + last_extension_removed_index_ = -1; UpdatePrefs(); } @@ -105,6 +115,9 @@ void ExtensionToolbarModel::RemoveExtension(Extension* extension) { return; } + last_extension_removed_ = extension->id(); + last_extension_removed_index_ = pos - begin(); + toolitems_.erase(pos); FOR_EACH_OBSERVER(Observer, observers_, BrowserActionRemoved(extension)); |