Browse Source

SW: Add secure headers and clean up (#24217)

* SW: Add secure headers and clean up

* Fix

* Update sw.js

* Fix for unpkg

* Fix cross-origin

* Fix

* COEP: credentialless

* Host libs locally
Levi Pesin 2 years ago
parent
commit
3f632d3913
4 changed files with 341 additions and 21 deletions
  1. 3 3
      editor/index.html
  2. 305 0
      editor/js/libs/es-module-shims.js
  3. 0 0
      editor/js/libs/ffmpeg.min.js
  4. 33 18
      editor/sw.js

+ 3 - 3
editor/index.html

@@ -12,8 +12,6 @@
 	<body>
 		<link rel="stylesheet" href="css/main.css">
 
-		<script src="https://unpkg.com/@ffmpeg/[email protected]/dist/ffmpeg.min.js" defer></script>
-
 		<script src="../examples/js/libs/draco/draco_encoder.js"></script>
 
 		<link rel="stylesheet" href="js/libs/codemirror/codemirror.css">
@@ -25,6 +23,8 @@
 		<script src="js/libs/esprima.js"></script>
 		<script src="js/libs/jsonlint.js"></script>
 
+		<script src="js/libs/ffmpeg.min.js" defer></script>
+
 		<link rel="stylesheet" href="js/libs/codemirror/addon/dialog.css">
 		<link rel="stylesheet" href="js/libs/codemirror/addon/show-hint.css">
 		<link rel="stylesheet" href="js/libs/codemirror/addon/tern.css">
@@ -47,7 +47,7 @@
 
 		<!-- Import maps polyfill -->
 		<!-- Remove this when import maps will be widely supported -->
-		<script async src="https://unpkg.com/[email protected]/dist/es-module-shims.js"></script>
+		<script async src="js/libs/es-module-shims.js"></script>
 
 		<script type="importmap">
 			{

File diff suppressed because it is too large
+ 305 - 0
editor/js/libs/es-module-shims.js


File diff suppressed because it is too large
+ 0 - 0
editor/js/libs/ffmpeg.min.js


+ 33 - 18
editor/sw.js

@@ -90,7 +90,9 @@ const assets = [
 	'./js/libs/codemirror/mode/javascript.js',
 	'./js/libs/codemirror/mode/glsl.js',
 
+	'./js/libs/es-module-shims.js',
 	'./js/libs/esprima.js',
+	'./js/libs/ffmpeg.min.js',
 	'./js/libs/jsonlint.js',
 
 	'./js/libs/codemirror/addon/dialog.css',
@@ -231,13 +233,17 @@ self.addEventListener( 'install', async function () {
 
 	const cache = await caches.open( cacheName );
 
-	assets.forEach( function ( asset ) {
+	assets.forEach( async function ( asset ) {
 
-		cache.add( asset ).catch( function () {
+		try {
+
+			await cache.add( asset );
+
+		} catch {
 
 			console.warn( '[SW] Cound\'t cache:', asset );
 
-		} );
+		}
 
 	} );
 
@@ -245,37 +251,46 @@ self.addEventListener( 'install', async function () {
 
 self.addEventListener( 'fetch', async function ( event ) {
 
-	if ( event.request.url.startsWith( 'chrome-extension' ) ) return;
-
 	const request = event.request;
+
+	if ( request.url.startsWith( 'chrome-extension' ) ) return;
+
 	event.respondWith( networkFirst( request ) );
 
 } );
 
 async function networkFirst( request ) {
 
-	return fetch( request )
-		.then( async function ( response ) {
+	try {
+
+		let response = await fetch( request );
+
+		if ( request.url.endsWith( 'editor/' ) || request.url.endsWith( 'editor/index.html' ) ) { // copied from coi-serviceworker
+
+			const newHeaders = new Headers( response.headers );
+			newHeaders.set( "Cross-Origin-Embedder-Policy", "require-corp" );
+			newHeaders.set( "Cross-Origin-Opener-Policy", "same-origin" );
 
-			const cache = await caches.open( cacheName );
+			response = new Response( response.body, { status: response.status, statusText: response.statusText, headers: newHeaders } );
 
-			cache.put( request, response.clone() );
+		}
 
-			return response;
+		const cache = await caches.open( cacheName );
+		cache.put( request, response.clone() );
+		return response;
 
-		} )
-		.catch( async function () {
+	} catch {
 
-			const cachedResponse = await caches.match( request );
+		const cachedResponse = await caches.match( request );
 
-			if ( cachedResponse === undefined ) {
+		if ( cachedResponse === undefined ) {
 
-				console.warn( '[SW] Not cached:', request.url );
+			console.warn( '[SW] Not cached:', request.url );
 
-			}
+		}
 
-			return cachedResponse;
+		return cachedResponse;
 
-		} );
+	}
 
 }

Some files were not shown because too many files changed in this diff