Move GetSiteURL to SecurityPrincipal interface [chromium/src : main]

0 views
Skip to first unread message

Viktoriya Bryhider (Gerrit)

unread,
Apr 1, 2026, 1:22:24 PMApr 1
to Alex Moshchuk, Liang Zhao, Chromium LUCI CQ, chromium...@chromium.org, devtools...@chromium.org, Kevin McNee, Hiroki Nakagawa, Peter Beverloo, James Maclean, ajwong...@chromium.org, alexmo...@chromium.org, blink-work...@chromium.org, bmcquad...@chromium.org, chromium-a...@chromium.org, creis...@chromium.org, csharris...@chromium.org, dmurph+wat...@chromium.org, eme-r...@chromium.org, extension...@chromium.org, feature-me...@chromium.org, horo+...@chromium.org, kinuko+ser...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, navigation...@chromium.org, servicewor...@chromium.org, shimazu+se...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org, webap...@microsoft.com
Attention needed from Alex Moshchuk

Viktoriya Bryhider added 17 comments

Patchset-level comments
File-level comment, Patchset 5 (Latest):
Viktoriya Bryhider . resolved

Publishing removing GetSiteURL from SiteInstance.

I have moved all calls as is to `GetSecurityPrincipal().GetDeprecatedSiteURL()`. It should be green now. Checked all callsites from outside of /content and left unresolved comments where we can get rid of GetSecurityPrincipal().GetDeprecatedSiteURL() - can create separate Cls if you could confirm that those are acceptable replacements.

Please let me know how to proceed or if there a way to make it easier...
Thanks!

File chrome/browser/chrome_browser_interface_binders.cc
Line 371, Patchset 2: ->GetSecurityPrincipal()
Viktoriya Bryhider . unresolved

`net::SchemefulSite(frame_host->GetLastCommittedURL()).GetURL()` should work here.

File chrome/browser/extensions/chrome_extensions_browser_client_non_android.cc
Line 103, Patchset 2: owner_site_instance->GetSecurityPrincipal().GetDeprecatedSiteURL());
Viktoriya Bryhider . unresolved

Can pass `owner_rfh` instead and use `owner_rfh->GetLastCommittedOrigin().GetURL()` in place of `owner_site_instance->GetSecurityPrincipal().GetDeprecatedSiteURL()`. I have tried this locally - and tests seems to pass... Can create CL

File chrome/browser/media/cdm_document_service_impl.cc
File chrome/browser/site_protection/site_familiarity_utils.cc
Line 155, Patchset 2: const GURL& site_url = web_contents->GetSiteInstance()
Viktoriya Bryhider . resolved

Intentionally using SiteInstance::GetSiteURL - https://chromium-review.googlesource.com/c/chromium/src/+/7426181

File chrome/browser/task_manager/providers/web_contents/back_forward_cache_task.cc
Line 31, Patchset 2: const GURL& site_url =
Viktoriya Bryhider . resolved

In theory can try to replace with `net::SchemefulSite(render_frame_host->GetLastCommittedURL())` to keep eTLD+1, but it will not work for hosted apps(?).
Another option is to keep it and wait for crbug.com/40775860 mentioned above to replace URL with title.

File chrome/browser/task_manager/providers/web_contents/fenced_frame_task.cc
Line 48, Patchset 2: site_instance_->GetSecurityPrincipal().GetDeprecatedSiteURL().spec());
Viktoriya Bryhider . unresolved

I have tried to replace this with `net::SchemefulSite(rfh_->GetLastCommittedURL());` and run tests `browser_tests --gtest_filter="*FencedFrameTaskBrowserTest*" ` - the only difference is in last slash: `https://b.test/` vs `https://b.test` - looks like safe to replace to me.

File chrome/browser/task_manager/providers/web_contents/subframe_task.cc
Line 78, Patchset 2: site_instance_->GetSecurityPrincipal().GetDeprecatedSiteURL();
Viktoriya Bryhider . resolved

Need effective URL for hosted apps - otherwise can use SchemefulSite(GetLastCommittedURL())

File chrome/browser/ui/browser_instant_controller.cc
Line 59, Patchset 2: GURL site_url = contents->GetPrimaryMainFrame()
Viktoriya Bryhider . unresolved

Can potentially use `contents->GetLastCommittedURL()` here. BrowserInstantControllerTest.DefaultSearchProviderChanged passes with that change - not sure if there any corner cases.

File chrome/browser/ui/webui/top_chrome/webui_contents_preload_manager.cc
Line 468, Patchset 2: webui::LogWebUIShown(web_contents_ret->GetSiteInstance()
Viktoriya Bryhider . unresolved

Test `LogWebUIUrlTest.ShownWebUIForPreloadedPage` is hitting this codepath: I have checked:
1. web_contents_ret->GetVisibleURL();
2. webui_url;
3. web_contents_ret->GetURL(); all of them are the same - can try to substitute `GetDeprecatedSiteURL()` with one of them.

File components/guest_view/browser/guest_view_base.cc
Line 601, Patchset 2:const GURL& GuestViewBase::GetOwnerSiteURL() const {
Viktoriya Bryhider . unresolved

Tried to use `owner_rfh()->GetLastCommittedOrigin().GetURL()` here - tests which are hitting that codepath (*WebViewContentScript*) are passing, not sure about corner cases if any - can put CL.

File components/guest_view/browser/slim_web_view/slim_web_view_guest.cc
Line 415, Patchset 3: owner_rfh()
Viktoriya Bryhider . unresolved

owner_rfh should have committed navigation from what I'm reading. Can try to use `owner_rfh()->GetLastCommittedOrigin().host()`. Have not tested.

File content/browser/media/media_interface_proxy.cc
Line 501, Patchset 4: render_frame_host()
Viktoriya Bryhider . resolved

Have WIP to replace SiteURL with SecurityPrincipal in Services - https://chromium-review.googlesource.com/c/chromium/src/+/7712794

File extensions/browser/api/guest_view/web_view/web_view_internal_api.cc
Line 110, Patchset 2: ->GetSecurityPrincipal()
Viktoriya Bryhider . unresolved

Considering replacing it with `embedder_rfh->GetMainFrame()->GetLastCommittedOrigin()` similar to line 119 in this file. Have not found cases when it will not work.

Line 629, Patchset 2: ->GetSiteInstance()
Viktoriya Bryhider . unresolved

Considering replacing it with `render_frame_host()->GetLastCommittedURL().withEmptyPath()`

File extensions/browser/extension_function_dispatcher.cc
Line 180, Patchset 2: .GetDeprecatedSiteURL()
Viktoriya Bryhider . unresolved

Seems safe to use frame.GetLastCommittedURL() or frame.GetLastCommittedOrigin() here.

File extensions/browser/extensions_browser_client.cc
Line 230, Patchset 2: const GURL& owner_site_url =
Viktoriya Bryhider . unresolved
Open in Gerrit

Related details

Attention is currently required from:
  • Alex Moshchuk
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: I15e60f7d005865428ea5b50f85bbe1606ec04768
Gerrit-Change-Number: 7614138
Gerrit-PatchSet: 5
Gerrit-Owner: Viktoriya Bryhider <vbry...@microsoft.com>
Gerrit-Reviewer: Alex Moshchuk <ale...@chromium.org>
Gerrit-Reviewer: Viktoriya Bryhider <vbry...@microsoft.com>
Gerrit-CC: Hiroki Nakagawa <nhi...@chromium.org>
Gerrit-CC: James Maclean <wjma...@chromium.org>
Gerrit-CC: Kevin McNee <mc...@chromium.org>
Gerrit-CC: Liang Zhao <lz...@microsoft.com>
Gerrit-CC: Peter Beverloo <pe...@chromium.org>
Gerrit-Attention: Alex Moshchuk <ale...@chromium.org>
Gerrit-Comment-Date: Wed, 01 Apr 2026 17:22:08 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Alex Moshchuk (Gerrit)

unread,
Apr 7, 2026, 9:47:53 PMApr 7
to Viktoriya Bryhider, Liang Zhao, Chromium LUCI CQ, chromium...@chromium.org, devtools...@chromium.org, Kevin McNee, Hiroki Nakagawa, Peter Beverloo, James Maclean, ajwong...@chromium.org, alexmo...@chromium.org, blink-work...@chromium.org, bmcquad...@chromium.org, chromium-a...@chromium.org, creis...@chromium.org, csharris...@chromium.org, dmurph+wat...@chromium.org, eme-r...@chromium.org, extension...@chromium.org, feature-me...@chromium.org, horo+...@chromium.org, kinuko+ser...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, navigation...@chromium.org, servicewor...@chromium.org, shimazu+se...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org, webap...@microsoft.com
Attention needed from Viktoriya Bryhider

Alex Moshchuk added 17 comments

Patchset-level comments
Alex Moshchuk . resolved

Thanks, seems mostly reasonable to me following our offline discussion today, with some comments below (most responses would be for followup CLs).

Commit Message
Line 20, Patchset 5 (Latest):
Alex Moshchuk . unresolved

Let's add a note that this is a mechanical CL and there are no behavior changes.

File chrome/browser/chrome_browser_interface_binders.cc
Line 371, Patchset 2: ->GetSecurityPrincipal()
Viktoriya Bryhider . resolved

`net::SchemefulSite(frame_host->GetLastCommittedURL()).GetURL()` should work here.

Alex Moshchuk

Ack, though I'm curious why this code specifically needs a site, rather than the last committed origin, for example. Might be worth discussing that with owners of this code in a followup CL.

File chrome/browser/extensions/chrome_extensions_browser_client_non_android.cc
Line 103, Patchset 2: owner_site_instance->GetSecurityPrincipal().GetDeprecatedSiteURL());
Viktoriya Bryhider . resolved

Can pass `owner_rfh` instead and use `owner_rfh->GetLastCommittedOrigin().GetURL()` in place of `owner_site_instance->GetSecurityPrincipal().GetDeprecatedSiteURL()`. I have tried this locally - and tests seems to pass... Can create CL

Alex Moshchuk

Sounds good. The owner here should be at a chrome-extension: or WebUI URL, and I'd expect that this needs that extension ID (or WebUI host). It might be slightly tricky in that GetLastCommittedOrigin().GetURL() would be correct if the owner embeds an about:blank subframe in which it then embeds the <webview> tag, but may not work if the embedder had a sandboxed subframe (which would have an opaque origin), which then embedded the <webview>. So maybe the right thing to use might actually be `GetLastCommittedOrigin().GetTupleOrPrecursorTupleIfOpaque().GetURL()`.

Or maybe there's some other mechanism we can design for SecurityPrincipal to be able to tell whether it's for an extension, and if so, what the extension ID is (without violating content layering).

File chrome/browser/task_manager/providers/web_contents/fenced_frame_task.cc
Line 48, Patchset 2: site_instance_->GetSecurityPrincipal().GetDeprecatedSiteURL().spec());
Viktoriya Bryhider . resolved

I have tried to replace this with `net::SchemefulSite(rfh_->GetLastCommittedURL());` and run tests `browser_tests --gtest_filter="*FencedFrameTaskBrowserTest*" ` - the only difference is in last slash: `https://b.test/` vs `https://b.test` - looks like safe to replace to me.

Alex Moshchuk

Acknowledged.

However, note that in general, the task manager groups tasks by process and probably cares about effective URLs. So tasks that are part of hosted apps might still need a chrome-extension: site URL that actually conveys their process label.

File chrome/browser/ui/browser_instant_controller.cc
Line 59, Patchset 2: GURL site_url = contents->GetPrimaryMainFrame()
Viktoriya Bryhider . unresolved

Can potentially use `contents->GetLastCommittedURL()` here. BrowserInstantControllerTest.DefaultSearchProviderChanged passes with that change - not sure if there any corner cases.

Alex Moshchuk

I don't know for sure, but these seem like places where we potentially might need effective URLs (e.g., there's a comparison involving 3P NTP below), so maybe they will still need effective URLs and use whatever new API we introduce for them on SecurityPrincipal.

File chrome/browser/ui/webui/top_chrome/webui_contents_preload_manager.cc
Line 468, Patchset 2: webui::LogWebUIShown(web_contents_ret->GetSiteInstance()
Viktoriya Bryhider . resolved

Test `LogWebUIUrlTest.ShownWebUIForPreloadedPage` is hitting this codepath: I have checked:
1. web_contents_ret->GetVisibleURL();
2. webui_url;
3. web_contents_ret->GetURL(); all of them are the same - can try to substitute `GetDeprecatedSiteURL()` with one of them.

Alex Moshchuk

I wouldn't recommend WebContents::GetVisibleURL or GetURL, as they have some problems. Seems like `webui_url` would contain the most relevant URL here. Looks like LogWebUIShown just needs it to be an origin.

File components/guest_view/browser/guest_view_base.cc
Line 601, Patchset 2:const GURL& GuestViewBase::GetOwnerSiteURL() const {
Viktoriya Bryhider . resolved

Tried to use `owner_rfh()->GetLastCommittedOrigin().GetURL()` here - tests which are hitting that codepath (*WebViewContentScript*) are passing, not sure about corner cases if any - can put CL.

Alex Moshchuk

Should be similar to the other <webview>-related case that I commented on above.

File components/guest_view/browser/slim_web_view/slim_web_view_guest.cc
Viktoriya Bryhider . resolved

owner_rfh should have committed navigation from what I'm reading. Can try to use `owner_rfh()->GetLastCommittedOrigin().host()`. Have not tested.

Alex Moshchuk

Should be similar to other webview cases above - let's make sure it works for cases where a sandboxed frame (with an opaque origin) embeds a <webview>, where we still need to be able to resolve the owner's host. (FWIW, SlimWebView will probably only be used on WebUI pages on Android.)

File content/browser/site_info.h
Line 245, Patchset 5 (Parent): const GURL& site_url() const { return site_url_; }
Alex Moshchuk . unresolved

We could consider still keeping this as an additional non-virtual accessor on SiteInfo, just as a shorthand to use for code inside content. I'm not sure it's worth it, but something to consider. WDYT?

File content/public/browser/security_principal.h
Line 94, Patchset 5 (Latest): // for callers that have not yet been migrated away from the site URL.
Alex Moshchuk . unresolved

Some ideas for additional text to cover a couple of other points here:

  • Cases like hosted apps should keep using the site URL for now for resolving effective URLs. We expect no new use cases of effective URLs to arise, and for most use cases of effective URLs to go away over time (for example, hosted apps are deprecated and will be removed).
  • More SecurityPrincipal properties will be added over time, which should cover more Site URL use cases. If there's a property that's missing on SecurityPrincipal and that's needed for a new feature, reach out to content/OWNERS to discuss how to add it.
Line 92, Patchset 5 (Latest): // DEPRECATED: Prefer more specific SecurityPrincipal methods (e.g.,
Alex Moshchuk . unresolved

Maybe also mention "GetLastCommittedOrigin() or" once again here?

File content/public/browser/site_instance.h
Line 186, Patchset 5 (Parent): virtual const GURL& GetSiteURL() const = 0;
Alex Moshchuk . resolved

One note here is that this might be a popular API used by other content/ embedders, so we might be forcing them to do a bunch of work to use GetSecurityPrincipal()->GetDeprecatedSiteURL() instead. But there's probably no way around it.

File extensions/browser/api/guest_view/web_view/web_view_internal_api.cc
Line 110, Patchset 2: ->GetSecurityPrincipal()
Viktoriya Bryhider . resolved

Considering replacing it with `embedder_rfh->GetMainFrame()->GetLastCommittedOrigin()` similar to line 119 in this file. Have not found cases when it will not work.

Alex Moshchuk

Should be similar to other webview-related cases, let's just be consistent in what we use in all of them, and do them all in one followup CL.

Line 629, Patchset 2: ->GetSiteInstance()
Viktoriya Bryhider . resolved

Considering replacing it with `render_frame_host()->GetLastCommittedURL().withEmptyPath()`

Alex Moshchuk

(same here)

File extensions/browser/extension_function_dispatcher.cc
Line 180, Patchset 2: .GetDeprecatedSiteURL()
Viktoriya Bryhider . resolved

Seems safe to use frame.GetLastCommittedURL() or frame.GetLastCommittedOrigin() here.

Alex Moshchuk

Acknowledged - GetLastCommittedOrigin is probably better, as this is for crash keys, and we try to avoid exposing the full URL there for privacy reasons.

File extensions/browser/extensions_browser_client.cc
Line 230, Patchset 2: const GURL& owner_site_url =
Viktoriya Bryhider . resolved
Alex Moshchuk

Acknowledged

Open in Gerrit

Related details

Attention is currently required from:
  • Viktoriya Bryhider
Gerrit-Attention: Viktoriya Bryhider <vbry...@microsoft.com>
Gerrit-Comment-Date: Wed, 08 Apr 2026 01:47:43 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Viktoriya Bryhider <vbry...@microsoft.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Viktoriya Bryhider (Gerrit)

unread,
Apr 27, 2026, 7:37:49 PM (2 days ago) Apr 27
to Alex Moshchuk, Liang Zhao, Chromium LUCI CQ, chromium...@chromium.org, devtools...@chromium.org, Kevin McNee, Hiroki Nakagawa, Peter Beverloo, James Maclean, ajwong...@chromium.org, alexmo...@chromium.org, blink-work...@chromium.org, bmcquad...@chromium.org, chromium-a...@chromium.org, creis...@chromium.org, csharris...@chromium.org, dmurph+wat...@chromium.org, eme-r...@chromium.org, extension...@chromium.org, feature-me...@chromium.org, horo+...@chromium.org, kinuko+ser...@chromium.org, kinuko...@chromium.org, loading-rev...@chromium.org, navigation...@chromium.org, servicewor...@chromium.org, shimazu+se...@chromium.org, speed-metrics...@chromium.org, speed-metr...@chromium.org, webap...@microsoft.com
Attention needed from Alex Moshchuk

Viktoriya Bryhider added 8 comments

Patchset-level comments
File-level comment, Patchset 11 (Latest):
Viktoriya Bryhider . resolved

I have addressed review comments.
Added easier follow-ups for now - https://crrev.com/c/7796943 and https://crrev.com/c/7796820 and GetHost API - https://crrev.com/c/7794385.
There are 3 open questions with the main one if we want GetHost API and if it should be used for webview/extensions cases - could you please check when there is a time?

(this cl keep getting merge conflicts because of the files which it touches - I will rebase it again after all approvals...)

Commit Message
Line 20, Patchset 5:
Alex Moshchuk . resolved

Let's add a note that this is a mechanical CL and there are no behavior changes.

Viktoriya Bryhider

Done

File chrome/browser/extensions/chrome_extensions_browser_client_non_android.cc
Line 103, Patchset 2: owner_site_instance->GetSecurityPrincipal().GetDeprecatedSiteURL());
Viktoriya Bryhider . unresolved

Can pass `owner_rfh` instead and use `owner_rfh->GetLastCommittedOrigin().GetURL()` in place of `owner_site_instance->GetSecurityPrincipal().GetDeprecatedSiteURL()`. I have tried this locally - and tests seems to pass... Can create CL

Alex Moshchuk

Sounds good. The owner here should be at a chrome-extension: or WebUI URL, and I'd expect that this needs that extension ID (or WebUI host). It might be slightly tricky in that GetLastCommittedOrigin().GetURL() would be correct if the owner embeds an about:blank subframe in which it then embeds the <webview> tag, but may not work if the embedder had a sandboxed subframe (which would have an opaque origin), which then embedded the <webview>. So maybe the right thing to use might actually be `GetLastCommittedOrigin().GetTupleOrPrecursorTupleIfOpaque().GetURL()`.

Or maybe there's some other mechanism we can design for SecurityPrincipal to be able to tell whether it's for an extension, and if so, what the extension ID is (without violating content layering).

Viktoriya Bryhider

I have added GetHost API - https://crrev.com/c/7794385/2/content/public/browser/security_principal.h - and I think I should be able to use it here. Do you have opinion which would be preffered between `GetLastCommittedOrigin().GetTupleOrPrecursorTupleIfOpaque().GetURL()` vs `SP.GetHost()` if we will agree to continue with GetHost?

File chrome/browser/ui/browser_instant_controller.cc
Line 59, Patchset 2: GURL site_url = contents->GetPrimaryMainFrame()
Viktoriya Bryhider . unresolved

Can potentially use `contents->GetLastCommittedURL()` here. BrowserInstantControllerTest.DefaultSearchProviderChanged passes with that change - not sure if there any corner cases.

Alex Moshchuk

I don't know for sure, but these seem like places where we potentially might need effective URLs (e.g., there's a comparison involving 3P NTP below), so maybe they will still need effective URLs and use whatever new API we introduce for them on SecurityPrincipal.

File content/browser/site_info.h
Line 245, Patchset 5 (Parent): const GURL& site_url() const { return site_url_; }
Alex Moshchuk . resolved

We could consider still keeping this as an additional non-virtual accessor on SiteInfo, just as a shorthand to use for code inside content. I'm not sure it's worth it, but something to consider. WDYT?

Viktoriya Bryhider

Added back to decrease the diff - but there is no much usage of it. No strong preference.

File content/public/browser/security_principal.h
Line 73, Patchset 8: // Compared to the AgentClusterKey, this URL might have been overridden from
Viktoriya Bryhider . unresolved

@ale...@chromium.org There is no other mentions about AgentClusterKey in this header and it may be confusing(?) - should I keep this comment which was copied from SiteInfo?

Line 94, Patchset 5: // for callers that have not yet been migrated away from the site URL.
Alex Moshchuk . resolved

Some ideas for additional text to cover a couple of other points here:

  • Cases like hosted apps should keep using the site URL for now for resolving effective URLs. We expect no new use cases of effective URLs to arise, and for most use cases of effective URLs to go away over time (for example, hosted apps are deprecated and will be removed).
  • More SecurityPrincipal properties will be added over time, which should cover more Site URL use cases. If there's a property that's missing on SecurityPrincipal and that's needed for a new feature, reach out to content/OWNERS to discuss how to add it.
Viktoriya Bryhider

Done

Line 92, Patchset 5: // DEPRECATED: Prefer more specific SecurityPrincipal methods (e.g.,
Alex Moshchuk . resolved

Maybe also mention "GetLastCommittedOrigin() or" once again here?

Viktoriya Bryhider

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Alex Moshchuk
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: I15e60f7d005865428ea5b50f85bbe1606ec04768
Gerrit-Change-Number: 7614138
Gerrit-PatchSet: 11
Gerrit-Owner: Viktoriya Bryhider <vbry...@microsoft.com>
Gerrit-Reviewer: Alex Moshchuk <ale...@chromium.org>
Gerrit-Reviewer: Viktoriya Bryhider <vbry...@microsoft.com>
Gerrit-CC: Hiroki Nakagawa <nhi...@chromium.org>
Gerrit-CC: James Maclean <wjma...@chromium.org>
Gerrit-CC: Kevin McNee <mc...@chromium.org>
Gerrit-CC: Liang Zhao <lz...@microsoft.com>
Gerrit-CC: Peter Beverloo <pe...@chromium.org>
Gerrit-Attention: Alex Moshchuk <ale...@chromium.org>
Gerrit-Comment-Date: Mon, 27 Apr 2026 23:37:39 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Alex Moshchuk <ale...@chromium.org>
Comment-In-Reply-To: Viktoriya Bryhider <vbry...@microsoft.com>
satisfied_requirement
unsatisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages