Skip to content

Add initial support for Cross-Origin Storage#184149

Merged
auto-submit[bot] merged 21 commits into
flutter:masterfrom
tomayac:skia-cos
Apr 24, 2026
Merged

Add initial support for Cross-Origin Storage#184149
auto-submit[bot] merged 21 commits into
flutter:masterfrom
tomayac:skia-cos

Conversation

@tomayac

@tomayac tomayac commented Mar 25, 2026

Copy link
Copy Markdown
Contributor

This PR adds support for Cross-Origin Storage to Flutter's web target. This means independent apps can use the same skwasm.wasm or canvaskit.wasm files cross-origin, without having to redundantly download and cache them per origin.

List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.

Demo

  1. Install the Cross-Origin Storage extension. This extension injects the proposed navigator.crossOriginStorage.requestFileHandles() API into pages.
  2. Go to https://skwasm-cos-origin-1.surge.sh/. This puts skwasm.wasm into Cross-Origin Storage.
  3. Go to https://skwasm-cos-origin-2.surge.sh/ (different origin). This reuses the skwasm.wasm file from Cross-Origin Storage.
  4. Go to https://canvaskit-cos-origin-1.surge.sh/. This puts canvaskit.wasm into Cross-Origin Storage.
  5. Go to https://canvaskit-cos-origin-2.surge.sh/ (different origin). This reuses the canvaskit.wasm file from Cross-Origin Storage.
  6. Open the extension's popup window:
    • See the resources in Cross-Origin Storage used by an origin, like those used by https://canvaskit-cos-origin-1.surge.sh/
      Screenshot 2026-03-25 at 20 05 19
    • See the origins a resource is being used on, for example canvaskit.wasm with a SHA-256 hash of faf52a452fdc8c82a4b347dc31c23fea6026bcc9663c6fd4abda2dd96e5c2905:
      Screenshot 2026-03-25 at 20 08 40
  7. Open all the demo apps in a browser without the extension installed and note how everything still works as usual.

Note: I had to create a HACKY_HELPER_rebuild_flutter_js.sh script that built me the flutter_bootstrap.js file. There's likely a better way ;-)

I'm marking this as a Draft PR, as it mostly serves as a proof of feasibility, but maybe the Flutter team can reuse some of my code.

Pre-launch Checklist

  • I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
  • I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools.
  • I read the [Tree Hygiene] wiki page, which explains my responsibilities.
  • I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement].
  • I signed the [CLA].
  • I listed at least one issue that this PR fixes in the description above.
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is [test-exempt].
  • I followed the [breaking change policy] and added [Data Driven Fixes] where supported.
  • All existing and new tests are passing.

@github-actions github-actions Bot added tool Affects the "flutter" command-line tool. See also t: labels. engine flutter/engine related. See also e: labels. platform-web Web applications specifically labels Mar 25, 2026
kevmoo
kevmoo previously requested changes Mar 27, 2026

@kevmoo kevmoo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some initial cleanup notes.

Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/canvaskit_loader.js Outdated
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/canvaskit_loader.js
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js Outdated
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js Outdated
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/skwasm_loader.js Outdated
Comment thread packages/flutter_tools/lib/src/build_system/targets/web.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js Outdated
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js Outdated
@tomayac tomayac requested a review from kevmoo March 27, 2026 17:58
@tomayac tomayac marked this pull request as ready for review March 27, 2026 18:49

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces support for Cross-Origin Storage (COS) for WASM assets by calculating and storing SHA-256 hashes in a build configuration. It updates the WASM instantiator to attempt retrieval from COS before falling back to network fetches. Feedback includes correcting the URL construction in the CanvasKit loader, ensuring unique relative paths are used as keys for WASM hashes in both build tools and asset servers to prevent collisions, and refining log messages for professional tone.

Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/canvaskit_loader.js
Comment thread packages/flutter_tools/lib/src/build_system/targets/web.dart Outdated
Comment thread packages/flutter_tools/lib/src/isolated/web_asset_server.dart Outdated
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js Outdated
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js Outdated
@kevmoo

kevmoo commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

@tomayac – I'd do a rebase and squash on your side and (force)push.

@tomayac

tomayac commented Mar 27, 2026

Copy link
Copy Markdown
Contributor Author

@tomayac – I'd do a rebase and squash on your side and (force)push.

Done 2964d96

@tomayac tomayac requested a review from kevmoo March 27, 2026 19:43
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/canvaskit_loader.js
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js
Comment thread engine/src/flutter/lib/web_ui/flutter_js/src/instantiate_wasm.js Outdated
@tomayac tomayac requested a review from kevmoo March 30, 2026 09:12
@kevmoo kevmoo dismissed their stale review April 8, 2026 16:14

Thanks for the fix

@harryterkelsen harryterkelsen self-requested a review April 8, 2026 16:55
@github-actions github-actions Bot removed the CICD Run CI/CD label Apr 23, 2026
@eyebrowsoffire eyebrowsoffire added CICD Run CI/CD autosubmit Merge PR when tree becomes green via auto submit App labels Apr 23, 2026
@auto-submit

auto-submit Bot commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/184149, because This PR has not met approval requirements for merging. Changes were requested by {harryterkelsen}, please make the needed changes and resubmit this PR.
The PR author is not a member of flutter-hackers and needs 2 more review(s) in order to merge this PR.

  • Merge guidelines: A PR needs at least one approved review if the author is already part of flutter-hackers or two member reviews if the author is not a member of flutter-hackers before re-applying the autosubmit label. Reviewers: If you left a comment approving, please use the "approve" review action instead.

@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Apr 24, 2026

@harryterkelsen harryterkelsen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@eyebrowsoffire eyebrowsoffire added the autosubmit Merge PR when tree becomes green via auto submit App label Apr 24, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue Apr 24, 2026
Merged via the queue into flutter:master with commit ff066f0 Apr 24, 2026
203 of 204 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Apr 24, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Apr 28, 2026
…11595)

Manual roll Flutter from 31001886cbe8 to 61fca76dd523 (53 revisions)

Manual roll requested by tarrinneal@google.com

flutter/flutter@3100188...61fca76

2026-04-27 30870216+gaaclarke@users.noreply.github.com Adds integration test for the FLTEnableSDFs flag for iOS (flutter/flutter#185637)
2026-04-27 97480502+b-luk@users.noreply.github.com Fix sdfs being enabled for MacOS regardless of FLTEnableSDFs value (flutter/flutter#185565)
2026-04-27 97480502+b-luk@users.noreply.github.com Don't use UberSDF for paint with incompatible blend modes (flutter/flutter#184889)
2026-04-27 engine-flutter-autoroll@skia.org Roll Dart SDK from de495e3de9a0 to 941ca325cfc9 (2 revisions) (flutter/flutter#185653)
2026-04-27 jhy03261997@gmail.com [a11y] Add CONTENT_CHANGE_TYPE_EXPANDED support on android. (flutter/flutter#185305)
2026-04-27 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#185641)
2026-04-27 1063596+reidbaker@users.noreply.github.com Modify analyze.dart to have flags to run only or exclude each verification step.  (flutter/flutter#185618)
2026-04-27 meylis@divine.video Fix debugNeedsPaint/Layout/CompositedLayerUpdate crashing in release mode (flutter/flutter#184627)
2026-04-27 kallentu@google.com Enable `var_with_no_type_annotation` lint. (flutter/flutter#185215)
2026-04-27 53523825+JhonaCodes@users.noreply.github.com Fix SelectionArea handles overlapping context menu on Android (flutter/flutter#182663)
2026-04-27 30870216+gaaclarke@users.noreply.github.com Adds debugging information to compiled metal shaders (flutter/flutter#185629)
2026-04-27 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#185638)
2026-04-27 84978733+alejandro-all-win-software@users.noreply.github.com Use null-aware elements in dev/devicelab/lib/framework/browser.dart (flutter/flutter#184778)
2026-04-27 154381524+flutteractionsbot@users.noreply.github.com Sync CHANGELOG.md from stable (flutter/flutter#185633)
2026-04-27 31591868+zawhtetnaing10@users.noreply.github.com Added useOriginalColors flag which allows ImageIcon to bypass IconTheme colorization and use the original colors (flutter/flutter#180491)
2026-04-27 engine-flutter-autoroll@skia.org Roll Packages from 8400f71 to 23280da (2 revisions) (flutter/flutter#185619)
2026-04-27 engine-flutter-autoroll@skia.org Roll Skia from f1238e0f1022 to ce82d32b3e03 (1 revision) (flutter/flutter#185616)
2026-04-27 15619084+vashworth@users.noreply.github.com [SwiftPM] Enable package resolution on xcodebuild commands (flutter/flutter#185208)
2026-04-27 chris@bracken.jp [iOS] Refactor keyboard inset logic into FlutterKeyboardInsetManager (flutter/flutter#185535)
2026-04-27 matej.knopp@gmail.com [Win32] FlutterDesktopEngineGetGraphicsAdapter should use out parameter (flutter/flutter#185590)
2026-04-27 engine-flutter-autoroll@skia.org Roll Skia from d77e3356d526 to f1238e0f1022 (4 revisions) (flutter/flutter#185604)
2026-04-27 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from flsn8jC4LkTn6WECf... to i6d0NoDueUiXpePfX... (flutter/flutter#185601)
2026-04-26 engine-flutter-autoroll@skia.org Roll Dart SDK from a108dfe2d227 to de495e3de9a0 (1 revision) (flutter/flutter#185599)
2026-04-26 engine-flutter-autoroll@skia.org Roll Skia from ce9aa2231292 to d77e3356d526 (1 revision) (flutter/flutter#185596)
2026-04-26 engine-flutter-autoroll@skia.org Roll Skia from 622fff4c24d2 to ce9aa2231292 (1 revision) (flutter/flutter#185588)
2026-04-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 9fPnyEo9PaNdXtasl... to flsn8jC4LkTn6WECf... (flutter/flutter#185585)
2026-04-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 605a8faf0dda to a108dfe2d227 (1 revision) (flutter/flutter#185584)
2026-04-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 6b8c39765f17 to 605a8faf0dda (1 revision) (flutter/flutter#185578)
2026-04-25 engine-flutter-autoroll@skia.org Roll Skia from 185f6b57d64f to 622fff4c24d2 (1 revision) (flutter/flutter#185573)
2026-04-25 evanwall@buffalo.edu Implement square-like round superellipses with circular corners in the SDF uber shader (flutter/flutter#185370)
2026-04-25 victorsanniay@gmail.com Add @awaitNotRequired annotation to flutter sdk (flutter/flutter#181513)
2026-04-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 01228cb7af42 to 6b8c39765f17 (2 revisions) (flutter/flutter#185569)
2026-04-25 flar@google.com Adapt the DisplayList benchmarks into a primitive rendering benchmark suite (flutter/flutter#185270)
2026-04-25 okorohelijah@google.com Enable SPM for GoogleMobileAds (flutter/flutter#185548)
2026-04-25 engine-flutter-autoroll@skia.org Roll Skia from 3f467a581942 to 185f6b57d64f (1 revision) (flutter/flutter#185564)
2026-04-25 victorsanniay@gmail.com Fix Table crash when a cell child paints below the row bottom (flutter/flutter#185323)
2026-04-24 ahmedsameha1@gmail.com Make sure that an Image doesn't crash in 0x0 environment (flutter/flutter#181154)
2026-04-24 engine-flutter-autoroll@skia.org Roll Skia from 300d432048b0 to 3f467a581942 (3 revisions) (flutter/flutter#185558)
2026-04-24 engine-flutter-autoroll@skia.org Roll Dart SDK from c26627715892 to 01228cb7af42 (4 revisions) (flutter/flutter#185559)
2026-04-24 jacksongardner@google.com Reland "[web] Fix LateInitializationError in CkSurface and SkwasmSurface (#185116)" (flutter/flutter#185553)
2026-04-24 41930132+hellohuanlin@users.noreply.github.com [github]fix git ls-file glob pattern in labeler.yml instruction (flutter/flutter#185495)
2026-04-24 41930132+hellohuanlin@users.noreply.github.com [ios]update ios-reviewers tags to include more files (flutter/flutter#185490)
2026-04-24 tomac@google.com Add initial support for Cross-Origin Storage (flutter/flutter#184149)
2026-04-24 30870216+gaaclarke@users.noreply.github.com tool: Skip cached engine artifacts with local engine (flutter/flutter#185546)
...
@tomayac tomayac deleted the skia-cos branch May 12, 2026 10:17
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…lutter#11595)

Manual roll Flutter from 31001886cbe8 to 61fca76dd523 (53 revisions)

Manual roll requested by tarrinneal@google.com

flutter/flutter@3100188...61fca76

2026-04-27 30870216+gaaclarke@users.noreply.github.com Adds integration test for the FLTEnableSDFs flag for iOS (flutter/flutter#185637)
2026-04-27 97480502+b-luk@users.noreply.github.com Fix sdfs being enabled for MacOS regardless of FLTEnableSDFs value (flutter/flutter#185565)
2026-04-27 97480502+b-luk@users.noreply.github.com Don't use UberSDF for paint with incompatible blend modes (flutter/flutter#184889)
2026-04-27 engine-flutter-autoroll@skia.org Roll Dart SDK from de495e3de9a0 to 941ca325cfc9 (2 revisions) (flutter/flutter#185653)
2026-04-27 jhy03261997@gmail.com [a11y] Add CONTENT_CHANGE_TYPE_EXPANDED support on android. (flutter/flutter#185305)
2026-04-27 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#185641)
2026-04-27 1063596+reidbaker@users.noreply.github.com Modify analyze.dart to have flags to run only or exclude each verification step.  (flutter/flutter#185618)
2026-04-27 meylis@divine.video Fix debugNeedsPaint/Layout/CompositedLayerUpdate crashing in release mode (flutter/flutter#184627)
2026-04-27 kallentu@google.com Enable `var_with_no_type_annotation` lint. (flutter/flutter#185215)
2026-04-27 53523825+JhonaCodes@users.noreply.github.com Fix SelectionArea handles overlapping context menu on Android (flutter/flutter#182663)
2026-04-27 30870216+gaaclarke@users.noreply.github.com Adds debugging information to compiled metal shaders (flutter/flutter#185629)
2026-04-27 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#185638)
2026-04-27 84978733+alejandro-all-win-software@users.noreply.github.com Use null-aware elements in dev/devicelab/lib/framework/browser.dart (flutter/flutter#184778)
2026-04-27 154381524+flutteractionsbot@users.noreply.github.com Sync CHANGELOG.md from stable (flutter/flutter#185633)
2026-04-27 31591868+zawhtetnaing10@users.noreply.github.com Added useOriginalColors flag which allows ImageIcon to bypass IconTheme colorization and use the original colors (flutter/flutter#180491)
2026-04-27 engine-flutter-autoroll@skia.org Roll Packages from 8400f71 to 23280da (2 revisions) (flutter/flutter#185619)
2026-04-27 engine-flutter-autoroll@skia.org Roll Skia from f1238e0f1022 to ce82d32b3e03 (1 revision) (flutter/flutter#185616)
2026-04-27 15619084+vashworth@users.noreply.github.com [SwiftPM] Enable package resolution on xcodebuild commands (flutter/flutter#185208)
2026-04-27 chris@bracken.jp [iOS] Refactor keyboard inset logic into FlutterKeyboardInsetManager (flutter/flutter#185535)
2026-04-27 matej.knopp@gmail.com [Win32] FlutterDesktopEngineGetGraphicsAdapter should use out parameter (flutter/flutter#185590)
2026-04-27 engine-flutter-autoroll@skia.org Roll Skia from d77e3356d526 to f1238e0f1022 (4 revisions) (flutter/flutter#185604)
2026-04-27 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from flsn8jC4LkTn6WECf... to i6d0NoDueUiXpePfX... (flutter/flutter#185601)
2026-04-26 engine-flutter-autoroll@skia.org Roll Dart SDK from a108dfe2d227 to de495e3de9a0 (1 revision) (flutter/flutter#185599)
2026-04-26 engine-flutter-autoroll@skia.org Roll Skia from ce9aa2231292 to d77e3356d526 (1 revision) (flutter/flutter#185596)
2026-04-26 engine-flutter-autoroll@skia.org Roll Skia from 622fff4c24d2 to ce9aa2231292 (1 revision) (flutter/flutter#185588)
2026-04-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 9fPnyEo9PaNdXtasl... to flsn8jC4LkTn6WECf... (flutter/flutter#185585)
2026-04-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 605a8faf0dda to a108dfe2d227 (1 revision) (flutter/flutter#185584)
2026-04-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 6b8c39765f17 to 605a8faf0dda (1 revision) (flutter/flutter#185578)
2026-04-25 engine-flutter-autoroll@skia.org Roll Skia from 185f6b57d64f to 622fff4c24d2 (1 revision) (flutter/flutter#185573)
2026-04-25 evanwall@buffalo.edu Implement square-like round superellipses with circular corners in the SDF uber shader (flutter/flutter#185370)
2026-04-25 victorsanniay@gmail.com Add @awaitNotRequired annotation to flutter sdk (flutter/flutter#181513)
2026-04-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 01228cb7af42 to 6b8c39765f17 (2 revisions) (flutter/flutter#185569)
2026-04-25 flar@google.com Adapt the DisplayList benchmarks into a primitive rendering benchmark suite (flutter/flutter#185270)
2026-04-25 okorohelijah@google.com Enable SPM for GoogleMobileAds (flutter/flutter#185548)
2026-04-25 engine-flutter-autoroll@skia.org Roll Skia from 3f467a581942 to 185f6b57d64f (1 revision) (flutter/flutter#185564)
2026-04-25 victorsanniay@gmail.com Fix Table crash when a cell child paints below the row bottom (flutter/flutter#185323)
2026-04-24 ahmedsameha1@gmail.com Make sure that an Image doesn't crash in 0x0 environment (flutter/flutter#181154)
2026-04-24 engine-flutter-autoroll@skia.org Roll Skia from 300d432048b0 to 3f467a581942 (3 revisions) (flutter/flutter#185558)
2026-04-24 engine-flutter-autoroll@skia.org Roll Dart SDK from c26627715892 to 01228cb7af42 (4 revisions) (flutter/flutter#185559)
2026-04-24 jacksongardner@google.com Reland "[web] Fix LateInitializationError in CkSurface and SkwasmSurface (#185116)" (flutter/flutter#185553)
2026-04-24 41930132+hellohuanlin@users.noreply.github.com [github]fix git ls-file glob pattern in labeler.yml instruction (flutter/flutter#185495)
2026-04-24 41930132+hellohuanlin@users.noreply.github.com [ios]update ios-reviewers tags to include more files (flutter/flutter#185490)
2026-04-24 tomac@google.com Add initial support for Cross-Origin Storage (flutter/flutter#184149)
2026-04-24 30870216+gaaclarke@users.noreply.github.com tool: Skip cached engine artifacts with local engine (flutter/flutter#185546)
...
@tomayac

tomayac commented Jun 15, 2026

Copy link
Copy Markdown
Contributor Author

FYI @kevmoo @harryterkelsen — a follow-up PR has been opened to migrate from the now-deprecated plural requestFileHandles() to the new singular requestFileHandle() API: #188010

The rename was adopted in the COS spec after a survey of all known real-world implementations found that every call site passed a single-element array and immediately destructured it to one handle. See WICG/cross-origin-storage#61 for details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD engine flutter/engine related. See also e: labels. platform-web Web applications specifically tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants