[Extensions] Add histogram for insecure uninstall URLs [chromium/src : main]

0 views
Skip to first unread message

Anton Bershanskyi (Gerrit)

unread,
May 8, 2026, 4:33:56 AMMay 8
to Devlin Cronin, Oliver Dunk, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Devlin Cronin and Oliver Dunk

Anton Bershanskyi added 1 comment

Patchset-level comments
File-level comment, Patchset 1 (Latest):
Anton Bershanskyi . resolved

Hi Devlin and Oliver,

I what do you think about issue 510816360 (and this CL)? I propose a slight API behavior change, so I realize that you might need a while to think about and of course do not expect a quick reply.

Thanks!

Open in Gerrit

Related details

Attention is currently required from:
  • Devlin Cronin
  • Oliver Dunk
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: If4068f6054024974a9b49b869b27f26c35c6b851
Gerrit-Change-Number: 7828426
Gerrit-PatchSet: 1
Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
Gerrit-Attention: Oliver Dunk <olive...@chromium.org>
Gerrit-Comment-Date: Fri, 08 May 2026 08:33:37 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Oliver Dunk (Gerrit)

unread,
May 8, 2026, 8:42:36 AMMay 8
to Anton Bershanskyi, Devlin Cronin, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
Attention needed from Anton Bershanskyi and Devlin Cronin

Oliver Dunk added 3 comments

Patchset-level comments
Oliver Dunk . resolved

Thanks Anton!

Commit Message
Line 11, Patchset 1 (Latest):insecure. This histogram might let us solve "mixed content"
Oliver Dunk . unresolved

I'm never opposed to moving in the direction of HTTPS, but I'm 50/50 on the effort / value tradeoff here. Happy to defer to @rdevlin...@chromium.org on that.

File extensions/browser/api/runtime/runtime_api.cc
Line 300, Patchset 1 (Latest): // Record histogram one during session start to count every extension install
Oliver Dunk . unresolved

It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded. Is that the case? If so, can we handle that somehow?

Note that we are also considering changing the persistence in https://github.com/w3c/webextensions/issues/981. I don't think that's relevant but I wanted to mention in case you can think of a way it might be.

Open in Gerrit

Related details

Attention is currently required from:
  • Anton Bershanskyi
  • Devlin Cronin
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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 1
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Attention: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Comment-Date: Fri, 08 May 2026 12:42:25 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Anton Bershanskyi (Gerrit)

    unread,
    May 8, 2026, 9:51:22 AMMay 8
    to Devlin Cronin, Oliver Dunk, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Devlin Cronin and Oliver Dunk

    Anton Bershanskyi added 2 comments

    Commit Message
    Line 11, Patchset 1 (Latest):insecure. This histogram might let us solve "mixed content"
    Oliver Dunk . unresolved

    I'm never opposed to moving in the direction of HTTPS, but I'm 50/50 on the effort / value tradeoff here. Happy to defer to @rdevlin...@chromium.org on that.

    Anton Bershanskyi

    Here I proposed a staged migration which requires a rather large amount of effort. If we could disregard backward compatibility, we could implement the change in literally 3-line change in `RuntimeSetUninstallURLFunction()::Run()`:

    ```diff

    • if (!params->url.empty() && !GURL(params->url).SchemeIsHTTPOrHTTPS()) {
    • + if (!params->url.empty() && !(url.SchemeIs(url::kHttpsScheme)
    • + || net::IsLocalhost(url))) {
    • ```

    Alternatively, we could start by raising awareness of this issue by logging a benign warning right before `UpdateExtensionPref()`, also a 3-line change.

    File extensions/browser/api/runtime/runtime_api.cc
    Line 300, Patchset 1 (Latest): // Record histogram one during session start to count every extension install
    Oliver Dunk . unresolved

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded. Is that the case? If so, can we handle that somehow?

    Note that we are also considering changing the persistence in https://github.com/w3c/webextensions/issues/981. I don't think that's relevant but I wanted to mention in case you can think of a way it might be.

    Anton Bershanskyi

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded.

    Yes, this is the case. No method of counting is perfect, this method avoids counting each call to `setUninstallURL()` and effectively getting data skewed by a single extension resetting uninstall URL on every background context invocation. We could implement a histogram in `OnExtensionUninstalled()` and count the number of actual page loads instead. If you have a better approach, I can implement that instead.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Devlin Cronin
    • Oliver Dunk
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 1
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Attention: Oliver Dunk <olive...@chromium.org>
    Gerrit-Comment-Date: Fri, 08 May 2026 13:51:08 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Oliver Dunk <olive...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Oliver Dunk (Gerrit)

    unread,
    May 8, 2026, 10:49:06 AMMay 8
    to Anton Bershanskyi, Devlin Cronin, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Devlin Cronin

    Oliver Dunk added 1 comment

    Patchset-level comments
    Oliver Dunk . resolved

    Removing myself from the attention set for now, as I'm curious what Devlin's thoughts are. Feel free to add me back once you're ready for another review :)

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Devlin Cronin
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 1
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Fri, 08 May 2026 14:48:53 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    May 18, 2026, 4:36:30 PMMay 18
    to Anton Bershanskyi, Devlin Cronin, Oliver Dunk, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Anton Bershanskyi

    Devlin Cronin added 3 comments

    Patchset-level comments
    Devlin Cronin . resolved

    Thanks, Anton!

    Commit Message
    Line 11, Patchset 1 (Latest):insecure. This histogram might let us solve "mixed content"
    Oliver Dunk . unresolved

    I'm never opposed to moving in the direction of HTTPS, but I'm 50/50 on the effort / value tradeoff here. Happy to defer to @rdevlin...@chromium.org on that.

    Anton Bershanskyi

    Here I proposed a staged migration which requires a rather large amount of effort. If we could disregard backward compatibility, we could implement the change in literally 3-line change in `RuntimeSetUninstallURLFunction()::Run()`:

    ```diff

    • if (!params->url.empty() && !GURL(params->url).SchemeIsHTTPOrHTTPS()) {
    • + if (!params->url.empty() && !(url.SchemeIs(url::kHttpsScheme)
    • + || net::IsLocalhost(url))) {
    • ```

    Alternatively, we could start by raising awareness of this issue by logging a benign warning right before `UpdateExtensionPref()`, also a 3-line change.

    Devlin Cronin

    I'm okay with us exploring this; it doesn't seem like it'll be too much effort.

    I *do* think we should do the impact evaluation (i.e., these histograms) first; I don't feel comfortable just making a behavior change.

    File extensions/browser/api/runtime/runtime_api.cc
    Line 300, Patchset 1 (Latest): // Record histogram one during session start to count every extension install
    Oliver Dunk . unresolved

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded. Is that the case? If so, can we handle that somehow?

    Note that we are also considering changing the persistence in https://github.com/w3c/webextensions/issues/981. I don't think that's relevant but I wanted to mention in case you can think of a way it might be.

    Anton Bershanskyi

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded.

    Yes, this is the case. No method of counting is perfect, this method avoids counting each call to `setUninstallURL()` and effectively getting data skewed by a single extension resetting uninstall URL on every background context invocation. We could implement a histogram in `OnExtensionUninstalled()` and count the number of actual page loads instead. If you have a better approach, I can implement that instead.

    Devlin Cronin

    I'm okay with us recording this in OnExtensionLoaded() -- that happens for each extension on every startup, which is reasonable.

    However, I do think we should tweak the histogram. Just recording a raw number here isn't very helpful, especially for the secure ones. For instance, if we see that this number is "1000", we don't know what to do with that data -- it doesn't indicate what kind of breakage we might see if we changed the behavior.

    Instead, I think we need a ratio here. At the very least, we should record secure vs insecure, and I'd lean towards going a step further and having three buckets: https, localhost, and http. Then, we would know what percentage of users would be affected if we were to make a change.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Anton Bershanskyi
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 1
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Comment-Date: Mon, 18 May 2026 20:36:22 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Anton Bershanskyi <bersh...@gmail.com>
    Comment-In-Reply-To: Oliver Dunk <olive...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Anton Bershanskyi (Gerrit)

    unread,
    May 19, 2026, 2:03:40 AM (14 days ago) May 19
    to Devlin Cronin, Oliver Dunk, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Devlin Cronin

    Anton Bershanskyi added 2 comments

    Commit Message
    Line 11, Patchset 1 (Latest):insecure. This histogram might let us solve "mixed content"
    Oliver Dunk . unresolved

    I'm never opposed to moving in the direction of HTTPS, but I'm 50/50 on the effort / value tradeoff here. Happy to defer to @rdevlin...@chromium.org on that.

    Anton Bershanskyi

    Here I proposed a staged migration which requires a rather large amount of effort. If we could disregard backward compatibility, we could implement the change in literally 3-line change in `RuntimeSetUninstallURLFunction()::Run()`:

    ```diff

    • if (!params->url.empty() && !GURL(params->url).SchemeIsHTTPOrHTTPS()) {
    • + if (!params->url.empty() && !(url.SchemeIs(url::kHttpsScheme)
    • + || net::IsLocalhost(url))) {
    • ```

    Alternatively, we could start by raising awareness of this issue by logging a benign warning right before `UpdateExtensionPref()`, also a 3-line change.

    Devlin Cronin

    I'm okay with us exploring this; it doesn't seem like it'll be too much effort.

    I *do* think we should do the impact evaluation (i.e., these histograms) first; I don't feel comfortable just making a behavior change.

    Anton Bershanskyi

    I don't feel comfortable just making a behavior change.

    We are on the same page. This is why I propose incremental change in steps: histogram, then awareness campaign via console warning and PSA, then new behavior with a kill-switch, then unconditional new behavior. The resulting timeline comes out very stretched (easily can last a full year), but al least we are making incremental progress.

    File extensions/browser/api/runtime/runtime_api.cc
    Line 300, Patchset 1 (Latest): // Record histogram one during session start to count every extension install
    Oliver Dunk . unresolved

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded. Is that the case? If so, can we handle that somehow?

    Note that we are also considering changing the persistence in https://github.com/w3c/webextensions/issues/981. I don't think that's relevant but I wanted to mention in case you can think of a way it might be.

    Anton Bershanskyi

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded.

    Yes, this is the case. No method of counting is perfect, this method avoids counting each call to `setUninstallURL()` and effectively getting data skewed by a single extension resetting uninstall URL on every background context invocation. We could implement a histogram in `OnExtensionUninstalled()` and count the number of actual page loads instead. If you have a better approach, I can implement that instead.

    Devlin Cronin

    I'm okay with us recording this in OnExtensionLoaded() -- that happens for each extension on every startup, which is reasonable.

    However, I do think we should tweak the histogram. Just recording a raw number here isn't very helpful, especially for the secure ones. For instance, if we see that this number is "1000", we don't know what to do with that data -- it doesn't indicate what kind of breakage we might see if we changed the behavior.

    Instead, I think we need a ratio here. At the very least, we should record secure vs insecure, and I'd lean towards going a step further and having three buckets: https, localhost, and http. Then, we would know what percentage of users would be affected if we were to make a change.

    Anton Bershanskyi

    At the very least, we should record secure vs insecure

    I believe we are currently recording "secure" vs "insecure", where "secure" is "HTTPS and local HTTP" and "insecure" is "remote HTTP". The current CL revision ("Patchset 1") has `base::UmaHistogramBoolean()` with the value being `uninstall_url.SchemeIs(url::kHttpsScheme) || net::IsLocalhost(uninstall_url)`.

    I'd lean towards going a step further and having three buckets: https, localhost, and http.

    I'm OK with changing to an "enum" histogram. Where exactly would you prefer to count HTTPS localhost, as HTTPS or as localhost? I expect very few measurements in this category, but we should't dismiss them. I can make 4 buckets.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Devlin Cronin
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 1
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Tue, 19 May 2026 06:03:20 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Devlin Cronin <rdevlin...@chromium.org>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    May 21, 2026, 6:52:24 PM (11 days ago) May 21
    to Anton Bershanskyi, Devlin Cronin, Oliver Dunk, chromium...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Anton Bershanskyi and Oliver Dunk

    Devlin Cronin added 2 comments

    Commit Message
    Line 11, Patchset 1 (Latest):insecure. This histogram might let us solve "mixed content"
    Oliver Dunk . resolved

    I'm never opposed to moving in the direction of HTTPS, but I'm 50/50 on the effort / value tradeoff here. Happy to defer to @rdevlin...@chromium.org on that.

    Anton Bershanskyi

    Here I proposed a staged migration which requires a rather large amount of effort. If we could disregard backward compatibility, we could implement the change in literally 3-line change in `RuntimeSetUninstallURLFunction()::Run()`:

    ```diff

    • if (!params->url.empty() && !GURL(params->url).SchemeIsHTTPOrHTTPS()) {
    • + if (!params->url.empty() && !(url.SchemeIs(url::kHttpsScheme)
    • + || net::IsLocalhost(url))) {
    • ```

    Alternatively, we could start by raising awareness of this issue by logging a benign warning right before `UpdateExtensionPref()`, also a 3-line change.

    Devlin Cronin

    I'm okay with us exploring this; it doesn't seem like it'll be too much effort.

    I *do* think we should do the impact evaluation (i.e., these histograms) first; I don't feel comfortable just making a behavior change.

    Anton Bershanskyi

    I don't feel comfortable just making a behavior change.

    We are on the same page. This is why I propose incremental change in steps: histogram, then awareness campaign via console warning and PSA, then new behavior with a kill-switch, then unconditional new behavior. The resulting timeline comes out very stretched (easily can last a full year), but al least we are making incremental progress.

    Devlin Cronin

    Hopefully we won't need quite that many steps, but yep, starting with metrics is first.

    File extensions/browser/api/runtime/runtime_api.cc
    Line 300, Patchset 1 (Latest): // Record histogram one during session start to count every extension install
    Oliver Dunk . unresolved

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded. Is that the case? If so, can we handle that somehow?

    Note that we are also considering changing the persistence in https://github.com/w3c/webextensions/issues/981. I don't think that's relevant but I wanted to mention in case you can think of a way it might be.

    Anton Bershanskyi

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded.

    Yes, this is the case. No method of counting is perfect, this method avoids counting each call to `setUninstallURL()` and effectively getting data skewed by a single extension resetting uninstall URL on every background context invocation. We could implement a histogram in `OnExtensionUninstalled()` and count the number of actual page loads instead. If you have a better approach, I can implement that instead.

    Devlin Cronin

    I'm okay with us recording this in OnExtensionLoaded() -- that happens for each extension on every startup, which is reasonable.

    However, I do think we should tweak the histogram. Just recording a raw number here isn't very helpful, especially for the secure ones. For instance, if we see that this number is "1000", we don't know what to do with that data -- it doesn't indicate what kind of breakage we might see if we changed the behavior.

    Instead, I think we need a ratio here. At the very least, we should record secure vs insecure, and I'd lean towards going a step further and having three buckets: https, localhost, and http. Then, we would know what percentage of users would be affected if we were to make a change.

    Anton Bershanskyi

    At the very least, we should record secure vs insecure

    I believe we are currently recording "secure" vs "insecure", where "secure" is "HTTPS and local HTTP" and "insecure" is "remote HTTP". The current CL revision ("Patchset 1") has `base::UmaHistogramBoolean()` with the value being `uninstall_url.SchemeIs(url::kHttpsScheme) || net::IsLocalhost(uninstall_url)`.

    I'd lean towards going a step further and having three buckets: https, localhost, and http.

    I'm OK with changing to an "enum" histogram. Where exactly would you prefer to count HTTPS localhost, as HTTPS or as localhost? I expect very few measurements in this category, but we should't dismiss them. I can make 4 buckets.

    Devlin Cronin

    I believe we are currently recording "secure" vs "insecure", where "secure" is "HTTPS and local HTTP" and "insecure" is "remote HTTP".

    You're completely correct; I don't know why I read that as just emitting a count. My mistake.

    I'm OK with changing to an "enum" histogram. Where exactly would you prefer to count HTTPS localhost, as HTTPS or as localhost?

    I think I'd count those as https. We'll likely allow any https site, so we can put those in the "safe" bucket. I think http://localhost is the more interesting one (since I could see us optentially allowing or disallowing those, based on usage)

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Anton Bershanskyi
    • Oliver Dunk
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 1
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Attention: Oliver Dunk <olive...@chromium.org>
    Gerrit-Comment-Date: Thu, 21 May 2026 22:52:16 +0000
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Anton Bershanskyi (Gerrit)

    unread,
    May 22, 2026, 7:56:45 AM (10 days ago) May 22
    to Chromium Metrics Reviews, Devlin Cronin, Oliver Dunk, chromium...@chromium.org, asvitkine...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Devlin Cronin

    Anton Bershanskyi added 1 comment

    File extensions/browser/api/runtime/runtime_api.cc
    Line 300, Patchset 1: // Record histogram one during session start to count every extension install
    Oliver Dunk . unresolved

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded. Is that the case? If so, can we handle that somehow?

    Note that we are also considering changing the persistence in https://github.com/w3c/webextensions/issues/981. I don't think that's relevant but I wanted to mention in case you can think of a way it might be.

    Anton Bershanskyi

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded.

    Yes, this is the case. No method of counting is perfect, this method avoids counting each call to `setUninstallURL()` and effectively getting data skewed by a single extension resetting uninstall URL on every background context invocation. We could implement a histogram in `OnExtensionUninstalled()` and count the number of actual page loads instead. If you have a better approach, I can implement that instead.

    Devlin Cronin

    I'm okay with us recording this in OnExtensionLoaded() -- that happens for each extension on every startup, which is reasonable.

    However, I do think we should tweak the histogram. Just recording a raw number here isn't very helpful, especially for the secure ones. For instance, if we see that this number is "1000", we don't know what to do with that data -- it doesn't indicate what kind of breakage we might see if we changed the behavior.

    Instead, I think we need a ratio here. At the very least, we should record secure vs insecure, and I'd lean towards going a step further and having three buckets: https, localhost, and http. Then, we would know what percentage of users would be affected if we were to make a change.

    Anton Bershanskyi

    At the very least, we should record secure vs insecure

    I believe we are currently recording "secure" vs "insecure", where "secure" is "HTTPS and local HTTP" and "insecure" is "remote HTTP". The current CL revision ("Patchset 1") has `base::UmaHistogramBoolean()` with the value being `uninstall_url.SchemeIs(url::kHttpsScheme) || net::IsLocalhost(uninstall_url)`.

    I'd lean towards going a step further and having three buckets: https, localhost, and http.

    I'm OK with changing to an "enum" histogram. Where exactly would you prefer to count HTTPS localhost, as HTTPS or as localhost? I expect very few measurements in this category, but we should't dismiss them. I can make 4 buckets.

    Devlin Cronin

    I believe we are currently recording "secure" vs "insecure", where "secure" is "HTTPS and local HTTP" and "insecure" is "remote HTTP".

    You're completely correct; I don't know why I read that as just emitting a count. My mistake.

    I'm OK with changing to an "enum" histogram. Where exactly would you prefer to count HTTPS localhost, as HTTPS or as localhost?

    I think I'd count those as https. We'll likely allow any https site, so we can put those in the "safe" bucket. I think http://localhost is the more interesting one (since I could see us optentially allowing or disallowing those, based on usage)

    Anton Bershanskyi

    So rewrote the patch with three buckets: "HTTPS", "Local HTTP" and "Remote HTTPS".

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Devlin Cronin
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 2
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Oliver Dunk <olive...@chromium.org>
    Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Fri, 22 May 2026 11:56:28 +0000
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Anton Bershanskyi (Gerrit)

    unread,
    May 26, 2026, 4:02:24 AM (7 days ago) May 26
    to Justin Lulejian, Oliver Dunk, Chromium LUCI CQ, Chromium Metrics Reviews, Devlin Cronin, chromium...@chromium.org, asvitkine...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Devlin Cronin

    Anton Bershanskyi added 1 comment

    Patchset-level comments
    File-level comment, Patchset 6 (Latest):
    Anton Bershanskyi . resolved

    Hi Devlin, Oliver, and Justin,

    Since this CL modifies histogram enums, I'm adding Justin as reviewer and moving Oliver to CC. Please feel free to revert.

    Justin, here is the summary of past discussion:
    1. Oliver questioned whether we should record the histogram during extension load. Devlin said it was fine as is. If needed, I can move histogram call wherever (e.g., record on actual extension uninstall, or record every call to `runtime.setUninstallUrl()`).
    2. Devlin suggested recording three buckets so I updated CL accordingly to use "HTTPS", "Local HTTP" and "Remote HTTPS".

    I'm currently leaving only Devlin in attention set.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Devlin Cronin
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 6
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Justin Lulejian <jlul...@chromium.org>
    Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
    Gerrit-CC: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Comment-Date: Tue, 26 May 2026 08:02:11 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Devlin Cronin (Gerrit)

    unread,
    May 27, 2026, 1:28:50 PM (5 days ago) May 27
    to Anton Bershanskyi, Justin Lulejian, Oliver Dunk, Chromium LUCI CQ, Chromium Metrics Reviews, Devlin Cronin, chromium...@chromium.org, asvitkine...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Anton Bershanskyi

    Devlin Cronin added 5 comments

    Patchset-level comments
    Devlin Cronin . resolved

    Thanks, Anton! Largely LG, but a few comments

    Commit Message
    Line 9, Patchset 6 (Latest):Add histogram tracking extension uninstall URLs considereing
    Devlin Cronin . unresolved

    typo: considering

    File extensions/browser/api/runtime/runtime_api.cc
    Line 277, Patchset 6 (Latest):// TODO(crbug.com/510816360): Remove this enum.
    Devlin Cronin . unresolved

    nit: maybe add a qualifier to these, like "Remove this enum around M155, once we've gathered enough data to analyze usage."

    Ditto for others.

    Otherwise, this reads a bit too much like someone should just go in and clean it up today : )

    File tools/metrics/histograms/metadata/extensions/histograms.xml
    Line 3999, Patchset 6 (Latest): and non-local hostname. This histogram may allow us to deprecqate support
    Devlin Cronin . unresolved

    nit: typo: deprecate

    Line 4002, Patchset 6 (Latest): IP. Recorded once per extension at &quot;user profile&quot; (profiles where
    people can install extensions, specifically profiles that can have
    non-component extensions installed) initialization if and only if extension
    has an uninstall URL set.
    Devlin Cronin . unresolved

    this isn't quite true -- the handling for this restriction is in InstalledLoader, which has checks for the type of profile before it emits metrics. This, on the other hand, emits this once per loaded extension if and only if the extension has an uninstall URL set, and is reported independent of profile type.

    That's actually okay, in this case -- we're not counting the number of extensions per profile, so there's not a risk of having a bunch of zeros for the signin profile, and component extensions wouldn't set the uninstall URL.

    I'd tweak this to instead be something like:

    "Recorded on extension load if an extension has a valid uninstall URL set."

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Anton Bershanskyi
    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: If4068f6054024974a9b49b869b27f26c35c6b851
    Gerrit-Change-Number: 7828426
    Gerrit-PatchSet: 6
    Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
    Gerrit-Reviewer: Justin Lulejian <jlul...@chromium.org>
    Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
    Gerrit-CC: Oliver Dunk <olive...@chromium.org>
    Gerrit-Attention: Anton Bershanskyi <bersh...@gmail.com>
    Gerrit-Comment-Date: Wed, 27 May 2026 17:28:41 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Anton Bershanskyi (Gerrit)

    unread,
    May 27, 2026, 3:42:39 PM (5 days ago) May 27
    to Justin Lulejian, Oliver Dunk, Chromium LUCI CQ, Chromium Metrics Reviews, Devlin Cronin, chromium...@chromium.org, asvitkine...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
    Attention needed from Devlin Cronin

    Anton Bershanskyi added 6 comments

    Patchset-level comments
    File-level comment, Patchset 13 (Latest):
    Anton Bershanskyi . resolved

    Hi Devlin, thanks for review, I incorporated all feedback.

    Commit Message
    Line 9, Patchset 6:Add histogram tracking extension uninstall URLs considereing
    Devlin Cronin . resolved

    typo: considering

    Anton Bershanskyi

    Done

    File extensions/browser/api/runtime/runtime_api.cc
    Line 277, Patchset 6:// TODO(crbug.com/510816360): Remove this enum.
    Devlin Cronin . resolved

    nit: maybe add a qualifier to these, like "Remove this enum around M155, once we've gathered enough data to analyze usage."

    Ditto for others.

    Otherwise, this reads a bit too much like someone should just go in and clean it up today : )

    Anton Bershanskyi

    Done

    Line 300, Patchset 1: // Record histogram one during session start to count every extension install
    Oliver Dunk . resolved

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded. Is that the case? If so, can we handle that somehow?

    Note that we are also considering changing the persistence in https://github.com/w3c/webextensions/issues/981. I don't think that's relevant but I wanted to mention in case you can think of a way it might be.

    Anton Bershanskyi

    It seems like this would not capture the uninstall URL until the extension has been unloaded and loaded again, since onInstalled presumably runs after OnExtensionLoaded.

    Yes, this is the case. No method of counting is perfect, this method avoids counting each call to `setUninstallURL()` and effectively getting data skewed by a single extension resetting uninstall URL on every background context invocation. We could implement a histogram in `OnExtensionUninstalled()` and count the number of actual page loads instead. If you have a better approach, I can implement that instead.

    Devlin Cronin

    I'm okay with us recording this in OnExtensionLoaded() -- that happens for each extension on every startup, which is reasonable.

    However, I do think we should tweak the histogram. Just recording a raw number here isn't very helpful, especially for the secure ones. For instance, if we see that this number is "1000", we don't know what to do with that data -- it doesn't indicate what kind of breakage we might see if we changed the behavior.

    Instead, I think we need a ratio here. At the very least, we should record secure vs insecure, and I'd lean towards going a step further and having three buckets: https, localhost, and http. Then, we would know what percentage of users would be affected if we were to make a change.

    Anton Bershanskyi

    At the very least, we should record secure vs insecure

    I believe we are currently recording "secure" vs "insecure", where "secure" is "HTTPS and local HTTP" and "insecure" is "remote HTTP". The current CL revision ("Patchset 1") has `base::UmaHistogramBoolean()` with the value being `uninstall_url.SchemeIs(url::kHttpsScheme) || net::IsLocalhost(uninstall_url)`.

    I'd lean towards going a step further and having three buckets: https, localhost, and http.

    I'm OK with changing to an "enum" histogram. Where exactly would you prefer to count HTTPS localhost, as HTTPS or as localhost? I expect very few measurements in this category, but we should't dismiss them. I can make 4 buckets.

    Devlin Cronin

    I believe we are currently recording "secure" vs "insecure", where "secure" is "HTTPS and local HTTP" and "insecure" is "remote HTTP".

    You're completely correct; I don't know why I read that as just emitting a count. My mistake.

    I'm OK with changing to an "enum" histogram. Where exactly would you prefer to count HTTPS localhost, as HTTPS or as localhost?

    I think I'd count those as https. We'll likely allow any https site, so we can put those in the "safe" bucket. I think http://localhost is the more interesting one (since I could see us optentially allowing or disallowing those, based on usage)

    Anton Bershanskyi

    So rewrote the patch with three buckets: "HTTPS", "Local HTTP" and "Remote HTTPS".

    Anton Bershanskyi

    Done

    File tools/metrics/histograms/metadata/extensions/histograms.xml
    Line 3999, Patchset 6: and non-local hostname. This histogram may allow us to deprecqate support
    Devlin Cronin . resolved

    nit: typo: deprecate

    Anton Bershanskyi

    Done

    Line 4002, Patchset 6: IP. Recorded once per extension at &quot;user profile&quot; (profiles where

    people can install extensions, specifically profiles that can have
    non-component extensions installed) initialization if and only if extension
    has an uninstall URL set.
    Devlin Cronin . resolved

    this isn't quite true -- the handling for this restriction is in InstalledLoader, which has checks for the type of profile before it emits metrics. This, on the other hand, emits this once per loaded extension if and only if the extension has an uninstall URL set, and is reported independent of profile type.

    That's actually okay, in this case -- we're not counting the number of extensions per profile, so there's not a risk of having a bunch of zeros for the signin profile, and component extensions wouldn't set the uninstall URL.

    I'd tweak this to instead be something like:

    "Recorded on extension load if an extension has a valid uninstall URL set."

    Anton Bershanskyi

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Devlin Cronin
    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: If4068f6054024974a9b49b869b27f26c35c6b851
      Gerrit-Change-Number: 7828426
      Gerrit-PatchSet: 13
      Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
      Gerrit-Reviewer: Anton Bershanskyi <bersh...@gmail.com>
      Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Reviewer: Justin Lulejian <jlul...@chromium.org>
      Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
      Gerrit-CC: Oliver Dunk <olive...@chromium.org>
      Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
      Gerrit-Comment-Date: Wed, 27 May 2026 19:42:17 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Devlin Cronin (Gerrit)

      unread,
      2:44 PM (2 hours ago) 2:44 PM
      to Anton Bershanskyi, Devlin Cronin, Justin Lulejian, Oliver Dunk, Chromium LUCI CQ, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
      Attention needed from Anton Bershanskyi

      Devlin Cronin voted and added 2 comments

      Votes added by Devlin Cronin

      Code-Review+1

      2 comments

      Patchset-level comments
      Devlin Cronin . resolved

      LGTM; thank you, Anton!

      File extensions/browser/api/runtime/runtime_api.cc
      Line 49, Patchset 13 (Latest):// TODO(crbug.com/510816360): Remove two following lines around M155, once we've
      // gathered enough data in "Extensions.RuntimeUninstallURL.Host" histogram.
      Devlin Cronin . unresolved

      nit: let's actually remove this TODO. It's a bit fragile -- other uses could crop up within this same file, includes could be reordered, etc. And removing unused includes should be done whenever removing code (though, of course, we do miss it sometimes), so the TODO below on removing the histogram emission should implicitly cover this

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Anton Bershanskyi
      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: If4068f6054024974a9b49b869b27f26c35c6b851
        Gerrit-Change-Number: 7828426
        Gerrit-PatchSet: 13
        Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
        Gerrit-Reviewer: Anton Bershanskyi <bersh...@gmail.com>
        Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
        Gerrit-Reviewer: Justin Lulejian <jlul...@chromium.org>
        Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
        Gerrit-CC: Oliver Dunk <olive...@chromium.org>
        Gerrit-Attention: Anton Bershanskyi <bersh...@gmail.com>
        Gerrit-Comment-Date: Mon, 01 Jun 2026 18:44:00 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Anton Bershanskyi (Gerrit)

        unread,
        2:47 PM (2 hours ago) 2:47 PM
        to Devlin Cronin, Justin Lulejian, Oliver Dunk, Chromium LUCI CQ, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
        Attention needed from Devlin Cronin

        Anton Bershanskyi added 1 comment

        File extensions/browser/api/runtime/runtime_api.cc
        Line 49, Patchset 13:// TODO(crbug.com/510816360): Remove two following lines around M155, once we've

        // gathered enough data in "Extensions.RuntimeUninstallURL.Host" histogram.
        Devlin Cronin . resolved

        nit: let's actually remove this TODO. It's a bit fragile -- other uses could crop up within this same file, includes could be reordered, etc. And removing unused includes should be done whenever removing code (though, of course, we do miss it sometimes), so the TODO below on removing the histogram emission should implicitly cover this

        Anton Bershanskyi

        Removed the comment. Please re-stamp this CL. Thanks!

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Devlin Cronin
        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: If4068f6054024974a9b49b869b27f26c35c6b851
          Gerrit-Change-Number: 7828426
          Gerrit-PatchSet: 14
          Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
          Gerrit-Reviewer: Anton Bershanskyi <bersh...@gmail.com>
          Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
          Gerrit-Reviewer: Justin Lulejian <jlul...@chromium.org>
          Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
          Gerrit-CC: Oliver Dunk <olive...@chromium.org>
          Gerrit-Attention: Devlin Cronin <rdevlin...@chromium.org>
          Gerrit-Comment-Date: Mon, 01 Jun 2026 18:46:48 +0000
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Devlin Cronin (Gerrit)

          unread,
          2:51 PM (2 hours ago) 2:51 PM
          to Anton Bershanskyi, Devlin Cronin, Justin Lulejian, Oliver Dunk, Chromium LUCI CQ, Chromium Metrics Reviews, chromium...@chromium.org, asvitkine...@chromium.org, chromium-a...@chromium.org, extension...@chromium.org
          Attention needed from Anton Bershanskyi

          Devlin Cronin voted and added 1 comment

          Votes added by Devlin Cronin

          Code-Review+1

          1 comment

          Patchset-level comments
          File-level comment, Patchset 14 (Latest):
          Devlin Cronin . resolved

          s LGTM!

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Anton Bershanskyi
          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: If4068f6054024974a9b49b869b27f26c35c6b851
          Gerrit-Change-Number: 7828426
          Gerrit-PatchSet: 14
          Gerrit-Owner: Anton Bershanskyi <bersh...@gmail.com>
          Gerrit-Reviewer: Anton Bershanskyi <bersh...@gmail.com>
          Gerrit-Reviewer: Devlin Cronin <rdevlin...@chromium.org>
          Gerrit-Reviewer: Justin Lulejian <jlul...@chromium.org>
          Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
          Gerrit-CC: Oliver Dunk <olive...@chromium.org>
          Gerrit-Attention: Anton Bershanskyi <bersh...@gmail.com>
          Gerrit-Comment-Date: Mon, 01 Jun 2026 18:50:53 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: Yes
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy
          Reply all
          Reply to author
          Forward
          0 new messages