Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(428)

Unified Diff: chrome/browser/extensions/extension_context_menu_model_unittest.cc

Issue 476873002: Make hiding an extension action cause it to go to the overflow menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_context_menu_model_unittest.cc
diff --git a/chrome/browser/extensions/extension_context_menu_model_unittest.cc b/chrome/browser/extensions/extension_context_menu_model_unittest.cc
index 3fe636ba9f81226e5e7efa18cac1c647215e9882..51d645c40d7514ac7854eb1af2df5c0edb375fb8 100644
--- a/chrome/browser/extensions/extension_context_menu_model_unittest.cc
+++ b/chrome/browser/extensions/extension_context_menu_model_unittest.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/extensions/extension_context_menu_model.h"
+#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_service_test_base.h"
#include "chrome/browser/extensions/menu_manager.h"
@@ -13,26 +14,66 @@
#include "chrome/common/extensions/api/context_menus.h"
#include "chrome/test/base/test_browser_window.h"
#include "chrome/test/base/testing_profile.h"
+#include "components/crx_file/id_util.h"
+#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/test_management_policy.h"
#include "extensions/common/extension_builder.h"
+#include "extensions/common/feature_switch.h"
+#include "extensions/common/manifest_constants.h"
#include "extensions/common/value_builder.h"
+#include "grit/generated_resources.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
namespace extensions {
+namespace {
+
+// Build an extension to pass to the menu constructor, with the an action
+// specified by |action_key|.
+scoped_refptr<const Extension> BuildExtension(const std::string& name,
+ const char* action_key) {
+ return ExtensionBuilder()
+ .SetManifest(DictionaryBuilder()
+ .Set("name", name)
+ .Set("version", "1")
+ .Set("manifest_version", 2)
+ .Set(action_key, DictionaryBuilder().Pass()))
+ .SetID(crx_file::id_util::GenerateId(name))
+ .Build();
+}
+
+// Create a Browser for the ExtensionContextMenuModel to use.
+scoped_ptr<Browser> CreateBrowser(Profile* profile) {
+ Browser::CreateParams params(profile, chrome::GetActiveDesktop());
+ TestBrowserWindow test_window;
+ params.window = &test_window;
+ return scoped_ptr<Browser>(new Browser(params));
+}
+
+// Returns the index of the given |command_id| in the given |menu|, or -1 if it
+// is not found.
+int GetCommandIndex(const scoped_refptr<ExtensionContextMenuModel> menu,
+ int command_id) {
+ int item_count = menu->GetItemCount();
+ for (int i = 0; i < item_count; ++i) {
+ if (menu->GetCommandIdAt(i) == command_id)
+ return i;
+ }
+ return -1;
+}
+
+} // namespace
+
class ExtensionContextMenuModelTest : public ExtensionServiceTestBase {
public:
ExtensionContextMenuModelTest();
- // Build an extension to pass to the menu constructor. It needs an
- // ExtensionAction.
- scoped_refptr<Extension> BuildExtension();
-
// Creates an extension menu item for |extension| with the given |context|
// and adds it to |manager|. Refreshes |model| to show new item.
void AddContextItemAndRefreshModel(MenuManager* manager,
- Extension* extension,
+ const Extension* extension,
MenuItem::Context context,
ExtensionContextMenuModel* model);
@@ -49,20 +90,10 @@ class ExtensionContextMenuModelTest : public ExtensionServiceTestBase {
ExtensionContextMenuModelTest::ExtensionContextMenuModelTest() : cur_id_(0) {
}
-scoped_refptr<Extension> ExtensionContextMenuModelTest::BuildExtension() {
- return ExtensionBuilder()
- .SetManifest(DictionaryBuilder()
- .Set("name", "Page Action Extension")
- .Set("version", "1")
- .Set("manifest_version", 2)
- .Set("page_action",
- DictionaryBuilder().Set("default_title", "Hello")))
- .Build();
-}
void ExtensionContextMenuModelTest::AddContextItemAndRefreshModel(
MenuManager* manager,
- Extension* extension,
+ const Extension* extension,
MenuItem::Context context,
ExtensionContextMenuModel* model) {
MenuItem::Type type = MenuItem::NORMAL;
@@ -90,34 +121,28 @@ int ExtensionContextMenuModelTest::CountExtensionItems(
return model->extension_items_count_;
}
-namespace {
-
// Tests that applicable menu items are disabled when a ManagementPolicy
// prohibits them.
TEST_F(ExtensionContextMenuModelTest, PolicyDisablesItems) {
InitializeEmptyExtensionService();
- scoped_refptr<Extension> extension = BuildExtension();
+ scoped_refptr<const Extension> extension =
+ BuildExtension("extension", manifest_keys::kPageAction);
ASSERT_TRUE(extension.get());
- service_->AddExtension(extension.get());
+ service()->AddExtension(extension.get());
- // Create a Browser for the ExtensionContextMenuModel to use.
- Browser::CreateParams params(profile_.get(), chrome::GetActiveDesktop());
- TestBrowserWindow test_window;
- params.window = &test_window;
- Browser browser(params);
+ scoped_ptr<Browser> browser = CreateBrowser(profile());
scoped_refptr<ExtensionContextMenuModel> menu(
- new ExtensionContextMenuModel(extension.get(), &browser));
+ new ExtensionContextMenuModel(extension.get(), browser.get()));
- extensions::ExtensionSystem* system =
- extensions::ExtensionSystem::Get(profile_.get());
+ ExtensionSystem* system = ExtensionSystem::Get(profile());
system->management_policy()->UnregisterAllProviders();
// Actions should be enabled.
ASSERT_TRUE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
- extensions::TestManagementPolicyProvider policy_provider(
- extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
+ TestManagementPolicyProvider policy_provider(
+ TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
system->management_policy()->RegisterProvider(&policy_provider);
// Now the actions are disabled.
@@ -129,25 +154,22 @@ TEST_F(ExtensionContextMenuModelTest, PolicyDisablesItems) {
TEST_F(ExtensionContextMenuModelTest, ExtensionItemTest) {
InitializeEmptyExtensionService();
- scoped_refptr<Extension> extension = BuildExtension();
+ scoped_refptr<const Extension> extension =
+ BuildExtension("extension", manifest_keys::kPageAction);
ASSERT_TRUE(extension.get());
- service_->AddExtension(extension.get());
+ service()->AddExtension(extension.get());
- // Create a Browser for the ExtensionContextMenuModel to use.
- Browser::CreateParams params(profile_.get(), chrome::GetActiveDesktop());
- TestBrowserWindow test_window;
- params.window = &test_window;
- Browser browser(params);
+ scoped_ptr<Browser> browser = CreateBrowser(profile());
// Create a MenuManager for adding context items.
MenuManager* manager = static_cast<MenuManager*>(
(MenuManagerFactory::GetInstance()->SetTestingFactoryAndUse(
- profile_.get(),
+ profile(),
&MenuManagerFactory::BuildServiceInstanceForTesting)));
ASSERT_TRUE(manager);
scoped_refptr<ExtensionContextMenuModel> menu(
- new ExtensionContextMenuModel(extension.get(), &browser));
+ new ExtensionContextMenuModel(extension.get(), browser.get()));
// There should be no extension items yet.
EXPECT_EQ(0, CountExtensionItems(menu));
@@ -187,5 +209,67 @@ TEST_F(ExtensionContextMenuModelTest, ExtensionItemTest) {
CountExtensionItems(menu));
}
-} // namespace
+// Test that the "show" and "hide" menu items appear correctly in the extension
+// context menu.
+TEST_F(ExtensionContextMenuModelTest, ExtensionContextMenuShowAndHide) {
+ InitializeEmptyExtensionService();
+ scoped_refptr<const Extension> page_action =
+ BuildExtension("page_action_extension", manifest_keys::kPageAction);
+ ASSERT_TRUE(page_action.get());
+ scoped_refptr<const Extension> browser_action =
+ BuildExtension("browser_action_extension", manifest_keys::kBrowserAction);
+ ASSERT_TRUE(browser_action.get());
+
+ service()->AddExtension(page_action.get());
+ service()->AddExtension(browser_action.get());
+
+ scoped_ptr<Browser> browser = CreateBrowser(profile());
+
+ scoped_refptr<ExtensionContextMenuModel> menu(
+ new ExtensionContextMenuModel(page_action.get(), browser.get()));
+
+ // For laziness.
+ const ExtensionContextMenuModel::MenuEntries visibility_command =
+ ExtensionContextMenuModel::TOGGLE_VISIBILITY;
+ base::string16 hide_string =
+ l10n_util::GetStringUTF16(IDS_EXTENSIONS_HIDE_BUTTON);
+ base::string16 show_string =
+ l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_BUTTON);
+ ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
+
+ int index = GetCommandIndex(menu, visibility_command);
+ // Without the toolbar redesign switch, page action menus shouldn't have a
+ // visibility option.
+ EXPECT_EQ(-1, index);
+
+ menu = new ExtensionContextMenuModel(browser_action.get(), browser.get());
+ index = GetCommandIndex(menu, visibility_command);
+ // Browser actions should have the visibility option.
+ EXPECT_NE(-1, index);
+
+ // Enabling the toolbar redesign switch should give page actions the button.
+ FeatureSwitch::ScopedOverride enable_toolbar_redesign(
+ FeatureSwitch::extension_action_redesign(), true);
+ menu = new ExtensionContextMenuModel(page_action.get(), browser.get());
+ index = GetCommandIndex(menu, visibility_command);
+ EXPECT_NE(-1, index);
+
+ // Next, we test the command label.
+ menu = new ExtensionContextMenuModel(browser_action.get(), browser.get());
+ index = GetCommandIndex(menu, visibility_command);
+ // By default, browser actions should be visible (and therefore the button
+ // should be to hide).
+ EXPECT_TRUE(ExtensionActionAPI::GetBrowserActionVisibility(
+ prefs, browser_action->id()));
+ EXPECT_EQ(hide_string, menu->GetLabelAt(index));
+
+ // Hide the browser action. This should mean the string is "show".
+ ExtensionActionAPI::SetBrowserActionVisibility(
+ prefs, browser_action->id(), false);
+ menu = new ExtensionContextMenuModel(browser_action.get(), browser.get());
+ index = GetCommandIndex(menu, visibility_command);
+ EXPECT_NE(-1, index);
+ EXPECT_EQ(show_string, menu->GetLabelAt(index));
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/extension_context_menu_model.cc ('k') | chrome/browser/extensions/extension_toolbar_model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698