Skip to content

Manage HTTP connections based on tab visibility #9202

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

Draft
wants to merge 5 commits into
base: realtime-backoff
Choose a base branch
from

Conversation

Samruddhi90
Copy link

This PR is a follow-up to #9199.

It introduces the logic for managing connections based on tab visibility. Specifically, it opens or closes a connection when a tab moves to the foreground or background. To achieve this, the existing VisibilityMonitor from the packages/database is being consolidated into a shared utility function in firebase/util. This change allows both the database and remote-config packages to use the same visibility monitoring API.

Future PRs will include the implementation of the AutoFetch logic and corresponding unit tests.

Copy link

changeset-bot bot commented Aug 12, 2025

⚠️ No Changeset found

Latest commit: a98f140

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Aug 12, 2025

Size Report 1

Affected Products

  • @firebase/remote-config

    TypeBase (61ba815)Merge (c954e36)Diff
    browser29.6 kB32.3 kB+2.71 kB (+9.2%)
    main30.8 kB33.6 kB+2.72 kB (+8.8%)
    module29.6 kB32.3 kB+2.71 kB (+9.2%)
  • bundle

    TypeBase (61ba815)Merge (c954e36)Diff
    remote-config (getAndFetch)52.7 kB54.9 kB+2.26 kB (+4.3%)
  • firebase

    TypeBase (61ba815)Merge (c954e36)Diff
    firebase-compat.js804 kB806 kB+1.85 kB (+0.2%)
    firebase-remote-config-compat.js32.6 kB34.6 kB+2.03 kB (+6.2%)
    firebase-remote-config.js37.1 kB39.2 kB+2.13 kB (+5.8%)

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/8VP0LtjY8O.html

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Aug 12, 2025

Size Analysis Report 1

Affected Products

  • @firebase/remote-config

    • activate

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size16.9 kB19.0 kB+2.03 kB (+12.0%)
      size-with-ext-deps43.2 kB45.5 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache

      11 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • ensureInitialized

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size16.6 kB18.7 kB+2.03 kB (+12.2%)
      size-with-ext-deps42.9 kB45.2 kB+2.27 kB (+5.3%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache

      11 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • fetchAndActivate

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.7 kB19.7 kB+2.03 kB (+11.5%)
      size-with-ext-deps44.0 kB46.2 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RemoteConfigAbortSignal
      RestClient
      RetryingClient
      Storage
      StorageCache

      12 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RemoteConfigAbortSignal
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • fetchConfig

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.3 kB19.4 kB+2.03 kB (+11.7%)
      size-with-ext-deps43.6 kB45.9 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RemoteConfigAbortSignal
      RestClient
      RetryingClient
      Storage
      StorageCache

      12 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RemoteConfigAbortSignal
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • getAll

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.8 kB19.8 kB+2.03 kB (+11.4%)
      size-with-ext-deps44.1 kB46.3 kB+2.27 kB (+5.1%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value

      12 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • getBoolean

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.7 kB19.7 kB+2.03 kB (+11.5%)
      size-with-ext-deps43.9 kB46.2 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value

      12 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • getNumber

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.7 kB19.7 kB+2.03 kB (+11.5%)
      size-with-ext-deps43.9 kB46.2 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value

      12 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • getRemoteConfig

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.3 kB19.4 kB+2.03 kB (+11.7%)
      size-with-ext-deps50.5 kB52.7 kB+2.26 kB (+4.5%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache

      11 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      deepEqual
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      deepEqual
      getModularInstance
      isIndexedDBAvailable

      + assert

    • getString

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.7 kB19.7 kB+2.03 kB (+11.5%)
      size-with-ext-deps43.9 kB46.2 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value

      12 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • getValue

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.6 kB19.6 kB+2.03 kB (+11.5%)
      size-with-ext-deps43.9 kB46.1 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value

      12 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      Value
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • isSupported

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size16.8 kB18.8 kB+2.03 kB (+12.1%)
      size-with-ext-deps43.0 kB45.2 kB+2.27 kB (+5.3%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache

      11 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable
      validateIndexedDBOpenable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable
      validateIndexedDBOpenable

      + assert

    • onConfigUpdate

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size16.8 kB18.8 kB+2.03 kB (+12.1%)
      size-with-ext-deps43.0 kB45.3 kB+2.27 kB (+5.3%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache

      11 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • setCustomSignals

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size17.1 kB19.2 kB+2.03 kB (+11.8%)
      size-with-ext-deps43.4 kB45.7 kB+2.27 kB (+5.2%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache

      11 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

    • setLogLevel

      Size

      TypeBase (61ba815)Merge (c954e36)Diff
      size16.8 kB18.8 kB+2.03 kB (+12.1%)
      size-with-ext-deps43.0 kB45.3 kB+2.27 kB (+5.3%)

      Dependency

      TypeBase (61ba815)Merge (c954e36)Diff
      classes

      CachingClient
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache

      11 dependencies

      CachingClient
      EventEmitter
      InMemoryStorage
      IndexedDbStorage
      RealtimeHandler
      RemoteConfig
      RestClient
      RetryingClient
      Storage
      StorageCache
      VisibilityMonitor

      + EventEmitter
      + VisibilityMonitor

      External Dependency

      ModuleBase (61ba815)Merge (c954e36)Diff
      @firebase/util

      ErrorFactory
      FirebaseError
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      ErrorFactory
      FirebaseError
      assert
      calculateBackoffMillis
      getModularInstance
      isIndexedDBAvailable

      + assert

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/ZOJapGXKEf.html

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