| const custom_cors_response = (payload, base_url) => { |
| base_url = base_url || new URL(location.href); |
| |
| // Clone the given `payload` so that, as we modify it, we won't be mutating |
| // the caller's value in unexpected ways. |
| payload = Object.assign({}, payload); |
| payload.headers = payload.headers || {}; |
| // Note that, in order to have out-of-the-box support for tests that don't |
| // call `setup({'allow_uncaught_exception': true})` we return a no-op JS |
| // payload. This approach will avoid hitting syntax errors if the resource is |
| // interpreted as script. Without this workaround, the SyntaxError would be |
| // caught by the test harness and trigger a test failure. |
| payload.content = payload.content || '/* custom-cors-response.js content */'; |
| payload.status_code = payload.status_code || 200; |
| |
| // Assume that we'll be doing a CORS-enabled fetch so we'll need to set ACAO. |
| const acao = "Access-Control-Allow-Origin"; |
| if (!(acao in payload.headers)) { |
| payload.headers[acao] = '*'; |
| } |
| |
| let ret = new URL("/common/CustomCorsResponse.py", base_url); |
| for (const key in payload) { |
| ret.searchParams.append(key, JSON.stringify(payload[key])); |
| } |
| |
| return ret; |
| }; |