[Extensions] Enforce user site restrictions in chrome.cookies API [chromium/src : main]

0 views
Skip to first unread message

Eva Su (Gerrit)

unread,
Aug 14, 2026, 1:46:49 PM (2 days ago) Aug 14
to Solomon Kinard, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Solomon Kinard

Eva Su added 1 comment

Patchset-level comments
File-level comment, Patchset 5 (Latest):
Eva Su . resolved

Re-assigning as Tim is OOO now.

Open in Gerrit

Related details

Attention is currently required from:
  • Solomon Kinard
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: Ic46119d4da0bb32b84c3c3e90eec696c110a2e16
Gerrit-Change-Number: 8259390
Gerrit-PatchSet: 5
Gerrit-Owner: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Solomon Kinard <solomo...@chromium.org>
Gerrit-Attention: Solomon Kinard <solomo...@chromium.org>
Gerrit-Comment-Date: Fri, 14 Aug 2026 17:46:37 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Solomon Kinard (Gerrit)

unread,
Aug 14, 2026, 3:45:30 PM (2 days ago) Aug 14
to Eva Su, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Eva Su

Solomon Kinard added 1 comment

Patchset-level comments
Solomon Kinard . resolved

Thanks. Care to cc me on the bug for visibility?

Open in Gerrit

Related details

Attention is currently required from:
  • Eva Su
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: Ic46119d4da0bb32b84c3c3e90eec696c110a2e16
Gerrit-Change-Number: 8259390
Gerrit-PatchSet: 5
Gerrit-Owner: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Solomon Kinard <solomo...@chromium.org>
Gerrit-Attention: Eva Su <ev...@chromium.org>
Gerrit-Comment-Date: Fri, 14 Aug 2026 19:45:18 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Eva Su (Gerrit)

unread,
Aug 14, 2026, 3:58:28 PM (2 days ago) Aug 14
to Solomon Kinard, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Solomon Kinard

Eva Su added 1 comment

Patchset-level comments
Solomon Kinard . resolved

Thanks. Care to cc me on the bug for visibility?

Eva Su

Done!

Open in Gerrit

Related details

Attention is currently required from:
  • Solomon Kinard
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: Ic46119d4da0bb32b84c3c3e90eec696c110a2e16
Gerrit-Change-Number: 8259390
Gerrit-PatchSet: 5
Gerrit-Owner: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Solomon Kinard <solomo...@chromium.org>
Gerrit-Attention: Solomon Kinard <solomo...@chromium.org>
Gerrit-Comment-Date: Fri, 14 Aug 2026 19:58:14 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Solomon Kinard <solomo...@chromium.org>
satisfied_requirement
unsatisfied_requirement
open
diffy

Solomon Kinard (Gerrit)

unread,
Aug 14, 2026, 6:20:38 PM (2 days ago) Aug 14
to Eva Su, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Eva Su

Solomon Kinard voted and added 2 comments

Votes added by Solomon Kinard

Code-Review+1

2 comments

File chrome/browser/extensions/api/cookies/cookies_unittest.cc
Line 312, Patchset 5 (Latest):TEST_F(ExtensionCookiesTest, AppendMatchingCookiesWithUserBlockedSite) {
Solomon Kinard . unresolved

Add a comment of your choosing? Just an example:

```suggestion
// Ensures cookies from domains explicitly blocked by the user are excluded from
// matches.
TEST_F(ExtensionCookiesTest, AppendMatchingCookiesWithUserBlockedSite) {
```

Line 352, Patchset 5 (Latest):
Solomon Kinard . unresolved

Unsure if all regression tests in the bug are necessary? Should something like [this](crrev.com/c/8261206) be added to this CL?

Open in Gerrit

Related details

Attention is currently required from:
  • Eva Su
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedNo-Unresolved-Comments
  • requirement 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: Ic46119d4da0bb32b84c3c3e90eec696c110a2e16
Gerrit-Change-Number: 8259390
Gerrit-PatchSet: 5
Gerrit-Owner: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Eva Su <ev...@chromium.org>
Gerrit-Reviewer: Solomon Kinard <solomo...@chromium.org>
Gerrit-Attention: Eva Su <ev...@chromium.org>
Gerrit-Comment-Date: Fri, 14 Aug 2026 22:20:15 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Eva Su (Gerrit)

unread,
Aug 14, 2026, 7:33:03 PM (2 days ago) Aug 14
to Solomon Kinard, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org

Eva Su voted and added 2 comments

Votes added by Eva Su

Commit-Queue+2

2 comments

File chrome/browser/extensions/api/cookies/cookies_unittest.cc
Line 312, Patchset 5:TEST_F(ExtensionCookiesTest, AppendMatchingCookiesWithUserBlockedSite) {
Solomon Kinard . resolved

Add a comment of your choosing? Just an example:

```suggestion
// Ensures cookies from domains explicitly blocked by the user are excluded from
// matches.
TEST_F(ExtensionCookiesTest, AppendMatchingCookiesWithUserBlockedSite) {
```

Eva Su

Done

Line 352, Patchset 5:
Solomon Kinard . resolved

Unsure if all regression tests in the bug are necessary? Should something like [this](crrev.com/c/8261206) be added to this CL?

Eva Su

Added, thanks!

Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement satisfiedCode-Owners
    • requirement satisfiedCode-Review
    • requirement 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: Ic46119d4da0bb32b84c3c3e90eec696c110a2e16
    Gerrit-Change-Number: 8259390
    Gerrit-PatchSet: 6
    Gerrit-Comment-Date: Fri, 14 Aug 2026 23:32:46 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Solomon Kinard <solomo...@chromium.org>
    satisfied_requirement
    open
    diffy

    Chromium LUCI CQ (Gerrit)

    unread,
    Aug 14, 2026, 9:17:35 PM (2 days ago) Aug 14
    to Eva Su, Solomon Kinard, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org

    Chromium LUCI CQ submitted the change with unreviewed changes

    Unreviewed changes

    5 is the latest approved patch-set.
    The change was submitted with unreviewed changes in the following files:

    ```
    The name of the file: chrome/browser/extensions/api/cookies/cookies_unittest.cc
    Insertions: 61, Deletions: 18.

    @@ -309,6 +309,37 @@
    EXPECT_CHECK_DEATH(cookies_helpers::CreateCookie(*opaque_cookie, "0"));
    }

    +namespace {
    +
    +std::vector<Cookie> GetMatchingCookiesForExtension(
    + const Extension* extension,
    + const std::string& domain = "example.com") {
    + auto cookie = net::CanonicalCookie::CreateUnsafeCookieForTesting(
    + "ABC", "DEF", domain, "/", base::Time(), base::Time(), base::Time(),
    + base::Time(), false, false, net::CookieSameSite::NO_RESTRICTION,
    + net::COOKIE_PRIORITY_DEFAULT, net::CookieSourceType::kOther);
    + if (!cookie) {
    + return {};
    + }
    +
    + base::DictValue dict;
    + dict.Set("storeId", "0");
    + auto details = GetAll::Params::Details::FromValue(dict);
    + if (!details) {
    + return {};
    + }
    +
    + std::vector<Cookie> match_vector;
    + cookies_helpers::AppendMatchingCookiesFromCookieListToVector(
    + {*cookie}, &details.value(), extension, &match_vector,
    + net::CookiePartitionKeyCollection());
    + return match_vector;
    +}
    +
    +} // namespace
    +
    +// Ensures cookies from domains explicitly blocked by the user are excluded from
    +// matches.
    TEST_F(ExtensionCookiesTest, AppendMatchingCookiesWithUserBlockedSite) {
    base::test::ScopedFeatureList feature_list(
    extensions_features::kExtensionsMenuAccessControl);
    @@ -329,25 +360,37 @@
    std::move(user_blocked_hosts),
    /*user_allowed_hosts=*/{});

    - auto cookie = net::CanonicalCookie::CreateUnsafeCookieForTesting(
    - "ABC", "DEF", "example.com", "/", base::Time(), base::Time(),
    - base::Time(), base::Time(), false, false,
    - net::CookieSameSite::NO_RESTRICTION, net::COOKIE_PRIORITY_DEFAULT,
    - net::CookieSourceType::kOther);
    - ASSERT_TRUE(cookie);
    -
    - base::DictValue dict;
    - dict.Set("storeId", "0");
    - auto details = GetAll::Params::Details::FromValue(dict);
    - ASSERT_TRUE(details);
    -
    - std::vector<Cookie> match_vector;
    - cookies_helpers::AppendMatchingCookiesFromCookieListToVector(
    - {*cookie}, &details.value(), extension.get(), &match_vector,
    - net::CookiePartitionKeyCollection());
    -
    // Since example.com is user-blocked, the cookie must not be matched.
    - EXPECT_TRUE(match_vector.empty());
    + EXPECT_TRUE(GetMatchingCookiesForExtension(extension.get()).empty());
    +}
    +
    +// Ensures cookies from domains with withheld host permissions are excluded from
    +// matches.
    +TEST_F(ExtensionCookiesTest, AppendMatchingCookiesWithWithheldPermissions) {
    + base::test::ScopedFeatureList feature_list(
    + extensions_features::kExtensionsMenuAccessControl);
    +
    + base::ListValue host_permissions;
    + host_permissions.Append("*://*.example.com/*");
    +
    + scoped_refptr<const Extension> extension =
    + ExtensionBuilder("Test Extension")
    + .SetManifestKey("host_permissions", std::move(host_permissions))
    + .Build();
    +
    + // Withhold the host permission from the extension.
    + URLPatternSet withheld_hosts;
    + withheld_hosts.AddPattern(
    + URLPattern(URLPattern::SCHEME_ALL, "*://*.example.com/*"));
    +
    + extension->permissions_data()->SetPermissions(
    + std::make_unique<PermissionSet>(),
    + std::make_unique<PermissionSet>(APIPermissionSet(),
    + ManifestPermissionSet(),
    + withheld_hosts.Clone(), URLPatternSet()));
    +
    + // Since the permission is withheld, the cookie must not be matched.
    + EXPECT_TRUE(GetMatchingCookiesForExtension(extension.get()).empty());
    }

    } // namespace extensions
    ```

    Change information

    Commit message:
    [Extensions] Enforce user site restrictions in chrome.cookies API

    Previously, the chrome.cookies API verified host access permissions
    using PermissionsData::HasHostPermission(url) which checks explicit
    manifest host permissions and enterprise policy host blocks, but does
    not check user host restrictions or withheld permissions.

    So when a user explicitly turns off extensions for a site or withholds
    host permissions, an extension with host permissions could continue
    using chrome.cookies methods to read, create, and remove cookies for
    that domain.

    This CL replaces the HasHostPermission check with GetPageAccess which is
    a superset of what HasHostPermission checks that also validates user
    site restrictions, withheld permissions, enterprise policy, and
    restricted URLs.
    Fixed: 543938457
    Change-Id: Ic46119d4da0bb32b84c3c3e90eec696c110a2e16
    Reviewed-by: Solomon Kinard <solomo...@chromium.org>
    Commit-Queue: Eva Su <ev...@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#1680073}
    Files:
    • M chrome/browser/extensions/api/cookies/cookies_api.cc
    • M chrome/browser/extensions/api/cookies/cookies_helpers.cc
    • M chrome/browser/extensions/api/cookies/cookies_unittest.cc
    Change size: M
    Delta: 3 files changed, 106 insertions(+), 6 deletions(-)
    Branch: refs/heads/main
    Submit Requirements:
    • requirement satisfiedCode-Review: +1 by Solomon Kinard
    Open in Gerrit
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: merged
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Ic46119d4da0bb32b84c3c3e90eec696c110a2e16
    Gerrit-Change-Number: 8259390
    Gerrit-PatchSet: 7
    Gerrit-Owner: Eva Su <ev...@chromium.org>
    Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
    Gerrit-Reviewer: Eva Su <ev...@chromium.org>
    Gerrit-Reviewer: Solomon Kinard <solomo...@chromium.org>
    open
    diffy
    satisfied_requirement
    Reply all
    Reply to author
    Forward
    0 new messages