Commit 45dd39da authored by Ayu Ishii's avatar Ayu Ishii Committed by Commit Bot

CookieStore: return TypeError for empty get()

This updates get() to return a TypeError if called with
no options or empty options. Details of this decision can
be found at https://github.com/WICG/cookie-store/issues/94.

Bug: 1124073
Change-Id: I3bae610cc6f5d4f46e392d968f7ae82a08bcbab9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2404412
Commit-Queue: Ayu Ishii <ayui@chromium.org>
Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806397}
parent 32a6213a
......@@ -273,6 +273,11 @@ ScriptPromise CookieStore::get(ScriptState* script_state,
UseCounter::Count(CurrentExecutionContext(script_state->GetIsolate()),
WebFeature::kCookieStoreAPI);
if (!options->hasName() && !options->hasUrl()) {
exception_state.ThrowTypeError("CookieStoreGetOptions must not be empty");
return ScriptPromise();
}
return DoRead(script_state, options, &CookieStore::GetAllForUrlToGetResult,
exception_state);
}
......
......@@ -9,25 +9,8 @@ promise_test(async testCase => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get();
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
}, 'cookieStore.get with no arguments');
promise_test(async testCase => {
await cookieStore.set('cookie-name-1', 'cookie-value-1');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name-1');
});
await cookieStore.set('cookie-name-2', 'cookie-value-2');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name-2');
});
const cookie = await cookieStore.get();
assert_equals(cookie.name, 'cookie-name-1');
assert_equals(cookie.value, 'cookie-value-1');
},'cookieStore.get with no args and multiple matches');
await promise_rejects_js(testCase, TypeError, cookieStore.get());
}, 'cookieStore.get with no arguments returns TypeError');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
......@@ -35,25 +18,8 @@ promise_test(async testCase => {
await cookieStore.delete('cookie-name');
});
const cookie = await cookieStore.get({});
assert_equals(cookie.name, 'cookie-name');
assert_equals(cookie.value, 'cookie-value');
}, 'cookieStore.get with empty options');
promise_test(async testCase => {
await cookieStore.set('cookie-name-1', 'cookie-value-1');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name-1');
});
await cookieStore.set('cookie-name-2', 'cookie-value-2');
testCase.add_cleanup(async () => {
await cookieStore.delete('cookie-name-2');
});
const cookie = await cookieStore.get({});
assert_equals(cookie.name, 'cookie-name-1');
assert_equals(cookie.value, 'cookie-value-1');
},'cookieStore.get with empty options and multiple matches');
await promise_rejects_js(testCase, TypeError, cookieStore.get({}));
},'cookieStore.get with empty options returns TypeError');
promise_test(async testCase => {
await cookieStore.set('cookie-name', 'cookie-value');
......
......@@ -9,6 +9,6 @@ promise_test(async testCase => {
await cookieStore.delete('cookie-name');
});
await cookieStore.delete('cookie-name');
const cookie = await cookieStore.get();
const cookie = await cookieStore.get('cookie-name');
assert_equals(cookie, null);
}, 'cookieStore.get returns null for a cookie deleted by cookieStore.delete');
......@@ -7,7 +7,7 @@
<script>
const apiCalls = {
'get': 'cookieStore.get()',
'get': 'cookieStore.get("cookie-name")',
'getAll': 'cookieStore.getAll()',
'set': 'cookieStore.set("cookie-name", "cookie-value")',
'delete': 'cookieStore.delete("cookie-name")'
......
......@@ -10,7 +10,7 @@
//
// Read a cookie.
// Command: { existingCookieName: 'cookie-name' }
// Response: Result of cookieStore.get():
// Response: Result of cookieStore.get('cookie-name'):
// { frameCookie: { name: 'cookie-name', value: 'cookie-value' } }
window.addEventListener('message', async function (event) {
const { opname } = event.data;
......
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