Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add cross-origin window and location wrappers #291

Merged
merged 5 commits into from
Sep 24, 2024

Conversation

srujzs
Copy link
Contributor

@srujzs srujzs commented Aug 24, 2024

Closes dart-lang/sdk#54443
Closes #247
Closes dart-lang/sdk#54938

Since cross-origin objects have limitations around access, wrappers are introduced to do the only safe operations. Extension methods are added to get instances of these wrappers.

I'll work on getting a test in the SDK doing the interop operations with JSAny? so that ability we're relying on here won't regress and we can get better coverage.

Closes dart-lang/sdk#54443
Closes dart-lang#247
Closes dart-lang/sdk#54938

Since cross-origin objects have limitations around
access, wrappers are introduced to do the only safe
operations. Extension methods are added to get instances
of these wrappers.
@srujzs srujzs requested a review from sigmundch August 24, 2024 00:45
Copy link
Member

@sigmundch sigmundch left a comment

Choose a reason for hiding this comment

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

LGTM!

@@ -36,4 +39,65 @@ void main() {
// Ensure accessing any arbitrary item in the list does not throw.
expect(() => dartList[0], returnsNormally);
});

test('cross-origin windows and locations can be accessed safely', () {
Copy link
Member

Choose a reason for hiding this comment

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

(optional) I wonder if it would be worth to also add test coverage of the unwrapped behavior? That is, something that verifies that cross-origin windows/locations fail if you tried to access them directly?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Agreed it'd be useful to verify.

In the process of adding this, however, I noticed package:test doesn't quite work as expected. Running a known same-origin policy violation e.g. accessing navigator on an opened window from a different origin only fails if you --pause-after-load and single-step through the test. Without that, opened windows' origins appears to be the same as the opening window's origin (localhost). I know there's some setup to load these tests in an iframe to run them, but I can't tell how it results in the above behavior. The current test passes regardless of if you single-step, so for now, I put a TODO.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think both the test runner and package:test have this issue. After a good amount of debugging, I can't tell how to enable same-origin policy. Filed dart-lang/test#2282 for now and single-stepped to verify that there are no cross-origin issues with the current test.

web/lib/src/helpers/cross_origin.dart Outdated Show resolved Hide resolved
web/lib/src/helpers/cross_origin.dart Outdated Show resolved Hide resolved
web/lib/src/helpers/cross_origin.dart Show resolved Hide resolved
web/lib/src/helpers/cross_origin.dart Outdated Show resolved Hide resolved
@kevmoo
Copy link
Member

kevmoo commented Sep 6, 2024

Also need to rebase on latest...although it looks like we're going for a 1.1 release soon.

@srujzs srujzs merged commit 8501740 into dart-lang:main Sep 24, 2024
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants