#include "chrome/browser/extensions/extension_context_menu_model.h"
#include <memory>
#include <utility>
#include "base/functional/bind.h"
#include "base/json/json_reader.h"
#include "base/memory/ptr_util.h"
#include "base/memory/raw_ptr.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/metrics/user_action_tester.h"
#include "base/values.h"
#include "build/chromeos_buildflags.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/extensions/context_menu_matcher.h"
#include "chrome/browser/extensions/extension_action_runner.h"
#include "chrome/browser/extensions/extension_action_test_util.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_service_test_base.h"
#include "chrome/browser/extensions/menu_manager.h"
#include "chrome/browser/extensions/menu_manager_factory.h"
#include "chrome/browser/extensions/permissions/permissions_test_util.h"
#include "chrome/browser/extensions/permissions/permissions_updater.h"
#include "chrome/browser/extensions/permissions/scripting_permissions_modifier.h"
#include "chrome/browser/extensions/permissions/site_permissions_helper.h"
#include "chrome/browser/extensions/permissions_url_constants.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
#include "chrome/common/extensions/api/context_menus.h"
#include "chrome/grit/generated_resources.h"
#include "chrome/test/base/test_browser_window.h"
#include "chrome/test/base/testing_profile.h"
#include "components/crx_file/id_util.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/permissions_manager.h"
#include "extensions/browser/test_extension_registry_observer.h"
#include "extensions/browser/test_management_policy.h"
#include "extensions/common/api/extension_action/action_info.h"
#include "extensions/common/api/extension_action/action_info_test_util.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/extension_features.h"
#include "extensions/common/extensions_client.h"
#include "extensions/common/manifest.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/manifest_handlers/options_page_info.h"
#include "extensions/common/mojom/manifest.mojom-shared.h"
#include "extensions/common/mojom/run_location.mojom-shared.h"
#include "extensions/common/permissions/permissions_data.h"
#include "extensions/test/permissions_manager_waiter.h"
#include "net/disk_cache/blockfile/disk_format_base.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/display/test/test_screen.h"
#include "ui/gfx/image/image.h"
#include "url/origin.h"
namespace extensions {
ManifestLocation;
ContextMenuSource;
MenuEntries;
const MenuEntries kGrantAllExtensions = …;
const MenuEntries kBlockAllExtensions = …;
const MenuEntries kPageAccessSubmenu = …;
const MenuEntries kOnClick = …;
const MenuEntries kOnSite = …;
const MenuEntries kOnAllSites = …;
const MenuEntries kPermissionsPage = …;
const MenuEntries kLearnMore = …;
const MenuEntries kUninstall = …;
const MenuEntries kPolicyInstalled = …;
namespace {
void Increment(int* i, bool granted) { … }
MenuItem::Context MenuItemContextForActionType(ActionInfo::Type type) { … }
scoped_refptr<const Extension> BuildExtensionWithActionType(
ActionInfo::Type type) { … }
const char* kTestExtensionItemLabel = …;
std::string item_label() { … }
class MenuBuilder { … };
int CountExtensionItems(const ExtensionContextMenuModel& model) { … }
void VerifyItems(const ExtensionContextMenuModel& model,
std::vector<std::string> item_number) { … }
}
class ExtensionContextMenuModelTest : public ExtensionServiceTestBase { … };
ExtensionContextMenuModelTest::ExtensionContextMenuModelTest() { … }
const Extension* ExtensionContextMenuModelTest::AddExtension(
const std::string& name,
const char* action_key,
ManifestLocation location) { … }
const Extension* ExtensionContextMenuModelTest::AddExtensionWithHostPermission(
const std::string& name,
const char* action_key,
ManifestLocation location,
const std::string& host_permission) { … }
void ExtensionContextMenuModelTest::InitializeAndAddExtension(
const Extension& extension) { … }
Browser* ExtensionContextMenuModelTest::GetBrowser() { … }
MenuManager* ExtensionContextMenuModelTest::CreateMenuManager() { … }
content::WebContents* ExtensionContextMenuModelTest::AddTab(const GURL& url) { … }
ExtensionContextMenuModelTest::CommandState
ExtensionContextMenuModelTest::GetCommandState(
const ExtensionContextMenuModel& menu,
int command_id) const { … }
ExtensionContextMenuModelTest::CommandState
ExtensionContextMenuModelTest::GetPageAccessCommandState(
const ExtensionContextMenuModel& menu,
int command) const { … }
bool ExtensionContextMenuModelTest::HasPageAccessSubmenu(
const ExtensionContextMenuModel& menu) const { … }
bool ExtensionContextMenuModelTest::HasCantAccessPageEntry(
const ExtensionContextMenuModel& menu) const { … }
void ExtensionContextMenuModelTest::SetUp() { … }
void ExtensionContextMenuModelTest::TearDown() { … }
TEST_F(ExtensionContextMenuModelTest, RequiredInstallationsDisablesItems) { … }
TEST_F(ExtensionContextMenuModelTest, ComponentExtensionContextMenu) { … }
TEST_F(ExtensionContextMenuModelTest,
ExtensionContextMenuStandardItemsAlwaysVisible) { … }
TEST_F(ExtensionContextMenuModelTest,
ExtensionContextMenuToggleVisibilityEntryVisibility) { … }
TEST_F(ExtensionContextMenuModelTest,
ExtensionContextMenuOptionsEntryVisibility) { … }
TEST_F(ExtensionContextMenuModelTest,
ExtensionContextMenuInspectPopupEntryVisibility) { … }
TEST_F(ExtensionContextMenuModelTest, ExtensionContextMenuShowAndHide) { … }
TEST_F(ExtensionContextMenuModelTest, ExtensionContextMenuForcePinned) { … }
TEST_F(ExtensionContextMenuModelTest, ExtensionContextUninstall) { … }
TEST_F(ExtensionContextMenuModelTest, PageAccess_CustomizeByExtension_Submenu) { … }
TEST_F(ExtensionContextMenuModelTest,
PageAccess_CustomizeByExtension_PermissionPatterns) { … }
TEST_F(ExtensionContextMenuModelTest,
PageAccess_CustomizeByExtension_OnSiteWithAllURLs) { … }
TEST_F(ExtensionContextMenuModelTest,
PageAccess_Customize_ByExtension_OnClickWithBroadPattern) { … }
TEST_F(ExtensionContextMenuModelTest,
PageAccess_CustomizeByExtension_WithActiveTab) { … }
TEST_F(ExtensionContextMenuModelTest,
PageAccess_CustomizeByExtension_PageNavigation) { … }
TEST_F(ExtensionContextMenuModelTest,
TestTogglingAccessWithSpecificSitesWithUnrequestedUrl) { … }
TEST_F(ExtensionContextMenuModelTest,
TestTogglingAccessWithSpecificSitesWithRequestedSites) { … }
TEST_F(ExtensionContextMenuModelTest, TestClickingPageAccessLearnMore) { … }
TEST_F(ExtensionContextMenuModelTest, HistogramTest_Basic) { … }
TEST_F(ExtensionContextMenuModelTest, HistogramTest_CustomCommand) { … }
class ExtensionActionContextMenuModelTest
: public ExtensionContextMenuModelTest,
public testing::WithParamInterface<ActionInfo::Type> { … };
TEST_P(ExtensionActionContextMenuModelTest,
MenuItemShowsOnlyForAppropriateActionType) { … }
TEST_P(ExtensionActionContextMenuModelTest, ActionMenuItemsAreLimited) { … }
TEST_P(ExtensionActionContextMenuModelTest,
ActionItemsOverTheLimitAreShownIfSomeOthersAreHidden) { … }
INSTANTIATE_TEST_SUITE_P(…);
class ExtensionContextMenuModelWithUserHostControlsTest
: public ExtensionContextMenuModelTest,
public testing::WithParamInterface<bool> { … };
INSTANTIATE_TEST_SUITE_P(…);
TEST_P(ExtensionContextMenuModelWithUserHostControlsTest,
PageAccessItemsVisibilityBasedOnSiteSettings) { … }
TEST_P(ExtensionContextMenuModelWithUserHostControlsTest,
PageAccessItemsVisibility_PolicyInstalled) { … }
TEST_P(ExtensionContextMenuModelWithUserHostControlsTest,
PolicyInstalledEntryVisibilityBasedOnSiteSettings) { … }
TEST_P(ExtensionContextMenuModelWithUserHostControlsTest,
UninstallEntryVisibility) { … }
TEST_P(ExtensionContextMenuModelWithUserHostControlsTest,
TestClickingPageAccessPermissionsPage) { … }
class ExtensionContextMenuModelWithUserHostControlsAndPermittedSitesTest
: public ExtensionContextMenuModelWithUserHostControlsTest { … };
INSTANTIATE_TEST_SUITE_P(…);
TEST_P(ExtensionContextMenuModelWithUserHostControlsAndPermittedSitesTest,
PageAccessItemsVisibilityBasedOnSiteSettings) { … }
}