Skip to content

Idle CEF sends ListAccounts to accounts.google.com for every disk profile, and embedders cannot turn it off #4276

Description

@josefguenther

Describe the bug

With no browser created and no page loaded, CEF sends a POST to https://accounts.google.com/ListAccounts?...&source=ChromiumBrowser about half a second after CefInitialize. It comes from the initial Default profile under root_cache_path. It is sent again the first time each request context with a disk cache_path is used, and that one carries the profile's google.com cookies if there are any.

It comes from IdentityManager::OnNetworkInitialized (components/signin/public/identity_manager/identity_manager.cc), which lists the Google accounts in the cookie jar for every regular profile once its network is up. CEF already disables browser sign-in, and Google does not allow sign-in from CEF-based browsers, so the answer is never used. For an embedder it's an unrequested request to Google, carrying the user's Google session cookies, sent whenever a profile loads.

We couldn't find a way to stop it:

  • --allow-browser-signin=false has no effect.
  • The sign-in preferences have no effect. A CEF profile already reads signin.allowed = false. Setting signin.allowed and signin.allowed_on_next_startup to false through CefRequestContext::SetPreference, or seeding them in the profile's Preferences file before the context opens, changes nothing on that launch or the next.
  • Disabling features has no effect. We tried AvoidAutoTriggerListAccountsOnStale (enabled), plus EnableBoundSessionCredentials, FetchAccountInfoOnRestart, DiceHeaderVersion2, DiceLinkedAccounts, EnablePreferencesAccountStorage, EnableChromeRefreshTokenBinding, EnableOAuthMultiloginCookiesBinding and EnableAccountPreviewData (all disabled), then disabled in a single --disable-features every one of the 242 identifiers in the framework's strings that mention sign-in, accounts, GAIA, DICE, identity, OAuth, reconciliation or sync.
  • The request never reaches CefRequestContextHandler or CefResourceRequestHandler, so it can't be cancelled there.
  • --gaia-url pointed at a dead address only makes it retry, about 8 times over roughly 15 minutes, and it also redirects every other GAIA URL.

To Reproduce

  1. Initialize CEF with windowless rendering, root_cache_path set, and cache_path empty. Create no browser.
  2. Launch with --log-net-log=/tmp/net.json --net-log-capture-mode=IncludeSensitive.
  3. Wait a few seconds and quit.
  4. In the net log, the only request is POST accounts.google.com/ListAccounts. It carries no Cookie header, because the Default profile has none.
  5. Create a CefRequestContext with cache_path set to a direct child of root_cache_path, open a browser on it, and repeat. A second ListAccounts appears when that profile loads. If the profile has google.com cookies, they're sent with it.

Expected behavior

No request to accounts.google.com unless a page navigates there. At a minimum, give embedders a setting or preference that turns off Google account reconciliation for a profile.

Versions

  • OS: macOS 26.6.2 (Apple silicon, M2)
  • CEF Version: 152.0.6+g708dc14+chromium-152.0.7977.83
  • Compiler: Xcode 27.0, Apple clang 21.0.0

Additional context

Does the problem reproduce with the cefclient or cefsimple sample application at the same version?
Yes. I built cefsimple from the 152.0.6 binary distribution. The only change was setting root_cache_path to a fresh empty directory, so the test didn't touch the shared default location. With the net-log switches above, it sends the same ListAccounts POST about 0.25 to 0.5 s after startup, before its first page request. So it isn't specific to windowless rendering or to our app. Setting cache_path to a child of the root didn't stop the request, and a Default directory was still created under the root.

Does the problem reproduce with Google Chrome at the same version?
Chrome sends this request by design, because it keeps browser sign-in in step with Google web sign-in. The issue is only that CEF, where sign-in is disabled, still does it.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugBug report

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions