diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2023-10-27 17:02:53 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2023-10-27 17:04:08 +0200 |
commit | 3dce9b5818576f04ce21cec4b3686eda012e5b65 (patch) | |
tree | fe3d59c6da3e62c74563710ba63996585293c743 /chromium/chrome/browser/extensions/api/extension_action | |
parent | 5a424f4a7b188b75da63eb697f63558af0b17f6f (diff) |
BASELINE: Update Chromium to 118.0.5993.24
Change-Id: I8373334b8ea8225ab4d934dc676aabc6a85a7efa
Diffstat (limited to 'chromium/chrome/browser/extensions/api/extension_action')
-rw-r--r-- | chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc | 18 | ||||
-rw-r--r-- | chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc | 72 |
2 files changed, 81 insertions, 9 deletions
diff --git a/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc b/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc index 5c3f547ae65..079f1f43e07 100644 --- a/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc +++ b/chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc @@ -858,8 +858,9 @@ IN_PROC_BROWSER_TEST_F(BrowserActionInteractiveFencedFrameTest, manager->GetRenderFrameHostsForExtension(extension->id()); const auto& it = base::ranges::find_if( hosts, &content::RenderFrameHost::IsInPrimaryMainFrame); - content::RenderFrameHost* primary_rfh = (it != hosts.end()) ? *it : nullptr; - ASSERT_TRUE(primary_rfh); + content::RenderFrameHost* primary_render_frame_host = + (it != hosts.end()) ? *it : nullptr; + ASSERT_TRUE(primary_render_frame_host); // Navigate the popup's fenced frame to a (cross-site) web page via its // parent, and wait for that page to send a message, which will ensure that @@ -867,19 +868,20 @@ IN_PROC_BROWSER_TEST_F(BrowserActionInteractiveFencedFrameTest, GURL foo_url(https_server.GetURL("a.test", "/popup_fencedframe.html")); content::TestNavigationObserver observer( - content::WebContents::FromRenderFrameHost(primary_rfh)); + content::WebContents::FromRenderFrameHost(primary_render_frame_host)); std::string script = "document.querySelector('fencedframe').config = new FencedFrameConfig('" + foo_url.spec() + "')"; - EXPECT_TRUE(ExecJs(primary_rfh, script)); + EXPECT_TRUE(ExecJs(primary_render_frame_host, script)); observer.WaitForNavigationFinished(); - content::RenderFrameHost* fenced_frame_rfh = - fenced_frame_test_helper().GetMostRecentlyAddedFencedFrame(primary_rfh); - ASSERT_TRUE(fenced_frame_rfh); + content::RenderFrameHost* fenced_frame_render_frame_host = + fenced_frame_test_helper().GetMostRecentlyAddedFencedFrame( + primary_render_frame_host); + ASSERT_TRUE(fenced_frame_render_frame_host); // Confirm that the new page (popup_fencedframe.html) is actually loaded. - content::DOMMessageQueue dom_message_queue(fenced_frame_rfh); + content::DOMMessageQueue dom_message_queue(fenced_frame_render_frame_host); std::string json; EXPECT_TRUE(dom_message_queue.WaitForMessage(&json)); EXPECT_EQ("\"DONE\"", json); diff --git a/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc b/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc index 0ca967e7b98..d268ada6388 100644 --- a/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc +++ b/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc @@ -23,6 +23,7 @@ #include "chrome/browser/ui/toolbar/toolbar_actions_model.h" #include "chrome/test/base/ui_test_utils.h" #include "components/sessions/content/session_tab_helper.h" +#include "components/version_info/channel.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test.h" @@ -33,10 +34,12 @@ #include "extensions/browser/extension_action_manager.h" #include "extensions/browser/extension_icon_image.h" #include "extensions/browser/process_manager.h" +#include "extensions/browser/service_worker/service_worker_test_utils.h" #include "extensions/browser/state_store.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.h" +#include "extensions/common/features/feature_channel.h" #include "extensions/common/manifest_constants.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" @@ -104,7 +107,7 @@ class TestStateStoreObserver : public StateStore::TestObserver { } private: - std::string extension_id_; + ExtensionId extension_id_; std::map<std::string, int> updated_values_; base::ScopedObservation<StateStore, StateStore::TestObserver> @@ -1869,6 +1872,73 @@ IN_PROC_BROWSER_TEST_P(ActionAndBrowserActionAPITest, EXPECT_EQ("", action->GetExplicitlySetBadgeText(tab_id2)); } +class ExtensionActionStableChannelApiTest : public ExtensionActionAPITest { + public: + ExtensionActionStableChannelApiTest() = default; + ~ExtensionActionStableChannelApiTest() override = default; + + private: + ScopedCurrentChannel scoped_current_channel_{version_info::Channel::STABLE}; +}; + +// Tests that the action.openPopup() API is available to policy-installed +// extensions on stable. Since this is controlled through our features files +// (which are tested separately), this is more of a smoke test than an +// end-to-end test. +// TODO(https://crbug.com/1245093): Remove this test when the API is available +// for all extensions on stable. +IN_PROC_BROWSER_TEST_F(ExtensionActionStableChannelApiTest, + OpenPopupAvailabilityOnStableChannel) { + TestExtensionDir test_dir; + static constexpr char kManifest[] = + R"({ + "name": "Test", + "manifest_version": 3, + "version": "0.1", + "background": {"service_worker": "background.js"}, + "action": {} + })"; + test_dir.WriteManifest(kManifest); + test_dir.WriteFile(FILE_PATH_LITERAL("background.js"), + "chrome.test.sendMessage('ready');"); + + auto is_open_popup_defined = [this](const Extension& extension) { + static constexpr char kScript[] = + R"(chrome.test.sendScriptResult(!!chrome.action.openPopup);)"; + return BackgroundScriptExecutor::ExecuteScript( + profile(), extension.id(), kScript, + BackgroundScriptExecutor::ResultCapture::kSendScriptResult); + }; + + // Technically, we don't need the "ready" listener here, but this ensures we + // don't cross streams with the policy extension loaded below (where we do + // need the listener). + ExtensionTestMessageListener non_policy_listener("ready"); + const Extension* non_policy_extension = + LoadExtension(test_dir.UnpackedPath()); + ASSERT_TRUE(non_policy_extension); + ASSERT_TRUE(non_policy_listener.WaitUntilSatisfied()); + + // Somewhat annoying: due to how our test helpers are written, + // `EXPECT_EQ(false, base::Value)` works, but EXPECT_FALSE(base::Value) does + // not. + EXPECT_EQ(false, is_open_popup_defined(*non_policy_extension)); + + // Unlike `LoadExtension()`, `InstallExtension()` doesn't wait for the service + // worker to be ready, so we need a few manual waiters. + base::FilePath packed_path = test_dir.Pack(); + service_worker_test_utils::TestRegistrationObserver registration_observer( + profile()); + ExtensionTestMessageListener policy_listener("ready"); + const Extension* policy_extension = InstallExtension( + packed_path, 1, mojom::ManifestLocation::kExternalPolicyDownload); + ASSERT_TRUE(policy_extension); + ASSERT_TRUE(policy_listener.WaitUntilSatisfied()); + registration_observer.WaitForRegistrationStored(); + + EXPECT_EQ(true, is_open_popup_defined(*policy_extension)); +} + INSTANTIATE_TEST_SUITE_P(All, MultiActionAPITest, testing::Values(ActionInfo::TYPE_ACTION, |