Skip to content

Read storage on window.onstorage#7137

Merged
gaearon merged 1 commit into
mainfrom
storage-event
Dec 17, 2024
Merged

Read storage on window.onstorage#7137
gaearon merged 1 commit into
mainfrom
storage-event

Conversation

@gaearon
Copy link
Copy Markdown
Contributor

@gaearon gaearon commented Dec 17, 2024

This fixes an issue @estrattonbailey discovered. BroadcastChannel is arriving sooner than localStorage flushes the write to disk so we'd often read the storage data prematurely. This results in tabs failing to sync. This is most noticeable if you open two Settings screen in different windows and try to toggle some settings.

The fix I'm suggesting here is to rely on the window storage which fires when another document (i.e. another tab/window) has changed the storage. In either case we would bail if the contents of the storage is the same as before so it doesn't hurt to add an extra check like this.

Test Plan

Before

before_chrome.mov
before_ff.mov
before_safari.mov

After

after_chrome.mov
after_ff.mov
after_safari.mov

@arcalinea arcalinea temporarily deployed to storage-event - social-app PR #7137 December 17, 2024 02:54 — with Render Destroyed
@github-actions
Copy link
Copy Markdown
Contributor

Old size New size Diff
6.78 MB 6.78 MB 83 B (0.00%)

Copy link
Copy Markdown
Member

@estrattonbailey estrattonbailey left a comment

Choose a reason for hiding this comment

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

NICE

}
if (next) {
_state = next
_emitter.emit('update')
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we need this emit? Looks like we might be able to remove the update event now, since we always emit the more modern event with the key that changed.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I think we do. If the BroadcastChannel thing arrives too early, it will get ignored. And then by the time we get the storage event, we don't know what changed exactly, so we have to deopt. We could try to be smarter about this but I'd prefer to keep it simple and then revisit the assumptions.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

In other words we don't know the key if we use the storage event. So this part needs rethinking

@gaearon gaearon merged commit 20d4266 into main Dec 17, 2024
@gaearon gaearon deleted the storage-event branch December 17, 2024 03:13
drash-course added a commit to drash-course/social-app that referenced this pull request Dec 18, 2024
* main: (58 commits)
  Fix tests
  Layout tweaks (bluesky-social#7150)
  Trending (Beta) (bluesky-social#7144)
  Fix emoji picker position (bluesky-social#7146)
  Tweak Follow dialog Search placeholder (bluesky-social#7147)
  New progress guide - 10 follows (bluesky-social#7128)
  Pipe statsig events to logger (bluesky-social#7141)
  Fix notifications borders (bluesky-social#7140)
  Refetch empty feed on focus (bluesky-social#7139)
  Read storage on window.onstorage (bluesky-social#7137)
  [ELI5] Tweak wording on the signup screen (bluesky-social#7136)
  alf error screen (bluesky-social#7135)
  add safe area view to profile error screen (bluesky-social#7134)
  Adjust gates (bluesky-social#7132)
  disable automaticallAdjustsScrollIndicatorInsets (bluesky-social#7131)
  Bump more native deps (bluesky-social#7129)
  Update more Expo packages (bluesky-social#7127)
  feat: widen recent search profile link for mobile devices (bluesky-social#7119)
  Fix video uploads on native (bluesky-social#7126)
  Fix post time localization on Android (bluesky-social#6742)
  ...

# Conflicts:
#	src/view/com/profile/ProfileSubpageHeader.tsx
#	src/view/screens/ProfileList.tsx
Signez pushed a commit to Signez/bsky-social-app that referenced this pull request Dec 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants