[iOS] Skip favicon fetch in Incognito to prevent Privacy Report leak [chromium/src : main]

0 views
Skip to first unread message

Daiming Pan (Gerrit)

unread,
5:25 AM (3 hours ago) 5:25 AM
to Sylvain Defresne, Mikel Astiz, chromium...@chromium.org, ios-r...@chromium.org
Attention needed from Sylvain Defresne

Message from Daiming Pan

This CL fixes a privacy leak on iOS where Incognito browsing activity is visible in the iOS App Privacy Report (Settings > Privacy & Security > App Privacy Report).

Open in Gerrit

Related details

Attention is currently required from:
  • Sylvain Defresne
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: Idad70a00e5845ee67e9ab131e71d24a0c49794d8
Gerrit-Change-Number: 7754542
Gerrit-PatchSet: 2
Gerrit-Owner: Daiming Pan <daimi...@microsoft.com>
Gerrit-Reviewer: Sylvain Defresne <sdef...@chromium.org>
Gerrit-CC: Mikel Astiz <mas...@chromium.org>
Gerrit-Attention: Sylvain Defresne <sdef...@chromium.org>
Gerrit-Comment-Date: Mon, 13 Apr 2026 09:24:44 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Sylvain Defresne (Gerrit)

unread,
6:35 AM (2 hours ago) 6:35 AM
to Daiming Pan, Chromium LUCI CQ, Mikel Astiz, chromium...@chromium.org, ios-r...@chromium.org
Attention needed from Daiming Pan

Sylvain Defresne added 2 comments

Patchset-level comments
File-level comment, Patchset 3 (Latest):
Sylvain Defresne . resolved

I can accept this patch iff there is a plan to restore fetching the favicon for incognito mode, either by fixing `SharedURLLoaderFactory` for not recording the URL for incognito mode, or by not using `SharedURLLoaderFactory`.

But without plan, I don't think we should land the change as it breaks the application.

File components/favicon/ios/web_favicon_driver.mm
Line 123, Patchset 3 (Latest): // See https://crbug.com/481074876.
Sylvain Defresne . unresolved

This breaks the favicon for incognito tabs.

I think instead `SharedURLLoaderFactory` should not log the request if the url is requested for incognito mode.

Open in Gerrit

Related details

Attention is currently required from:
  • Daiming Pan
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idad70a00e5845ee67e9ab131e71d24a0c49794d8
    Gerrit-Change-Number: 7754542
    Gerrit-PatchSet: 3
    Gerrit-Owner: Daiming Pan <daimi...@microsoft.com>
    Gerrit-Reviewer: Daiming Pan <daimi...@microsoft.com>
    Gerrit-Reviewer: Sylvain Defresne <sdef...@chromium.org>
    Gerrit-CC: Mikel Astiz <mas...@chromium.org>
    Gerrit-Attention: Daiming Pan <daimi...@microsoft.com>
    Gerrit-Comment-Date: Mon, 13 Apr 2026 10:35:36 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Daiming Pan (Gerrit)

    unread,
    7:00 AM (1 hour ago) 7:00 AM
    to Chromium LUCI CQ, Sylvain Defresne, Mikel Astiz, chromium...@chromium.org, ios-r...@chromium.org
    Attention needed from Sylvain Defresne

    Daiming Pan added 1 comment

    File components/favicon/ios/web_favicon_driver.mm
    Sylvain Defresne . unresolved

    This breaks the favicon for incognito tabs.

    I think instead `SharedURLLoaderFactory` should not log the request if the url is requested for incognito mode.

    Daiming Pan

    This breaks the favicon for incognito tabs.

    I think instead `SharedURLLoaderFactory` should not log the request if the url is requested for incognito mode.

    The issue is not that `SharedURLLoaderFactory` logs the request — it's that iOS App Privacy Report records all DNS requests made from the app process, regardless of the networking API used. There's no API to exclude specific requests from this logging. The only way to avoid it is to not make the request at all.
    Re: "breaks favicon for incognito tabs" — Chromium already treats incognito favicons as non-persistent (won't save to DB, won't update mappings). The only thing we lose by not fetching is the in-session favicon display. I think this is an acceptable trade-off for a privacy leak that exposes visited domains in a user-facing system report.
    However, I agree a follow-up to restore in-session favicons would be ideal. A possible approach: use WKWebView to fetch the favicon through the `nonPersistentDataStore` (which iOS doesn't log in Privacy Report), then pass the image data back to `WebFaviconDriver`. This would restore UX without the privacy leak. I'll file a follow-up bug for this.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Sylvain Defresne
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idad70a00e5845ee67e9ab131e71d24a0c49794d8
    Gerrit-Change-Number: 7754542
    Gerrit-PatchSet: 3
    Gerrit-Owner: Daiming Pan <daimi...@microsoft.com>
    Gerrit-Reviewer: Daiming Pan <daimi...@microsoft.com>
    Gerrit-Reviewer: Sylvain Defresne <sdef...@chromium.org>
    Gerrit-CC: Mikel Astiz <mas...@chromium.org>
    Gerrit-Attention: Sylvain Defresne <sdef...@chromium.org>
    Gerrit-Comment-Date: Mon, 13 Apr 2026 11:00:46 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Sylvain Defresne <sdef...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Daiming Pan (Gerrit)

    unread,
    7:06 AM (1 hour ago) 7:06 AM
    to Chromium LUCI CQ, Sylvain Defresne, Mikel Astiz, chromium...@chromium.org, ios-r...@chromium.org
    Attention needed from Sylvain Defresne

    Daiming Pan added 1 comment

    File components/favicon/ios/web_favicon_driver.mm
    Sylvain Defresne . unresolved

    This breaks the favicon for incognito tabs.

    I think instead `SharedURLLoaderFactory` should not log the request if the url is requested for incognito mode.

    Daiming Pan

    This breaks the favicon for incognito tabs.

    I think instead `SharedURLLoaderFactory` should not log the request if the url is requested for incognito mode.
    The issue is not that `SharedURLLoaderFactory` logs the request — it's that iOS App Privacy Report records all DNS requests made from the app process, regardless of the networking API used. There's no API to exclude specific requests from this logging. The only way to avoid it is to not make the request at all.
    Re: "breaks favicon for incognito tabs" — Chromium already treats incognito favicons as non-persistent (won't save to DB, won't update mappings). The only thing we lose by not fetching is the in-session favicon display. I think this is an acceptable trade-off for a privacy leak that exposes visited domains in a user-facing system report.
    However, I agree a follow-up to restore in-session favicons would be ideal. A possible approach: use WKWebView to fetch the favicon through the `nonPersistentDataStore` (which iOS doesn't log in Privacy Report), then pass the image data back to `WebFaviconDriver`. This would restore UX without the privacy leak. I'll file a follow-up bug for this.

    Daiming Pan

    Thanks for the feedback. I agree that completely disabling favicon fetch in incognito is not ideal.
    To clarify the root cause: this isn't something SharedURLLoaderFactory can control — iOS App Privacy Report logs all DNS requests from the app process regardless of the networking API. There's no opt-out mechanism on the iOS side.
    One possible workaround I'm considering: instead of fetching favicons from the app process, we could potentially fetch them through the WKWebView JS context (e.g. injecting a fetch() call and passing the image data back via message handler). Since WebKit process requests go through nonPersistentDataStore in incognito, iOS wouldn't log them in the Privacy Report. This way we could preserve favicon display without the privacy leak.
    I haven't fully prototyped this yet, so I'd appreciate your thoughts on whether this direction makes sense before I invest more time. Would you be open to landing the current simple fix first and following up with the WKWebView-based approach?

    Gerrit-Comment-Date: Mon, 13 Apr 2026 11:05:46 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Sylvain Defresne <sdef...@chromium.org>
    Comment-In-Reply-To: Daiming Pan <daimi...@microsoft.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy
    Reply all
    Reply to author
    Forward
    0 new messages