Index: third_party/WebKit/LayoutTests/external/wpt/service-workers/cache-storage/script-tests/cache-match.js |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/cache-storage/script-tests/cache-match.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/cache-storage/script-tests/cache-match.js |
index 32c9ec92a69828908afe4da0715ffb6cecbc1588..3d00f0f04af3a16ccb7cc732e4df8ccfa0ef401c 100644 |
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/cache-storage/script-tests/cache-match.js |
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/cache-storage/script-tests/cache-match.js |
@@ -28,6 +28,23 @@ prepopulated_cache_test(simple_entries, function(cache, entries) { |
}, 'Cache.match with Request'); |
prepopulated_cache_test(simple_entries, function(cache, entries) { |
+ var alt_response = new Response('', {status: 201}); |
+ |
+ return self.caches.open('second_matching_cache') |
+ .then(function(cache) { |
+ return cache.put(entries.a.request, alt_response.clone()); |
+ }) |
+ .then(function() { |
+ return cache.match(entries.a.request); |
+ }) |
+ .then(function(result) { |
+ assert_response_equals( |
+ result, entries.a.response, |
+ 'Cache.match should match the first cache.'); |
+ }); |
+ }, 'Cache.match with multiple cache hits'); |
+ |
+prepopulated_cache_test(simple_entries, function(cache, entries) { |
return cache.match(new Request(entries.a.request.url)) |
.then(function(result) { |
assert_response_equals(result, entries.a.response, |
@@ -76,6 +93,56 @@ prepopulated_cache_test(simple_entries, function(cache, entries) { |
}, |
'Cache.match with ignoreSearch option (request with search parameter)'); |
+cache_test(function(cache) { |
+ var request = new Request('http://example.com/'); |
+ var head_request = new Request('http://example.com/', {method: 'HEAD'}); |
+ var response = new Response('foo'); |
+ return cache.put(request.clone(), response.clone()) |
+ .then(function() { |
+ return cache.match(head_request.clone()); |
+ }) |
+ .then(function(result) { |
+ assert_equals( |
+ result, undefined, |
+ 'Cache.match should resolve as undefined with a ' + |
+ 'mismatched method.'); |
+ return cache.match(head_request.clone(), |
+ {ignoreMethod: true}); |
+ }) |
+ .then(function(result) { |
+ assert_response_equals( |
+ result, response, |
+ 'Cache.match with ignoreMethod should ignore the ' + |
+ 'method of request.'); |
+ }); |
+ }, 'Cache.match supports ignoreMethod'); |
+ |
+cache_test(function(cache) { |
+ var vary_request = new Request('http://example.com/c', |
+ {headers: {'Cookies': 'is-for-cookie'}}); |
+ var vary_response = new Response('', {headers: {'Vary': 'Cookies'}}); |
+ var mismatched_vary_request = new Request('http://example.com/c'); |
+ |
+ return cache.put(vary_request.clone(), vary_response.clone()) |
+ .then(function() { |
+ return cache.match(mismatched_vary_request.clone()); |
+ }) |
+ .then(function(result) { |
+ assert_equals( |
+ result, undefined, |
+ 'Cache.match should resolve as undefined with a ' + |
+ 'mismatched vary.'); |
+ return cache.match(mismatched_vary_request.clone(), |
+ {ignoreVary: true}); |
+ }) |
+ .then(function(result) { |
+ assert_response_equals( |
+ result, vary_response, |
+ 'Cache.match with ignoreVary should ignore the ' + |
+ 'vary of request.'); |
+ }); |
+ }, 'Cache.match supports ignoreVary'); |
+ |
prepopulated_cache_test(simple_entries, function(cache, entries) { |
return cache.match(entries.cat.request.url + '#mouse') |
.then(function(result) { |
@@ -166,6 +233,36 @@ cache_test(function(cache) { |
}); |
}, 'Cache.match invoked multiple times for the same Request/Response'); |
+cache_test(function(cache) { |
+ var request_url = new URL('../resources/simple.txt', location.href).href; |
+ return fetch(request_url) |
+ .then(function(fetch_result) { |
+ return cache.put(new Request(request_url), fetch_result); |
+ }) |
+ .then(function() { |
+ return cache.match(request_url); |
+ }) |
+ .then(function(result) { |
+ return result.blob(); |
+ }) |
+ .then(function(blob) { |
+ var sliced = blob.slice(2,8); |
+ |
+ return new Promise(function (resolve, reject) { |
+ var reader = new FileReader(); |
+ reader.onloadend = function(event) { |
+ resolve(event.target.result); |
+ }; |
+ reader.readAsText(sliced); |
+ }); |
+ }) |
+ .then(function(text) { |
+ assert_equals(text, 'simple', |
+ 'A Response blob returned by Cache.match should be ' + |
+ 'sliceable.' ); |
+ }); |
+ }, 'Cache.match blob should be sliceable'); |
+ |
prepopulated_cache_test(simple_entries, function(cache, entries) { |
var request = new Request(entries.a.request.clone(), {method: 'POST'}); |
return cache.match(request) |
@@ -218,7 +315,7 @@ cache_test(function(cache) { |
}) |
.then(function(text) { |
assert_equals(text, data.toString(), 'cloned body text can be read correctly'); |
- }) |
+ }); |
}, 'Cache produces large Responses that can be cloned and read correctly.'); |
done(); |