xref: /aosp_15_r20/external/swiftshader/third_party/marl/examples/run_webserver (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1#!/usr/bin/env python3
2"""
3Runs a COOE/COEP local webserver for testing emscripten deployment.
4Note:
5    Browsers that have implemented and enabled SharedArrayBuffer are gating it behind Cross Origin Opener Policy (COOP)
6    and Cross Origin Embedder Policy (COEP) headers.
7    Pthreads code will not work in deployed environment unless these headers are correctly set.
8    see: https://emscripten.org/docs/porting/pthreads.html
9"""
10
11from http.server import HTTPServer, SimpleHTTPRequestHandler
12
13
14class RequestHandler(SimpleHTTPRequestHandler):
15    def end_headers(self):
16        self.send_header("Access-Control-Allow-Origin", "*")
17        self.send_header("Cross-Origin-Embedder-Policy", "require-corp")
18        self.send_header("Cross-Origin-Opener-Policy", "same-origin")
19        super().end_headers()
20
21
22def main():
23
24    addr = "127.0.0.1"
25    port = 8080
26    httpd = HTTPServer((addr, port), RequestHandler)
27    print("Serving http at http://{}:{}".format(addr, port))
28
29    try:
30        httpd.serve_forever()
31    except KeyboardInterrupt:
32        print("\nBye.")
33
34
35if __name__ == "__main__":
36    main()
37