// META: title=Cache.put
// META: global=window,worker
// META: script=/common/get-host-info.sub.js
// META: script=resources/test-helpers.js
// META: script=/storage/buckets/resources/util.js
// META: timeout=long
var test_url = 'https://example.com/foo';
var test_body = 'Hello world!';
const { REMOTE_HOST } = get_host_info();
promise_test(async function(test) {
await prepareForBucketTest(test);
var inboxBucket = await navigator.storageBuckets.open('inbox');
var draftsBucket = await navigator.storageBuckets.open('drafts');
const cacheName = 'attachments';
const cacheKey = 'receipt1.txt';
var inboxCache = await inboxBucket.caches.open(cacheName);
var draftsCache = await draftsBucket.caches.open(cacheName);
await inboxCache.put(cacheKey, new Response('bread x 2'))
await draftsCache.put(cacheKey, new Response('eggs x 1'));
return inboxCache.match(cacheKey)
.then(function(result) {
return result.text();
})
.then(function(body) {
assert_equals(body, 'bread x 2', 'Wrong cache contents');
return draftsCache.match(cacheKey);
})
.then(function(result) {
return result.text();
})
.then(function(body) {
assert_equals(body, 'eggs x 1', 'Wrong cache contents');
});
}, 'caches from different buckets have different contents');
promise_test(async function(test) {
await prepareForBucketTest(test);
var inboxBucket = await navigator.storageBuckets.open('inbox');
var draftBucket = await navigator.storageBuckets.open('drafts');
var caches = inboxBucket.caches;
var attachments = await caches.open('attachments');
await attachments.put('receipt1.txt', new Response('bread x 2'));
var result = await attachments.match('receipt1.txt');
assert_equals(await result.text(), 'bread x 2');
await navigator.storageBuckets.delete('inbox');
await promise_rejects_dom(
test, 'UnknownError', caches.open('attachments'));
// Also test when `caches` is first accessed after the deletion.
await navigator.storageBuckets.delete('drafts');
return promise_rejects_dom(
test, 'UnknownError', draftBucket.caches.open('attachments'));
}, 'cache.open promise is rejected when bucket is gone');
done();