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

Side by Side Diff: chrome/browser/extensions/extension_context_menu_model_unittest.cc

Issue 459493002: Revert of Extend contextMenus API to support browser/page actions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_context_menu_model.h" 5 #include "chrome/browser/extensions/extension_context_menu_model.h"
6 6
7 #include "chrome/browser/extensions/extension_service.h" 7 #include "chrome/browser/extensions/extension_service.h"
8 #include "chrome/browser/extensions/extension_service_test_base.h" 8 #include "chrome/browser/extensions/extension_service_test_base.h"
9 #include "chrome/browser/extensions/menu_manager.h"
10 #include "chrome/browser/extensions/menu_manager_factory.h"
11 #include "chrome/browser/ui/browser.h" 9 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/host_desktop.h" 10 #include "chrome/browser/ui/host_desktop.h"
13 #include "chrome/common/extensions/api/context_menus.h"
14 #include "chrome/test/base/test_browser_window.h" 11 #include "chrome/test/base/test_browser_window.h"
15 #include "chrome/test/base/testing_profile.h" 12 #include "chrome/test/base/testing_profile.h"
16 #include "extensions/browser/extension_system.h" 13 #include "extensions/browser/extension_system.h"
17 #include "extensions/browser/test_management_policy.h" 14 #include "extensions/browser/test_management_policy.h"
18 #include "extensions/common/extension_builder.h" 15 #include "extensions/common/extension_builder.h"
19 #include "extensions/common/value_builder.h" 16 #include "extensions/common/value_builder.h"
20 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
21 18
22 namespace extensions { 19 namespace extensions {
20 namespace {
23 21
24 class ExtensionContextMenuModelTest : public ExtensionServiceTestBase { 22 class ExtensionContextMenuModelTest : public ExtensionServiceTestBase {
25 public:
26 ExtensionContextMenuModelTest();
27
28 // Build an extension to pass to the menu constructor. It needs an
29 // ExtensionAction.
30 scoped_refptr<Extension> BuildExtension();
31
32 // Creates an extension menu item for |extension| with the given |context|
33 // and adds it to |manager|. Refreshes |model| to show new item.
34 void AddContextItemAndRefreshModel(MenuManager* manager,
35 Extension* extension,
36 MenuItem::Context context,
37 ExtensionContextMenuModel* model);
38
39 // Reinitializes the given |model|.
40 void RefreshMenu(ExtensionContextMenuModel* model);
41
42 // Returns the number of extension menu items that show up in |model|.
43 int CountExtensionItems(ExtensionContextMenuModel* model);
44
45 private:
46 int cur_id_;
47 }; 23 };
48 24
49 ExtensionContextMenuModelTest::ExtensionContextMenuModelTest()
50 : cur_id_(0) {}
51
52 scoped_refptr<Extension> ExtensionContextMenuModelTest::BuildExtension() {
53 return ExtensionBuilder()
54 .SetManifest(
55 DictionaryBuilder()
56 .Set("name", "Page Action Extension")
57 .Set("version", "1")
58 .Set("manifest_version", 2)
59 .Set("page_action",
60 DictionaryBuilder().Set("default_title", "Hello")))
61 .Build();
62 }
63
64 void ExtensionContextMenuModelTest::AddContextItemAndRefreshModel(
65 MenuManager* manager,
66 Extension* extension,
67 MenuItem::Context context,
68 ExtensionContextMenuModel* model) {
69 MenuItem::Type type = MenuItem::NORMAL;
70 MenuItem::ContextList contexts(context);
71 const MenuItem::ExtensionKey key(extension->id());
72 MenuItem::Id id(false, key);
73 id.uid = ++cur_id_;
74 manager->AddContextItem(extension, new MenuItem(id,
75 "test",
76 false, // checked
77 true, // enabled
78 type,
79 contexts));
80 RefreshMenu(model);
81 }
82
83 void ExtensionContextMenuModelTest::RefreshMenu(
84 ExtensionContextMenuModel* model) {
85 model->InitMenu(model->GetExtension());
86 }
87
88 int ExtensionContextMenuModelTest::CountExtensionItems(
89 ExtensionContextMenuModel* model) {
90 return model->extension_items_count_;
91 }
92
93 namespace {
94
95 // Tests that applicable menu items are disabled when a ManagementPolicy 25 // Tests that applicable menu items are disabled when a ManagementPolicy
96 // prohibits them. 26 // prohibits them.
97 TEST_F(ExtensionContextMenuModelTest, PolicyDisablesItems) { 27 TEST_F(ExtensionContextMenuModelTest, PolicyDisablesItems) {
98 InitializeEmptyExtensionService(); 28 InitializeEmptyExtensionService();
99 scoped_refptr<Extension> extension = BuildExtension(); 29 // Build an extension to pass to the menu constructor. It needs an
30 // ExtensionAction.
31 scoped_refptr<Extension> extension = ExtensionBuilder()
32 .SetManifest(DictionaryBuilder()
33 .Set("name", "Page Action Extension")
34 .Set("version", "1")
35 .Set("manifest_version", 2)
36 .Set("page_action", DictionaryBuilder()
37 .Set("default_title", "Hello")))
38 .Build();
100 ASSERT_TRUE(extension.get()); 39 ASSERT_TRUE(extension.get());
101 service_->AddExtension(extension.get()); 40 service_->AddExtension(extension.get());
102 41
103 // Create a Browser for the ExtensionContextMenuModel to use. 42 // Create a Browser for the ExtensionContextMenuModel to use.
104 Browser::CreateParams params(profile_.get(), chrome::GetActiveDesktop()); 43 Browser::CreateParams params(profile_.get(), chrome::GetActiveDesktop());
105 TestBrowserWindow test_window; 44 TestBrowserWindow test_window;
106 params.window = &test_window; 45 params.window = &test_window;
107 Browser browser(params); 46 Browser browser(params);
108 47
109 scoped_refptr<ExtensionContextMenuModel> menu( 48 scoped_refptr<ExtensionContextMenuModel> menu(
110 new ExtensionContextMenuModel(extension.get(), &browser)); 49 new ExtensionContextMenuModel(extension.get(), &browser, NULL));
111 50
112 extensions::ExtensionSystem* system = 51 extensions::ExtensionSystem* system =
113 extensions::ExtensionSystem::Get(profile_.get()); 52 extensions::ExtensionSystem::Get(profile_.get());
114 system->management_policy()->UnregisterAllProviders(); 53 system->management_policy()->UnregisterAllProviders();
115 54
116 // Actions should be enabled. 55 // Actions should be enabled.
117 ASSERT_TRUE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL)); 56 ASSERT_TRUE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
118 57
119 extensions::TestManagementPolicyProvider policy_provider( 58 extensions::TestManagementPolicyProvider policy_provider(
120 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); 59 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
121 system->management_policy()->RegisterProvider(&policy_provider); 60 system->management_policy()->RegisterProvider(&policy_provider);
122 61
123 // Now the actions are disabled. 62 // Now the actions are disabled.
124 ASSERT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL)); 63 ASSERT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
125 64
126 // Don't leave |policy_provider| dangling. 65 // Don't leave |policy_provider| dangling.
127 system->management_policy()->UnregisterAllProviders(); 66 system->management_policy()->UnregisterAllProviders();
128 } 67 }
129 68
130 TEST_F(ExtensionContextMenuModelTest, ExtensionItemTest) {
131 InitializeEmptyExtensionService();
132 scoped_refptr<Extension> extension = BuildExtension();
133 ASSERT_TRUE(extension.get());
134 service_->AddExtension(extension.get());
135
136 // Create a Browser for the ExtensionContextMenuModel to use.
137 Browser::CreateParams params(profile_.get(), chrome::GetActiveDesktop());
138 TestBrowserWindow test_window;
139 params.window = &test_window;
140 Browser browser(params);
141
142 // Create a MenuManager for adding context items.
143 MenuManager* manager = static_cast<MenuManager*>(
144 (MenuManagerFactory::GetInstance()->SetTestingFactoryAndUse(
145 profile_.get(), &MenuManagerFactory::BuildServiceInstanceForTesting)));
146 ASSERT_TRUE(manager);
147
148 scoped_refptr<ExtensionContextMenuModel> menu(
149 new ExtensionContextMenuModel(extension.get(), &browser));
150
151 // There should be no extension items yet.
152 EXPECT_EQ(0, CountExtensionItems(menu));
153
154 // Add a browser action menu item for |extension| to |manager|.
155 AddContextItemAndRefreshModel(
156 manager, extension.get(), MenuItem::BROWSER_ACTION, menu);
157
158 // Since |extension| has a page action, the browser action menu item should
159 // not be present.
160 EXPECT_EQ(0, CountExtensionItems(menu));
161
162 // Add a page action menu item and reset the context menu.
163 AddContextItemAndRefreshModel(
164 manager, extension.get(), MenuItem::PAGE_ACTION, menu);
165
166 // The page action item should be present because |extension| has a page
167 // action.
168 EXPECT_EQ(1, CountExtensionItems(menu));
169
170 // Create more page action items to test top level menu item limitations.
171 for (int i = 0; i < api::context_menus::ACTION_MENU_TOP_LEVEL_LIMIT; ++i)
172 AddContextItemAndRefreshModel(
173 manager, extension.get(), MenuItem::PAGE_ACTION, menu);
174
175 // The menu should only have a limited number of extension items, since they
176 // are all top level items, and we limit the number of top level extension
177 // items.
178 EXPECT_EQ(api::context_menus::ACTION_MENU_TOP_LEVEL_LIMIT,
179 CountExtensionItems(menu));
180
181 AddContextItemAndRefreshModel(
182 manager, extension.get(), MenuItem::PAGE_ACTION, menu);
183
184 // Adding another top level item should not increase the count.
185 EXPECT_EQ(api::context_menus::ACTION_MENU_TOP_LEVEL_LIMIT,
186 CountExtensionItems(menu));
187 }
188
189 } // namespace 69 } // namespace
190 } // namespace extensions 70 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_context_menu_model.cc ('k') | chrome/browser/extensions/menu_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698