|
15 | 15 | import unittest |
16 | 16 | import zlib |
17 | 17 | from functools import wraps |
18 | | -from http.server import BaseHTTPRequestHandler, HTTPServer |
| 18 | +from http.server import BaseHTTPRequestHandler, HTTPServer, ThreadingHTTPServer, SimpleHTTPRequestHandler |
19 | 19 | from pathlib import Path |
20 | 20 | from urllib.request import urlopen |
21 | 21 |
|
@@ -5631,6 +5631,46 @@ def test_rollup(self): |
5631 | 5631 | shutil.copy('hello.wasm', 'dist/') |
5632 | 5632 | self.run_browser('index.html', '/report_result?exit:0') |
5633 | 5633 |
|
| 5634 | + def test_cross_origin(self): |
| 5635 | + # Verfies that the emscripten-generted JS and Wasm can be hosted on a different origin. |
| 5636 | + # This test create a second HTTP server running on port 9999 that servers files from `subdir`. |
| 5637 | + # The main html is the servers from the normal 8888 server while the JS and Wasm are hosted |
| 5638 | + # on at 9999. |
| 5639 | + os.mkdir('subdir') |
| 5640 | + create_file('subdir/foo.txt', 'hello') |
| 5641 | + self.compile_btest('hello_world.c', ['-o', 'subdir/hello.js', '-sCROSS_ORIGIN', '-sPROXY_TO_PTHREAD', '-pthread', '-sEXIT_RUNTIME']) |
| 5642 | + |
| 5643 | + class MyReqestHandler(SimpleHTTPRequestHandler): |
| 5644 | + def __init__(self, *args, **kwargs): |
| 5645 | + super().__init__(*args, directory='subdir', **kwargs) |
| 5646 | + |
| 5647 | + # Add COOP, COEP, CORP, and no-caching headers |
| 5648 | + def end_headers(self): |
| 5649 | + self.send_header('Accept-Ranges', 'bytes') |
| 5650 | + self.send_header('Access-Control-Allow-Origin', '*') |
| 5651 | + self.send_header('Cross-Origin-Opener-Policy', 'same-origin') |
| 5652 | + self.send_header('Cross-Origin-Embedder-Policy', 'require-corp') |
| 5653 | + self.send_header('Cross-Origin-Resource-Policy', 'cross-origin') |
| 5654 | + |
| 5655 | + self.send_header('Cache-Control', 'no-cache, no-store, must-revalidate, private, max-age=0') |
| 5656 | + self.send_header('Expires', '0') |
| 5657 | + self.send_header('Pragma', 'no-cache') |
| 5658 | + self.send_header('Vary', '*') # Safari insists on caching if this header is not present in addition to the above |
| 5659 | + |
| 5660 | + return SimpleHTTPRequestHandler.end_headers(self) |
| 5661 | + |
| 5662 | + create_file('test.html', ''' |
| 5663 | + <script src="http://localhost:9999/hello.js"></script> |
| 5664 | + ''') |
| 5665 | + |
| 5666 | + server = HttpServerThread(ThreadingHTTPServer(('localhost', 9999), MyReqestHandler)) |
| 5667 | + server.start() |
| 5668 | + try: |
| 5669 | + self.run_browser('test.html', '/report_result?exit:0') |
| 5670 | + finally: |
| 5671 | + server.stop() |
| 5672 | + server.join() |
| 5673 | + |
5634 | 5674 |
|
5635 | 5675 | class emrun(RunnerCore): |
5636 | 5676 | def test_emrun_info(self): |
|
0 commit comments