Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf804fb5

Browse files
Add explicit--cross-origin-isolation flag toflutter run. (#180026)
Fixes#163479This adds a flag,`--cross-origin-isolation`/`--no-cross-origin-isolation` that allows theuser to explicitly control whether `flutter run`/`drive`/`test` servesfiles with COOP/COEP headers. If the user doesn't specify, it uses crossorigin isolation when wasm is enabled and no cross origin isolation whenwasm is disabled.
1 parent0271623 commitf804fb5

File tree

15 files changed

+207
-10
lines changed

15 files changed

+207
-10
lines changed

‎packages/flutter_tools/lib/src/commands/run.dart‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment
291291
?stringsArg(FlutterOptions.kWebBrowserFlag)
292292
:const<String>[];
293293

294+
finalbool? webCrossOriginIsolation= argResults!.wasParsed('cross-origin-isolation')
295+
?boolArg('cross-origin-isolation')
296+
:null;
294297
if (buildInfo.mode.isRelease) {
295298
returnDebuggingOptions.disabled(
296299
buildInfo,
@@ -306,6 +309,7 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment
306309
webRunHeadless: featureFlags.isWebEnabled&&boolArg('web-run-headless'),
307310
webBrowserDebugPort: webBrowserDebugPort,
308311
webBrowserFlags: webBrowserFlags,
312+
webCrossOriginIsolation: webCrossOriginIsolation,
309313
webRenderer: webRenderer,
310314
webUseWasm: useWasm,
311315
enableImpeller: enableImpeller,
@@ -362,6 +366,7 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment
362366
webEnableExpressionEvaluation:
363367
featureFlags.isWebEnabled&&boolArg('web-enable-expression-evaluation'),
364368
webLaunchUrl: featureFlags.isWebEnabled?stringArg('web-launch-url'):null,
369+
webCrossOriginIsolation: webCrossOriginIsolation,
365370
webRenderer: webRenderer,
366371
webUseWasm: useWasm,
367372
vmserviceOutFile:stringArg('vmservice-out-file'),

‎packages/flutter_tools/lib/src/commands/test.dart‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,16 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
285285
FlutterOptions.kWebWasmFlag,
286286
help:'Compile to WebAssembly rather than JavaScript.\n$kWasmMoreInfo',
287287
negatable:false,
288+
)
289+
..addFlag(
290+
'cross-origin-isolation',
291+
help:
292+
'Adds the Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy '
293+
'headers to the web server. These headers are required for using APIs like '
294+
'SharedArrayBuffer. This is on by default for the "skwasm" web renderer, '
295+
'and this flag can be used to override the default. To disable this for the '
296+
'skwasm renderer, use "--no-cross-origin-isolation".',
297+
hide:!verboseHelp,
288298
);
289299

290300
addDdsOptions(verboseHelp: verboseHelp);
@@ -462,6 +472,9 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
462472
enableFlutterGpu: (argResults!['enable-flutter-gpu']asbool?)??false,
463473
debugLogsDirectoryPath: debugLogsDirectoryPath,
464474
webRenderer: webRenderer,
475+
webCrossOriginIsolation: argResults!.wasParsed('cross-origin-isolation')
476+
?boolArg('cross-origin-isolation')
477+
:null,
465478
printDtd:boolArg(FlutterGlobalOptions.kPrintDtd, global:true),
466479
webUseWasm: useWasm,
467480
);

‎packages/flutter_tools/lib/src/device.dart‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,7 @@ class DebuggingOptions {
987987
this.webBrowserFlags=const<String>[],
988988
this.webEnableExpressionEvaluation=false,
989989
this.webLaunchUrl,
990+
bool? webCrossOriginIsolation,
990991
WebRendererMode? webRenderer,
991992
this.webUseWasm=false,
992993
this.vmserviceOutFile,
@@ -1006,6 +1007,7 @@ class DebuggingOptions {
10061007
this.printDtd=false,
10071008
this.webDevServerConfig,
10081009
}): debuggingEnabled=true,
1010+
webCrossOriginIsolation= webCrossOriginIsolation?? webUseWasm,
10091011
webRenderer= webRenderer??WebRendererMode.getDefault(useWasm: webUseWasm);
10101012

10111013
DebuggingOptions.disabled(
@@ -1019,6 +1021,7 @@ class DebuggingOptions {
10191021
this.webBrowserDebugPort,
10201022
this.webBrowserFlags=const<String>[],
10211023
this.webLaunchUrl,
1024+
bool? webCrossOriginIsolation,
10221025
WebRendererMode? webRenderer,
10231026
this.webUseWasm=false,
10241027
this.traceAllowlist,
@@ -1056,6 +1059,7 @@ class DebuggingOptions {
10561059
devToolsServerAddress=null,
10571060
vmserviceOutFile=null,
10581061
webEnableExpressionEvaluation=false,
1062+
webCrossOriginIsolation= webCrossOriginIsolation?? webUseWasm,
10591063
nativeNullAssertions=false,
10601064
enableDevTools=false,
10611065
ipv6=false,
@@ -1098,6 +1102,7 @@ class DebuggingOptions {
10981102
requiredthis.webBrowserFlags,
10991103
requiredthis.webEnableExpressionEvaluation,
11001104
requiredthis.webLaunchUrl,
1105+
requiredthis.webCrossOriginIsolation,
11011106
requiredthis.webRenderer,
11021107
requiredthis.webUseWasm,
11031108
requiredthis.vmserviceOutFile,
@@ -1186,6 +1191,10 @@ class DebuggingOptions {
11861191
/// Allow developers to customize the browser's launch URL
11871192
finalString? webLaunchUrl;
11881193

1194+
/// Whether to enable cross-origin isolation. This is on by default for the
1195+
/// skwasm renderer.
1196+
finalbool webCrossOriginIsolation;
1197+
11891198
/// Which web renderer to use for the debugging session
11901199
finalWebRendererMode webRenderer;
11911200

@@ -1287,6 +1296,7 @@ class DebuggingOptions {
12871296
'webBrowserFlags': webBrowserFlags,
12881297
'webEnableExpressionEvaluation': webEnableExpressionEvaluation,
12891298
'webLaunchUrl': webLaunchUrl,
1299+
'webCrossOriginIsolation': webCrossOriginIsolation,
12901300
'webHeaders': webDevServerConfig?.headers??<String,String>{},
12911301
'webRenderer': webRenderer.name,
12921302
'webUseWasm': webUseWasm,
@@ -1354,6 +1364,7 @@ class DebuggingOptions {
13541364
webBrowserFlags: (json['webBrowserFlags']!asList<dynamic>).cast<String>(),
13551365
webEnableExpressionEvaluation: json['webEnableExpressionEvaluation']!asbool,
13561366
webLaunchUrl: json['webLaunchUrl']asString?,
1367+
webCrossOriginIsolation: json['webCrossOriginIsolation']!asbool,
13571368
webRenderer:WebRendererMode.values.byName(json['webRenderer']!asString),
13581369
webUseWasm: json['webUseWasm']!asbool,
13591370
vmserviceOutFile: json['vmserviceOutFile']asString?,

‎packages/flutter_tools/lib/src/isolated/devfs_web.dart‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class WebDevFS implements DevFS {
8080
requiredthis.useLocalCanvasKit,
8181
requiredthis.rootDirectory,
8282
this.useDwdsWebSocketConnection=false,
83+
requiredthis.webCrossOriginIsolation,
8384
requiredthis.fileSystem,
8485
requiredthis.logger,
8586
requiredthis.platform,
@@ -112,6 +113,7 @@ class WebDevFS implements DevFS {
112113
finalbool useLocalCanvasKit;
113114
finalWebDevServerConfig webDevServerConfig;
114115
finalbool useDwdsWebSocketConnection;
116+
finalbool webCrossOriginIsolation;
115117
finalFileSystem fileSystem;
116118
finalLogger logger;
117119
finalPlatform platform;
@@ -220,6 +222,7 @@ class WebDevFS implements DevFS {
220222
fileSystem: fileSystem,
221223
logger: logger,
222224
platform: platform,
225+
crossOriginIsolation: webCrossOriginIsolation,
223226
shouldEnableMiddleware: shouldEnableMiddleware,
224227
);
225228
return baseUri;

‎packages/flutter_tools/lib/src/isolated/release_asset_server.dart‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class ReleaseAssetServer {
9292
'Cross-Origin-Resource-Policy':'cross-origin',
9393
'Access-Control-Allow-Origin':'*',
9494
if (_needsCoopCoep&& _fileSystem.path.extension(file.path)=='.html')
95-
...kMultiThreadedHeaders,
95+
...kCrossOriginIsolationHeaders,
9696
},
9797
);
9898
}
@@ -102,7 +102,7 @@ class ReleaseAssetServer {
102102
file.readAsBytesSync(),
103103
headers:<String,String>{
104104
'Content-Type':'text/html',
105-
if (_needsCoopCoep) ...kMultiThreadedHeaders,
105+
if (_needsCoopCoep) ...kCrossOriginIsolationHeaders,
106106
},
107107
);
108108
}

‎packages/flutter_tools/lib/src/isolated/resident_web_runner.dart‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ class ResidentWebRunner extends ResidentRunner {
313313
useLocalCanvasKit: debuggingOptions.buildInfo.useLocalCanvasKit,
314314
rootDirectory: fileSystem.directory(projectRootPath),
315315
useDwdsWebSocketConnection: useDwdsWebSocketConnection,
316+
webCrossOriginIsolation: debuggingOptions.webCrossOriginIsolation,
316317
fileSystem: fileSystem,
317318
logger: logger,
318319
platform: _platform,

‎packages/flutter_tools/lib/src/isolated/web_asset_server.dart‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import '../web/devfs_config.dart';
3232
import'../web/devfs_proxy.dart';
3333
import'../web/memory_fs.dart';
3434
import'../web/module_metadata.dart';
35+
import'../web/web_constants.dart';
3536
import'../web_template.dart';
3637
import'proxy_middleware.dart';
3738
import'release_asset_server.dart';
@@ -180,6 +181,7 @@ class WebAssetServer implements AssetReader {
180181
DartDevelopmentServiceConfiguration ddsConfig,
181182
Uri entrypoint,
182183
ExpressionCompiler? expressionCompiler, {
184+
requiredbool crossOriginIsolation,
183185
requiredWebDevServerConfig webDevServerConfig,
184186
requiredWebRendererMode webRenderer,
185187
requiredbool isWasm,
@@ -237,6 +239,12 @@ class WebAssetServer implements AssetReader {
237239
// Allow rendering in a iframe.
238240
httpServer!.defaultResponseHeaders.remove('x-frame-options','SAMEORIGIN');
239241

242+
if (crossOriginIsolation) {
243+
for (finalMapEntry<String,String> headerin kCrossOriginIsolationHeaders.entries) {
244+
httpServer.defaultResponseHeaders.add(header.key, header.value);
245+
}
246+
}
247+
240248
for (finalMapEntry<String,String> headerin extraHeaders.entries) {
241249
httpServer.defaultResponseHeaders.add(header.key, header.value);
242250
}
@@ -279,7 +287,7 @@ class WebAssetServer implements AssetReader {
279287
flutterRoot:Cache.flutterRoot,
280288
webBuildDirectory:getWebBuildDirectory(),
281289
basePath: server.basePath,
282-
needsCoopCoep:webRenderer==WebRendererMode.skwasm,
290+
needsCoopCoep:crossOriginIsolation,
283291
);
284292
runZonedGuarded(
285293
() {

‎packages/flutter_tools/lib/src/runner/flutter_command.dart‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,16 @@ abstract class FlutterCommand extends Command<void> {
391391
valueHelp:'--foo=bar',
392392
hide:!verboseHelp,
393393
);
394+
argParser.addFlag(
395+
'cross-origin-isolation',
396+
help:
397+
'Adds the Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy '
398+
'headers to the web server. These headers are required for using APIs like '
399+
'SharedArrayBuffer. This is on by default for the "skwasm" web renderer, '
400+
'and this flag can be used to override the default. To disable this for the '
401+
'skwasm renderer, use "--no-cross-origin-isolation".',
402+
hide:!verboseHelp,
403+
);
394404
}
395405

396406
voidusesTargetOption() {

‎packages/flutter_tools/lib/src/test/flutter_web_platform.dart‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ shelf.Handler createDirectoryHandler(Directory directory, {required bool crossOr
5858
file.openRead(),
5959
headers:<String,String>{
6060
'Content-Type':?contentType,
61-
if (needsCrossOriginIsolated) ...kMultiThreadedHeaders,
61+
if (needsCrossOriginIsolated) ...kCrossOriginIsolationHeaders,
6262
},
6363
);
6464
};
@@ -84,6 +84,7 @@ class FlutterWebPlatform extends PlatformPlugin {
8484
requiredProcessManager processManager,
8585
requiredthis.webRenderer,
8686
requiredthis.useWasm,
87+
requiredthis.crossOriginIsolation,
8788
TestTimeRecorder? testTimeRecorder,
8889
}): _fileSystem= fileSystem,
8990
_buildDirectory= buildDirectory,
@@ -99,7 +100,7 @@ class FlutterWebPlatform extends PlatformPlugin {
99100
fileSystem.directory(
100101
fileSystem.path.join(Cache.flutterRoot!,'packages','flutter_tools'),
101102
),
102-
crossOriginIsolated:webRenderer==WebRendererMode.skwasm,
103+
crossOriginIsolated:crossOriginIsolation,
103104
),
104105
)
105106
.add(_handleStaticArtifact)
@@ -110,7 +111,7 @@ class FlutterWebPlatform extends PlatformPlugin {
110111
.add(
111112
createDirectoryHandler(
112113
fileSystem.directory(fileSystem.path.join(fileSystem.currentDirectory.path,'test')),
113-
crossOriginIsolated:webRenderer==WebRendererMode.skwasm,
114+
crossOriginIsolated:crossOriginIsolation,
114115
),
115116
)
116117
.add(_packageFilesHandler);
@@ -145,6 +146,7 @@ class FlutterWebPlatform extends PlatformPlugin {
145146
finalString _root;
146147
finalWebRendererMode webRenderer;
147148
finalbool useWasm;
149+
finalbool crossOriginIsolation;
148150

149151
/// Allows only one test suite (typically one test file) to be loaded and run
150152
/// at any given point in time. Loading more than one file at a time is known
@@ -174,6 +176,7 @@ class FlutterWebPlatform extends PlatformPlugin {
174176
requiredProcessManager processManager,
175177
requiredWebRendererMode webRenderer,
176178
requiredbool useWasm,
179+
requiredbool crossOriginIsolation,
177180
TestTimeRecorder? testTimeRecorder,
178181
Uri? testPackageUri,
179182
Future<shelf.Server>Function() serverFactory= defaultServerFactory,
@@ -215,6 +218,7 @@ class FlutterWebPlatform extends PlatformPlugin {
215218
processManager: processManager,
216219
webRenderer: webRenderer,
217220
useWasm: useWasm,
221+
crossOriginIsolation: crossOriginIsolation,
218222
testTimeRecorder: testTimeRecorder,
219223
);
220224
}
@@ -419,7 +423,7 @@ class FlutterWebPlatform extends PlatformPlugin {
419423
finalString basename= _fileSystem.path.basename(fileUri.toFilePath());
420424
final shelf.Handler handler=createDirectoryHandler(
421425
_fileSystem.directory(dirname),
422-
crossOriginIsolated:webRenderer==WebRendererMode.skwasm,
426+
crossOriginIsolated:crossOriginIsolation,
423427
);
424428
final modifiedRequest= shelf.Request(
425429
request.method,
@@ -543,7 +547,7 @@ class FlutterWebPlatform extends PlatformPlugin {
543547
''',
544548
headers:<String,String>{
545549
'Content-Type':'text/html',
546-
if (webRenderer==WebRendererMode.skwasm) ...kMultiThreadedHeaders,
550+
if (webRenderer==WebRendererMode.skwasm) ...kCrossOriginIsolationHeaders,
547551
},
548552
);
549553
}

‎packages/flutter_tools/lib/src/test/runner.dart‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ interface class FlutterTestRunner {
143143
testTimeRecorder: testTimeRecorder,
144144
webRenderer: debuggingOptions.webRenderer,
145145
useWasm: debuggingOptions.webUseWasm,
146+
crossOriginIsolation: debuggingOptions.webCrossOriginIsolation,
146147
);
147148
});
148149
await testWrapper.main(testArgs);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp