mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Set max request pool size for DDC module loader when in CI (#170565)
Possible fix for https://github.com/flutter/flutter/issues/169574 It looks like the timeouts seem to be specific to downloading scripts. Specifically, after a certain point, we no longer download any scripts. Lowering the number of max concurrent requests seems to avoid Chrome timing out. This does a refactor as well to make sure we're piping FileSystem, Logger, and Platform into devfs_web.dart instead of relying on globals every time. This also fixes a test issue where we were always passing `isWindows: false` in some test cases instead of checking for the value. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
This commit is contained in:
parent
fb42702f65
commit
3f2e8ba838
@ -66,6 +66,8 @@ const String _kDefaultIndex = '''
|
||||
</html>
|
||||
''';
|
||||
|
||||
const String kLuciEnvName = 'LUCI_CONTEXT';
|
||||
|
||||
/// An expression compiler connecting to FrontendServer.
|
||||
///
|
||||
/// This is only used in development mode.
|
||||
@ -132,7 +134,8 @@ class WebAssetServer implements AssetReader {
|
||||
this._canaryFeatures, {
|
||||
required this.webRenderer,
|
||||
required this.useLocalCanvasKit,
|
||||
}) : basePath = WebTemplate.baseHref(_htmlTemplate('index.html', _kDefaultIndex)) {
|
||||
required this.fileSystem,
|
||||
}) : basePath = WebTemplate.baseHref(_htmlTemplate(fileSystem, 'index.html', _kDefaultIndex)) {
|
||||
// TODO(srujzs): Remove this assertion when the library bundle format is
|
||||
// supported without canary mode.
|
||||
if (_ddcModuleSystem) {
|
||||
@ -261,6 +264,9 @@ class WebAssetServer implements AssetReader {
|
||||
// TODO(markzipan): Make sure this default value aligns with that in the debugger options.
|
||||
bool ddcModuleSystem = false,
|
||||
bool canaryFeatures = false,
|
||||
required FileSystem fileSystem,
|
||||
required Logger logger,
|
||||
required Platform platform,
|
||||
}) async {
|
||||
// TODO(srujzs): Remove this assertion when the library bundle format is
|
||||
// supported without canary mode.
|
||||
@ -289,7 +295,7 @@ class WebAssetServer implements AssetReader {
|
||||
break;
|
||||
} on SocketException catch (e, s) {
|
||||
if (i >= kMaxRetries) {
|
||||
globals.printError('Failed to bind web development server:\n$e', stackTrace: s);
|
||||
logger.printError('Failed to bind web development server:\n$e', stackTrace: s);
|
||||
throwToolExit('Failed to bind web development server:\n$e');
|
||||
}
|
||||
await Future<void>.delayed(const Duration(milliseconds: 100));
|
||||
@ -316,6 +322,7 @@ class WebAssetServer implements AssetReader {
|
||||
canaryFeatures,
|
||||
webRenderer: webRenderer,
|
||||
useLocalCanvasKit: useLocalCanvasKit,
|
||||
fileSystem: fileSystem,
|
||||
);
|
||||
final int selectedPort = server.selectedPort;
|
||||
String url = '$hostname:$selectedPort';
|
||||
@ -334,8 +341,8 @@ class WebAssetServer implements AssetReader {
|
||||
if (buildInfo.mode != BuildMode.debug || isWasm) {
|
||||
final ReleaseAssetServer releaseAssetServer = ReleaseAssetServer(
|
||||
entrypoint,
|
||||
fileSystem: globals.fs,
|
||||
platform: globals.platform,
|
||||
fileSystem: fileSystem,
|
||||
platform: platform,
|
||||
flutterRoot: Cache.flutterRoot,
|
||||
webBuildDirectory: getWebBuildDirectory(),
|
||||
basePath: server.basePath,
|
||||
@ -346,7 +353,7 @@ class WebAssetServer implements AssetReader {
|
||||
shelf.serveRequests(httpServer!, releaseAssetServer.handle);
|
||||
},
|
||||
(Object e, StackTrace s) {
|
||||
globals.printTrace('Release asset server: error serving requests: $e:$s');
|
||||
logger.printTrace('Release asset server: error serving requests: $e:$s');
|
||||
},
|
||||
);
|
||||
return server;
|
||||
@ -358,12 +365,12 @@ class WebAssetServer implements AssetReader {
|
||||
|
||||
// Ensure dwds is present and provide middleware to avoid trying to
|
||||
// load the through the isolate APIs.
|
||||
final Directory directory = await _loadDwdsDirectory(globals.fs, globals.logger);
|
||||
final Directory directory = await _loadDwdsDirectory(fileSystem, logger);
|
||||
shelf.Handler middleware(FutureOr<shelf.Response> Function(shelf.Request) innerHandler) {
|
||||
return (shelf.Request request) async {
|
||||
if (request.url.path.endsWith('dwds/src/injected/client.js')) {
|
||||
final Uri uri = directory.uri.resolve('src/injected/client.js');
|
||||
final String result = await globals.fs.file(uri.toFilePath()).readAsString();
|
||||
final String result = await fileSystem.file(uri.toFilePath()).readAsString();
|
||||
return shelf.Response.ok(
|
||||
result,
|
||||
headers: <String, String>{HttpHeaders.contentTypeHeader: 'application/javascript'},
|
||||
@ -374,7 +381,7 @@ class WebAssetServer implements AssetReader {
|
||||
}
|
||||
|
||||
logging.Logger.root.level = logging.Level.ALL;
|
||||
logging.Logger.root.onRecord.listen(log);
|
||||
logging.Logger.root.onRecord.listen((logging.LogRecord event) => log(logger, event));
|
||||
|
||||
// Retrieve connected web devices.
|
||||
final List<Device>? devices = await globals.deviceManager?.getAllDevices();
|
||||
@ -403,7 +410,7 @@ class WebAssetServer implements AssetReader {
|
||||
digestProvider,
|
||||
BuildSettings(
|
||||
appEntrypoint: packageConfig.toPackageUri(
|
||||
globals.fs.file(entrypoint).absolute.uri,
|
||||
fileSystem.file(entrypoint).absolute.uri,
|
||||
),
|
||||
),
|
||||
packageConfigPath: buildInfo.packageConfigPath,
|
||||
@ -419,7 +426,7 @@ class WebAssetServer implements AssetReader {
|
||||
digestProvider,
|
||||
BuildSettings(
|
||||
appEntrypoint: packageConfig.toPackageUri(
|
||||
globals.fs.file(entrypoint).absolute.uri,
|
||||
fileSystem.file(entrypoint).absolute.uri,
|
||||
),
|
||||
),
|
||||
packageConfigPath: buildInfo.packageConfigPath,
|
||||
@ -454,7 +461,7 @@ class WebAssetServer implements AssetReader {
|
||||
shelf.serveRequests(httpServer!, cascade.handler);
|
||||
},
|
||||
(Object e, StackTrace s) {
|
||||
globals.printTrace('Dwds server: error serving requests: $e:$s');
|
||||
logger.printTrace('Dwds server: error serving requests: $e:$s');
|
||||
},
|
||||
);
|
||||
server.dwds = dwds;
|
||||
@ -566,8 +573,8 @@ class WebAssetServer implements AssetReader {
|
||||
File file = _resolveDartFile(requestPath);
|
||||
|
||||
if (!file.existsSync() && requestPath.startsWith('canvaskit/')) {
|
||||
final Directory canvasKitDirectory = globals.fs.directory(
|
||||
globals.fs.path.join(
|
||||
final Directory canvasKitDirectory = fileSystem.directory(
|
||||
fileSystem.path.join(
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.flutterWebSdk).path,
|
||||
'canvaskit',
|
||||
),
|
||||
@ -575,25 +582,25 @@ class WebAssetServer implements AssetReader {
|
||||
final Uri potential = canvasKitDirectory.uri.resolve(
|
||||
requestPath.replaceFirst('canvaskit/', ''),
|
||||
);
|
||||
file = globals.fs.file(potential);
|
||||
file = fileSystem.file(potential);
|
||||
}
|
||||
|
||||
// If all of the lookups above failed, the file might have been an asset.
|
||||
// Try and resolve the path relative to the built asset directory.
|
||||
if (!file.existsSync()) {
|
||||
final Uri potential = globals.fs
|
||||
final Uri potential = fileSystem
|
||||
.directory(getAssetBuildDirectory())
|
||||
.uri
|
||||
.resolve(requestPath.replaceFirst('assets/', ''));
|
||||
file = globals.fs.file(potential);
|
||||
file = fileSystem.file(potential);
|
||||
}
|
||||
|
||||
if (!file.existsSync()) {
|
||||
final Uri webPath = globals.fs.currentDirectory
|
||||
final Uri webPath = fileSystem.currentDirectory
|
||||
.childDirectory('web')
|
||||
.uri
|
||||
.resolve(requestPath);
|
||||
file = globals.fs.file(webPath);
|
||||
file = fileSystem.file(webPath);
|
||||
}
|
||||
|
||||
if (!file.existsSync()) {
|
||||
@ -652,6 +659,8 @@ class WebAssetServer implements AssetReader {
|
||||
|
||||
final bool useLocalCanvasKit;
|
||||
|
||||
final FileSystem fileSystem;
|
||||
|
||||
String get _buildConfigString {
|
||||
final Map<String, dynamic> buildConfig = <String, dynamic>{
|
||||
'engineRevision': globals.flutterVersion.engineRevision,
|
||||
@ -672,8 +681,8 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
''';
|
||||
}
|
||||
|
||||
File get _flutterJsFile => globals.fs.file(
|
||||
globals.fs.path.join(
|
||||
File get _flutterJsFile => fileSystem.file(
|
||||
fileSystem.path.join(
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.flutterJsDirectory).path,
|
||||
'flutter.js',
|
||||
),
|
||||
@ -681,6 +690,7 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
|
||||
String get _flutterBootstrapJsContent {
|
||||
final WebTemplate bootstrapTemplate = _getWebTemplate(
|
||||
fileSystem,
|
||||
'flutter_bootstrap.js',
|
||||
generateDefaultFlutterBootstrapScript(includeServiceWorkerSettings: false),
|
||||
);
|
||||
@ -700,7 +710,7 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
}
|
||||
|
||||
shelf.Response _serveIndexHtml() {
|
||||
final WebTemplate indexHtml = _getWebTemplate('index.html', _kDefaultIndex);
|
||||
final WebTemplate indexHtml = _getWebTemplate(fileSystem, 'index.html', _kDefaultIndex);
|
||||
return shelf.Response.ok(
|
||||
indexHtml.withSubstitutions(
|
||||
// Currently, we don't support --base-href for the "run" command.
|
||||
@ -731,7 +741,7 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
// If this is a dart file, it must be on the local file system and is
|
||||
// likely coming from a source map request. The tool doesn't currently
|
||||
// consider the case of Dart files as assets.
|
||||
final File dartFile = globals.fs.file(globals.fs.currentDirectory.uri.resolve(path));
|
||||
final File dartFile = fileSystem.file(fileSystem.currentDirectory.uri.resolve(path));
|
||||
if (dartFile.existsSync()) {
|
||||
return dartFile;
|
||||
}
|
||||
@ -748,7 +758,7 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
Uri(scheme: 'package', pathSegments: segments.skip(1)),
|
||||
);
|
||||
if (filePath != null) {
|
||||
final File packageFile = globals.fs.file(filePath);
|
||||
final File packageFile = fileSystem.file(filePath);
|
||||
if (packageFile.existsSync()) {
|
||||
return packageFile;
|
||||
}
|
||||
@ -757,7 +767,7 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
|
||||
// Otherwise it must be a Dart SDK source or a Flutter Web SDK source.
|
||||
final Directory dartSdkParent =
|
||||
globals.fs
|
||||
fileSystem
|
||||
.directory(
|
||||
globals.artifacts!.getArtifactPath(
|
||||
Artifact.engineDartSdkPath,
|
||||
@ -765,15 +775,15 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
),
|
||||
)
|
||||
.parent;
|
||||
final File dartSdkFile = globals.fs.file(dartSdkParent.uri.resolve(path));
|
||||
final File dartSdkFile = fileSystem.file(dartSdkParent.uri.resolve(path));
|
||||
if (dartSdkFile.existsSync()) {
|
||||
return dartSdkFile;
|
||||
}
|
||||
|
||||
final Directory flutterWebSdk = globals.fs.directory(
|
||||
final Directory flutterWebSdk = fileSystem.directory(
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.flutterWebSdk),
|
||||
);
|
||||
final File webSdkFile = globals.fs.file(flutterWebSdk.uri.resolve(path));
|
||||
final File webSdkFile = fileSystem.file(flutterWebSdk.uri.resolve(path));
|
||||
|
||||
return webSdkFile;
|
||||
}
|
||||
@ -781,13 +791,13 @@ _flutter.buildConfig = ${jsonEncode(buildConfig)};
|
||||
File get _resolveDartSdkJsFile {
|
||||
final Map<WebRendererMode, HostArtifact> dartSdkArtifactMap =
|
||||
_ddcModuleSystem ? kDdcLibraryBundleDartSdkJsArtifactMap : kAmdDartSdkJsArtifactMap;
|
||||
return globals.fs.file(globals.artifacts!.getHostArtifact(dartSdkArtifactMap[webRenderer]!));
|
||||
return fileSystem.file(globals.artifacts!.getHostArtifact(dartSdkArtifactMap[webRenderer]!));
|
||||
}
|
||||
|
||||
File get _resolveDartSdkJsMapFile {
|
||||
final Map<WebRendererMode, HostArtifact> dartSdkArtifactMap =
|
||||
_ddcModuleSystem ? kDdcLibraryBundleDartSdkJsMapArtifactMap : kAmdDartSdkJsMapArtifactMap;
|
||||
return globals.fs.file(globals.artifacts!.getHostArtifact(dartSdkArtifactMap[webRenderer]!));
|
||||
return fileSystem.file(globals.artifacts!.getHostArtifact(dartSdkArtifactMap[webRenderer]!));
|
||||
}
|
||||
|
||||
@override
|
||||
@ -867,7 +877,9 @@ class WebDevFS implements DevFS {
|
||||
required this.isWasm,
|
||||
required this.useLocalCanvasKit,
|
||||
required this.rootDirectory,
|
||||
required this.isWindows,
|
||||
required this.fileSystem,
|
||||
required this.logger,
|
||||
required this.platform,
|
||||
this.testMode = false,
|
||||
}) : _port = port {
|
||||
// TODO(srujzs): Remove this assertion when the library bundle format is
|
||||
@ -900,7 +912,9 @@ class WebDevFS implements DevFS {
|
||||
final WebRendererMode webRenderer;
|
||||
final bool isWasm;
|
||||
final bool useLocalCanvasKit;
|
||||
final bool isWindows;
|
||||
final FileSystem fileSystem;
|
||||
final Logger logger;
|
||||
final Platform platform;
|
||||
|
||||
late WebAssetServer webAssetServer;
|
||||
|
||||
@ -943,7 +957,7 @@ class WebDevFS implements DevFS {
|
||||
foundFirstConnection = true;
|
||||
final vm_service.VmService vmService = await vmServiceFactory(
|
||||
Uri.parse(debugConnection.uri),
|
||||
logger: globals.logger,
|
||||
logger: logger,
|
||||
);
|
||||
firstConnection.complete(ConnectionResult(appConnection, debugConnection, vmService));
|
||||
}
|
||||
@ -954,7 +968,7 @@ class WebDevFS implements DevFS {
|
||||
}
|
||||
},
|
||||
onError: (Object error, StackTrace stackTrace) {
|
||||
globals.printError('Unknown error while waiting for debug connection:$error\n$stackTrace');
|
||||
logger.printError('Unknown error while waiting for debug connection:$error\n$stackTrace');
|
||||
if (!firstConnection.isCompleted) {
|
||||
firstConnection.completeError(error, stackTrace);
|
||||
}
|
||||
@ -1003,6 +1017,9 @@ class WebDevFS implements DevFS {
|
||||
testMode: testMode,
|
||||
ddcModuleSystem: ddcModuleSystem,
|
||||
canaryFeatures: canaryFeatures,
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
platform: platform,
|
||||
);
|
||||
return baseUri!;
|
||||
}
|
||||
@ -1025,16 +1042,14 @@ class WebDevFS implements DevFS {
|
||||
final Directory rootDirectory;
|
||||
|
||||
Future<void> _validateTemplateFile(String filename) async {
|
||||
final File file = globals.fs.currentDirectory.childDirectory('web').childFile(filename);
|
||||
final File file = fileSystem.currentDirectory.childDirectory('web').childFile(filename);
|
||||
if (!await file.exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final WebTemplate template = WebTemplate(await file.readAsString());
|
||||
for (final WebTemplateWarning warning in template.getWarnings()) {
|
||||
globals.logger.printWarning(
|
||||
'Warning: In $filename:${warning.lineNumber}: ${warning.warningText}',
|
||||
);
|
||||
logger.printWarning('Warning: In $filename:${warning.lineNumber}: ${warning.warningText}');
|
||||
}
|
||||
}
|
||||
|
||||
@ -1058,13 +1073,13 @@ class WebDevFS implements DevFS {
|
||||
File? dartPluginRegistrant,
|
||||
}) async {
|
||||
lastPackageConfig = packageConfig;
|
||||
final File mainFile = globals.fs.file(mainUri);
|
||||
final File mainFile = fileSystem.file(mainUri);
|
||||
final String outputDirectoryPath = mainFile.parent.path;
|
||||
|
||||
if (bundleFirstUpload) {
|
||||
webAssetServer.entrypointCacheDirectory = globals.fs.directory(outputDirectoryPath);
|
||||
webAssetServer.entrypointCacheDirectory = fileSystem.directory(outputDirectoryPath);
|
||||
generator.addFileSystemRoot(outputDirectoryPath);
|
||||
final String entrypoint = globals.fs.path.basename(mainFile.path);
|
||||
final String entrypoint = fileSystem.path.basename(mainFile.path);
|
||||
webAssetServer.writeBytes(entrypoint, mainFile.readAsBytesSync());
|
||||
if (ddcModuleSystem) {
|
||||
webAssetServer.writeBytes('ddc_module_loader.js', ddcModuleLoaderJS.readAsBytesSync());
|
||||
@ -1087,7 +1102,7 @@ class WebDevFS implements DevFS {
|
||||
ddcModuleLoaderUrl: 'ddc_module_loader.js',
|
||||
mapperUrl: 'stack_trace_mapper.js',
|
||||
generateLoadingIndicator: enableDwds,
|
||||
isWindows: isWindows,
|
||||
isWindows: platform.isWindows,
|
||||
)
|
||||
: generateBootstrapScript(
|
||||
requireUrl: 'require.js',
|
||||
@ -1106,6 +1121,7 @@ class WebDevFS implements DevFS {
|
||||
entrypoint: entrypoint,
|
||||
nativeNullAssertions: nativeNullAssertions,
|
||||
onLoadEndBootstrap: onLoadEndBootstrap,
|
||||
isCi: platform.environment.containsKey(kLuciEnvName),
|
||||
)
|
||||
: generateMainModule(
|
||||
entrypoint: entrypoint,
|
||||
@ -1117,14 +1133,14 @@ class WebDevFS implements DevFS {
|
||||
// be shared.
|
||||
if (bundle != null) {
|
||||
await writeBundle(
|
||||
globals.fs.directory(getAssetBuildDirectory()),
|
||||
fileSystem.directory(getAssetBuildDirectory()),
|
||||
bundle.entries,
|
||||
targetPlatform: TargetPlatform.web_javascript,
|
||||
impellerStatus: ImpellerStatus.disabled,
|
||||
processManager: globals.processManager,
|
||||
fileSystem: globals.fs,
|
||||
fileSystem: fileSystem,
|
||||
artifacts: globals.artifacts!,
|
||||
logger: globals.logger,
|
||||
logger: logger,
|
||||
projectDir: rootDirectory,
|
||||
buildMode: buildInfo.mode,
|
||||
);
|
||||
@ -1147,7 +1163,7 @@ class WebDevFS implements DevFS {
|
||||
outputPath: dillOutputPath,
|
||||
packageConfig: packageConfig,
|
||||
projectRootPath: projectRootPath,
|
||||
fs: globals.fs,
|
||||
fs: fileSystem,
|
||||
dartPluginRegistrant: dartPluginRegistrant,
|
||||
recompileRestart: fullRestart,
|
||||
);
|
||||
@ -1172,7 +1188,7 @@ class WebDevFS implements DevFS {
|
||||
File metadataFile;
|
||||
late List<String> modules;
|
||||
try {
|
||||
final Directory parentDirectory = globals.fs.directory(outputDirectoryPath);
|
||||
final Directory parentDirectory = fileSystem.directory(outputDirectoryPath);
|
||||
codeFile = parentDirectory.childFile('${compilerOutput.outputFilename}.sources');
|
||||
manifestFile = parentDirectory.childFile('${compilerOutput.outputFilename}.json');
|
||||
sourcemapFile = parentDirectory.childFile('${compilerOutput.outputFilename}.map');
|
||||
@ -1202,8 +1218,8 @@ class WebDevFS implements DevFS {
|
||||
}
|
||||
|
||||
@visibleForTesting
|
||||
final File requireJS = globals.fs.file(
|
||||
globals.fs.path.join(
|
||||
File get requireJS => fileSystem.file(
|
||||
fileSystem.path.join(
|
||||
globals.artifacts!.getArtifactPath(
|
||||
Artifact.engineDartSdkPath,
|
||||
platform: TargetPlatform.web_javascript,
|
||||
@ -1216,8 +1232,8 @@ class WebDevFS implements DevFS {
|
||||
);
|
||||
|
||||
@visibleForTesting
|
||||
final File ddcModuleLoaderJS = globals.fs.file(
|
||||
globals.fs.path.join(
|
||||
File get ddcModuleLoaderJS => fileSystem.file(
|
||||
fileSystem.path.join(
|
||||
globals.artifacts!.getArtifactPath(
|
||||
Artifact.engineDartSdkPath,
|
||||
platform: TargetPlatform.web_javascript,
|
||||
@ -1230,16 +1246,16 @@ class WebDevFS implements DevFS {
|
||||
);
|
||||
|
||||
@visibleForTesting
|
||||
final File flutterJs = globals.fs.file(
|
||||
globals.fs.path.join(
|
||||
File get flutterJs => fileSystem.file(
|
||||
fileSystem.path.join(
|
||||
globals.artifacts!.getHostArtifact(HostArtifact.flutterJsDirectory).path,
|
||||
'flutter.js',
|
||||
),
|
||||
);
|
||||
|
||||
@visibleForTesting
|
||||
final File stackTraceMapper = globals.fs.file(
|
||||
globals.fs.path.join(
|
||||
File get stackTraceMapper => fileSystem.file(
|
||||
fileSystem.path.join(
|
||||
globals.artifacts!.getArtifactPath(
|
||||
Artifact.engineDartSdkPath,
|
||||
platform: TargetPlatform.web_javascript,
|
||||
@ -1355,19 +1371,19 @@ class ReleaseAssetServer {
|
||||
}
|
||||
|
||||
@visibleForTesting
|
||||
void log(logging.LogRecord event) {
|
||||
void log(Logger logger, logging.LogRecord event) {
|
||||
final String error = event.error == null ? '' : 'Error: ${event.error}';
|
||||
if (event.level >= logging.Level.SEVERE) {
|
||||
globals.printError('${event.loggerName}: ${event.message}$error', stackTrace: event.stackTrace);
|
||||
logger.printError('${event.loggerName}: ${event.message}$error', stackTrace: event.stackTrace);
|
||||
} else if (event.level == logging.Level.WARNING) {
|
||||
// Temporary fix for https://github.com/flutter/flutter/issues/109792
|
||||
// TODO(annagrin): Remove the condition after the bogus warning is
|
||||
// removed in dwds: https://github.com/dart-lang/webdev/issues/1722
|
||||
if (!event.message.contains('No module for')) {
|
||||
globals.printWarning('${event.loggerName}: ${event.message}$error');
|
||||
logger.printWarning('${event.loggerName}: ${event.message}$error');
|
||||
}
|
||||
} else {
|
||||
globals.printTrace('${event.loggerName}: ${event.message}$error');
|
||||
logger.printTrace('${event.loggerName}: ${event.message}$error');
|
||||
}
|
||||
}
|
||||
|
||||
@ -1387,12 +1403,12 @@ String? _stripBasePath(String path, String basePath) {
|
||||
return stripLeadingSlash(path);
|
||||
}
|
||||
|
||||
WebTemplate _getWebTemplate(String filename, String fallbackContent) {
|
||||
final String htmlContent = _htmlTemplate(filename, fallbackContent);
|
||||
WebTemplate _getWebTemplate(FileSystem fileSystem, String filename, String fallbackContent) {
|
||||
final String htmlContent = _htmlTemplate(fileSystem, filename, fallbackContent);
|
||||
return WebTemplate(htmlContent);
|
||||
}
|
||||
|
||||
String _htmlTemplate(String filename, String fallbackContent) {
|
||||
final File template = globals.fs.currentDirectory.childDirectory('web').childFile(filename);
|
||||
String _htmlTemplate(FileSystem fileSystem, String filename, String fallbackContent) {
|
||||
final File template = fileSystem.currentDirectory.childDirectory('web').childFile(filename);
|
||||
return template.existsSync() ? template.readAsStringSync() : fallbackContent;
|
||||
}
|
||||
|
||||
@ -327,7 +327,9 @@ Please provide a valid TCP port (an integer between 0 and 65535, inclusive).
|
||||
isWasm: debuggingOptions.webUseWasm,
|
||||
useLocalCanvasKit: debuggingOptions.buildInfo.useLocalCanvasKit,
|
||||
rootDirectory: fileSystem.directory(projectRootPath),
|
||||
isWindows: _platform.isWindows,
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
platform: _platform,
|
||||
);
|
||||
Uri url = await device!.devFS!.create();
|
||||
if (debuggingOptions.tlsCertKeyPath != null && debuggingOptions.tlsCertPath != null) {
|
||||
|
||||
@ -463,7 +463,13 @@ String generateDDCLibraryBundleMainModule({
|
||||
required String entrypoint,
|
||||
required bool nativeNullAssertions,
|
||||
required String onLoadEndBootstrap,
|
||||
required bool isCi,
|
||||
}) {
|
||||
// Chrome in CI seems to hang when there are too many requests at once, so we
|
||||
// limit the max number of script requests for that environment.
|
||||
// https://github.com/flutter/flutter/issues/169574
|
||||
final String setMaxRequests =
|
||||
isCi ? r'window.$dartLoader.loadConfig.maxRequestPoolSize = 100;' : '';
|
||||
// The typo below in "EXTENTION" is load-bearing, package:build depends on it.
|
||||
return '''
|
||||
/* ENTRYPOINT_EXTENTION_MARKER */
|
||||
@ -473,6 +479,7 @@ String generateDDCLibraryBundleMainModule({
|
||||
|
||||
dartDevEmbedder.debugger.registerDevtoolsFormatter();
|
||||
|
||||
$setMaxRequests
|
||||
// Set up a final script that lets us know when all scripts have been loaded.
|
||||
// Only then can we call the main method.
|
||||
let onLoadEndSrc = '$onLoadEndBootstrap';
|
||||
|
||||
@ -264,6 +264,7 @@ void main() {
|
||||
entrypoint: 'main.js',
|
||||
nativeNullAssertions: false,
|
||||
onLoadEndBootstrap: 'on_load_end_bootstrap.js',
|
||||
isCi: true,
|
||||
);
|
||||
// bootstrap main module has correct defined module.
|
||||
expect(result, contains('let appName = "org-dartlang-app:/main.js";'));
|
||||
@ -275,6 +276,7 @@ void main() {
|
||||
entrypoint: 'main.js',
|
||||
nativeNullAssertions: true,
|
||||
onLoadEndBootstrap: 'on_load_end_bootstrap.js',
|
||||
isCi: true,
|
||||
);
|
||||
|
||||
expect(result, contains('nativeNonNullAsserts: true'));
|
||||
@ -285,11 +287,32 @@ void main() {
|
||||
entrypoint: 'main.js',
|
||||
nativeNullAssertions: false,
|
||||
onLoadEndBootstrap: 'on_load_end_bootstrap.js',
|
||||
isCi: true,
|
||||
);
|
||||
|
||||
expect(result, contains('nativeNonNullAsserts: false'));
|
||||
});
|
||||
|
||||
test('generateDDCLibraryBundleMainModule sets max requests when isCi only', () {
|
||||
String result = generateDDCLibraryBundleMainModule(
|
||||
entrypoint: 'main.js',
|
||||
nativeNullAssertions: false,
|
||||
onLoadEndBootstrap: 'on_load_end_bootstrap.js',
|
||||
isCi: true,
|
||||
);
|
||||
|
||||
expect(result, contains('maxRequestPoolSize ='));
|
||||
|
||||
result = generateDDCLibraryBundleMainModule(
|
||||
entrypoint: 'main.js',
|
||||
nativeNullAssertions: false,
|
||||
onLoadEndBootstrap: 'on_load_end_bootstrap.js',
|
||||
isCi: false,
|
||||
);
|
||||
|
||||
expect(result, isNot(contains('maxRequestPoolSize =')));
|
||||
});
|
||||
|
||||
test('generateTestBootstrapFileContents embeds urls correctly', () {
|
||||
final String result = generateTestBootstrapFileContents(
|
||||
'foo.dart.js',
|
||||
|
||||
@ -76,6 +76,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
releaseAssetServer = ReleaseAssetServer(
|
||||
globals.fs.file('main.dart').uri,
|
||||
@ -108,7 +109,8 @@ void main() {
|
||||
logging.LogRecord(logging.Level.WARNING, otherMessage, 'DartUri'),
|
||||
];
|
||||
|
||||
events.forEach(log);
|
||||
void logWithLogger(logging.LogRecord event) => log(logger, event);
|
||||
events.forEach(logWithLogger);
|
||||
expect(logger.warningText, contains(unresolvedUriMessage));
|
||||
expect(logger.warningText, contains(otherMessage));
|
||||
});
|
||||
@ -321,6 +323,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
|
||||
expect(webAssetServer.basePath, 'foo/bar');
|
||||
@ -341,6 +344,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
|
||||
// Defaults to "/" when there's no base element.
|
||||
@ -364,6 +368,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
),
|
||||
throwsToolExit(),
|
||||
);
|
||||
@ -386,6 +391,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
),
|
||||
throwsToolExit(),
|
||||
);
|
||||
@ -810,7 +816,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.ddcModuleLoaderJS.createSync(recursive: true);
|
||||
webDevFS.flutterJs.createSync(recursive: true);
|
||||
@ -920,7 +928,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.ddcModuleLoaderJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -994,7 +1004,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.ddcModuleLoaderJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -1043,7 +1055,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.ddcModuleLoaderJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -1093,7 +1107,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.ddcModuleLoaderJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -1106,72 +1122,84 @@ void main() {
|
||||
await webDevFS.destroy();
|
||||
}, overrides: <Type, Generator>{Artifacts: Artifacts.test});
|
||||
|
||||
test('allows frame embedding', () async {
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
);
|
||||
test(
|
||||
'allows frame embedding',
|
||||
() => testbed.run(() async {
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
|
||||
expect(webAssetServer.defaultResponseHeaders['x-frame-options'], null);
|
||||
await webAssetServer.dispose();
|
||||
});
|
||||
expect(webAssetServer.defaultResponseHeaders['x-frame-options'], null);
|
||||
await webAssetServer.dispose();
|
||||
}, overrides: <Type, Generator>{Artifacts: () => Artifacts.test()}),
|
||||
);
|
||||
|
||||
test('passes on extra headers', () async {
|
||||
const String extraHeaderKey = 'hurray';
|
||||
const String extraHeaderValue = 'flutter';
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{extraHeaderKey: extraHeaderValue},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
);
|
||||
test(
|
||||
'passes on extra headers',
|
||||
() => testbed.run(() async {
|
||||
const String extraHeaderKey = 'hurray';
|
||||
const String extraHeaderValue = 'flutter';
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{extraHeaderKey: extraHeaderValue},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
|
||||
expect(webAssetServer.defaultResponseHeaders[extraHeaderKey], <String>[extraHeaderValue]);
|
||||
expect(webAssetServer.defaultResponseHeaders[extraHeaderKey], <String>[extraHeaderValue]);
|
||||
|
||||
await webAssetServer.dispose();
|
||||
});
|
||||
await webAssetServer.dispose();
|
||||
}, overrides: <Type, Generator>{Artifacts: () => Artifacts.test()}),
|
||||
);
|
||||
|
||||
runInTestbed('WebAssetServer responds to POST requests with 404 not found', () async {
|
||||
final Response response = await webAssetServer.handleRequest(
|
||||
@ -1203,6 +1231,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
|
||||
expect(await webAssetServer.metadataContents('foo/main_module.ddc_merged_metadata'), null);
|
||||
@ -1253,7 +1282,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.ddcModuleLoaderJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
|
||||
@ -75,6 +75,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
releaseAssetServer = ReleaseAssetServer(
|
||||
globals.fs.file('main.dart').uri,
|
||||
@ -100,7 +101,8 @@ void main() {
|
||||
logging.LogRecord(logging.Level.WARNING, otherMessage, 'DartUri'),
|
||||
];
|
||||
|
||||
events.forEach(log);
|
||||
void logWithLogger(logging.LogRecord event) => log(logger, event);
|
||||
events.forEach(logWithLogger);
|
||||
expect(logger.warningText, contains(unresolvedUriMessage));
|
||||
expect(logger.warningText, contains(otherMessage));
|
||||
}),
|
||||
@ -342,6 +344,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
|
||||
expect(webAssetServer.basePath, 'foo/bar');
|
||||
@ -365,6 +368,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
|
||||
// Defaults to "/" when there's no base element.
|
||||
@ -391,6 +395,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
),
|
||||
throwsToolExit(),
|
||||
);
|
||||
@ -416,6 +421,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
),
|
||||
throwsToolExit(),
|
||||
);
|
||||
@ -488,6 +494,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: true,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
|
||||
final Response response = await webAssetServer.handleRequest(
|
||||
@ -930,7 +937,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.flutterJs.createSync(recursive: true);
|
||||
@ -1038,7 +1047,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.flutterJs.createSync(recursive: true);
|
||||
@ -1152,7 +1163,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -1229,7 +1242,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -1281,7 +1296,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -1334,7 +1351,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
@ -1348,72 +1367,84 @@ void main() {
|
||||
}, overrides: <Type, Generator>{Artifacts: () => Artifacts.test()}),
|
||||
);
|
||||
|
||||
test('allows frame embedding', () async {
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
);
|
||||
test(
|
||||
'allows frame embedding',
|
||||
() => testbed.run(() async {
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
|
||||
expect(webAssetServer.defaultResponseHeaders['x-frame-options'], null);
|
||||
await webAssetServer.dispose();
|
||||
});
|
||||
expect(webAssetServer.defaultResponseHeaders['x-frame-options'], null);
|
||||
await webAssetServer.dispose();
|
||||
}, overrides: <Type, Generator>{Artifacts: () => Artifacts.test()}),
|
||||
);
|
||||
|
||||
test('passes on extra headers', () async {
|
||||
const String extraHeaderKey = 'hurray';
|
||||
const String extraHeaderValue = 'flutter';
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{extraHeaderKey: extraHeaderValue},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
);
|
||||
test(
|
||||
'passes on extra headers',
|
||||
() => testbed.run(() async {
|
||||
const String extraHeaderKey = 'hurray';
|
||||
const String extraHeaderValue = 'flutter';
|
||||
final WebAssetServer webAssetServer = await WebAssetServer.start(
|
||||
null,
|
||||
'localhost',
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
const BuildInfo(
|
||||
BuildMode.debug,
|
||||
'',
|
||||
treeShakeIcons: false,
|
||||
packageConfigPath: '.dart_tool/package_config.json',
|
||||
),
|
||||
false,
|
||||
false,
|
||||
Uri.base,
|
||||
null,
|
||||
const <String, String>{extraHeaderKey: extraHeaderValue},
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
testMode: true,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
|
||||
expect(webAssetServer.defaultResponseHeaders[extraHeaderKey], <String>[extraHeaderValue]);
|
||||
expect(webAssetServer.defaultResponseHeaders[extraHeaderKey], <String>[extraHeaderValue]);
|
||||
|
||||
await webAssetServer.dispose();
|
||||
});
|
||||
await webAssetServer.dispose();
|
||||
}, overrides: <Type, Generator>{Artifacts: () => Artifacts.test()}),
|
||||
);
|
||||
|
||||
test(
|
||||
'WebAssetServer responds to POST requests with 404 not found',
|
||||
@ -1453,6 +1484,7 @@ void main() {
|
||||
canaryFeatures,
|
||||
webRenderer: WebRendererMode.canvaskit,
|
||||
useLocalCanvasKit: false,
|
||||
fileSystem: globals.fs,
|
||||
);
|
||||
|
||||
expect(await webAssetServer.metadataContents('foo/main_module.ddc_merged_metadata'), null);
|
||||
@ -1504,7 +1536,9 @@ void main() {
|
||||
isWasm: false,
|
||||
useLocalCanvasKit: false,
|
||||
rootDirectory: globals.fs.currentDirectory,
|
||||
isWindows: false,
|
||||
fileSystem: globals.fs,
|
||||
logger: globals.logger,
|
||||
platform: globals.platform,
|
||||
);
|
||||
webDevFS.requireJS.createSync(recursive: true);
|
||||
webDevFS.stackTraceMapper.createSync(recursive: true);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user