Index: chrome/browser/extensions/extension_action_test_util.cc |
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 0000000000000000000000000000000000000000..bb7736d10dee2b6ab0ab9a57b80df407968925fa |
--- /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 |