Commit ceec9deb authored by Ghazale Hosseinabadi's avatar Ghazale Hosseinabadi Committed by Commit Bot

[Extensions] Add a test for sessionStorage behavior in extensions

This CL adds PopupRepeatedOpening test, which verifies that
sessionStorage does not persist between repeated opening and
closing of a popup.

Bug: 42599
Change-Id: I837dd93bb12225619707127304802cff3e2d407e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2297687Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Commit-Queue: Ghazale Hosseinabadi <ghazale@chromium.org>
Commit-Queue: Devlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791074}
parent cbd8c160
......@@ -536,6 +536,108 @@ IN_PROC_BROWSER_TEST_P(MultiActionAPITest, PopupCreation) {
EXPECT_EQ(0u, frames.size());
}
// Tests that sessionStorage does not persist between closing and opening of a
// popup.
IN_PROC_BROWSER_TEST_P(MultiActionAPITest,
SessionStorageDoesNotPersistBetweenOpenings) {
constexpr char kManifestTemplate[] =
R"({
"name": "Test sessionStorage",
"manifest_version": 2,
"version": "0.1",
"%s": {
"default_popup": "popup.html"
}
})";
constexpr char kPopupHtml[] =
R"(<!doctype html>
<html>
<script src="popup.js"></script>
</html>)";
constexpr char kPopupJs[] =
R"(window.onload = function() {
if (!sessionStorage.foo) {
sessionStorage.foo = 1;
} else {
sessionStorage.foo = parseInt(sessionStorage.foo) + 1;
}
chrome.test.notifyPass();};
)";
TestExtensionDir test_dir;
test_dir.WriteManifest(base::StringPrintf(
kManifestTemplate, GetManifestKeyForActionType(GetParam())));
test_dir.WriteFile(FILE_PATH_LITERAL("popup.html"), kPopupHtml);
test_dir.WriteFile(FILE_PATH_LITERAL("popup.js"), kPopupJs);
const Extension* extension = LoadExtension(test_dir.UnpackedPath());
ASSERT_TRUE(extension);
std::unique_ptr<ExtensionActionTestHelper> toolbar_helper =
ExtensionActionTestHelper::Create(browser());
ExtensionAction* action = GetExtensionAction(*extension);
ASSERT_TRUE(action);
int tab_id = GetActiveTabId();
EnsureActionIsEnabledOnActiveTab(action);
EXPECT_TRUE(action->HasPopup(tab_id));
ResultCatcher result_catcher;
toolbar_helper->Press(0);
EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message();
ProcessManager* process_manager = ProcessManager::Get(profile());
ProcessManager::FrameSet frames =
process_manager->GetRenderFrameHostsForExtension(extension->id());
ASSERT_EQ(1u, frames.size());
content::RenderFrameHost* render_frame_host = *frames.begin();
content::WebContents* popup_contents =
content::WebContents::FromRenderFrameHost(render_frame_host);
ASSERT_TRUE(popup_contents);
std::string foo;
EXPECT_TRUE(content::ExecuteScriptAndExtractString(
popup_contents, "domAutomationController.send(sessionStorage.foo)",
&foo));
EXPECT_EQ("1", foo);
const std::string session_storage_id1 =
popup_contents->GetController().GetDefaultSessionStorageNamespace()->id();
// Close the popup.
content::WebContentsDestroyedWatcher contents_destroyed(popup_contents);
EXPECT_TRUE(content::ExecuteScript(popup_contents, "window.close()"));
contents_destroyed.Wait();
frames = process_manager->GetRenderFrameHostsForExtension(extension->id());
EXPECT_EQ(0u, frames.size());
// Open the popup again.
toolbar_helper->Press(0);
EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message();
frames = process_manager->GetRenderFrameHostsForExtension(extension->id());
ASSERT_EQ(1u, frames.size());
render_frame_host = *frames.begin();
popup_contents = content::WebContents::FromRenderFrameHost(render_frame_host);
const std::string session_storage_id2 =
popup_contents->GetController().GetDefaultSessionStorageNamespace()->id();
// Verify that sessionStorage did not persist. The reason is that closing the
// popup ends the session and clears objects in sessionStorage.
EXPECT_NE(session_storage_id1, session_storage_id2);
foo = "";
EXPECT_TRUE(content::ExecuteScriptAndExtractString(
popup_contents, "domAutomationController.send(sessionStorage.foo)",
&foo));
EXPECT_EQ("1", foo);
}
// Tests setting the icon dynamically from the background page.
IN_PROC_BROWSER_TEST_P(MultiActionAPICanvasTest, DynamicSetIcon) {
constexpr char kManifestTemplate[] =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment