| 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 0ae2aa3f4973e52fa2c8b21057f1b06c8e81c5c6..e230364c45e0a4feb70fc604203761dd1712ec80 100644
|
| --- a/chrome/browser/extensions/extension_context_menu_model_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_context_menu_model_unittest.cc
|
| @@ -23,9 +23,11 @@
|
| #include "extensions/common/feature_switch.h"
|
| #include "extensions/common/manifest.h"
|
| #include "extensions/common/manifest_constants.h"
|
| +#include "extensions/common/manifest_handlers/options_page_info.h"
|
| #include "extensions/common/value_builder.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/gfx/image/image.h"
|
|
|
| namespace extensions {
|
|
|
| @@ -93,7 +95,6 @@ class ExtensionContextMenuModelTest : public ExtensionServiceTestBase {
|
| ExtensionContextMenuModelTest::ExtensionContextMenuModelTest() : cur_id_(0) {
|
| }
|
|
|
| -
|
| void ExtensionContextMenuModelTest::AddContextItemAndRefreshModel(
|
| MenuManager* manager,
|
| const Extension* extension,
|
| @@ -129,50 +130,90 @@ int ExtensionContextMenuModelTest::CountExtensionItems(
|
| TEST_F(ExtensionContextMenuModelTest, RequiredInstallationsDisablesItems) {
|
| InitializeEmptyExtensionService();
|
|
|
| - // First, test that a component extension cannot be uninstalled by the
|
| - // standard management policy.
|
| + // Test that management policy can determine whether or not policy-installed
|
| + // extensions can be installed/uninstalled.
|
| scoped_refptr<const Extension> extension =
|
| - BuildExtension("component",
|
| - manifest_keys::kBrowserAction,
|
| - Manifest::COMPONENT);
|
| + BuildExtension("extension",
|
| + manifest_keys::kPageAction,
|
| + Manifest::EXTERNAL_POLICY);
|
| ASSERT_TRUE(extension.get());
|
| service()->AddExtension(extension.get());
|
|
|
| scoped_ptr<Browser> browser = CreateBrowser(profile());
|
| -
|
| scoped_refptr<ExtensionContextMenuModel> menu(
|
| new ExtensionContextMenuModel(extension.get(), browser.get()));
|
|
|
| - // Uninstallation should be disabled.
|
| - EXPECT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
|
| -
|
| - // Also test that management policy can determine whether or not
|
| - // policy-installed extensions can be installed/uninstalled.
|
| - extension = BuildExtension("extension",
|
| - manifest_keys::kPageAction,
|
| - Manifest::INTERNAL);
|
| - ASSERT_TRUE(extension.get());
|
| - service()->AddExtension(extension.get());
|
| -
|
| - menu = new ExtensionContextMenuModel(extension.get(), browser.get());
|
| -
|
| ExtensionSystem* system = ExtensionSystem::Get(profile());
|
| system->management_policy()->UnregisterAllProviders();
|
|
|
| - // Actions should be enabled.
|
| + // Uninstallation should be, by default, enabled.
|
| ASSERT_TRUE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
|
|
|
| TestManagementPolicyProvider policy_provider(
|
| TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS);
|
| system->management_policy()->RegisterProvider(&policy_provider);
|
|
|
| - // Now the actions are disabled.
|
| + // If there's a policy provider that requires the extension stay enabled, then
|
| + // uninstallation should be disabled.
|
| ASSERT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::UNINSTALL));
|
|
|
| // Don't leave |policy_provider| dangling.
|
| system->management_policy()->UnregisterProvider(&policy_provider);
|
| }
|
|
|
| +// Tests the context menu for a component extension.
|
| +TEST_F(ExtensionContextMenuModelTest, ComponentExtensionContextMenu) {
|
| + InitializeEmptyExtensionService();
|
| +
|
| + std::string name("component");
|
| + scoped_ptr<base::DictionaryValue> manifest =
|
| + DictionaryBuilder().Set("name", name)
|
| + .Set("version", "1")
|
| + .Set("manifest_version", 2)
|
| + .Set("browser_action", DictionaryBuilder().Pass())
|
| + .Build();
|
| +
|
| + scoped_refptr<const Extension> extension =
|
| + ExtensionBuilder().SetManifest(make_scoped_ptr(manifest->DeepCopy()))
|
| + .SetID(crx_file::id_util::GenerateId("component"))
|
| + .SetLocation(Manifest::COMPONENT)
|
| + .Build();
|
| + service()->AddExtension(extension.get());
|
| +
|
| + scoped_ptr<Browser> browser = CreateBrowser(profile());
|
| +
|
| + scoped_refptr<ExtensionContextMenuModel> menu(
|
| + new ExtensionContextMenuModel(extension.get(), browser.get()));
|
| +
|
| + // A component extension's context menu should not include options for
|
| + // managing extensions or removing it, and should only include an option for
|
| + // the options page if the extension has one (which this one doesn't).
|
| + EXPECT_EQ(-1,
|
| + menu->GetIndexOfCommandId(ExtensionContextMenuModel::CONFIGURE));
|
| + EXPECT_EQ(-1,
|
| + menu->GetIndexOfCommandId(ExtensionContextMenuModel::UNINSTALL));
|
| + EXPECT_EQ(-1, menu->GetIndexOfCommandId(ExtensionContextMenuModel::MANAGE));
|
| + // The "name" option should be present, but not enabled for component
|
| + // extensions.
|
| + EXPECT_NE(-1, menu->GetIndexOfCommandId(ExtensionContextMenuModel::NAME));
|
| + EXPECT_FALSE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::NAME));
|
| +
|
| + // Check that a component extension with an options page does have the options
|
| + // menu item, and it is enabled.
|
| + manifest->SetString("options_page", "options_page.html");
|
| + extension =
|
| + ExtensionBuilder().SetManifest(manifest.Pass())
|
| + .SetID(crx_file::id_util::GenerateId("component_opts"))
|
| + .SetLocation(Manifest::COMPONENT)
|
| + .Build();
|
| + menu = new ExtensionContextMenuModel(extension.get(), browser.get());
|
| + service()->AddExtension(extension.get());
|
| + EXPECT_TRUE(extensions::OptionsPageInfo::HasOptionsPage(extension.get()));
|
| + EXPECT_NE(-1,
|
| + menu->GetIndexOfCommandId(ExtensionContextMenuModel::CONFIGURE));
|
| + EXPECT_TRUE(menu->IsCommandIdEnabled(ExtensionContextMenuModel::CONFIGURE));
|
| +}
|
| +
|
| TEST_F(ExtensionContextMenuModelTest, ExtensionItemTest) {
|
| InitializeEmptyExtensionService();
|
| scoped_refptr<const Extension> extension =
|
|
|