Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

[google_sign_in_web] Fix race condition on init. #2455

Merged
merged 7 commits into from
Jan 10, 2020

Conversation

ditman
Copy link
Member

@ditman ditman commented Jan 9, 2020

Description

The Auth object that .init() returns may not be fully ready by the time we start calling methods on it; however it has a .then() method that gets called when it is really ready to go.

  • Add a completer to signal when Auth2 is ready.
  • Move auth2-dependent init to the then method.
    • onSuccess, complete the auth2 ready future.
    • onError, throw a PlatformException. This is normally triggered when the domain:port of the web app hasn't been whitelisted on the google sign in console, and things like that. Useful for debugging.

Related Issues

Checklist

Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • My PR includes unit or integration tests for all changed/updated/fixed behaviors (See Contributor Guide).
  • All existing and new tests are passing.
  • I updated/added relevant documentation (doc comments with ///).
  • The analyzer (flutter analyze) does not report any problems on my PR.
  • I read and followed the Flutter Style Guide.
  • The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
  • I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy.
  • I updated CHANGELOG.md to add a description of the change.
  • I signed the CLA.
  • I am willing to follow-up on review comments in a timely manner.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate a breaking change in CHANGELOG.md and increment major revision).
  • No, this is not a breaking change.

The Auth object that `.init()` returns may not be fully ready by the time
we start calling methods on it; however it has a `.then()` method that
gets called when it is *really* ready to go.

* Add a completer to signal when Auth2 is ready.
* Move auth2-dependent init to the `then` method.
 * onSuccess, complete the auth2 ready future.
 * onError, throw a PlatformException. This is normally triggered when
the domain:port of the web app hasn't been whitelisted on the google
sign in console, and things like that. Useful for debugging.
@ditman ditman self-assigned this Jan 9, 2020
Copy link

@CaseyHillers CaseyHillers left a comment

Choose a reason for hiding this comment

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

LGTM. Thanks for getting to this so quick!

Copy link
Contributor

@harryterkelsen harryterkelsen left a comment

Choose a reason for hiding this comment

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

LGTM

@ditman
Copy link
Member Author

ditman commented Jan 10, 2020

Will merge and publish on green. In addition to unit tests, I tested this manually with the example app, and the Cocoon project.

@ditman ditman merged commit dc284c4 into flutter:master Jan 10, 2020
@ditman ditman deleted the google-sign-in-silently branch January 10, 2020 01:12
@ditman
Copy link
Member Author

ditman commented Jan 10, 2020

Published and tagged as v0.8.3.

FlutterSu pushed a commit to FlutterSu/flutter-plugins that referenced this pull request Nov 20, 2020
* [google_sign_in_web] Wait for Auth2 to be really ready.

The Auth object that `.init()` returns may not be fully ready by the time
we start calling methods on it; however it has a `.then()` method that
gets called when it is *really* ready to go.

* Add a completer to signal when Auth2 is ready.
* Throw StateError synchronously if .initialized is checked before calling .init()
* Move auth2-dependent init to the `then` method.
  * onSuccess, complete the auth2 ready future.
  * onError, throw a PlatformException. This is normally triggered when
the domain:port of the web app hasn't been whitelisted on the google
sign in console, and things like that. Useful for debugging.
* Update README with latest setup instructions.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants