From a463bb82c413af319c8b715deedd7f2c345becd6 Mon Sep 17 00:00:00 2001 From: David Iglesias Date: Tue, 21 Feb 2023 12:51:37 -0800 Subject: [PATCH] [tool][web] Makes flutter.js more G3 friendly. (#120504) * Allow any JS file in flutter loader. * Nag only if service worker API is completely unavailable. * Add info about Secure Contexts if that may be the reason why serviceworker is not available. * Update sanity test. * If service worker settings are null, do not even check if the API is available. --- .../lib/src/web/file_generators/js/flutter.js | 16 ++++++++++++---- .../build_system/targets/web_test.dart | 2 ++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/flutter_tools/lib/src/web/file_generators/js/flutter.js b/packages/flutter_tools/lib/src/web/file_generators/js/flutter.js index bdf438bbd32..d3efa7fd80d 100644 --- a/packages/flutter_tools/lib/src/web/file_generators/js/flutter.js +++ b/packages/flutter_tools/lib/src/web/file_generators/js/flutter.js @@ -72,8 +72,7 @@ _flutter.loader = null; */ constructor(validPatterns, policyName = "flutter-js") { const patterns = validPatterns || [ - /\.dart\.js$/, - /^flutter_service_worker.js$/ + /\.js$/, ]; if (window.trustedTypes) { this.policy = trustedTypes.createPolicy(policyName, { @@ -116,10 +115,19 @@ _flutter.loader = null; * @returns {Promise} that resolves when the latest serviceWorker is ready. */ loadServiceWorker(settings) { - if (!("serviceWorker" in navigator) || settings == null) { + if (settings == null) { // In the future, settings = null -> uninstall service worker? + console.debug("Null serviceWorker configuration. Skipping."); + return Promise.resolve(); + } + if (!("serviceWorker" in navigator)) { + let errorMessage = "Service Worker API unavailable."; + if (!window.isSecureContext) { + errorMessage += "\nThe current context is NOT secure." + errorMessage += "\nRead more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts"; + } return Promise.reject( - new Error("Service worker not supported (or configured).") + new Error(errorMessage) ); } const { diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart index e4a85ac9472..151aa45beeb 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart @@ -881,6 +881,8 @@ void main() { flutter_js.generateFlutterJsFile(fileGeneratorsPath); expect(flutterJsContents, contains('"use strict";')); expect(flutterJsContents, contains('main.dart.js')); + expect(flutterJsContents, contains('if (!("serviceWorker" in navigator))')); + expect(flutterJsContents, contains(r'/\.js$/,')); expect(flutterJsContents, contains('flutter_service_worker.js?v=')); expect(flutterJsContents, contains('document.createElement("script")')); expect(flutterJsContents, contains('"application/javascript"'));