Stop showing page actions in the location bar with redesign enabled
No longer show page actions in the location bar iff the
extension action redesign switch is enabled. In addition,
make all extensions tests* pass with the switch on! Woot!
*This is based on running these tests locally. Once
https://codereview.chromium.org/489183005/ goes through,
I can push a run through the trybots with the switch on
by default for kicks and grins.
BUG=397259
BUG=408261
Review URL: https://codereview.chromium.org/516633002
Cr-Commit-Position: refs/heads/master@{#292648}
diff --git a/chrome/browser/extensions/extension_action_test_util.cc b/chrome/browser/extensions/extension_action_test_util.cc
new file mode 100644
index 0000000..bb7736d
--- /dev/null
+++ b/chrome/browser/extensions/extension_action_test_util.cc
@@ -0,0 +1,75 @@
+// Copyright 2014 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.
+
+#include "chrome/browser/extensions/extension_action_test_util.h"
+
+#include "chrome/browser/extensions/extension_action.h"
+#include "chrome/browser/extensions/extension_action_manager.h"
+#include "chrome/browser/extensions/extension_toolbar_model.h"
+#include "chrome/browser/extensions/location_bar_controller.h"
+#include "chrome/browser/extensions/tab_helper.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
+#include "content/public/browser/web_contents.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/feature_switch.h"
+
+namespace extensions {
+namespace extension_action_test_util {
+
+namespace {
+
+size_t GetPageActionCount(content::WebContents* web_contents,
+ bool only_count_visible) {
+ DCHECK(web_contents);
+ size_t count = 0u;
+ int tab_id = SessionTabHelper::IdForTab(web_contents);
+ // Page actions are either stored in the location bar (and provided by the
+ // LocationBarController), or in the main toolbar (and provided by the
+ // ExtensionToolbarModel), depending on whether or not the extension action
+ // redesign is enabled.
+ if (!FeatureSwitch::extension_action_redesign()->IsEnabled()) {
+ std::vector<ExtensionAction*> page_actions =
+ TabHelper::FromWebContents(web_contents)->
+ location_bar_controller()->GetCurrentActions();
+ count = page_actions.size();
+ // Trim any invisible page actions, if necessary.
+ if (only_count_visible) {
+ for (std::vector<ExtensionAction*>::iterator iter = page_actions.begin();
+ iter != page_actions.end(); ++iter) {
+ if (!(*iter)->GetIsVisible(tab_id))
+ --count;
+ }
+ }
+ } else {
+ ExtensionToolbarModel* toolbar_model =
+ ExtensionToolbarModel::Get(
+ Profile::FromBrowserContext(web_contents->GetBrowserContext()));
+ const ExtensionList& toolbar_extensions = toolbar_model->toolbar_items();
+ ExtensionActionManager* action_manager =
+ ExtensionActionManager::Get(web_contents->GetBrowserContext());
+ for (ExtensionList::const_iterator iter = toolbar_extensions.begin();
+ iter != toolbar_extensions.end(); ++iter) {
+ ExtensionAction* extension_action = action_manager->GetPageAction(**iter);
+ if (extension_action &&
+ (!only_count_visible || extension_action->GetIsVisible(tab_id)))
+ ++count;
+ }
+ }
+
+ return count;
+}
+
+} // namespace
+
+size_t GetVisiblePageActionCount(content::WebContents* web_contents) {
+ return GetPageActionCount(web_contents, true);
+}
+
+size_t GetTotalPageActionCount(content::WebContents* web_contents) {
+ return GetPageActionCount(web_contents, false);
+}
+
+} // namespace extension_action_test_util
+} // namespace extensions