Skip to content

Commit 897e3db

Browse files
author
Harry Terkelsen
authored
Inject the gstatic CanvasKit CDN URL by default in flutter build web (flutter#122772)
1 parent cbdee52 commit 897e3db

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

packages/flutter_tools/lib/src/commands/build_web.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class BuildWebCommand extends BuildSubCommand {
6060
},
6161
);
6262
usesWebRendererOption();
63+
usesWebResourcesCdnFlag();
6364

6465
//
6566
// JavaScript compilation options

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment
3838
usesDartDefineOption();
3939
usesFlavorOption();
4040
usesWebRendererOption();
41+
usesWebResourcesCdnFlag();
4142
addNativeNullAssertions(hide: !verboseHelp);
4243
addBundleSkSLPathOption(hide: !verboseHelp);
4344
usesApplicationBinaryOption();

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ class FlutterOptions {
125125
static const String kUseApplicationBinary = 'use-application-binary';
126126
static const String kWebBrowserFlag = 'web-browser-flag';
127127
static const String kWebRendererFlag = 'web-renderer';
128+
static const String kWebResourcesCdnFlag = 'web-resources-cdn';
128129
}
129130

130131
/// flutter command categories for usage.
@@ -668,6 +669,14 @@ abstract class FlutterCommand extends Command<void> {
668669
);
669670
}
670671

672+
void usesWebResourcesCdnFlag() {
673+
// TODO(hterkelsen): Default to true once we have a smoke test.
674+
argParser.addFlag(
675+
FlutterOptions.kWebResourcesCdnFlag,
676+
help: 'Use Web static resources hosted on a CDN.',
677+
);
678+
}
679+
671680
void usesDeviceUserOption() {
672681
argParser.addOption(FlutterOptions.kDeviceUser,
673682
help: 'Identifier number for a user or work profile on Android only. Run "adb shell pm list users" for available identifiers.',
@@ -1207,6 +1216,15 @@ abstract class FlutterCommand extends Command<void> {
12071216
dartDefines = updateDartDefines(dartDefines, webRenderer);
12081217
}
12091218

1219+
if (argParser.options.containsKey(FlutterOptions.kWebResourcesCdnFlag)) {
1220+
final bool hasLocalWebSdk = argParser.options.containsKey('local-web-sdk') && stringArg('local-web-sdk') != null;
1221+
if (boolArg(FlutterOptions.kWebResourcesCdnFlag) && !hasLocalWebSdk) {
1222+
if (!dartDefines.any((String define) => define.startsWith('FLUTTER_WEB_CANVASKIT_URL='))) {
1223+
dartDefines.add('FLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/${globals.flutterVersion.engineRevision}/');
1224+
}
1225+
}
1226+
}
1227+
12101228
return BuildInfo(buildMode,
12111229
argParser.options.containsKey('flavor')
12121230
? stringArg('flavor')

packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void main() {
112112
);
113113
final CommandRunner<void> runner = createTestCommandRunner(buildCommand);
114114
setupFileSystemForEndToEndTest(fileSystem);
115-
await runner.run(<String>['build', 'web', '--no-pub', '--dart-define=foo=a', '--dart2js-optimization=O3']);
115+
await runner.run(<String>['build', 'web', '--no-pub', '--no-web-resources-cdn', '--dart-define=foo=a', '--dart2js-optimization=O3']);
116116

117117
final Directory buildDir = fileSystem.directory(fileSystem.path.join('build', 'web'));
118118

@@ -164,6 +164,7 @@ void main() {
164164
'build',
165165
'web',
166166
'--no-pub',
167+
'--no-web-resources-cdn',
167168
'--output=$newBuildDir'
168169
]);
169170

@@ -251,6 +252,38 @@ void main() {
251252
ProcessManager: () => FakeProcessManager.any(),
252253
BuildSystem: () => TestBuildSystem.all(BuildResult(success: true)),
253254
});
255+
256+
testUsingContext('Defaults to gstatic CanvasKit artifacts', () async {
257+
final TestWebBuildCommand buildCommand = TestWebBuildCommand(fileSystem: fileSystem);
258+
final CommandRunner<void> runner = createTestCommandRunner(buildCommand);
259+
setupFileSystemForEndToEndTest(fileSystem);
260+
await runner.run(<String>['build', 'web', '--no-pub', '--web-resources-cdn']);
261+
final BuildInfo buildInfo =
262+
await buildCommand.webCommand.getBuildInfo(forcedBuildMode: BuildMode.debug);
263+
expect(buildInfo.dartDefines, contains(startsWith('FLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/')));
264+
}, overrides: <Type, Generator>{
265+
Platform: () => fakePlatform,
266+
FileSystem: () => fileSystem,
267+
FeatureFlags: () => TestFeatureFlags(isWebEnabled: true),
268+
ProcessManager: () => FakeProcessManager.any(),
269+
BuildSystem: () => TestBuildSystem.all(BuildResult(success: true)),
270+
});
271+
272+
testUsingContext('Does not override custom CanvasKit URL', () async {
273+
final TestWebBuildCommand buildCommand = TestWebBuildCommand(fileSystem: fileSystem);
274+
final CommandRunner<void> runner = createTestCommandRunner(buildCommand);
275+
setupFileSystemForEndToEndTest(fileSystem);
276+
await runner.run(<String>['build', 'web', '--no-pub', '--web-resources-cdn', '--dart-define=FLUTTER_WEB_CANVASKIT_URL=abcdefg']);
277+
final BuildInfo buildInfo =
278+
await buildCommand.webCommand.getBuildInfo(forcedBuildMode: BuildMode.debug);
279+
expect(buildInfo.dartDefines, contains('FLUTTER_WEB_CANVASKIT_URL=abcdefg'));
280+
}, overrides: <Type, Generator>{
281+
Platform: () => fakePlatform,
282+
FileSystem: () => fileSystem,
283+
FeatureFlags: () => TestFeatureFlags(isWebEnabled: true),
284+
ProcessManager: () => FakeProcessManager.any(),
285+
BuildSystem: () => TestBuildSystem.all(BuildResult(success: true)),
286+
});
254287
}
255288

256289
void setupFileSystemForEndToEndTest(FileSystem fileSystem) {

0 commit comments

Comments
 (0)