[Extensions] Add option to show per-extension site settings in dialog [chromium/src : main]

8 views
Skip to first unread message

Kelvin Jiang (Gerrit)

unread,
Sep 19, 2022, 10:01:11 PM9/19/22
to Demetrios Papadopoulos, Devlin Cronin, chromium-a...@chromium.org, extension...@chromium.org

Attention is currently required from: Demetrios Papadopoulos, Devlin Cronin.

Kelvin Jiang would like Demetrios Papadopoulos and Devlin Cronin to review this change.

View Change

[Extensions] Add option to show per-extension site settings in dialog

This CL adds a list of extensions that have specified at least one
site matching the site in the edit permissions dialog. This list is
shown when the "customize per extension" option is selected, and if
the user clicks save on the dialog, then the site is removed from any
user specified site sets.

If the site in the dialog is a host, then assume we're editing for http
and https schemes.

If the site contains a wildcard (*.<eTLD+1>, then the radio
button group is not shown as such sites can only be specified by
extensions (and not in any user specified site sets).

Note: there is a discrepancy between the extension count vs #
extensions in the dialog for a : the count shows the #
extensions that can run on all subdomains for an eTLD+1 vs the list of
extensions in the dialog shows extensions that can run on at least one
subdomain for an eTLD+1. This may need to be revisited later

Screenshots: https://imgur.com/a/khBmXat

Bug: 1253673
Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
---
M chrome/app/extensions_strings.grdp
A chrome/app/extensions_strings_grdp/IDS_EXTENSIONS_EDIT_SITE_PERMISSIONS_CUSTOMIZE_PER_EXTENSION.png.sha1
A chrome/app/extensions_strings_grdp/IDS_EXTENSIONS_SITE_PERMISSIONS_ALWAYS_ON_ALL_SITES.png.sha1
A chrome/app/extensions_strings_grdp/IDS_EXTENSIONS_SITE_PERMISSIONS_ALWAYS_ON_THIS_SITE.png.sha1
A chrome/app/extensions_strings_grdp/IDS_EXTENSIONS_SITE_PERMISSIONS_ON_CLICK.png.sha1
M chrome/browser/extensions/api/developer_private/developer_private_api.cc
M chrome/browser/resources/extensions/manager.html
M chrome/browser/resources/extensions/service.ts
M chrome/browser/resources/extensions/site_permissions.html
M chrome/browser/resources/extensions/site_permissions.ts
M chrome/browser/resources/extensions/site_permissions_by_site.html
M chrome/browser/resources/extensions/site_permissions_by_site.ts
M chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.html
M chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts
M chrome/browser/resources/extensions/site_permissions_list.html
M chrome/browser/resources/extensions/site_permissions_list.ts
M chrome/browser/resources/extensions/site_permissions_site_group.html
M chrome/browser/resources/extensions/site_permissions_site_group.ts
M chrome/browser/resources/extensions/site_settings_mixin.ts
M chrome/browser/ui/webui/extensions/extensions_ui.cc
M chrome/test/data/webui/extensions/site_permissions_by_site_test.ts
M chrome/test/data/webui/extensions/site_permissions_edit_permissions_dialog_test.ts
M chrome/test/data/webui/extensions/site_permissions_site_group_test.ts
M chrome/test/data/webui/extensions/test_service.ts
M tools/typescript/definitions/developer_private.d.ts
25 files changed, 473 insertions(+), 55 deletions(-)


To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
Gerrit-Change-Number: 3897553
Gerrit-PatchSet: 6
Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-MessageType: newchange

Kelvin Jiang (Gerrit)

unread,
Sep 19, 2022, 10:01:22 PM9/19/22
to chromium-a...@chromium.org, extension...@chromium.org, Demetrios Papadopoulos, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

Attention is currently required from: Demetrios Papadopoulos, Devlin Cronin.

Patch set 6:Commit-Queue +1

View Change

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 6
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Tue, 20 Sep 2022 02:01:08 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    Gerrit-MessageType: comment

    Demetrios Papadopoulos (Gerrit)

    unread,
    Sep 20, 2022, 6:28:14 AM9/20/22
    to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Devlin Cronin, Kelvin Jiang.

    View Change

    11 comments:

      • Note: there is a discrepancy between the extension count vs #
        extensions in the dialog for a : the count shows the #

      • This sentence is a bit hard to understand. Can you replace "#" with plain English instead? Also what does "a :" mean here?

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.html:

      • Patch Set #6, Line 50: <div slot="header">

        Is the cr-radio-group part of the header so that it is always visible? If so, maybe add a comment to make it more obvious?

      • Patch Set #6, Line 69: <template is="dom-if" if="[[showExtensionSiteAccessData_(siteSet_)]]">

        How does the dialog look like when this is false? Should this dom-if be moved outside slot=body?

      • Patch Set #6, Line 79: ="true"

        `disabled` is a boolean attribute and therefore does not take a value. Its presence or absense determines whether the element is disabled. Here it incorrectly gets a string value of "true" instead. Let's remove

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts:

      • Patch Set #6, Line 90: HostAccess_

        Rename to hostAccessEnum_

      • Patch Set #6, Line 97:

        static get observers() {
        return ['onExtensionsUpdated_(extensions)', 'onSiteSetUpdated_(siteSet_)'];
        }

        observers() should be used for multi-property obesrvers. Here since two single-property observers are registered, these better belongto each Polymer property's definition instead.

      • Patch Set #6, Line 131: url

        s/url/URL

      • Patch Set #6, Line 133: ://

        Is this a full proof way to check? (Leaving this up to you and Devlin to check, just pointing out that it might be insufficient)

      • Patch Set #6, Line 148: (

        Nit: Unnecessary parentheses.

      • Patch Set #6, Line 182: chrome.developerPrivate.SiteSet.EXTENSION_SPECIFIED

        Since you've added a shorter alias for this, let's use it here (and elsewhere).

    • File chrome/browser/resources/extensions/site_permissions_list.ts:

      • Patch Set #6, Line 70:

        Here and elsewhere where a new `extensions` Polymer property is added: Need to declare `extensions` as a member variable as well (so that the exact Array type can be documented).

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 6
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Tue, 20 Sep 2022 10:27:54 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Gerrit-MessageType: comment

    Devlin Cronin (Gerrit)

    unread,
    Sep 21, 2022, 3:35:58 PM9/21/22
    to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, Demetrios Papadopoulos, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, Kelvin Jiang.

    View Change

    11 comments:

    • Patchset:

    • File chrome/browser/extensions/api/developer_private/developer_private_api.cc:

    • File chrome/browser/resources/extensions/service.ts:

      • Patch Set #6, Line 505:

        function(resolve) {
        chrome.developerPrivate.getMatchingExtensionsForSite(site, resolve);
        });

        nit: I think webui style is prefer arrow functions

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts:

      • Patch Set #6, Line 130: Returns if `this.site` is a full url or just a host

        nit: returns what if it's a full url or just a host?

        Probably prefer "Returns true if `this.site` is a full URL (as opposed to just a host)."

      • Is this a full proof way to check? (Leaving this up to you and Devlin to check, just pointing out th […]

        Thanks for flagging, Demetrios. What happens for e.g. file schemes on windows operating systems?

      • Patch Set #6, Line 142: if (siteSet !== EXTENSION_SPECIFIED) {

        add a comment why

      • Patch Set #6, Line 146: isSiteFullUrl_

        this assumes that if it's not a full site, it's a (valid) host. Can we add an assert to isSiteFullUrl() to verify that?

      • Patch Set #6, Line 150:

                  for (const {id, name, iconUrl} of extensions) {
        extensionsIdToInfo.set(id, {name, iconUrl});
        }

        This is all we ever do with `extensions`. Would it make sense to have the property be this map (constructed within a setter of this class) rather than constructing it here each time?

      • Patch Set #6, Line 156: if (extensionsIdToInfo.has(id)) {

        When would extensionsIdToInfo not have `id`? (Add a comment)

      • Patch Set #6, Line 209: return this.site.includes('*');

        is it guaranteed a site never includes '*' in the path or scheme, and only includes it in the host?

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 6
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Comment-Date: Wed, 21 Sep 2022 19:35:42 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-MessageType: comment

    Kelvin Jiang (Gerrit)

    unread,
    Sep 21, 2022, 8:34:10 PM9/21/22
    to chromium-a...@chromium.org, extension...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, Kelvin Jiang.

    Kelvin Jiang uploaded patch set #7 to this change.

    View Change

    [Extensions] Add option to show per-extension site settings in dialog

    This CL adds a list of extensions that have specified at least one
    site matching the site in the edit permissions dialog. This list is
    shown when the "customize per extension" option is selected, and if
    the user clicks save on the dialog, then the site is removed from any
    user specified site sets.

    If the site in the dialog is a host, then assume we're editing for http
    and https schemes.

    If the site contains a wildcard (*.<eTLD+1>, then the radio
    button group is not shown as such sites can only be specified by
    extensions (and not in any user specified site sets).

    The developerPrivate.getMatchingExtensionsForSite API method has been
    changed to iterate over the same set of extensions that
    developerPrivate.getExtensionsInfo iterates over, which means blocked
    extensions will no longer be considered in that method.

    Note: there is a discrepancy between the extension count vs the
    number of extensions in the dialog for a site that specifies matching
    all subdomains such as "*.google.com: the count shows the number of
    25 files changed, 479 insertions(+), 55 deletions(-)

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 7
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-MessageType: newpatchset

    Kelvin Jiang (Gerrit)

    unread,
    Sep 22, 2022, 7:36:23 PM9/22/22
    to chromium-a...@chromium.org, extension...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, Kelvin Jiang.

    Kelvin Jiang uploaded patch set #8 to this change.

    View Change

    [Extensions] Add option to show per-extension site settings in dialog

    This CL adds a list of extensions that have specified at least one
    site matching the site in the edit permissions dialog. This list is
    shown when the "customize per extension" option is selected, and if
    the user clicks save on the dialog, then the site is removed from any
    user specified site sets.

    If the site in the dialog is a host, then assume we're editing for http
    and https schemes.

    If the site contains a wildcard (*.<eTLD+1>, then the radio
    button group is not shown as such sites can only be specified by
    extensions (and not in any user specified site sets).

    The developerPrivate.getMatchingExtensionsForSite API method has been
    changed to iterate over the same set of extensions that
    developerPrivate.getExtensionsInfo iterates over, which means blocked
    extensions will no longer be considered in that method.

    Note: there is a discrepancy between the extension count vs the
    number of extensions in the dialog for a site that specifies matching
    all subdomains such as "*.google.com: the count shows the number of
    extensions that can run on all subdomains for an eTLD+1 vs the list of
    extensions in the dialog shows extensions that can run on at least one
    subdomain for an eTLD+1. This may need to be revisited later

    Screenshots: https://imgur.com/a/Sa4nPDV
    Gerrit-PatchSet: 8

    Kelvin Jiang (Gerrit)

    unread,
    Sep 26, 2022, 4:28:59 PM9/26/22
    to chromium-a...@chromium.org, extension...@chromium.org, Demetrios Papadopoulos, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, Devlin Cronin.

    Patch set 9:Commit-Queue +1

    View Change

    19 comments:

    • Commit Message:

      • Patch Set #6, Line 22:

        Note: there is a discrepancy between the extension count vs #
        extensions in the dialog for a : the count shows the #

      • This sentence is a bit hard to understand. […]

        done, updated the description

    • File chrome/browser/extensions/api/developer_private/developer_private_api.cc:

      • Done

    • File chrome/browser/resources/extensions/service.ts:

      • Patch Set #6, Line 505:

        function(resolve) {
        chrome.developerPrivate.getMatchingExtensionsForSite(site, resolve);
        });

        nit: I think webui style is prefer arrow functions

      • Done (for this one), changing the rest of this file to use arrows will be done in a follow up

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.html:

      • Is the cr-radio-group part of the header so that it is always visible? If so, maybe add a comment to […]

        it's part of the header so that if the dialog's body exceeds a certain height, the body scrolls but the header will stay in place (see screenshots)

      • Patch Set #6, Line 69: <template is="dom-if" if="[[showExtensionSiteAccessData_(siteSet_)]]">

        How does the dialog look like when this is false? Should this dom-if be moved outside slot=body?

      • The dialog would just have the cr-radio-group in that case, though there is a slightly larger space between the bottom of the radio group and the save/cancel buttons (the body slot container has a minimum height, and the body slot gets added to the dialog anyway, not sure how I'd override this?)

      • `disabled` is a boolean attribute and therefore does not take a value. […]

        Done

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts:

      • Patch Set #6, Line 97:

        static get observers() {
        return ['onExtensionsUpdated_(extensions)', 'onSiteSetUpdated_(siteSet_)'];
        }

      • observers() should be used for multi-property obesrvers. […]

        Done

      • nit: returns what if it's a full url or just a host? […]

        Done

      • Done

      • Thanks for flagging, Demetrios. What happens for e.g. […]

        oh... perhaps I can change this to `isSiteHostOnly` and test against a regex that only captures the host and optionally, the includes subdomain specifier "*."

      • Done, it's to avoid a redundant API call if the extensions won't be displayed anyway

      • this assumes that if it's not a full site, it's a (valid) host. […]

        I changed isSiteFullUrl() to isSiteHostOnly() which matches against a regex (and if not, assumes it's a full site). Does that work for an assert?

        Re: full site: are there other "full sites" that can be legal here other than something with a scheme + host? (and, do windows file schemes use backslashes \ )?

        ^So far, in the all sites/permissions by sites page, we're using only hosts, and in the site permissions/user specified sites page, we're using origins (scheme + host). If this is the case for a while then I can reuse a regex to test for a full site (and assert that it matches), otherwise, this will need to be revisited: an API method to check for a site on developerPrivate was mentioned before, and I could call that method as the dialog is initialized since the dialog's site shouldn't change.

        WDYT?

      • Done

      • Patch Set #6, Line 150:

                  for (const {id, name, iconUrl} of extensions) {
        extensionsIdToInfo.set(id, {name, iconUrl});
        }

      • This is all we ever do with `extensions`. […]

        Done

      • Patch Set #6, Line 156: if (extensionsIdToInfo.has(id)) {

        When would extensionsIdToInfo not have `id`? (Add a comment)

      • I think this was added to make the typescript compiler not freak out.

        Actually, this shouldn't happen since ids in extensionsIdToInfo should be a superset of matchingExtensionsInfo, so I changed this to an assert instead

      • Patch Set #6, Line 182: chrome.developerPrivate.SiteSet.EXTENSION_SPECIFIED

        Since you've added a shorter alias for this, let's use it here (and elsewhere).

      • Done

      • Patch Set #6, Line 209: return this.site.includes('*');

        is it guaranteed a site never includes '*' in the path or scheme, and only includes it in the host?

      • yes, because
        - if it's a full site, then this dialog would be opened from the site permissions page which only shows user specified sites, which are origins
        - if it's not, then the site would either be just a host, or *.<etld+1>

        I'll change this to "*." and add a comment on how we can just use that to identify subdomains
    • File chrome/browser/resources/extensions/site_permissions_list.ts:

      • Here and elsewhere where a new `extensions` Polymer property is added: Need to declare `extensions` […]

        Done

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 9
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Mon, 26 Sep 2022 20:28:48 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Demetrios Papadopoulos <dpa...@chromium.org>
    Comment-In-Reply-To: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-MessageType: comment

    Demetrios Papadopoulos (Gerrit)

    unread,
    Sep 26, 2022, 5:51:39 PM9/26/22
    to chromium-a...@chromium.org, extension...@chromium.org, John Lee, Kelvin Jiang, Devlin Cronin

    Attention is currently required from: Devlin Cronin, Kelvin Jiang.

    Kelvin Jiang has uploaded this change for review.

    View Change

    25 files changed, 507 insertions(+), 56 deletions(-)


    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 9
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-CC: John Lee <john...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-MessageType: newchange

    Demetrios Papadopoulos (Gerrit)

    unread,
    Sep 26, 2022, 5:51:54 PM9/26/22
    to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, John Lee, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Devlin Cronin, Kelvin Jiang.

    View Change

    9 comments:

    • Patchset:

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.html:

      • Patch Set #9, Line 76: alt=""

        Should this have something like `role=presentation` instead?

        +johntlee to conlult.

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts:

      • Patch Set #9, Line 170:

          this.delegate.getMatchingExtensionsForSite(siteToCheck)
        .then(matchingExtensionsInfo => {
        const extensionSiteAccessData: ExtensionSiteAccessInfo[] = [];
        matchingExtensionsInfo.forEach(({id, siteAccess}) => {
        assert(this.extensionsIdToInfo_.has(id));
        const {name, iconUrl} = this.extensionsIdToInfo_.get(id)!;
        extensionSiteAccessData.push({id, name, iconUrl, siteAccess});
        });

        this.extensionSiteAccessData_ = extensionSiteAccessData;
        });
        }

        Nit: Use async/await to make this more readable?

    • File chrome/test/data/webui/extensions/site_permissions_edit_permissions_dialog_test.ts:

    • File tools/typescript/definitions/developer_private.d.ts:

      • Patch Set #9, Line 473:

        export function getMatchingExtensionsForSite(
        site: string,
        callback: (result: MatchingExtensionInfo[]) => void): void;

        Optional: How about using the Promise-based version instead (also see https://crbug.com/1368302).

        IIUC, you could declare the Promise-based API here, and use it from the calling code, as it is already supported by the backend. Then you don't need to wrap this with a wrapper to convert it to Promise-based.

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 9
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-CC: John Lee <john...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Mon, 26 Sep 2022 21:51:36 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Gerrit-MessageType: comment

    Kelvin Jiang (Gerrit)

    unread,
    Sep 27, 2022, 8:08:39 PM9/27/22
    to chromium-a...@chromium.org, extension...@chromium.org, John Lee, Demetrios Papadopoulos, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, Devlin Cronin.

    Patch set 10:Commit-Queue +1

    View Change

    7 comments:

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts:

      • Patch Set #9, Line 170:

          this.delegate.getMatchingExtensionsForSite(siteToCheck)
        .then(matchingExtensionsInfo => {
        const extensionSiteAccessData: ExtensionSiteAccessInfo[] = [];
        matchingExtensionsInfo.forEach(({id, siteAccess}) => {
        assert(this.extensionsIdToInfo_.has(id));
        const {name, iconUrl} = this.extensionsIdToInfo_.get(id)!;
        extensionSiteAccessData.push({id, name, iconUrl, siteAccess});
        });

        this.extensionSiteAccessData_ = extensionSiteAccessData;
        });
        }

        Nit: Use async/await to make this more readable?

      • Done

    • File chrome/test/data/webui/extensions/site_permissions_edit_permissions_dialog_test.ts:

      • Done

      • Patch Set #9, Line 166: await delegate.whenCalled('getMatchingExtensionsForSite');

        Let's assert on the value that was passed to getMatchingExtensionsForSite() (here and elsewhere)?

      • Done

      • Done

      • Done

      • Done

    • File tools/typescript/definitions/developer_private.d.ts:

      • Patch Set #9, Line 473:

        export function getMatchingExtensionsForSite(
        site: string,
        callback: (result: MatchingExtensionInfo[]) => void): void;

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 10
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-CC: John Lee <john...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Wed, 28 Sep 2022 00:07:07 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-MessageType: comment

    Demetrios Papadopoulos (Gerrit)

    unread,
    Sep 27, 2022, 8:14:55 PM9/27/22
    to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, John Lee, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Devlin Cronin, Kelvin Jiang.

    View Change

    1 comment:

    • File tools/typescript/definitions/developer_private.d.ts:

      • Patch Set #9, Line 473:

        export function getMatchingExtensionsForSite(
        site: string,
        callback: (result: MatchingExtensionInfo[]) => void): void;

      • isn't this just the typescript interface definitions based on what's in https://source.chromium. […]

        See all the `supportsPromises` tokens in the link above. The C++ implementation supports both Promise-based and callback-based APIs at the same time. It is up to us to pick which one to use, and the Promise-based API is preferable.

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 10
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-CC: John Lee <john...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Wed, 28 Sep 2022 00:13:52 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Demetrios Papadopoulos <dpa...@chromium.org>
    Comment-In-Reply-To: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-MessageType: comment

    Demetrios Papadopoulos (Gerrit)

    unread,
    Sep 28, 2022, 12:53:36 PM9/28/22
    to John Lee, chromium-a...@chromium.org, extension...@chromium.org, Kelvin Jiang, Devlin Cronin

    Attention is currently required from: Devlin Cronin, John Lee, Kelvin Jiang.

    Demetrios Papadopoulos would like John Lee to review this change authored by Kelvin Jiang.

    View Change

    25 files changed, 513 insertions(+), 58 deletions(-)


    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 10
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: John Lee <john...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: John Lee <john...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-MessageType: newchange

    Demetrios Papadopoulos (Gerrit)

    unread,
    Sep 28, 2022, 12:54:46 PM9/28/22
    to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, John Lee, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Devlin Cronin, John Lee, Kelvin Jiang.

    Patch set 10:Code-Review +1

    View Change

    3 comments:

    • Patchset:

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.html:

      • Should this have something like `role=presentation` instead? […]

        Moving to reviewer list. Please see question above.

    • File tools/typescript/definitions/developer_private.d.ts:

      • Patch Set #9, Line 473:

        export function getMatchingExtensionsForSite(
        site: string,
        callback: (result: MatchingExtensionInfo[]) => void): void;

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 10
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: John Lee <john...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: John Lee <john...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Wed, 28 Sep 2022 16:53:32 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes

    John Lee (Gerrit)

    unread,
    Sep 28, 2022, 6:15:56 PM9/28/22
    to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, John Lee, Demetrios Papadopoulos, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, Devlin Cronin, Kelvin Jiang.

    View Change

    1 comment:

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.html:

      • Moving to reviewer list. Please see question above.

        `alt=""` allegedly has more widespread screenreader support. This should be fine.

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 10
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: John Lee <john...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Wed, 28 Sep 2022 22:14:57 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-MessageType: comment

    Kelvin Jiang (Gerrit)

    unread,
    Sep 28, 2022, 7:07:36 PM9/28/22
    to chromium-a...@chromium.org, extension...@chromium.org, John Lee, Demetrios Papadopoulos, Devlin Cronin, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, Devlin Cronin, John Lee.

    Patch set 11:Commit-Queue +1

    View Change

    3 comments:

    • Patchset:

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.html:

      • `alt=""` allegedly has more widespread screenreader support. This should be fine.

        Thanks John! (resolving)

    • File tools/typescript/definitions/developer_private.d.ts:

      • Patch Set #9, Line 473:

        export function getMatchingExtensionsForSite(
        site: string,
        callback: (result: MatchingExtensionInfo[]) => void): void;

      • Ping ^. See a similar CL that adds the Promise-based version at [1] […]

        Done

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 11
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: John Lee <john...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: John Lee <john...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Wed, 28 Sep 2022 23:05:51 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Comment-In-Reply-To: John Lee <john...@chromium.org>

    Devlin Cronin (Gerrit)

    unread,
    Sep 29, 2022, 6:00:48 AM9/29/22
    to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, Devlin Cronin, John Lee, Demetrios Papadopoulos, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, John Lee, Kelvin Jiang.

    Patch set 11:Code-Review +1

    View Change

    3 comments:

    • Patchset:

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts:

      • Patch Set #11, Line 49: '([a-z0-9\\.-]+\\.[a-z0-9]+|localhost)' +

        Two concerns with this regex:

        • This wouldn't work for TLDs that are valid destinations, e.g. "ai" (http://ai).
        • This also doesn't allow for any ports — could we have a host-only pattern that includes a port, if it were specifically added or visited by the user?

        A somewhat tedious, but I *think* accurate, check here would be to compare the start of the url against all allowed schemes for extensions (see URLPattern for the ones that are allowed) followed by the scheme separator. e.g., something like:

        const SCHEMES = [
        'http',
        'https',
        ...
        ];
        function isSiteHostOnly_(site) {
        return SCHEMES.some(scheme => site.startsWith(scheme + '://'));
        }

        That would probably work?

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 11
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: John Lee <john...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: John Lee <john...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Comment-Date: Thu, 29 Sep 2022 09:59:06 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Gerrit-MessageType: comment

    Kelvin Jiang (Gerrit)

    unread,
    Sep 29, 2022, 6:21:17 PM9/29/22
    to chromium-a...@chromium.org, extension...@chromium.org, Devlin Cronin, John Lee, Demetrios Papadopoulos, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, John Lee.

    Patch set 12:Commit-Queue +2

    View Change

    1 comment:

    • File chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts:

      • Two concerns with this regex: […]

        Done

    To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
    Gerrit-Change-Number: 3897553
    Gerrit-PatchSet: 12
    Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: John Lee <john...@chromium.org>
    Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
    Gerrit-Attention: John Lee <john...@chromium.org>
    Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
    Gerrit-Comment-Date: Thu, 29 Sep 2022 22:19:59 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes

    Kelvin Jiang (Gerrit)

    unread,
    Sep 29, 2022, 10:46:36 PM9/29/22
    to chromium-a...@chromium.org, extension...@chromium.org, Devlin Cronin, John Lee, Demetrios Papadopoulos, Chromium LUCI CQ, chromium...@chromium.org

    Attention is currently required from: Demetrios Papadopoulos, John Lee, Kelvin Jiang.

    Patch set 12:Commit-Queue +2

    View Change

      To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
      Gerrit-Change-Number: 3897553
      Gerrit-PatchSet: 12
      Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
      Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Reviewer: John Lee <john...@chromium.org>
      Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
      Gerrit-Attention: John Lee <john...@chromium.org>
      Gerrit-Attention: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Attention: Kelvin Jiang <kelvi...@chromium.org>
      Gerrit-Comment-Date: Fri, 30 Sep 2022 02:45:21 +0000

      Chromium LUCI CQ (Gerrit)

      unread,
      Sep 29, 2022, 11:26:54 PM9/29/22
      to Kelvin Jiang, chromium-a...@chromium.org, extension...@chromium.org, Devlin Cronin, John Lee, Demetrios Papadopoulos, chromium...@chromium.org

      Chromium LUCI CQ submitted this change.

      View Change



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

      ```
      The name of the file: chrome/browser/resources/extensions/site_permissions_edit_permissions_dialog.ts
      Insertions: 22, Deletions: 17.

      @@ -35,19 +35,23 @@

      const EXTENSION_SPECIFIED = chrome.developerPrivate.SiteSet.EXTENSION_SPECIFIED;

      -// A RegExp to roughly match a single hostname, and optionally the includes
      -// subdomains specifier.
      -// exec'ing() this RegExp will match the following groups:
      -// 0: Full matched string.
      -// 1: Match subdomains ('*.').
      -// 2: Hostname (e.g., 'example.com').
      -const hostPatternRegExp = new RegExp(
      - '^' +
      - // Include subdomains specifier; optional.
      - '(\\*\\.)?' +
      - // Hostname or localhost, required.
      - '([a-z0-9\\.-]+\\.[a-z0-9]+|localhost)' +
      - '$');
      +// A list of possible schemes that can be specified by extension host
      +// permissions. This is derived from URLPattern::SchemeMasks.
      +const VALID_SCHEMES = [
      + '*',
      + 'http',
      + 'https',
      + 'file',
      + 'ftp',
      + 'chrome',
      + 'chrome-extension',
      + 'filesystem',
      + 'ftp',
      + 'ws',
      + 'wss',
      + 'data',
      + 'uuid-in-package',
      +];

      const SitePermissionsEditPermissionsDialogElementBase =
      I18nMixin(PolymerElement);
      @@ -147,11 +151,12 @@
      this.updateExtensionSiteAccessData_(siteSet);
      }

      - // Returns true if this.site is a just a host. If not, assume the site is a
      - // full URL. Different components that use this dialog may supply either a URL
      - // or just a host.
      + // Returns true if this.site is a just a host by checking whether or not it
      + // starts with a valid scheme. If not, assume the site is a full URL.
      + // Different components that use this dialog may supply either a URL or just a
      + // host.
      private isSiteHostOnly_(): boolean {
      - return hostPatternRegExp.test(this.site);
      + return !VALID_SCHEMES.some(scheme => this.site.startsWith(`${scheme}://`));
      }

      // Fetches all extensions that have requested access to `this.site` along with
      ```

      Approvals: Kelvin Jiang: Commit Devlin Cronin: Looks good to me Demetrios Papadopoulos: Looks good to me
      [Extensions] Add option to show per-extension site settings in dialog

      This CL adds a list of extensions that have specified at least one
      site matching the site in the edit permissions dialog. This list is
      shown when the "customize per extension" option is selected, and if
      the user clicks save on the dialog, then the site is removed from any
      user specified site sets.

      If the site in the dialog is a host, then assume we're editing for http
      and https schemes.

      If the site contains a wildcard (*.<eTLD+1>, then the radio
      button group is not shown as such sites can only be specified by
      extensions (and not in any user specified site sets).

      The developerPrivate.getMatchingExtensionsForSite API method has been
      changed to iterate over the same set of extensions that
      developerPrivate.getExtensionsInfo iterates over, which means blocked
      extensions will no longer be considered in that method.

      Note: there is a discrepancy between the extension count vs the
      number of extensions in the dialog for a site that specifies matching
      all subdomains such as "*.google.com: the count shows the number of
      extensions that can run on all subdomains for an eTLD+1 vs the list of
      extensions in the dialog shows extensions that can run on at least one
      subdomain for an eTLD+1. This may need to be revisited later

      Screenshots: https://imgur.com/a/Sa4nPDV

      Bug: 1253673
      Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
      Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3897553
      Reviewed-by: Demetrios Papadopoulos <dpa...@chromium.org>
      Reviewed-by: Devlin Cronin <rdevlin...@chromium.org>
      Commit-Queue: Kelvin Jiang <kelvi...@chromium.org>
      Cr-Commit-Position: refs/heads/main@{#1053387}
      25 files changed, 520 insertions(+), 58 deletions(-)


      To view, visit change 3897553. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: Idba1bb97de66481d615b224c2d4a3d90cf37a945
      Gerrit-Change-Number: 3897553
      Gerrit-PatchSet: 13
      Gerrit-Owner: Kelvin Jiang <kelvi...@chromium.org>
      Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
      Gerrit-Reviewer: Demetrios Papadopoulos <dpa...@chromium.org>
      Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Reviewer: John Lee <john...@chromium.org>
      Gerrit-Reviewer: Kelvin Jiang <kelvi...@chromium.org>
      Gerrit-MessageType: merged
      Reply all
      Reply to author
      Forward
      0 new messages