summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/extensions/api/extension_action
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2023-10-27 17:02:53 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2023-10-27 17:04:08 +0200
commit3dce9b5818576f04ce21cec4b3686eda012e5b65 (patch)
treefe3d59c6da3e62c74563710ba63996585293c743 /chromium/chrome/browser/extensions/api/extension_action
parent5a424f4a7b188b75da63eb697f63558af0b17f6f (diff)
BASELINE: Update Chromium to 118.0.5993.24
Diffstat (limited to 'chromium/chrome/browser/extensions/api/extension_action')
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc18
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc72
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,