IWA: Implement entitlement enforcement for user-installed apps [chromium/src : main]

1 view
Skip to first unread message

Andrew Rayskiy (Gerrit)

unread,
Feb 26, 2026, 7:26:13 AMFeb 26
to Zgroza (Luke) Klimek, Rijubrata Bhaumik, Chromium LUCI CQ, Simon Hangl, AyeAye, phoglun...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, japhet+...@chromium.org, aixba+wat...@chromium.org, mek+w...@chromium.org, webap...@microsoft.com, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, loyso...@chromium.org, mattreyno...@chromium.org, odejesu...@chromium.org, mgiuca...@chromium.org, dmurph+watc...@chromium.org, philli...@chromium.org, network-ser...@chromium.org, rmcelra...@chromium.org, dibyapal+wa...@chromium.org
Attention needed from Zgroza (Luke) Klimek

Andrew Rayskiy added 5 comments

Patchset-level comments
File-level comment, Patchset 12 (Latest):
Andrew Rayskiy . unresolved

(as discussed offline, this requires splitting)

File chrome/browser/media/webrtc/get_all_screens_media_browsertest.cc
Line 224, Patchset 12 (Latest): &web_app::IsolatedWebAppInstallSource::FromExternalPolicy)
Andrew Rayskiy . unresolved

InstallWithSource(web_app::IsolatedWebAppInstallSource::FromExternalPolicy) isn't great for multiple reasons. We shouldn't do this.

File chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
Line 1562, Patchset 12 (Latest): IsolatedWebAppInstallSource::FromDevCommandLine(
Andrew Rayskiy . unresolved

Why is this change needed? Are we sure it doesn't break any underlying assumptions?

File chrome/browser/web_applications/isolated_web_apps/runtime_data/BUILD.gn
Line 17, Patchset 12 (Latest): defines += [ "ENABLE_SMART_CARD" ]
Andrew Rayskiy . unresolved

Why is this needed? `runtime_data` knows nothing about the specifics of the smart card API.

File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.h
Line 122, Patchset 12 (Latest): void set_allow_all_user_installs_with_all_entitlements(bool allow_all) {
Andrew Rayskiy . unresolved

That would be a -1 from me -- let's either update the affected tests or introduce a separate fake provider that returns true for any entitlement requests.

Open in Gerrit

Related details

Attention is currently required from:
  • Zgroza (Luke) Klimek
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: I219d3de5db8608b594131158e9ba5cb76a6a6964
Gerrit-Change-Number: 7594555
Gerrit-PatchSet: 12
Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-CC: Andrew Rayskiy <green...@google.com>
Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Feb 2026 12:26:01 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Zgroza (Luke) Klimek (Gerrit)

unread,
Feb 26, 2026, 9:20:21 AMFeb 26
to Rijubrata Bhaumik, Chromium LUCI CQ, Andrew Rayskiy, Simon Hangl, AyeAye, phoglun...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, japhet+...@chromium.org, aixba+wat...@chromium.org, mek+w...@chromium.org, webap...@microsoft.com, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, loyso...@chromium.org, mattreyno...@chromium.org, odejesu...@chromium.org, mgiuca...@chromium.org, dmurph+watc...@chromium.org, philli...@chromium.org, network-ser...@chromium.org, rmcelra...@chromium.org, dibyapal+wa...@chromium.org
Attention needed from Andrew Rayskiy

Zgroza (Luke) Klimek voted and added 2 comments

Votes added by Zgroza (Luke) Klimek

Commit-Queue+1

2 comments

File chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
Line 1562, Patchset 12: IsolatedWebAppInstallSource::FromDevCommandLine(
Andrew Rayskiy . unresolved

Why is this change needed? Are we sure it doesn't break any underlying assumptions?

Zgroza (Luke) Klimek

It should not. Essentially this is about tests that do not use IWA test harness, and as such do not have auto-injected fake entitlements provider. Editing all of those by hand and adding entitlements would be a bit of a pain.

File chrome/browser/web_applications/isolated_web_apps/runtime_data/BUILD.gn
Line 17, Patchset 12: defines += [ "ENABLE_SMART_CARD" ]
Andrew Rayskiy . unresolved

Why is this needed? `runtime_data` knows nothing about the specifics of the smart card API.

Zgroza (Luke) Klimek

It's about the general effort of not compiling smart card specific stuff on systems that do not support the API, it's similar in many other places. Here it's about iffing-out smart card permissions policy related stuff if the browser does not support the API anyway.

Open in Gerrit

Related details

Attention is currently required from:
  • Andrew Rayskiy
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: I219d3de5db8608b594131158e9ba5cb76a6a6964
Gerrit-Change-Number: 7594555
Gerrit-PatchSet: 13
Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-CC: Andrew Rayskiy <green...@google.com>
Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Andrew Rayskiy <green...@google.com>
Gerrit-Comment-Date: Thu, 26 Feb 2026 14:20:08 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: Andrew Rayskiy <green...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Andrew Rayskiy (Gerrit)

unread,
Feb 26, 2026, 9:57:56 AMFeb 26
to Zgroza (Luke) Klimek, Rijubrata Bhaumik, Chromium LUCI CQ, Simon Hangl, AyeAye, phoglun...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, japhet+...@chromium.org, aixba+wat...@chromium.org, mek+w...@chromium.org, webap...@microsoft.com, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, loyso...@chromium.org, mattreyno...@chromium.org, odejesu...@chromium.org, mgiuca...@chromium.org, dmurph+watc...@chromium.org, philli...@chromium.org, network-ser...@chromium.org, rmcelra...@chromium.org, dibyapal+wa...@chromium.org
Attention needed from Zgroza (Luke) Klimek

Andrew Rayskiy added 1 comment

File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.cc
Line 200, Patchset 13 (Latest): return IwaKeyDistributionInfoProvider::GetInstanceForTesting()
Andrew Rayskiy . unresolved

Oh, I didn't notice that too. It's even worse, so please don't :/

Open in Gerrit

Related details

Attention is currently required from:
  • Zgroza (Luke) Klimek
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: I219d3de5db8608b594131158e9ba5cb76a6a6964
Gerrit-Change-Number: 7594555
Gerrit-PatchSet: 13
Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-CC: Andrew Rayskiy <green...@google.com>
Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-Comment-Date: Thu, 26 Feb 2026 14:57:40 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Zgroza (Luke) Klimek (Gerrit)

unread,
Feb 26, 2026, 10:15:51 AMFeb 26
to Rijubrata Bhaumik, Chromium LUCI CQ, Andrew Rayskiy, Simon Hangl, AyeAye, phoglun...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, japhet+...@chromium.org, aixba+wat...@chromium.org, mek+w...@chromium.org, webap...@microsoft.com, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, loyso...@chromium.org, mattreyno...@chromium.org, odejesu...@chromium.org, mgiuca...@chromium.org, dmurph+watc...@chromium.org, philli...@chromium.org, network-ser...@chromium.org, rmcelra...@chromium.org, dibyapal+wa...@chromium.org
Attention needed from Andrew Rayskiy

Zgroza (Luke) Klimek voted and added 1 comment

Votes added by Zgroza (Luke) Klimek

Commit-Queue+1

1 comment

File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.cc
Line 200, Patchset 13: return IwaKeyDistributionInfoProvider::GetInstanceForTesting()
Andrew Rayskiy . resolved

Oh, I didn't notice that too. It's even worse, so please don't :/

Zgroza (Luke) Klimek

I don't remember why I did that, frankly, probably a relic of one of the past approaches.

Open in Gerrit

Related details

Attention is currently required from:
  • Andrew Rayskiy
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: I219d3de5db8608b594131158e9ba5cb76a6a6964
Gerrit-Change-Number: 7594555
Gerrit-PatchSet: 14
Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
Gerrit-CC: Andrew Rayskiy <green...@google.com>
Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
Gerrit-CC: Simon Hangl <sim...@google.com>
Gerrit-Attention: Andrew Rayskiy <green...@google.com>
Gerrit-Comment-Date: Thu, 26 Feb 2026 15:15:36 +0000
satisfied_requirement
unsatisfied_requirement
open
diffy

Zgroza (Luke) Klimek (Gerrit)

unread,
Mar 2, 2026, 9:30:16 AMMar 2
to Rijubrata Bhaumik, Chromium LUCI CQ, Andrew Rayskiy, Simon Hangl, AyeAye, phoglun...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, japhet+...@chromium.org, aixba+wat...@chromium.org, mek+w...@chromium.org, webap...@microsoft.com, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, loyso...@chromium.org, mattreyno...@chromium.org, odejesu...@chromium.org, mgiuca...@chromium.org, dmurph+watc...@chromium.org, philli...@chromium.org, network-ser...@chromium.org, rmcelra...@chromium.org, dibyapal+wa...@chromium.org
Attention needed from Andrew Rayskiy

Zgroza (Luke) Klimek voted Commit-Queue+0

Commit-Queue+0
Gerrit-Comment-Date: Mon, 02 Mar 2026 14:30:02 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Zgroza (Luke) Klimek (Gerrit)

unread,
Mar 2, 2026, 10:51:09 AMMar 2
to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
Attention needed from Andrew Rayskiy

Zgroza (Luke) Klimek voted Commit-Queue+1

Commit-Queue+1
Open in Gerrit

Related details

Attention is currently required from:
  • Andrew Rayskiy
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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
    Gerrit-Change-Number: 7613536
    Gerrit-PatchSet: 6
    Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
    Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
    Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-CC: Simon Hangl <sim...@google.com>
    Gerrit-Attention: Andrew Rayskiy <green...@google.com>
    Gerrit-Comment-Date: Mon, 02 Mar 2026 15:50:54 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: Yes
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Andrew Rayskiy (Gerrit)

    unread,
    Mar 2, 2026, 11:20:36 AMMar 2
    to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
    Attention needed from Zgroza (Luke) Klimek

    Andrew Rayskiy added 7 comments

    File chrome/browser/captive_portal/captive_portal_browsertest.cc
    Line 2074, Patchset 6 (Latest): ->InstallWithSource(
    Andrew Rayskiy . unresolved

    As discussed offline, we'd better turn this into a proper policy install via the update server

    File chrome/browser/chrome_content_browser_client.cc
    Line 187, Patchset 6 (Latest):#if !BUILDFLAG(IS_ANDROID)
    Andrew Rayskiy . unresolved

    ?

    File chrome/browser/media/webrtc/get_all_screens_media_browsertest.cc
    Line 220, Patchset 6 (Latest): allowed_app_1_url_info_ =
    Andrew Rayskiy . unresolved

    As discussed offline, we'd better turn this into a proper policy install via the update server

    File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
    Line 62, Patchset 6 (Latest):ApplyEntitlements(const web_app::IwaPermissionsPolicyCache::CacheEntry& policy,
    Andrew Rayskiy . unresolved

    This function is totally overloaded with various branches merged together; ideally this must only be called if the preconditions are fulfilled.

    ```
    auto url_info = web_app::IsolatedWebAppUrlInfo::CreateFromSignedWebBundleId(
    origin.web_bundle_id());
    auto app_id = url_info.app_id();
    if (!registrar.AppMatches(app_id, IsIsolatedApp()) {
    return false;
    }
    if (registrar.AppMatches(app_id, IwaPolicy() | IwaDevMode()) {
    return policy_as_is;
    }
    return ApplyEntitlements(profile, policy_as_is, url_info)
    ```
    Line 68, Patchset 6 (Latest): const bool is_managed =
    Andrew Rayskiy . unresolved

    We don't do that here.

    ```
    registrar.AppMAtches(app_id, WebAppFilter::<X>)
    ```

    On top of that, this isn't a correct check; you should be checking the presence of a managed source and not the absence of user install source

    File chrome/browser/web_applications/isolated_web_apps/test/chrome_iwa_runtime_data_provider_mixin.h
    Line 45, Patchset 6 (Latest): ChromeIwaRuntimeDataProviderMixin::data_provider_ = nullptr;
    Andrew Rayskiy . unresolved

    This looks weird AF. Why?

    File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.h
    Line 122, Patchset 6 (Latest): void SetAllowaAllUserInstallsWithAllEntitlements(bool allow_all);
    Andrew Rayskiy . unresolved

    I'm still strictly opposed to this as discussed offline. There are not that many API tests on the //chrome level overall, and they're all relatively easy to migrate to proper user install allowlist with relevant entitlements.

    By using the wildcard approach, we basically scatter the problem around: instead of having both the installation routine as well as the permissions policy routine rely on the user install allowlist by calling `GetUserInstallAllowlistData()`, installation in existing tests will be guarded by `AddTrustedWebBundleIdForTesting()` (which is an integral part of the `->Install()` call of the `IsolatedWebAppBuilder`, and the PP checks will fetch this custom allowlist stuff.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Zgroza (Luke) Klimek
    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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
      Gerrit-Change-Number: 7613536
      Gerrit-PatchSet: 6
      Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Comment-Date: Mon, 02 Mar 2026 16:20:21 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Andrew Rayskiy (Gerrit)

      unread,
      Mar 2, 2026, 11:21:57 AMMar 2
      to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
      Attention needed from Zgroza (Luke) Klimek

      Andrew Rayskiy added 1 comment

      File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.h
      Line 122, Patchset 6 (Latest): void SetAllowaAllUserInstallsWithAllEntitlements(bool allow_all);
      Andrew Rayskiy . unresolved

      I'm still strictly opposed to this as discussed offline. There are not that many API tests on the //chrome level overall, and they're all relatively easy to migrate to proper user install allowlist with relevant entitlements.

      By using the wildcard approach, we basically scatter the problem around: instead of having both the installation routine as well as the permissions policy routine rely on the user install allowlist by calling `GetUserInstallAllowlistData()`, installation in existing tests will be guarded by `AddTrustedWebBundleIdForTesting()` (which is an integral part of the `->Install()` call of the `IsolatedWebAppBuilder`, and the PP checks will fetch this custom allowlist stuff.

      Andrew Rayskiy

      https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h;bpv=1;bpt=1;l=129?q=-f:%5Eout%2F%20-f:%5Egen%2F%20-f:%5Esrc%2F%20case:auto%20IsolatedWebAppBuilder&gsn=AddPermissionsPolicyWildcard&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dchrome%2Fbrowser%2Fweb_applications%2Fisolated_web_apps%2Ftest%2Fisolated_web_app_builder.h%239sZDwJltov_HNMRMP9qWpuSIMrUULp8-PMLbUIIoGdQ

      https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h;bpv=1;bpt=1;l=131?q=-f:%5Eout%2F%20-f:%5Egen%2F%20-f:%5Esrc%2F%20case:auto%20IsolatedWebAppBuilder&gsn=AddPermissionsPolicy&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dchrome%2Fbrowser%2Fweb_applications%2Fisolated_web_apps%2Ftest%2Fisolated_web_app_builder.h%23cjvf0yqRMWWE70YXIFQ5pgD31bxcaOOtYGsPa_HrZMU

      Have around ~40 entries overall :) Just launch gemini-cli and come back in an hour

      Gerrit-Comment-Date: Mon, 02 Mar 2026 16:21:46 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Andrew Rayskiy <green...@google.com>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Zgroza (Luke) Klimek (Gerrit)

      unread,
      Mar 6, 2026, 6:37:16 AMMar 6
      to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org

      Zgroza (Luke) Klimek added 2 comments

      File chrome/browser/chrome_content_browser_client.cc
      Line 187, Patchset 6:#if !BUILDFLAG(IS_ANDROID)
      Andrew Rayskiy . resolved

      ?

      Zgroza (Luke) Klimek

      Hm, probably some rebase accident at some point. Removed.

      File chrome/browser/web_applications/isolated_web_apps/test/chrome_iwa_runtime_data_provider_mixin.h
      Line 45, Patchset 6: ChromeIwaRuntimeDataProviderMixin::data_provider_ = nullptr;
      Andrew Rayskiy . resolved

      This looks weird AF. Why?

      Zgroza (Luke) Klimek

      Because derived constructor is ran first, which causes dangling raw_ptr error when base constructor is called (this is owned by the unique_ptr in the derived class).

      Open in Gerrit

      Related details

      Attention set is empty
      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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
      Gerrit-Change-Number: 7613536
      Gerrit-PatchSet: 7
      Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Comment-Date: Fri, 06 Mar 2026 11:37:00 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Andrew Rayskiy (Gerrit)

      unread,
      Mar 6, 2026, 7:05:22 AMMar 6
      to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
      Attention needed from Zgroza (Luke) Klimek

      Andrew Rayskiy added 1 comment

      File chrome/browser/web_applications/isolated_web_apps/test/chrome_iwa_runtime_data_provider_mixin.h
      Line 45, Patchset 6: ChromeIwaRuntimeDataProviderMixin::data_provider_ = nullptr;
      Andrew Rayskiy . unresolved

      This looks weird AF. Why?

      Zgroza (Luke) Klimek

      Because derived constructor is ran first, which causes dangling raw_ptr error when base constructor is called (this is owned by the unique_ptr in the derived class).

      Andrew Rayskiy

      I see, fair. Let's then do the following:

      ```
      1. Make the parent class own the unique_ptr
      2. Expose a T* getter on the parent class
      3. Do a static_cast<DataProvider*> in the child class
      ```

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Zgroza (Luke) Klimek
      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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
      Gerrit-Change-Number: 7613536
      Gerrit-PatchSet: 7
      Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Comment-Date: Fri, 06 Mar 2026 12:05:10 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Andrew Rayskiy <green...@google.com>
      Comment-In-Reply-To: Zgroza (Luke) Klimek <zgr...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Zgroza (Luke) Klimek (Gerrit)

      unread,
      Mar 6, 2026, 9:23:15 AMMar 6
      to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
      Attention needed from Andrew Rayskiy

      Zgroza (Luke) Klimek added 6 comments

      File chrome/browser/captive_portal/captive_portal_browsertest.cc
      Line 2074, Patchset 6: ->InstallWithSource(
      Andrew Rayskiy . resolved

      As discussed offline, we'd better turn this into a proper policy install via the update server

      Zgroza (Luke) Klimek

      Done

      File chrome/browser/media/webrtc/get_all_screens_media_browsertest.cc
      Line 220, Patchset 6: allowed_app_1_url_info_ =
      Andrew Rayskiy . resolved

      As discussed offline, we'd better turn this into a proper policy install via the update server

      Zgroza (Luke) Klimek

      Done

      File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
      Line 62, Patchset 6:ApplyEntitlements(const web_app::IwaPermissionsPolicyCache::CacheEntry& policy,
      Andrew Rayskiy . resolved

      This function is totally overloaded with various branches merged together; ideally this must only be called if the preconditions are fulfilled.

      ```
      auto url_info = web_app::IsolatedWebAppUrlInfo::CreateFromSignedWebBundleId(
      origin.web_bundle_id());
      auto app_id = url_info.app_id();
      if (!registrar.AppMatches(app_id, IsIsolatedApp()) {
      return false;
      }
      if (registrar.AppMatches(app_id, IwaPolicy() | IwaDevMode()) {
      return policy_as_is;
      }
      return ApplyEntitlements(profile, policy_as_is, url_info)
      ```
      Zgroza (Luke) Klimek

      Done

      Line 68, Patchset 6: const bool is_managed =
      Andrew Rayskiy . resolved

      We don't do that here.

      ```
      registrar.AppMAtches(app_id, WebAppFilter::<X>)
      ```

      On top of that, this isn't a correct check; you should be checking the presence of a managed source and not the absence of user install source

      Zgroza (Luke) Klimek

      Done

      File chrome/browser/web_applications/isolated_web_apps/test/chrome_iwa_runtime_data_provider_mixin.h
      Line 45, Patchset 6: ChromeIwaRuntimeDataProviderMixin::data_provider_ = nullptr;
      Andrew Rayskiy . resolved

      This looks weird AF. Why?

      Zgroza (Luke) Klimek

      Because derived constructor is ran first, which causes dangling raw_ptr error when base constructor is called (this is owned by the unique_ptr in the derived class).

      Andrew Rayskiy

      I see, fair. Let's then do the following:

      ```
      1. Make the parent class own the unique_ptr
      2. Expose a T* getter on the parent class
      3. Do a static_cast<DataProvider*> in the child class
      ```

      Zgroza (Luke) Klimek

      Done

      File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.h
      Line 122, Patchset 6: void SetAllowaAllUserInstallsWithAllEntitlements(bool allow_all);
      Andrew Rayskiy . unresolved

      I'm still strictly opposed to this as discussed offline. There are not that many API tests on the //chrome level overall, and they're all relatively easy to migrate to proper user install allowlist with relevant entitlements.

      By using the wildcard approach, we basically scatter the problem around: instead of having both the installation routine as well as the permissions policy routine rely on the user install allowlist by calling `GetUserInstallAllowlistData()`, installation in existing tests will be guarded by `AddTrustedWebBundleIdForTesting()` (which is an integral part of the `->Install()` call of the `IsolatedWebAppBuilder`, and the PP checks will fetch this custom allowlist stuff.

      Andrew Rayskiy

      https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h;bpv=1;bpt=1;l=129?q=-f:%5Eout%2F%20-f:%5Egen%2F%20-f:%5Esrc%2F%20case:auto%20IsolatedWebAppBuilder&gsn=AddPermissionsPolicyWildcard&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dchrome%2Fbrowser%2Fweb_applications%2Fisolated_web_apps%2Ftest%2Fisolated_web_app_builder.h%239sZDwJltov_HNMRMP9qWpuSIMrUULp8-PMLbUIIoGdQ

      https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h;bpv=1;bpt=1;l=131?q=-f:%5Eout%2F%20-f:%5Egen%2F%20-f:%5Esrc%2F%20case:auto%20IsolatedWebAppBuilder&gsn=AddPermissionsPolicy&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dchrome%2Fbrowser%2Fweb_applications%2Fisolated_web_apps%2Ftest%2Fisolated_web_app_builder.h%23cjvf0yqRMWWE70YXIFQ5pgD31bxcaOOtYGsPa_HrZMU

      Have around ~40 entries overall :) Just launch gemini-cli and come back in an hour

      Zgroza (Luke) Klimek

      Hmm, sure. PTAL at it now

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Andrew Rayskiy
      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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
      Gerrit-Change-Number: 7613536
      Gerrit-PatchSet: 9
      Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Attention: Andrew Rayskiy <green...@google.com>
      Gerrit-Comment-Date: Fri, 06 Mar 2026 14:23:01 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Andrew Rayskiy (Gerrit)

      unread,
      Mar 6, 2026, 9:28:25 AMMar 6
      to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
      Attention needed from Zgroza (Luke) Klimek

      Andrew Rayskiy added 1 comment

      File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.h
      Line 122, Patchset 6: void SetAllowaAllUserInstallsWithAllEntitlements(bool allow_all);
      Andrew Rayskiy . unresolved

      I'm still strictly opposed to this as discussed offline. There are not that many API tests on the //chrome level overall, and they're all relatively easy to migrate to proper user install allowlist with relevant entitlements.

      By using the wildcard approach, we basically scatter the problem around: instead of having both the installation routine as well as the permissions policy routine rely on the user install allowlist by calling `GetUserInstallAllowlistData()`, installation in existing tests will be guarded by `AddTrustedWebBundleIdForTesting()` (which is an integral part of the `->Install()` call of the `IsolatedWebAppBuilder`, and the PP checks will fetch this custom allowlist stuff.

      Andrew Rayskiy

      https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h;bpv=1;bpt=1;l=129?q=-f:%5Eout%2F%20-f:%5Egen%2F%20-f:%5Esrc%2F%20case:auto%20IsolatedWebAppBuilder&gsn=AddPermissionsPolicyWildcard&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dchrome%2Fbrowser%2Fweb_applications%2Fisolated_web_apps%2Ftest%2Fisolated_web_app_builder.h%239sZDwJltov_HNMRMP9qWpuSIMrUULp8-PMLbUIIoGdQ

      https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h;bpv=1;bpt=1;l=131?q=-f:%5Eout%2F%20-f:%5Egen%2F%20-f:%5Esrc%2F%20case:auto%20IsolatedWebAppBuilder&gsn=AddPermissionsPolicy&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dchrome%2Fbrowser%2Fweb_applications%2Fisolated_web_apps%2Ftest%2Fisolated_web_app_builder.h%23cjvf0yqRMWWE70YXIFQ5pgD31bxcaOOtYGsPa_HrZMU

      Have around ~40 entries overall :) Just launch gemini-cli and come back in an hour

      Zgroza (Luke) Klimek

      Hmm, sure. PTAL at it now

      Andrew Rayskiy

      Or, as I said, let's do a simple (a really simple!!!) intermediate step with checking the `GetTrustedWebBundleIdsForTesting()` in the meantime and then migrate the rest incrementally.

      (IT WILL BE EASIER!!!!!!)

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Zgroza (Luke) Klimek
      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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
      Gerrit-Change-Number: 7613536
      Gerrit-PatchSet: 9
      Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Comment-Date: Fri, 06 Mar 2026 14:28:08 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Andrew Rayskiy (Gerrit)

      unread,
      Mar 6, 2026, 12:34:40 PMMar 6
      to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
      Attention needed from Zgroza (Luke) Klimek

      Andrew Rayskiy added 8 comments

      File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.h
      Line 48, Patchset 10 (Latest): GetBaselinePermissionsPolicyForIsolatedWebApp(
      Andrew Rayskiy . unresolved

      Let's not wrap this as an optional -- this no longer makes sense

      File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
      Line 84, Patchset 10 (Latest): if (!entitlement) {
      Andrew Rayskiy . unresolved

      Pretty much all if-s here are nested up to a length of three. I'm sure we can do better!

      ```
      bool is_feature_allowed = [&] {
      if (!entitlement) {
      return !network::IsPermissionsPolicyFeatureGuardedByIsolatedContext(
      entry.feature);
      }
      return allowlist_data && IsEntitlementGiven(allowlist_data, entitlement, version);
      }();
      ```
      Line 140, Patchset 10 (Latest): Profile* profile = Profile::FromBrowserContext(browser_context);
      Andrew Rayskiy . unresolved

      I'm a hater of early returns, so let's be a bit more humane.

      ```
      if (!content::AreIsolatedWebAppsEnabled(browser_context)) {
      return {};
      }
      ASSIGN_OR_RETURN(web_app::IwaOrigin origin,
      web_app::IwaOrigin::Create(iwa_origin.GetURL()),
      [](auto) { return {}; });
      auto* policy = web_app::IwaPermissionsPolicyCacheFactory::GetForProfile(...)->GetPolicy(...);
      if (!policy) {
      return {};
      }

      ...

      const web_app::WebAppRegistrar& registrar = web_app::WebAppProvider::GetForWebApps(...)->registrar_unsafe();
      const auto* iwa = registrar.GetAppById(app_id, WebAppFilter::IsIsolatedApp());
      if (!iwa) {
      return {};
      }
      if (registrar.AppMatches(<complex_condition>) || ForTest()) {
      return as_is;
      }

      return Apply()
      ```

      File chrome/browser/web_applications/isolated_web_apps/isolated_web_app_entitlements_browsertest.cc
      Line 27, Patchset 10 (Latest): blink::features::kSmartCard,
      Andrew Rayskiy . unresolved

      It's already enabled by default -- just remove this
      ditto printing

      Line 69, Patchset 10 (Latest):#if defined(ENABLE_SMART_CARD)
      Andrew Rayskiy . unresolved

      I still have no idea why this define is so valuable. It basically completely disrupts the reading flow and turns a two-line decl into a four-line decl so that it falls completely out of line.

      Line 125, Patchset 10 (Latest): set.entitlements.push_back(
      Andrew Rayskiy . unresolved

      I remember there once used to be a thing that allowed you to simplify manual operations. Something like `for`? Not sure.

      Line 154, Patchset 10 (Latest): EXPECT_TRUE(IsFeatureAllowed(frame, "direct-sockets"));
      Andrew Rayskiy . unresolved

      ditto here

      File chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.cc
      Line 185, Patchset 10 (Latest): if (bypass_entitlements &&
      Andrew Rayskiy . unresolved

      Let's reuse the same AddTrustedWebBundleIdForTesting from above :) As I said, it will be easier to migrate everything altogether.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Zgroza (Luke) Klimek
      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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
      Gerrit-Change-Number: 7613536
      Gerrit-PatchSet: 10
      Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Comment-Date: Fri, 06 Mar 2026 17:34:25 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Zgroza (Luke) Klimek (Gerrit)

      unread,
      Mar 9, 2026, 8:09:42 AMMar 9
      to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org

      Zgroza (Luke) Klimek added 1 comment

      File chrome/browser/web_applications/isolated_web_apps/isolated_web_app_entitlements_browsertest.cc
      Line 69, Patchset 10 (Latest):#if defined(ENABLE_SMART_CARD)
      Andrew Rayskiy . resolved

      I still have no idea why this define is so valuable. It basically completely disrupts the reading flow and turns a two-line decl into a four-line decl so that it falls completely out of line.

      Zgroza (Luke) Klimek

      `network::mojom::PermissionsPolicyFeature::kSmartCard` is available only when SmartCard feature is available. Which is only on ChromeOS. So it has to remain here.

      Open in Gerrit

      Related details

      Attention set is empty
      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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
      Gerrit-Change-Number: 7613536
      Gerrit-PatchSet: 10
      Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
      Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: Simon Hangl <sim...@google.com>
      Gerrit-Comment-Date: Mon, 09 Mar 2026 12:09:30 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Andrew Rayskiy <green...@google.com>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Zgroza (Luke) Klimek (Gerrit)

      unread,
      Mar 9, 2026, 12:02:35 PMMar 9
      to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
      Attention needed from Andrew Rayskiy

      Zgroza (Luke) Klimek added 8 comments

      File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.h
      Line 48, Patchset 10: GetBaselinePermissionsPolicyForIsolatedWebApp(
      Andrew Rayskiy . resolved

      Let's not wrap this as an optional -- this no longer makes sense

      Zgroza (Luke) Klimek

      Yeah, it was in progress—just You commented on a rebase patchset.

      File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
      Line 84, Patchset 10: if (!entitlement) {
      Andrew Rayskiy . resolved

      Pretty much all if-s here are nested up to a length of three. I'm sure we can do better!

      ```
      bool is_feature_allowed = [&] {
      if (!entitlement) {
      return !network::IsPermissionsPolicyFeatureGuardedByIsolatedContext(
      entry.feature);
      }
      return allowlist_data && IsEntitlementGiven(allowlist_data, entitlement, version);
      }();
      ```
      Zgroza (Luke) Klimek

      Done

      Line 140, Patchset 10: Profile* profile = Profile::FromBrowserContext(browser_context);
      Andrew Rayskiy . resolved

      I'm a hater of early returns, so let's be a bit more humane.

      ```
      if (!content::AreIsolatedWebAppsEnabled(browser_context)) {
      return {};
      }
      ASSIGN_OR_RETURN(web_app::IwaOrigin origin,
      web_app::IwaOrigin::Create(iwa_origin.GetURL()),
      [](auto) { return {}; });
      auto* policy = web_app::IwaPermissionsPolicyCacheFactory::GetForProfile(...)->GetPolicy(...);
      if (!policy) {
      return {};
      }

      ...

      const web_app::WebAppRegistrar& registrar = web_app::WebAppProvider::GetForWebApps(...)->registrar_unsafe();
      const auto* iwa = registrar.GetAppById(app_id, WebAppFilter::IsIsolatedApp());
      if (!iwa) {
      return {};
      }
      if (registrar.AppMatches(<complex_condition>) || ForTest()) {
      return as_is;
      }

      return Apply()
      ```

      Zgroza (Luke) Klimek

      Done

      File chrome/browser/web_applications/isolated_web_apps/isolated_web_app_entitlements_browsertest.cc
      Line 27, Patchset 10: blink::features::kSmartCard,
      Andrew Rayskiy . resolved

      It's already enabled by default -- just remove this
      ditto printing

      Zgroza (Luke) Klimek

      Printing yes, done. But smart card is another thing, as for now the sets of platforms that:
      1. have its code compiled (`ENABLE_SMART_CARD`)
      2. have this launched to stable

      are the same ({ChromeOS}). However if we go to prototyping on any other platforms, we'll need to re-add this to all tests. So I'll keep the flag here and remove only when we just remove the flag altogether or launch to stable everywhere, whichever comes first.

      Line 125, Patchset 10: set.entitlements.push_back(
      Andrew Rayskiy . resolved

      I remember there once used to be a thing that allowed you to simplify manual operations. Something like `for`? Not sure.

      Zgroza (Luke) Klimek

      Done

      Line 154, Patchset 10: EXPECT_TRUE(IsFeatureAllowed(frame, "direct-sockets"));
      Andrew Rayskiy . resolved

      ditto here

      Zgroza (Luke) Klimek

      Done

      File chrome/browser/web_applications/isolated_web_apps/test/fake_chrome_iwa_runtime_data_provider.h
      Line 122, Patchset 6: void SetAllowaAllUserInstallsWithAllEntitlements(bool allow_all);
      Andrew Rayskiy . resolved

      I'm still strictly opposed to this as discussed offline. There are not that many API tests on the //chrome level overall, and they're all relatively easy to migrate to proper user install allowlist with relevant entitlements.

      By using the wildcard approach, we basically scatter the problem around: instead of having both the installation routine as well as the permissions policy routine rely on the user install allowlist by calling `GetUserInstallAllowlistData()`, installation in existing tests will be guarded by `AddTrustedWebBundleIdForTesting()` (which is an integral part of the `->Install()` call of the `IsolatedWebAppBuilder`, and the PP checks will fetch this custom allowlist stuff.

      Zgroza (Luke) Klimek

      Done

      File chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.cc
      Line 185, Patchset 10: if (bypass_entitlements &&
      Andrew Rayskiy . resolved

      Let's reuse the same AddTrustedWebBundleIdForTesting from above :) As I said, it will be easier to migrate everything altogether.

      Zgroza (Luke) Klimek

      Done

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Andrew Rayskiy
      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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
        Gerrit-Change-Number: 7613536
        Gerrit-PatchSet: 12
        Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
        Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
        Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
        Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
        Gerrit-CC: Simon Hangl <sim...@google.com>
        Gerrit-Attention: Andrew Rayskiy <green...@google.com>
        Gerrit-Comment-Date: Mon, 09 Mar 2026 16:02:22 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Andrew Rayskiy <green...@google.com>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Andrew Rayskiy (Gerrit)

        unread,
        Mar 9, 2026, 12:06:45 PMMar 9
        to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
        Attention needed from Zgroza (Luke) Klimek

        Andrew Rayskiy voted and added 3 comments

        Votes added by Andrew Rayskiy

        Code-Review+1

        3 comments

        Patchset-level comments
        Andrew Rayskiy . resolved

        LGTM

        File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
        Line 155, Patchset 12 (Latest): if (!cache) {
        Andrew Rayskiy . unresolved

        Guaranteed by content::AreIsolatedWebAppsEnabled

        Line 168, Patchset 12 (Latest): if (!provider) {
        Andrew Rayskiy . unresolved

        Guaranteed by content::AreIsolatedWebAppsEnabled

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Zgroza (Luke) Klimek
        Submit Requirements:
        • requirement satisfiedCode-Coverage
        • requirement satisfiedCode-Owners
        • requirement satisfiedCode-Review
        • requirement is not satisfiedNo-Unresolved-Comments
        • requirement satisfiedReview-Enforcement
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: comment
        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
        Gerrit-Change-Number: 7613536
        Gerrit-PatchSet: 12
        Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
        Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
        Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
        Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
        Gerrit-CC: Simon Hangl <sim...@google.com>
        Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
        Gerrit-Comment-Date: Mon, 09 Mar 2026 16:06:30 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Andrew Rayskiy (Gerrit)

        unread,
        Mar 9, 2026, 12:09:22 PMMar 9
        to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
        Attention needed from Zgroza (Luke) Klimek

        Andrew Rayskiy added 3 comments

        File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.h
        Line 11, Patchset 12 (Latest):#include "base/containers/flat_set.h"
        Andrew Rayskiy . unresolved

        nit: not needed

        Line 8, Patchset 12 (Latest):#include <optional>
        Andrew Rayskiy . unresolved

        nit: not needed

        File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
        Line 109, Patchset 12 (Latest): bool is_feature_allowed = [&] {
        Andrew Rayskiy . unresolved

        nit: since this function depends on a single param (entry.feature), it could be structured like

        ```
        bool is_feature_allowed = [&](feature) {
        if (auto entitlement = web_app::GetEntitlementForFeature(feature)) {
        return allowlist_data && IsEntitlementGranted(*allowlist_data, app_version, *entitlement);
        }
        return !network::IsPermissionsPolicyFeatureGuardedByIsolatedContext(
        entry.feature);
        };
        for (const auto& entry: policy) {
        if (is_feature_allowed(entry.feature)) {
        ...
        }
        }
        ```
        Gerrit-Comment-Date: Mon, 09 Mar 2026 16:09:07 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Zgroza (Luke) Klimek (Gerrit)

        unread,
        Mar 9, 2026, 12:37:30 PMMar 9
        to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org

        Zgroza (Luke) Klimek voted and added 5 comments

        Votes added by Zgroza (Luke) Klimek

        Commit-Queue+1

        5 comments

        File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.h
        Line 11, Patchset 12:#include "base/containers/flat_set.h"
        Andrew Rayskiy . resolved

        nit: not needed

        Zgroza (Luke) Klimek

        Done

        Line 8, Patchset 12:#include <optional>
        Andrew Rayskiy . resolved

        nit: not needed

        Zgroza (Luke) Klimek

        Done

        File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
        Line 109, Patchset 12: bool is_feature_allowed = [&] {
        Andrew Rayskiy . resolved

        nit: since this function depends on a single param (entry.feature), it could be structured like

        ```
        bool is_feature_allowed = [&](feature) {
        if (auto entitlement = web_app::GetEntitlementForFeature(feature)) {
        return allowlist_data && IsEntitlementGranted(*allowlist_data, app_version, *entitlement);
        }
        return !network::IsPermissionsPolicyFeatureGuardedByIsolatedContext(
        entry.feature);
        };
        for (const auto& entry: policy) {
        if (is_feature_allowed(entry.feature)) {
        ...
        }
        }
        ```
        Zgroza (Luke) Klimek

        Done

        Line 155, Patchset 12: if (!cache) {
        Andrew Rayskiy . resolved

        Guaranteed by content::AreIsolatedWebAppsEnabled

        Zgroza (Luke) Klimek

        Hm, I kinda like to ensure those anyway just in case. But probably this is indeed unnecessary here.

        Line 168, Patchset 12: if (!provider) {
        Andrew Rayskiy . resolved

        Guaranteed by content::AreIsolatedWebAppsEnabled

        Zgroza (Luke) Klimek

        Done

        Open in Gerrit

        Related details

        Attention set is empty
        Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement satisfiedCode-Owners
          • requirement satisfiedCode-Review
          • requirement satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
          Gerrit-Change-Number: 7613536
          Gerrit-PatchSet: 13
          Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
          Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
          Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
          Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
          Gerrit-CC: Simon Hangl <sim...@google.com>
          Gerrit-Comment-Date: Mon, 09 Mar 2026 16:37:14 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: Yes
          Comment-In-Reply-To: Andrew Rayskiy <green...@google.com>
          satisfied_requirement
          open
          diffy

          Andrew Rayskiy (Gerrit)

          unread,
          Mar 9, 2026, 8:32:27 PMMar 9
          to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
          Attention needed from Zgroza (Luke) Klimek

          Andrew Rayskiy voted and added 1 comment

          Votes added by Andrew Rayskiy

          Code-Review+1

          1 comment

          File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
          Line 161, Patchset 14 (Latest): const PermissionsPolicyCacheEntry* policy =
          Andrew Rayskiy . unresolved

          Btw, I just realized that I'm missing something. Why is the entitlement application logic enforced here and not in the PermissionsPolicyCache itself?

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Zgroza (Luke) Klimek
          Submit Requirements:
            • requirement satisfiedCode-Coverage
            • requirement satisfiedCode-Owners
            • requirement satisfiedCode-Review
            • requirement is not satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: comment
            Gerrit-Project: chromium/src
            Gerrit-Branch: main
            Gerrit-Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
            Gerrit-Change-Number: 7613536
            Gerrit-PatchSet: 14
            Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
            Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
            Gerrit-CC: Simon Hangl <sim...@google.com>
            Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-Comment-Date: Tue, 10 Mar 2026 00:32:06 +0000
            Gerrit-HasComments: Yes
            Gerrit-Has-Labels: Yes
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Zgroza (Luke) Klimek (Gerrit)

            unread,
            Mar 10, 2026, 9:49:11 AMMar 10
            to Rijubrata Bhaumik, Chromium LUCI CQ, Andrew Rayskiy, Simon Hangl, AyeAye, phoglun...@chromium.org, feature-me...@chromium.org, chfreme...@chromium.org, japhet+...@chromium.org, aixba+wat...@chromium.org, mek+w...@chromium.org, webap...@microsoft.com, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, loyso...@chromium.org, mattreyno...@chromium.org, odejesu...@chromium.org, mgiuca...@chromium.org, dmurph+watc...@chromium.org, philli...@chromium.org, network-ser...@chromium.org, rmcelra...@chromium.org, dibyapal+wa...@chromium.org

            Zgroza (Luke) Klimek abandoned this change.

            View Change

            Abandoned

            Zgroza (Luke) Klimek abandoned this change

            Related details

            Attention set is empty
            Submit Requirements:
            • requirement satisfiedCode-Coverage
            • 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: abandon
            Gerrit-Project: chromium/src
            Gerrit-Branch: main
            Gerrit-Change-Id: I219d3de5db8608b594131158e9ba5cb76a6a6964
            Gerrit-Change-Number: 7594555
            Gerrit-PatchSet: 14
            Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-CC: Andrew Rayskiy <green...@google.com>
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Andrew Rayskiy (Gerrit)

            unread,
            Mar 10, 2026, 12:52:14 PMMar 10
            to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
            Attention needed from Zgroza (Luke) Klimek

            Andrew Rayskiy added 1 comment

            File chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.cc
            Line 61, Patchset 16 (Latest): CHECK(iwa_origin.has_value());
            Andrew Rayskiy . unresolved

            This is gonna be an epic crash if someone decides to navigate to `isolated-app://meow`.

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Zgroza (Luke) Klimek
            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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
            Gerrit-Change-Number: 7613536
            Gerrit-PatchSet: 16
            Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
            Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
            Gerrit-CC: Simon Hangl <sim...@google.com>
            Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
            Gerrit-Comment-Date: Tue, 10 Mar 2026 16:52:00 +0000
            Gerrit-HasComments: Yes
            Gerrit-Has-Labels: No
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Zgroza (Luke) Klimek (Gerrit)

            unread,
            Mar 11, 2026, 10:49:00 AMMar 11
            to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
            Attention needed from Andrew Rayskiy

            Zgroza (Luke) Klimek voted and added 2 comments

            Votes added by Zgroza (Luke) Klimek

            Commit-Queue+1

            2 comments

            File chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
            Line 161, Patchset 14: const PermissionsPolicyCacheEntry* policy =
            Andrew Rayskiy . resolved

            Btw, I just realized that I'm missing something. Why is the entitlement application logic enforced here and not in the PermissionsPolicyCache itself?

            Zgroza (Luke) Klimek

            Hm, fair point, logging there also would be easy out of the box.

            File chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.cc
            Line 61, Patchset 16: CHECK(iwa_origin.has_value());
            Andrew Rayskiy . resolved

            This is gonna be an epic crash if someone decides to navigate to `isolated-app://meow`.

            Zgroza (Luke) Klimek

            *meow*

            (actually no, checked—it just does nothing) (but still, let me change that)

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Andrew Rayskiy
            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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
              Gerrit-Change-Number: 7613536
              Gerrit-PatchSet: 22
              Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
              Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
              Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
              Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
              Gerrit-CC: Simon Hangl <sim...@google.com>
              Gerrit-Attention: Andrew Rayskiy <green...@google.com>
              Gerrit-Comment-Date: Wed, 11 Mar 2026 14:48:43 +0000
              Gerrit-HasComments: Yes
              Gerrit-Has-Labels: Yes
              Comment-In-Reply-To: Andrew Rayskiy <green...@google.com>
              satisfied_requirement
              unsatisfied_requirement
              open
              diffy

              Andrew Rayskiy (Gerrit)

              unread,
              Mar 11, 2026, 11:50:59 AMMar 11
              to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
              Attention needed from Zgroza (Luke) Klimek

              Andrew Rayskiy added 4 comments

              File chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.cc
              Line 61, Patchset 16: CHECK(iwa_origin.has_value());
              Andrew Rayskiy . resolved

              This is gonna be an epic crash if someone decides to navigate to `isolated-app://meow`.

              Zgroza (Luke) Klimek

              *meow*

              (actually no, checked—it just does nothing) (but still, let me change that)

              Andrew Rayskiy

              Ah, alright, that's because we're lucky and this func is only called if there's a response provided for this URL.

              Line 121, Patchset 22 (Latest): auto* cache = IwaPermissionsPolicyCacheFactory::GetForProfile(profile());
              Andrew Rayskiy . unresolved

              Just use cache directly, cmon. It's even used directly in the same file already (not to mention that the throttle is guarded by content::AreIsolatedWebAppsEnabled())

              File chrome/browser/web_applications/isolated_web_apps/iwa_permissions_policy_cache.cc
              Line 411, Patchset 22 (Latest): if (registrar.AppMatches(
              Andrew Rayskiy . unresolved

              I guess I already asked this, but... wouldn't it make more sense to have a flag on each filtered/unfiltered pair telling whether filtering is needed overall (even just an `std::optional<base::Version> version_if_filtering_needed_` will suffice)? So that we don't have to re-check this bunch of conditions every time?

              File content/browser/renderer_host/navigation_request.h
              Line 1127, Patchset 22 (Latest): void AddDeferredConsoleMessage(blink::mojom::ConsoleMessageLevel level,
              Andrew Rayskiy . unresolved

              Why not call the public method on the RFH during `WillProcessResponse()` though? This will spare you some additional reviewers for sure :)

              Open in Gerrit

              Related details

              Attention is currently required from:
              • Zgroza (Luke) Klimek
              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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
                Gerrit-Change-Number: 7613536
                Gerrit-PatchSet: 22
                Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
                Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
                Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
                Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
                Gerrit-CC: Simon Hangl <sim...@google.com>
                Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
                Gerrit-Comment-Date: Wed, 11 Mar 2026 15:50:48 +0000
                Gerrit-HasComments: Yes
                Gerrit-Has-Labels: No
                satisfied_requirement
                unsatisfied_requirement
                open
                diffy

                Andrew Rayskiy (Gerrit)

                unread,
                Mar 11, 2026, 11:51:10 AMMar 11
                to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
                Attention needed from Zgroza (Luke) Klimek

                Andrew Rayskiy voted Code-Review+1

                Code-Review+1
                Open in Gerrit

                Related details

                Attention is currently required from:
                • Zgroza (Luke) Klimek
                Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement satisfiedCode-Review
                  • requirement is not satisfiedNo-Unresolved-Comments
                  • requirement satisfiedReview-Enforcement
                  Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                  Gerrit-MessageType: comment
                  Gerrit-Project: chromium/src
                  Gerrit-Branch: main
                  Gerrit-Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
                  Gerrit-Change-Number: 7613536
                  Gerrit-PatchSet: 22
                  Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
                  Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
                  Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
                  Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
                  Gerrit-CC: Simon Hangl <sim...@google.com>
                  Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
                  Gerrit-Comment-Date: Wed, 11 Mar 2026 15:50:52 +0000
                  Gerrit-HasComments: No
                  Gerrit-Has-Labels: Yes
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Zgroza (Luke) Klimek (Gerrit)

                  unread,
                  Mar 11, 2026, 1:12:56 PMMar 11
                  to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
                  Attention needed from Andrew Rayskiy

                  Zgroza (Luke) Klimek voted and added 3 comments

                  Votes added by Zgroza (Luke) Klimek

                  Commit-Queue+1

                  3 comments

                  File chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.cc
                  Line 121, Patchset 22: auto* cache = IwaPermissionsPolicyCacheFactory::GetForProfile(profile());
                  Andrew Rayskiy . resolved

                  Just use cache directly, cmon. It's even used directly in the same file already (not to mention that the throttle is guarded by content::AreIsolatedWebAppsEnabled())

                  Zgroza (Luke) Klimek

                  Done

                  File chrome/browser/web_applications/isolated_web_apps/iwa_permissions_policy_cache.cc
                  Line 411, Patchset 22: if (registrar.AppMatches(
                  Andrew Rayskiy . resolved

                  I guess I already asked this, but... wouldn't it make more sense to have a flag on each filtered/unfiltered pair telling whether filtering is needed overall (even just an `std::optional<base::Version> version_if_filtering_needed_` will suffice)? So that we don't have to re-check this bunch of conditions every time?

                  Zgroza (Luke) Klimek

                  Done

                  File content/browser/renderer_host/navigation_request.h
                  Line 1127, Patchset 22: void AddDeferredConsoleMessage(blink::mojom::ConsoleMessageLevel level,
                  Andrew Rayskiy . resolved

                  Why not call the public method on the RFH during `WillProcessResponse()` though? This will spare you some additional reviewers for sure :)

                  Zgroza (Luke) Klimek

                  Done

                  Open in Gerrit

                  Related details

                  Attention is currently required from:
                  • Andrew Rayskiy
                  Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement 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: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
                  Gerrit-Change-Number: 7613536
                  Gerrit-PatchSet: 24
                  Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
                  Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
                  Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
                  Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
                  Gerrit-CC: Simon Hangl <sim...@google.com>
                  Gerrit-Attention: Andrew Rayskiy <green...@google.com>
                  Gerrit-Comment-Date: Wed, 11 Mar 2026 17:12:42 +0000
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Andrew Rayskiy (Gerrit)

                  unread,
                  Mar 11, 2026, 5:02:16 PMMar 11
                  to Zgroza (Luke) Klimek, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, pwa-com...@google.com, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org
                  Attention needed from Zgroza (Luke) Klimek

                  Andrew Rayskiy voted Code-Review+1

                  Code-Review+1
                  Open in Gerrit

                  Related details

                  Attention is currently required from:
                  • Zgroza (Luke) Klimek
                  Submit Requirements:
                    • requirement satisfiedCode-Coverage
                    • requirement satisfiedCode-Owners
                    • requirement satisfiedCode-Review
                    • requirement satisfiedReview-Enforcement
                    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                    Gerrit-MessageType: comment
                    Gerrit-Project: chromium/src
                    Gerrit-Branch: main
                    Gerrit-Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
                    Gerrit-Change-Number: 7613536
                    Gerrit-PatchSet: 24
                    Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
                    Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
                    Gerrit-CC: Simon Hangl <sim...@google.com>
                    Gerrit-Attention: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    Gerrit-Comment-Date: Wed, 11 Mar 2026 21:01:57 +0000
                    Gerrit-HasComments: No
                    Gerrit-Has-Labels: Yes
                    satisfied_requirement
                    open
                    diffy

                    Zgroza (Luke) Klimek (Gerrit)

                    unread,
                    Mar 12, 2026, 7:21:42 AMMar 12
                    to Andrew Rayskiy, Chromium LUCI CQ, Rijubrata Bhaumik, Simon Hangl, AyeAye, pwa-com...@google.com, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org

                    Zgroza (Luke) Klimek voted Commit-Queue+2

                    Commit-Queue+2
                    Open in Gerrit

                    Related details

                    Attention set is empty
                    Submit Requirements:
                    • requirement satisfiedCode-Coverage
                    • requirement satisfiedCode-Owners
                    • requirement satisfiedCode-Review
                    • requirement satisfiedReview-Enforcement
                    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                    Gerrit-MessageType: comment
                    Gerrit-Project: chromium/src
                    Gerrit-Branch: main
                    Gerrit-Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
                    Gerrit-Change-Number: 7613536
                    Gerrit-PatchSet: 24
                    Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
                    Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
                    Gerrit-CC: Simon Hangl <sim...@google.com>
                    Gerrit-Comment-Date: Thu, 12 Mar 2026 11:21:27 +0000
                    Gerrit-HasComments: No
                    Gerrit-Has-Labels: Yes
                    satisfied_requirement
                    open
                    diffy

                    Chromium LUCI CQ (Gerrit)

                    unread,
                    Mar 12, 2026, 7:24:45 AMMar 12
                    to Zgroza (Luke) Klimek, Andrew Rayskiy, Rijubrata Bhaumik, Simon Hangl, AyeAye, pwa-com...@google.com, creis...@chromium.org, navigation...@chromium.org, alexmo...@chromium.org, philli...@chromium.org, loyso...@chromium.org, japhet+...@chromium.org, webap...@microsoft.com, mek+w...@chromium.org, rmcelra...@chromium.org, kuragin+web-ap...@chromium.org, zelin+watch-we...@chromium.org, aixba+wat...@chromium.org, chfreme...@chromium.org, dibyapal+wa...@chromium.org, phoglun...@chromium.org, mgiuca...@chromium.org, feature-me...@chromium.org, dmurph+watc...@chromium.org

                    Chromium LUCI CQ submitted the change

                    Change information

                    Commit message:
                    IWA: Implement entitlement enforcement for user-installed apps

                    This change implements the mechanism to restrict access to powerful APIs
                    in user-installed Isolated Web Apps (IWAs) based on an allowlist of
                    entitlements.

                    Key changes:
                    - IwaPermissionsPolicyCache::SetPolicy now filters an IWA's Permissions
                    Policy. Features guarded by IsolatedContext (e.g., Direct Sockets,
                    Controlled Frame, Smart Card) require an explicit entitlement granted
                    to the app's Web Bundle ID.
                    - Managed installs (via enterprise policy) and Developer Mode installs
                    bypass these entitlement checks as they are implicitly trusted.
                    - Added a testing bypass mechanism and used it in
                    IsolatedWebAppBuilder::Install to keep existing tests passing.
                    - Refactored ChromeContentBrowserClient to delegate IWA permissions
                    policy resolution to the IWA-specific part.
                    - Entitlement violations are logged to dev console on navigation as
                    warnings in the throttle.
                    Bug: 487246273
                    Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
                    Reviewed-by: Andrew Rayskiy <green...@google.com>
                    Commit-Queue: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    Cr-Commit-Position: refs/heads/main@{#1598339}
                    Files:
                    • M chrome/browser/chrome_content_browser_client.cc
                    • M chrome/browser/web_applications/BUILD.gn
                    • M chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.cc
                    • M chrome/browser/web_applications/isolated_web_apps/chrome_content_browser_client_isolated_web_apps_part.h
                    • A chrome/browser/web_applications/isolated_web_apps/isolated_web_app_entitlements_browsertest.cc
                    • M chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.cc
                    • M chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle.h
                    • M chrome/browser/web_applications/isolated_web_apps/isolated_web_app_throttle_unittest.cc
                    • M chrome/browser/web_applications/isolated_web_apps/isolated_web_app_trust_checker.cc
                    • M chrome/browser/web_applications/isolated_web_apps/isolated_web_app_trust_checker.h
                    • M chrome/browser/web_applications/isolated_web_apps/iwa_permissions_policy_cache.cc
                    • M chrome/browser/web_applications/isolated_web_apps/iwa_permissions_policy_cache.h
                    Change size: L
                    Delta: 12 files changed, 879 insertions(+), 51 deletions(-)
                    Branch: refs/heads/main
                    Submit Requirements:
                    • requirement satisfiedCode-Review: +1 by Andrew Rayskiy
                    Open in Gerrit
                    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                    Gerrit-MessageType: merged
                    Gerrit-Project: chromium/src
                    Gerrit-Branch: main
                    Gerrit-Change-Id: I1ace9e7a6caa4b025d488735aa5b13566a6a6964
                    Gerrit-Change-Number: 7613536
                    Gerrit-PatchSet: 25
                    Gerrit-Owner: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    Gerrit-Reviewer: Andrew Rayskiy <green...@google.com>
                    Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
                    Gerrit-Reviewer: Zgroza (Luke) Klimek <zgr...@chromium.org>
                    open
                    diffy
                    satisfied_requirement
                    Reply all
                    Reply to author
                    Forward
                    0 new messages