File tree Expand file tree Collapse file tree 2 files changed +40
-0
lines changed
packages/service-worker-mock Expand file tree Collapse file tree 2 files changed +40
-0
lines changed Original file line number Diff line number Diff line change @@ -63,4 +63,28 @@ describe('Cache', () => {
6363
6464 expect ( keys . length ) . toBe ( 1 ) ;
6565 } ) ;
66+
67+ it ( 'throw when the request is not cacheable' , async ( ) => {
68+ const cache = new Cache ( ) ;
69+ [
70+ 'HEAD' ,
71+ 'POST' ,
72+ 'PUT' ,
73+ 'DELETE' ,
74+ 'CONNECT' ,
75+ 'OPTIONS' ,
76+ 'TRACE' ,
77+ 'PATCH'
78+ ] . forEach ( ( method ) => {
79+ cache . put ( new Request ( 'http://example.org' , { method } ) ) . catch ( ( e ) => {
80+ expect ( e ) . toEqual ( new TypeError ( `'${ method } ' HTTP method is unsupported.` ) ) ;
81+ } ) ;
82+ } ) ;
83+
84+ expect ( async ( ) => {
85+ cache . put ( new Request ( 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' ) ) . catch ( ( e ) => {
86+ expect ( e ) . toEqual ( new TypeError ( 'Request scheme \'data\' is unsupported' ) ) ;
87+ } ) ;
88+ } ) ;
89+ } ) ;
6690} ) ;
Original file line number Diff line number Diff line change 11// https://developer.mozilla.org/en-US/docs/Web/API/Cache
2+ function validateCacheableRequest ( request ) {
3+ const requestScheme = new URL ( request . url ) . protocol . replace ( ':' , '' ) ;
4+ if ( request . method !== 'GET' ) {
5+ throw new TypeError ( `'${ request . method } ' HTTP method is unsupported.` ) ;
6+ }
7+ if ( ! [ 'http' , 'https' ] . includes ( requestScheme ) ) {
8+ throw new TypeError ( `Request scheme '${ requestScheme } ' is unsupported` ) ;
9+ }
10+ }
11+
212class Cache {
313 constructor ( ) {
414 this . store = new Map ( ) ;
@@ -40,6 +50,12 @@ class Cache {
4050 request = new Request ( request ) ;
4151 // Add relative url as well (non-standard)
4252 this . store . set ( relativeUrl , { request, response } ) ;
53+ } else {
54+ try {
55+ validateCacheableRequest ( request ) ;
56+ } catch ( error ) {
57+ return Promise . reject ( error ) ;
58+ }
4359 }
4460
4561 this . store . set ( request . url , { request, response } ) ;
You can’t perform that action at this time.
0 commit comments