summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_toolbar_model.cc
diff options
context:
space:
mode:
authorfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-08 22:58:31 +0000
committerfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-08 22:58:31 +0000
commit1e8c93fe918da7180751eecca190a2a867c9addf (patch)
tree4579751f5aeb2598fd826959a435745f9c4e7ace /chrome/browser/extensions/extension_toolbar_model.cc
parent67b9363d125be4454015da11e1a233beab667943 (diff)
downloadchromium_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.cc21
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));