blob: 86a1295cbe0f4b41f287798bbcbfae7dfea5c6cd [file] [log] [blame]
Brandon Maslen6134c852020-05-18 21:45:211// Copyright (c) 2020 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/net/storage_test_utils.h"
6
7#include "content/public/test/browser_test_utils.h"
8
9namespace storage {
10namespace test {
11
Asami Doibcbe9af2021-03-24 04:50:5212const std::vector<std::string> kStorageTypesForFrame{
13 "Cookie", "LocalStorage", "FileSystem", "FileSystemAccess",
14 "SessionStorage", "IndexedDb", "WebSql", "CacheStorage",
15 "ServiceWorker", "CookieStore", "StorageFoundation"};
16
17const std::vector<std::string> kStorageTypesForWorker{
18 "WorkerFileSystemAccess", "WorkerCacheStorage", "WorkerIndexedDb",
19 "WorkerStorageFoundation"};
Brandon Maslen6134c852020-05-18 21:45:2120
21const std::vector<std::string> kCrossTabCommunicationTypes{
22 "SharedWorker",
23 "WebLock",
24};
25
26constexpr char kRequestStorageAccess[] =
27 "document.requestStorageAccess().then("
28 " () => { window.domAutomationController.send(true); },"
29 " () => { window.domAutomationController.send(false); },"
30 ");";
31
32constexpr char kHasStorageAccess[] =
33 "document.hasStorageAccess().then("
34 " (result) => { window.domAutomationController.send(result); },"
35 " () => { window.domAutomationController.send(false); },"
36 ");";
37
Chris Fredricksonf39f87b2022-07-11 11:34:0438std::string GetFrameContent(content::RenderFrameHost* frame) {
39 return content::EvalJs(frame, "document.body.textContent").ExtractString();
Brandon Maslen6134c852020-05-18 21:45:2140}
41
42void SetStorageForFrame(content::RenderFrameHost* frame) {
Asami Doibcbe9af2021-03-24 04:50:5243 for (const auto& data_type : kStorageTypesForFrame) {
Avi Drissman0f0e26e52021-04-29 03:13:3444 bool data = content::EvalJs(frame, "set" + data_type + "()",
45 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
46 .ExtractBool();
Ari Chivukula8e111da2021-10-08 23:57:0047 if (frame->GetLastCommittedOrigin() !=
48 frame->GetMainFrame()->GetLastCommittedOrigin() &&
49 data_type == "WebSql") {
50 // Third-party context WebSQL is disabled as of M97.
51 EXPECT_FALSE(data) << "SetStorageForFrame for " << data_type;
52 } else {
53 EXPECT_TRUE(data) << "SetStorageForFrame for " << data_type;
54 }
Brandon Maslen6134c852020-05-18 21:45:2155 }
56}
57
Asami Doibcbe9af2021-03-24 04:50:5258void SetStorageForWorker(content::RenderFrameHost* frame) {
59 for (const auto& data_type : kStorageTypesForWorker) {
Avi Drissman0f0e26e52021-04-29 03:13:3460 bool data = content::EvalJs(frame, "set" + data_type + "()",
61 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
62 .ExtractBool();
Asami Doibcbe9af2021-03-24 04:50:5263 EXPECT_TRUE(data) << "SetStorageForWorker for " << data_type;
64 }
65}
66
Brandon Maslen6134c852020-05-18 21:45:2167void ExpectStorageForFrame(content::RenderFrameHost* frame, bool expected) {
Asami Doibcbe9af2021-03-24 04:50:5268 for (const auto& data_type : kStorageTypesForFrame) {
Avi Drissman0f0e26e52021-04-29 03:13:3469 bool data = content::EvalJs(frame, "has" + data_type + "();",
70 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
71 .ExtractBool();
Ari Chivukula8e111da2021-10-08 23:57:0072 if (frame->GetLastCommittedOrigin() !=
73 frame->GetMainFrame()->GetLastCommittedOrigin() &&
74 data_type == "WebSql") {
75 // Third-party context WebSQL is disabled as of M97.
76 EXPECT_FALSE(data) << "ExpectStorageForFrame for " << data_type;
77 } else {
78 EXPECT_EQ(expected, data) << "ExpectStorageForFrame for " << data_type;
79 }
Brandon Maslen6134c852020-05-18 21:45:2180 }
81}
82
Asami Doibcbe9af2021-03-24 04:50:5283void ExpectStorageForWorker(content::RenderFrameHost* frame, bool expected) {
84 for (const auto& data_type : kStorageTypesForWorker) {
Avi Drissman0f0e26e52021-04-29 03:13:3485 bool data = content::EvalJs(frame, "has" + data_type + "();",
86 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
87 .ExtractBool();
Asami Doibcbe9af2021-03-24 04:50:5288 EXPECT_EQ(expected, data) << "ExpectStorageForWorker for " << data_type;
89 }
90}
91
Brandon Maslen6134c852020-05-18 21:45:2192void SetCrossTabInfoForFrame(content::RenderFrameHost* frame) {
93 for (const auto& data_type : kCrossTabCommunicationTypes) {
Avi Drissman0f0e26e52021-04-29 03:13:3494 bool data = content::EvalJs(frame, "set" + data_type + "()",
95 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
96 .ExtractBool();
Brandon Maslen6134c852020-05-18 21:45:2197 EXPECT_TRUE(data) << data_type;
98 }
99}
100
101void ExpectCrossTabInfoForFrame(content::RenderFrameHost* frame,
102 bool expected) {
103 for (const auto& data_type : kCrossTabCommunicationTypes) {
Avi Drissman0f0e26e52021-04-29 03:13:34104 bool data = content::EvalJs(frame, "has" + data_type + "();",
105 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
106 .ExtractBool();
Brandon Maslen6134c852020-05-18 21:45:21107 EXPECT_EQ(expected, data) << data_type;
108 }
109}
110
Chris Fredricksonf39f87b2022-07-11 11:34:04111bool RequestStorageAccessForFrame(content::RenderFrameHost* frame) {
112 return content::EvalJs(frame, kRequestStorageAccess,
113 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
114 .ExtractBool();
Brandon Maslen6134c852020-05-18 21:45:21115}
116
Chris Fredricksonf39f87b2022-07-11 11:34:04117bool HasStorageAccessForFrame(content::RenderFrameHost* frame) {
118 return content::EvalJs(frame, kHasStorageAccess,
119 content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
120 .ExtractBool();
Brandon Maslen6134c852020-05-18 21:45:21121}
122
123} // namespace test
124} // namespace storage