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

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

Issue 919733002: [Extensions Toolbar] Have all extensions in the toolbar show a context menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « no previous file | extensions/common/extension.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/api/extension_action/extension_action_api.h" 7 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
8 #include "chrome/browser/extensions/extension_service.h" 8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/extension_service_test_base.h" 9 #include "chrome/browser/extensions/extension_service_test_base.h"
10 #include "chrome/browser/extensions/menu_manager.h" 10 #include "chrome/browser/extensions/menu_manager.h"
11 #include "chrome/browser/extensions/menu_manager_factory.h" 11 #include "chrome/browser/extensions/menu_manager_factory.h"
12 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/host_desktop.h" 13 #include "chrome/browser/ui/host_desktop.h"
14 #include "chrome/common/extensions/api/context_menus.h" 14 #include "chrome/common/extensions/api/context_menus.h"
15 #include "chrome/grit/generated_resources.h" 15 #include "chrome/grit/generated_resources.h"
16 #include "chrome/test/base/test_browser_window.h" 16 #include "chrome/test/base/test_browser_window.h"
17 #include "chrome/test/base/testing_profile.h" 17 #include "chrome/test/base/testing_profile.h"
18 #include "components/crx_file/id_util.h" 18 #include "components/crx_file/id_util.h"
19 #include "extensions/browser/extension_prefs.h" 19 #include "extensions/browser/extension_prefs.h"
20 #include "extensions/browser/extension_system.h" 20 #include "extensions/browser/extension_system.h"
21 #include "extensions/browser/test_management_policy.h" 21 #include "extensions/browser/test_management_policy.h"
22 #include "extensions/common/extension_builder.h" 22 #include "extensions/common/extension_builder.h"
23 #include "extensions/common/feature_switch.h" 23 #include "extensions/common/feature_switch.h"
24 #include "extensions/common/manifest.h"
24 #include "extensions/common/manifest_constants.h" 25 #include "extensions/common/manifest_constants.h"
25 #include "extensions/common/value_builder.h" 26 #include "extensions/common/value_builder.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
28 29
29 namespace extensions { 30 namespace extensions {
30 31
31 namespace { 32 namespace {
32 33
33 // Build an extension to pass to the menu constructor, with the an action 34 // Build an extension to pass to the menu constructor, with the an action
34 // specified by |action_key|. 35 // specified by |action_key|.
35 scoped_refptr<const Extension> BuildExtension(const std::string& name, 36 scoped_refptr<const Extension> BuildExtension(const std::string& name,
36 const char* action_key) { 37 const char* action_key,
38 Manifest::Location location) {
37 return ExtensionBuilder() 39 return ExtensionBuilder()
38 .SetManifest(DictionaryBuilder() 40 .SetManifest(DictionaryBuilder()
39 .Set("name", name) 41 .Set("name", name)
40 .Set("version", "1") 42 .Set("version", "1")
41 .Set("manifest_version", 2) 43 .Set("manifest_version", 2)
42 .Set(action_key, DictionaryBuilder().Pass())) 44 .Set(action_key, DictionaryBuilder().Pass()))
43 .SetID(crx_file::id_util::GenerateId(name)) 45 .SetID(crx_file::id_util::GenerateId(name))
46 .SetLocation(location)
44 .Build(); 47 .Build();
45 } 48 }
46 49
47 // Create a Browser for the ExtensionContextMenuModel to use. 50 // Create a Browser for the ExtensionContextMenuModel to use.
48 scoped_ptr<Browser> CreateBrowser(Profile* profile) { 51 scoped_ptr<Browser> CreateBrowser(Profile* profile) {
49 Browser::CreateParams params(profile, chrome::GetActiveDesktop()); 52 Browser::CreateParams params(profile, chrome::GetActiveDesktop());
50 TestBrowserWindow test_window; 53 TestBrowserWindow test_window;
51 params.window = &test_window; 54 params.window = &test_window;
52 return scoped_ptr<Browser>(new Browser(params)); 55 return scoped_ptr<Browser>(new Browser(params));
53 } 56 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 model->InitMenu(model->GetExtension()); 119 model->InitMenu(model->GetExtension());
117 } 120 }
118 121
119 int ExtensionContextMenuModelTest::CountExtensionItems( 122 int ExtensionContextMenuModelTest::CountExtensionItems(
120 ExtensionContextMenuModel* model) { 123 ExtensionContextMenuModel* model) {
121 return model->extension_items_count_; 124 return model->extension_items_count_;
122 } 125 }
123 126
124 // Tests that applicable menu items are disabled when a ManagementPolicy 127 // Tests that applicable menu items are disabled when a ManagementPolicy
125 // prohibits them. 128 // prohibits them.
126 TEST_F(ExtensionContextMenuModelTest, PolicyDisablesItems) { 129 TEST_F(ExtensionContextMenuModelTest, RequiredInstallationsDisablesItems) {
127 InitializeEmptyExtensionService(); 130 InitializeEmptyExtensionService();
131
132 // First, test that a component extension cannot be uninstalled by the
133 // standard management policy.
128 scoped_refptr<const Extension> extension = 134 scoped_refptr<const Extension> extension =
129 BuildExtension("extension", manifest_keys::kPageAction); 135 BuildExtension("component",
136 manifest_keys::kBrowserAction,
137 Manifest::COMPONENT);
130 ASSERT_TRUE(extension.get()); 138 ASSERT_TRUE(extension.get());
131 service()->AddExtension(extension.get()); 139 service()->AddExtension(extension.get());
132 140
133 scoped_ptr<Browser> browser = CreateBrowser(profile()); 141 scoped_ptr<Browser> browser = CreateBrowser(profile());
134 142
135 scoped_refptr<ExtensionContextMenuModel> menu( 143 scoped_refptr<ExtensionContextMenuModel> menu(
136 new ExtensionContextMenuModel(extension.get(), browser.get())); 144 new ExtensionContextMenuModel(extension.get(), browser.get()));
137 145
146 // Uninstallation should be disabled.
147 EXPECT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
148
149 // Also test that management policy can determine whether or not
150 // policy-installed extensions can be installed/uninstalled.
151 extension = BuildExtension("extension",
152 manifest_keys::kPageAction,
153 Manifest::INTERNAL);
154 ASSERT_TRUE(extension.get());
155 service()->AddExtension(extension.get());
156
157 menu = new ExtensionContextMenuModel(extension.get(), browser.get());
158
138 ExtensionSystem* system = ExtensionSystem::Get(profile()); 159 ExtensionSystem* system = ExtensionSystem::Get(profile());
139 system->management_policy()->UnregisterAllProviders(); 160 system->management_policy()->UnregisterAllProviders();
140 161
141 // Actions should be enabled. 162 // Actions should be enabled.
142 ASSERT_TRUE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL)); 163 ASSERT_TRUE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
143 164
144 TestManagementPolicyProvider policy_provider( 165 TestManagementPolicyProvider policy_provider(
145 TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); 166 TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
146 system->management_policy()->RegisterProvider(&policy_provider); 167 system->management_policy()->RegisterProvider(&policy_provider);
147 168
148 // Now the actions are disabled. 169 // Now the actions are disabled.
149 ASSERT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL)); 170 ASSERT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
150 171
151 // Don't leave |policy_provider| dangling. 172 // Don't leave |policy_provider| dangling.
152 system->management_policy()->UnregisterAllProviders(); 173 system->management_policy()->UnregisterProvider(&policy_provider);
153 } 174 }
154 175
155 TEST_F(ExtensionContextMenuModelTest, ExtensionItemTest) { 176 TEST_F(ExtensionContextMenuModelTest, ExtensionItemTest) {
156 InitializeEmptyExtensionService(); 177 InitializeEmptyExtensionService();
157 scoped_refptr<const Extension> extension = 178 scoped_refptr<const Extension> extension =
158 BuildExtension("extension", manifest_keys::kPageAction); 179 BuildExtension("extension",
180 manifest_keys::kPageAction,
181 Manifest::INTERNAL);
159 ASSERT_TRUE(extension.get()); 182 ASSERT_TRUE(extension.get());
160 service()->AddExtension(extension.get()); 183 service()->AddExtension(extension.get());
161 184
162 scoped_ptr<Browser> browser = CreateBrowser(profile()); 185 scoped_ptr<Browser> browser = CreateBrowser(profile());
163 186
164 // Create a MenuManager for adding context items. 187 // Create a MenuManager for adding context items.
165 MenuManager* manager = static_cast<MenuManager*>( 188 MenuManager* manager = static_cast<MenuManager*>(
166 (MenuManagerFactory::GetInstance()->SetTestingFactoryAndUse( 189 (MenuManagerFactory::GetInstance()->SetTestingFactoryAndUse(
167 profile(), 190 profile(),
168 &MenuManagerFactory::BuildServiceInstanceForTesting))); 191 &MenuManagerFactory::BuildServiceInstanceForTesting)));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 // Adding another top level item should not increase the count. 230 // Adding another top level item should not increase the count.
208 EXPECT_EQ(api::context_menus::ACTION_MENU_TOP_LEVEL_LIMIT, 231 EXPECT_EQ(api::context_menus::ACTION_MENU_TOP_LEVEL_LIMIT,
209 CountExtensionItems(menu.get())); 232 CountExtensionItems(menu.get()));
210 } 233 }
211 234
212 // Test that the "show" and "hide" menu items appear correctly in the extension 235 // Test that the "show" and "hide" menu items appear correctly in the extension
213 // context menu. 236 // context menu.
214 TEST_F(ExtensionContextMenuModelTest, ExtensionContextMenuShowAndHide) { 237 TEST_F(ExtensionContextMenuModelTest, ExtensionContextMenuShowAndHide) {
215 InitializeEmptyExtensionService(); 238 InitializeEmptyExtensionService();
216 scoped_refptr<const Extension> page_action = 239 scoped_refptr<const Extension> page_action =
217 BuildExtension("page_action_extension", manifest_keys::kPageAction); 240 BuildExtension("page_action_extension",
241 manifest_keys::kPageAction,
242 Manifest::INTERNAL);
218 ASSERT_TRUE(page_action.get()); 243 ASSERT_TRUE(page_action.get());
219 scoped_refptr<const Extension> browser_action = 244 scoped_refptr<const Extension> browser_action =
220 BuildExtension("browser_action_extension", manifest_keys::kBrowserAction); 245 BuildExtension("browser_action_extension",
246 manifest_keys::kBrowserAction,
247 Manifest::INTERNAL);
221 ASSERT_TRUE(browser_action.get()); 248 ASSERT_TRUE(browser_action.get());
222 249
223 service()->AddExtension(page_action.get()); 250 service()->AddExtension(page_action.get());
224 service()->AddExtension(browser_action.get()); 251 service()->AddExtension(browser_action.get());
225 252
226 scoped_ptr<Browser> browser = CreateBrowser(profile()); 253 scoped_ptr<Browser> browser = CreateBrowser(profile());
227 254
228 scoped_refptr<ExtensionContextMenuModel> menu( 255 scoped_refptr<ExtensionContextMenuModel> menu(
229 new ExtensionContextMenuModel(page_action.get(), browser.get())); 256 new ExtensionContextMenuModel(page_action.get(), browser.get()));
230 257
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 // Hide the browser action. This should mean the string is "show". 293 // Hide the browser action. This should mean the string is "show".
267 ExtensionActionAPI::SetBrowserActionVisibility( 294 ExtensionActionAPI::SetBrowserActionVisibility(
268 prefs, browser_action->id(), false); 295 prefs, browser_action->id(), false);
269 menu = new ExtensionContextMenuModel(browser_action.get(), browser.get()); 296 menu = new ExtensionContextMenuModel(browser_action.get(), browser.get());
270 index = GetCommandIndex(menu, visibility_command); 297 index = GetCommandIndex(menu, visibility_command);
271 EXPECT_NE(-1, index); 298 EXPECT_NE(-1, index);
272 EXPECT_EQ(show_string, menu->GetLabelAt(index)); 299 EXPECT_EQ(show_string, menu->GetLabelAt(index));
273 } 300 }
274 301
275 } // namespace extensions 302 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | extensions/common/extension.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698