Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |