// 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 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::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