diff options
Diffstat (limited to 'dom/webgpu/tests/cts/checkout/src/common/framework/resources.ts')
-rw-r--r-- | dom/webgpu/tests/cts/checkout/src/common/framework/resources.ts | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/dom/webgpu/tests/cts/checkout/src/common/framework/resources.ts b/dom/webgpu/tests/cts/checkout/src/common/framework/resources.ts new file mode 100644 index 0000000000..05451304b6 --- /dev/null +++ b/dom/webgpu/tests/cts/checkout/src/common/framework/resources.ts @@ -0,0 +1,110 @@ +/** + * Base path for resources. The default value is correct for non-worker WPT, but standalone and + * workers must access resources using a different base path, so this is overridden in + * `test_worker-worker.ts` and `standalone.ts`. + */ +let baseResourcePath = './resources'; +let crossOriginHost = ''; + +function getAbsoluteBaseResourcePath(path: string) { + // Path is already an absolute one. + if (path[0] === '/') { + return path; + } + + // Path is relative + const relparts = window.location.pathname.split('/'); + relparts.pop(); + const pathparts = path.split('/'); + + let i; + for (i = 0; i < pathparts.length; ++i) { + switch (pathparts[i]) { + case '': + break; + case '.': + break; + case '..': + relparts.pop(); + break; + default: + relparts.push(pathparts[i]); + break; + } + } + + return relparts.join('/'); +} + +function runningOnLocalHost(): boolean { + const hostname = window.location.hostname; + return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1'; +} + +/** + * Get a path to a resource in the `resources` directory relative to the current execution context + * (html file or worker .js file), for `fetch()`, `<img>`, `<video>`, etc but from cross origin host. + * Provide onlineUrl if the case running online. + * @internal MAINTENANCE_TODO: Cases may run in the LAN environment (not localhost but no internet + * access). We temporarily use `crossOriginHost` to configure the cross origin host name in that situation. + * But opening to auto-detect mechanism or other solutions. + */ +export function getCrossOriginResourcePath(pathRelativeToResourcesDir: string, onlineUrl = '') { + // A cross origin host has been configured. Use this to load resource. + if (crossOriginHost !== '') { + return ( + crossOriginHost + + getAbsoluteBaseResourcePath(baseResourcePath) + + '/' + + pathRelativeToResourcesDir + ); + } + + // Using 'localhost' and '127.0.0.1' trick to load cross origin resource. Set cross origin host name + // to 'localhost' if case is not running in 'localhost' domain. Otherwise, use '127.0.0.1'. + // host name to locahost unless the server running in + if (runningOnLocalHost()) { + let crossOriginHostName = ''; + if (location.hostname === 'localhost') { + crossOriginHostName = 'http://127.0.0.1'; + } else { + crossOriginHostName = 'http://localhost'; + } + + return ( + crossOriginHostName + + ':' + + location.port + + getAbsoluteBaseResourcePath(baseResourcePath) + + '/' + + pathRelativeToResourcesDir + ); + } + + return onlineUrl; +} + +/** + * Get a path to a resource in the `resources` directory, relative to the current execution context + * (html file or worker .js file), for `fetch()`, `<img>`, `<video>`, etc. Pass the cross origin host + * name if wants to load resoruce from cross origin host. + */ +export function getResourcePath(pathRelativeToResourcesDir: string) { + return baseResourcePath + '/' + pathRelativeToResourcesDir; +} + +/** + * Set the base resource path (path to the `resources` directory relative to the current + * execution context). + */ +export function setBaseResourcePath(path: string) { + baseResourcePath = path; +} + +/** + * Set the cross origin host and cases related to cross origin + * will load resource from the given host. + */ +export function setCrossOriginHost(host: string) { + crossOriginHost = host; +} |