OLD | NEW |
| (Empty) |
1 self.addEventListener('install', function(event) { | |
2 var scope = registration.scope; | |
3 var scope_url = new URL(scope); | |
4 | |
5 test(function() { | |
6 assert_throws(new TypeError(), function() { | |
7 event.registerForeignFetch({}); | |
8 }); | |
9 }, 'Invalid options'); | |
10 | |
11 test(function() { | |
12 assert_throws(new TypeError(), function() { | |
13 event.registerForeignFetch({scopes: scope, origins: ['*']}); | |
14 }); | |
15 }, 'Scopes not an array'); | |
16 | |
17 test(function() { | |
18 assert_throws(new TypeError(), function() { | |
19 event.registerForeignFetch({scopes: [{}], origins: ['*']}); | |
20 }); | |
21 }, 'Scopes not a string in array'); | |
22 | |
23 test(function() { | |
24 assert_throws(new TypeError(), function() { | |
25 event.registerForeignFetch({scopes: ['/foo'], origins: ['*']}); | |
26 }); | |
27 }, 'Relative url not under scope'); | |
28 | |
29 test(function() { | |
30 var url = new URL(scope_url); | |
31 url.host = 'example.com'; | |
32 assert_throws(new TypeError(), function() { | |
33 event.registerForeignFetch({scopes: [url.href], origins: ['*']}); | |
34 }); | |
35 }, 'Absolute url not under scope'); | |
36 | |
37 test(function() { | |
38 assert_throws(new TypeError(), function() { | |
39 event.registerForeignFetch({scopes: [], origins: ['*']}); | |
40 }); | |
41 }, 'Empty scope array'); | |
42 | |
43 async_test(function(t) { | |
44 self.setTimeout(t.step_func(function() { | |
45 assert_throws('InvalidStateError', function() { | |
46 event.registerForeignFetch({scopes: [scope], origins: ['*']}); | |
47 }); | |
48 t.done(); | |
49 }), 1); | |
50 }, 'Call after event returned'); | |
51 | |
52 test(function() { | |
53 event.registerForeignFetch({scopes: [scope], origins: ['*']}); | |
54 }, 'Valid scopes with wildcard origin string'); | |
55 | |
56 test(function() { | |
57 event.registerForeignFetch({scopes: [scope, scope + '/foo'], origins: ['
*']}); | |
58 }, 'Absolute urls'); | |
59 | |
60 test(function() { | |
61 // Figure out scope relative to location of this script: | |
62 var local_dir = location.pathname; | |
63 local_dir = local_dir.substr(0, local_dir.lastIndexOf('/')); | |
64 assert_true(scope_url.pathname.startsWith(local_dir)); | |
65 var relative_scope = scope_url.pathname.substr(local_dir.length + 1); | |
66 | |
67 event.registerForeignFetch({scopes: [ | |
68 scope_url.pathname, | |
69 relative_scope, | |
70 './' + relative_scope, | |
71 relative_scope + '/foo'], origins: ['*']}); | |
72 }, 'Relative urls'); | |
73 | |
74 test(function() { | |
75 assert_throws(new TypeError(), function() { | |
76 event.registerForeignFetch({scopes: [scope]}); | |
77 }); | |
78 }, 'No origins specified'); | |
79 | |
80 test(function() { | |
81 assert_throws(new TypeError(), function() { | |
82 event.registerForeignFetch({scopes: [scope], origins: {}}); | |
83 }); | |
84 }, 'Origins not a string or array'); | |
85 | |
86 test(function() { | |
87 assert_throws(new TypeError(), function() { | |
88 event.registerForeignFetch({scopes: [scope], origins: [{}]}); | |
89 }); | |
90 }, 'Origins contains something not a string'); | |
91 | |
92 test(function() { | |
93 assert_throws(new TypeError(), function() { | |
94 event.registerForeignFetch({scopes: [scope], origins: ['/foo']}); | |
95 }); | |
96 }, 'Origin not an absolute URL'); | |
97 | |
98 test(function() { | |
99 event.registerForeignFetch({scopes: [scope], origins: ['*']}); | |
100 }, 'Wildcard origin string in array'); | |
101 | |
102 test(function() { | |
103 assert_throws(new TypeError(), function() { | |
104 event.registerForeignFetch({scopes: [scope], origins: 'https://examp
le.com/'}); | |
105 }); | |
106 }, 'Origin string'); | |
107 | |
108 test(function() { | |
109 event.registerForeignFetch({scopes: [scope], origins: ['https://example.
com/']}); | |
110 }, 'Origin string in array'); | |
111 | |
112 test(function() { | |
113 event.registerForeignFetch({ | |
114 scopes: [scope], origins: ['https://example.com/', 'https://chromium
.org']}); | |
115 }, 'Array with multiple origins'); | |
116 | |
117 test(function() { | |
118 assert_throws(new TypeError(), function() { | |
119 event.registerForeignFetch({scopes: [scope], | |
120 origins: ['*', 'https://example.com/']})
; | |
121 }); | |
122 }, 'Origins includes wildcard and other strings'); | |
123 | |
124 test(function() { | |
125 assert_throws(new TypeError(), function() { | |
126 event.registerForeignFetch({scopes: [scope], | |
127 origins: ['https://example.com/', '*']})
; | |
128 }); | |
129 }, 'Origins includes other strings and wildcard'); | |
130 }); | |
131 | |
132 // Import testharness after install handler to make sure our install handler | |
133 // runs first. Otherwise only one test will run. | |
134 importScripts('../../resources/testharness.js'); | |
OLD | NEW |