Commit 2923dcd6 authored by Chase Phillips's avatar Chase Phillips Committed by Commit Bot

IndexedDB: Check content settings for access to GetDatabaseInfo

Bug: 995591
Change-Id: I3edba1148e9e03e1029713438189649a56dfe0c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1761472
Commit-Queue: Chase Phillips <cmp@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Auto-Submit: Chase Phillips <cmp@chromium.org>
Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Reviewed-by: default avatarDaniel Murphy <dmurph@chromium.org>
Cr-Commit-Position: refs/heads/master@{#688663}
parent 959f0b66
...@@ -490,25 +490,48 @@ IN_PROC_BROWSER_TEST_P(CookieSettingsTest, BlockCookiesAlsoBlocksIndexedDB) { ...@@ -490,25 +490,48 @@ IN_PROC_BROWSER_TEST_P(CookieSettingsTest, BlockCookiesAlsoBlocksIndexedDB) {
" });" " });"
" }" " }"
" try {" " try {"
" await wrap(%s);" " let promiselike = indexedDB.%s%s;"
" if (typeof promiselike.then !== 'undefined') {"
" await promiselike;"
" }"
" await wrap(promiselike);"
" } catch(e) {" " } catch(e) {"
" return `${name} - ${e.toString()}`;" " return `${name} - ${e.toString()}`;"
" }" " }"
" return `${name} - success`;" " return `${name} - success`;"
"}())"; "}())";
const std::vector<std::string> kTestOps({ struct TestOp {
"indexedDB.open('foo', 1)", const char* cmd;
"indexedDB.deleteDatabase('foo')", const char* args;
}); };
const TestOp kTestOps[] = {
{.cmd = "open", .args = "('foo', 1)"},
{.cmd = "deleteDatabase", .args = "('foo')"},
};
const char kBaseExpected[] = const char kBaseExpected[] =
"%s - UnknownError: The user denied permission to access the database."; "%s - UnknownError: The user denied permission to access the database.";
for (auto& op : kTestOps) { for (auto& op : kTestOps) {
EXPECT_EQ( EXPECT_EQ(
base::StringPrintf(kBaseExpected, op.data()), base::StringPrintf(kBaseExpected, op.cmd),
EvalJs(tab, base::StringPrintf(kBaseScript, op.data(), op.data()))); EvalJs(tab, base::StringPrintf(kBaseScript, op.cmd, op.cmd, op.args)));
}
const TestOp kPromiseTestOps[] = {
{.cmd = "databases", .args = "()"},
};
const char kPromiseBaseExpected[] =
"%s - UnknownError: Failed to execute '%s' on 'IDBFactory': The user "
"denied permission to access the database.";
for (auto& op : kPromiseTestOps) {
EXPECT_EQ(
base::StringPrintf(kPromiseBaseExpected, op.cmd, op.cmd),
EvalJs(tab, base::StringPrintf(kBaseScript, op.cmd, op.cmd, op.args)));
} }
} }
......
...@@ -227,6 +227,11 @@ ScriptPromise IDBFactory::GetDatabaseInfo(ScriptState* script_state, ...@@ -227,6 +227,11 @@ ScriptPromise IDBFactory::GetDatabaseInfo(ScriptState* script_state,
ExceptionState& exception_state) { ExceptionState& exception_state) {
auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
if (!IsContextValid(ExecutionContext::From(script_state))) {
resolver->Reject();
return resolver->Promise();
}
if (!ExecutionContext::From(script_state) if (!ExecutionContext::From(script_state)
->GetSecurityOrigin() ->GetSecurityOrigin()
->CanAccessDatabase()) { ->CanAccessDatabase()) {
...@@ -236,6 +241,13 @@ ScriptPromise IDBFactory::GetDatabaseInfo(ScriptState* script_state, ...@@ -236,6 +241,13 @@ ScriptPromise IDBFactory::GetDatabaseInfo(ScriptState* script_state,
return resolver->Promise(); return resolver->Promise();
} }
if (!CachedAllowIndexedDB(script_state)) {
exception_state.ThrowDOMException(DOMExceptionCode::kUnknownError,
kPermissionDeniedErrorMessage);
resolver->Reject();
return resolver->Promise();
}
ExecutionContext* execution_context = ExecutionContext::From(script_state); ExecutionContext* execution_context = ExecutionContext::From(script_state);
WebIDBFactory* factory = GetFactory(execution_context); WebIDBFactory* factory = GetFactory(execution_context);
if (!factory) { if (!factory) {
......
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