| // META: script=../resources/utils.js |
| |
| promise_test(async () => { |
| add_completion_callback(() => delete Object.prototype.then); |
| const hello = new TextEncoder().encode('hello'); |
| const bye = new TextEncoder().encode('bye'); |
| const rs = new ReadableStream({ |
| start(controller) { |
| controller.enqueue(hello); |
| controller.close(); |
| } |
| }); |
| const resp = new Response(rs); |
| Object.prototype.then = (onFulfilled) => { |
| delete Object.prototype.then; |
| onFulfilled({done: false, value: bye}); |
| }; |
| const text = await resp.text(); |
| assert_equals(text, 'bye', 'The valud should be replaced with "bye".'); |
| }, 'Inject {done: false, value: bye} via Object.prototype.then.'); |
| |
| promise_test(async (t) => { |
| add_completion_callback(() => delete Object.prototype.then); |
| const hello = new TextEncoder().encode('hello'); |
| const rs = new ReadableStream({ |
| start(controller) { |
| controller.enqueue(hello); |
| controller.close(); |
| } |
| }); |
| const resp = new Response(rs); |
| Object.prototype.then = (onFulfilled) => { |
| delete Object.prototype.then; |
| onFulfilled({done: false, value: undefined}); |
| }; |
| promise_rejects(t, TypeError(), resp.text(), |
| 'The value should be replaced with undefined.'); |
| }, 'Inject {done: false, value: undefined} via Object.prototype.then.'); |
| |
| promise_test(async (t) => { |
| add_completion_callback(() => delete Object.prototype.then); |
| const hello = new TextEncoder().encode('hello'); |
| const rs = new ReadableStream({ |
| start(controller) { |
| controller.enqueue(hello); |
| controller.close(); |
| } |
| }); |
| const resp = new Response(rs); |
| Object.prototype.then = (onFulfilled) => { |
| delete Object.prototype.then; |
| onFulfilled(undefined); |
| }; |
| promise_rejects(t, TypeError(), resp.text(), |
| 'The read result should be replaced with undefined.'); |
| }, 'Inject undefined via Object.prototype.then.'); |
| |
| promise_test(async (t) => { |
| add_completion_callback(() => delete Object.prototype.then); |
| const hello = new TextEncoder().encode('hello'); |
| const rs = new ReadableStream({ |
| start(controller) { |
| controller.enqueue(hello); |
| controller.close(); |
| } |
| }); |
| const resp = new Response(rs); |
| Object.prototype.then = (onFulfilled) => { |
| delete Object.prototype.then; |
| onFulfilled(8.2); |
| }; |
| promise_rejects(t, TypeError(), resp.text(), |
| 'The read result should be replaced with a number.'); |
| }, 'Inject 8.2 via Object.prototype.then.'); |
| |