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

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

Issue 1137733002: Fix an off-by-one error in checking # of action context menu items in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add thorough test + git cl format Created 5 years, 7 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 | « chrome/browser/extensions/context_menu_matcher.cc ('k') | no next file » | 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 "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" 8 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
8 #include "chrome/browser/extensions/extension_service.h" 9 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/extension_service_test_base.h" 10 #include "chrome/browser/extensions/extension_service_test_base.h"
10 #include "chrome/browser/extensions/menu_manager.h" 11 #include "chrome/browser/extensions/menu_manager.h"
11 #include "chrome/browser/extensions/menu_manager_factory.h" 12 #include "chrome/browser/extensions/menu_manager_factory.h"
12 #include "chrome/browser/ui/browser.h" 13 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/host_desktop.h" 14 #include "chrome/browser/ui/host_desktop.h"
14 #include "chrome/common/extensions/api/context_menus.h" 15 #include "chrome/common/extensions/api/context_menus.h"
15 #include "chrome/grit/chromium_strings.h" 16 #include "chrome/grit/chromium_strings.h"
16 #include "chrome/grit/generated_resources.h" 17 #include "chrome/grit/generated_resources.h"
17 #include "chrome/test/base/test_browser_window.h" 18 #include "chrome/test/base/test_browser_window.h"
18 #include "chrome/test/base/testing_profile.h" 19 #include "chrome/test/base/testing_profile.h"
19 #include "components/crx_file/id_util.h" 20 #include "components/crx_file/id_util.h"
20 #include "extensions/browser/extension_system.h" 21 #include "extensions/browser/extension_system.h"
21 #include "extensions/browser/test_management_policy.h" 22 #include "extensions/browser/test_management_policy.h"
22 #include "extensions/common/extension_builder.h" 23 #include "extensions/common/extension_builder.h"
23 #include "extensions/common/feature_switch.h" 24 #include "extensions/common/feature_switch.h"
24 #include "extensions/common/manifest.h" 25 #include "extensions/common/manifest.h"
25 #include "extensions/common/manifest_constants.h" 26 #include "extensions/common/manifest_constants.h"
26 #include "extensions/common/value_builder.h" 27 #include "extensions/common/value_builder.h"
27 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
28 #include "ui/base/l10n/l10n_util.h" 29 #include "ui/base/l10n/l10n_util.h"
29 30
30 namespace extensions { 31 namespace extensions {
31 32
32 namespace { 33 namespace {
33 34
35 // Label for test extension menu item.
36 const char* kTestExtensionItemLabel = "test-ext-item";
37
34 // Build an extension to pass to the menu constructor, with the an action 38 // Build an extension to pass to the menu constructor, with the an action
35 // specified by |action_key|. 39 // specified by |action_key|.
36 scoped_refptr<const Extension> BuildExtension(const std::string& name, 40 scoped_refptr<const Extension> BuildExtension(const std::string& name,
37 const char* action_key, 41 const char* action_key,
38 Manifest::Location location) { 42 Manifest::Location location) {
39 return ExtensionBuilder() 43 return ExtensionBuilder()
40 .SetManifest(DictionaryBuilder() 44 .SetManifest(DictionaryBuilder()
41 .Set("name", name) 45 .Set("name", name)
42 .Set("version", "1") 46 .Set("version", "1")
43 .Set("manifest_version", 2) 47 .Set("manifest_version", 2)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 // and adds it to |manager|. Refreshes |model| to show new item. 81 // and adds it to |manager|. Refreshes |model| to show new item.
78 void AddContextItemAndRefreshModel(MenuManager* manager, 82 void AddContextItemAndRefreshModel(MenuManager* manager,
79 const Extension* extension, 83 const Extension* extension,
80 MenuItem::Context context, 84 MenuItem::Context context,
81 ExtensionContextMenuModel* model); 85 ExtensionContextMenuModel* model);
82 86
83 // Reinitializes the given |model|. 87 // Reinitializes the given |model|.
84 void RefreshMenu(ExtensionContextMenuModel* model); 88 void RefreshMenu(ExtensionContextMenuModel* model);
85 89
86 // Returns the number of extension menu items that show up in |model|. 90 // Returns the number of extension menu items that show up in |model|.
91 // For this test, all the extension items have samel label
92 // |kTestExtensionItemLabel|.
87 int CountExtensionItems(ExtensionContextMenuModel* model); 93 int CountExtensionItems(ExtensionContextMenuModel* model);
88 94
89 private: 95 private:
90 int cur_id_; 96 int cur_id_;
91 }; 97 };
92 98
93 ExtensionContextMenuModelTest::ExtensionContextMenuModelTest() : cur_id_(0) { 99 ExtensionContextMenuModelTest::ExtensionContextMenuModelTest() : cur_id_(0) {
94 } 100 }
95 101
96 102
97 void ExtensionContextMenuModelTest::AddContextItemAndRefreshModel( 103 void ExtensionContextMenuModelTest::AddContextItemAndRefreshModel(
98 MenuManager* manager, 104 MenuManager* manager,
99 const Extension* extension, 105 const Extension* extension,
100 MenuItem::Context context, 106 MenuItem::Context context,
101 ExtensionContextMenuModel* model) { 107 ExtensionContextMenuModel* model) {
102 MenuItem::Type type = MenuItem::NORMAL; 108 MenuItem::Type type = MenuItem::NORMAL;
103 MenuItem::ContextList contexts(context); 109 MenuItem::ContextList contexts(context);
104 const MenuItem::ExtensionKey key(extension->id()); 110 const MenuItem::ExtensionKey key(extension->id());
105 MenuItem::Id id(false, key); 111 MenuItem::Id id(false, key);
106 id.uid = ++cur_id_; 112 id.uid = ++cur_id_;
107 manager->AddContextItem(extension, 113 manager->AddContextItem(extension, new MenuItem(id, kTestExtensionItemLabel,
108 new MenuItem(id, 114 false, // checked
109 "test", 115 true, // enabled
110 false, // checked 116 type, contexts));
111 true, // enabled
112 type,
113 contexts));
114 RefreshMenu(model); 117 RefreshMenu(model);
115 } 118 }
116 119
117 void ExtensionContextMenuModelTest::RefreshMenu( 120 void ExtensionContextMenuModelTest::RefreshMenu(
118 ExtensionContextMenuModel* model) { 121 ExtensionContextMenuModel* model) {
122 model->Clear();
lazyboy 2015/05/08 22:53:39 This used to be a bug in the test.
119 model->InitMenu(model->GetExtension(), ExtensionContextMenuModel::VISIBLE); 123 model->InitMenu(model->GetExtension(), ExtensionContextMenuModel::VISIBLE);
120 } 124 }
121 125
122 int ExtensionContextMenuModelTest::CountExtensionItems( 126 int ExtensionContextMenuModelTest::CountExtensionItems(
123 ExtensionContextMenuModel* model) { 127 ExtensionContextMenuModel* model) {
124 return model->extension_items_count_; 128 base::string16 expected_label = base::ASCIIToUTF16(kTestExtensionItemLabel);
129 int num_items_found = 0;
130 for (int i = 0; i < model->GetItemCount(); ++i) {
131 if (expected_label == model->GetLabelAt(i))
132 ++num_items_found;
133 }
134 EXPECT_EQ(num_items_found, model->extension_items_count_);
135 return num_items_found;
125 } 136 }
126 137
127 // Tests that applicable menu items are disabled when a ManagementPolicy 138 // Tests that applicable menu items are disabled when a ManagementPolicy
128 // prohibits them. 139 // prohibits them.
129 TEST_F(ExtensionContextMenuModelTest, RequiredInstallationsDisablesItems) { 140 TEST_F(ExtensionContextMenuModelTest, RequiredInstallationsDisablesItems) {
130 InitializeEmptyExtensionService(); 141 InitializeEmptyExtensionService();
131 142
132 // First, test that a component extension cannot be uninstalled by the 143 // First, test that a component extension cannot be uninstalled by the
133 // standard management policy. 144 // standard management policy.
134 scoped_refptr<const Extension> extension = 145 scoped_refptr<const Extension> extension =
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 browser_action.get(), 324 browser_action.get(),
314 browser.get(), 325 browser.get(),
315 ExtensionContextMenuModel::TRANSITIVELY_VISIBLE, 326 ExtensionContextMenuModel::TRANSITIVELY_VISIBLE,
316 nullptr); 327 nullptr);
317 index = GetCommandIndex(menu, visibility_command); 328 index = GetCommandIndex(menu, visibility_command);
318 EXPECT_NE(-1, index); 329 EXPECT_NE(-1, index);
319 EXPECT_EQ(redesign_keep_string, menu->GetLabelAt(index)); 330 EXPECT_EQ(redesign_keep_string, menu->GetLabelAt(index));
320 } 331 }
321 332
322 } // namespace extensions 333 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/context_menu_matcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698