@@ -11,7 +11,7 @@ presence of sensitive content.
1111
1212# Description
1313
14- This API introduces a SensitivityLabelChanged event to the CoreWebView2 object,
14+ This API introduces a ` SensitivityInfoChanged ` event to the ` CoreWebView2 ` object,
1515enabling applications to monitor changes in sensitivity labels within hosted
1616content. This functionality is restricted to domains explicitly included in an
1717allow list configured by the application. The allow list can be set at the
@@ -31,7 +31,7 @@ The core features of this proposal are as follows:
3131
3232# Examples
3333
34- ## Setting up an allow list
34+ ## Set- up an allow list
3535
3636Configure the PageInteractionRestrictionManager allow list to enable Sensitivity
3737label functionality on trusted domains.
@@ -49,11 +49,11 @@ void ConfigurePageInteractionAllowlist()
4949 // For detailed examples, refer to the table at: https://learn.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2.addwebresourcerequestedfilter
5050 LPCWSTR allowedUrls[] = {
5151 // Allow main domain and all its subdomains
52- L"https://trusted-domain .com/*",
53- L"https://*.trusted-domain .com/*",
52+ L"https://contoso .com/*",
53+ L"https://*.contoso .com/*",
5454
5555 // Allow specific partner domain and all its pages
56- L"https://trusted-partner .com/*"
56+ L"https://fabrikam .com/*"
5757 };
5858
5959 CHECK_FAILURE (profile9->SetPageInteractionRestrictionManagerAllowList(
@@ -73,18 +73,22 @@ var profile = webView2.CoreWebView2.Profile;
7373var allowedUrls = new string []
7474{
7575 // Allow main domain and all its subdomains
76- " https://trusted-domain .com/*" ,
77- " https://*.trusted-domain .com/*" ,
76+ " https://contoso .com/*" ,
77+ " https://*.contoso .com/*" ,
7878
7979 // Allow specific partner domain and all its pages
80- " https://trusted-partner .com/*"
80+ " https://fabrikam .com/*"
8181};
8282
8383profile .SetPageInteractionRestrictionManagerAllowList (allowedUrls );
8484```
8585
8686
8787## Register for sensitivity label change
88+ Web page can use [ ` Page Interaction Restriction Manager ` ] ( https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PageInteractionRestrictionManager/explainer.md )
89+ to communicate sensitivity information to WebView2.
90+ - [ Samples for add label] ( https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PageInteractionRestrictionManager/explainer.md#adding-a-specific-label-to-the-webpage )
91+ - [ Samples for remove label] ( https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PageInteractionRestrictionManager/explainer.md#removing-a-specific-label-from-a-webpage )
8892### C++ Sample
8993 ``` cpp
9094AppWindow* m_appWindow;
@@ -93,15 +97,15 @@ EventRegistrationToken m_sensitivityLabelChangedToken = {};
9397
9498void RegisterForSensitivityLabelChange ()
9599{
96- auto webView32 = m_webView.try_query<ICoreWebView2Staging32 >();
100+ auto webView32 = m_webView.try_query<ICoreWebView2_32 >();
97101 if (webView32)
98102 {
99103 CHECK_FAILURE (webView32->add_SensitivityInfoChanged(
100- Callback<ICoreWebView2StagingSensitivityInfoChangedEventHandler >(
104+ Callback<ICoreWebView2SensitivityInfoChangedEventHandler >(
101105 [ this] (ICoreWebView2* sender, IUnknown* args) -> HRESULT
102106 {
103- auto webView32 = this->m_webView.try_query<ICoreWebView2Staging32 >();
104- ICoreWebView2StagingSensitivityInfo * sensitivityInfo = nullptr;
107+ auto webView32 = this->m_webView.try_query<ICoreWebView2_32 >();
108+ ICoreWebView2SensitivityInfo * sensitivityInfo = nullptr;
105109 webView32->get_SensitivityInfo(&sensitivityInfo);
106110
107111 COREWEBVIEW2_SENSITIVITY_LABELS_STATE sensitivityLabelsState;
@@ -113,7 +117,7 @@ void RegisterForSensitivityLabelChange()
113117 // If sensitivity state is available check with the DLP provider if print rights is available
114118 if(sensitivityLabelsState == COREWEBVIEW2_SENSITIVITY_LABELS_STATE_AVAILABLE)
115119 {
116- Microsoft::WRL::ComPtr<ICoreWebView2StagingSensitivityLabelCollectionView > sensitivityLabelsCollection;
120+ Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabelCollectionView > sensitivityLabelsCollection;
117121 CHECK_FAILURE (sensitivityInfo->get_SensitivityLabels(&sensitivityLabelsCollection));
118122
119123 // Get the count of labels
@@ -122,7 +126,7 @@ void RegisterForSensitivityLabelChange()
122126
123127 for (UINT32 i = 0; i < labelCount; ++i)
124128 {
125- Microsoft::WRL::ComPtr<ICoreWebView2StagingSensitivityLabel > sensitivityLabel;
129+ Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabel > sensitivityLabel;
126130 CHECK_FAILURE (sensitivityLabelsCollection->GetValueAtIndex(i, &sensitivityLabel));
127131
128132 // Get the label kind COREWEBVIEW2_SENSITIVITY_LABEL_KIND
@@ -131,26 +135,23 @@ void RegisterForSensitivityLabelChange()
131135 if (labelKind == COREWEBVIEW2_SENSITIVITY_LABEL_KIND_MIP)
132136 {
133137 // Try to get as MIP label
134- Microsoft::WRL::ComPtr<ICoreWebView2StagingMipSensitivityLabel > mipLabel;
138+ Microsoft::WRL::ComPtr<ICoreWebView2MipSensitivityLabel > mipLabel;
135139 if (SUCCEEDED(sensitivityLabel.As(&mipLabel)))
136140 {
137141 wil::unique_cotaskmem_string labelId;
138142 wil::unique_cotaskmem_string organizationId;
139143 CHECK_FAILURE(mipLabel->get_LabelId(&labelId));
140144 CHECK_FAILURE(mipLabel->get_OrganizationId(&organizationId));
141-
142- // Query Purview for label metadata and check for Print rights
143- bool isPrintAllowed = IsPrintRightsAllowedByPurview(labelId, organizationId)
144145
145146 // Block print if any of the document blocks print
146- shouldBlockPrint ||= isPrintAllowed ;
147+ shouldBlockPrint ||= IsPrintRightsBlockedByPurview(labelId, organizationId) ;
147148 }
148149 }
149150 }
150151
151152 if (shouldBlockPrint)
152153 {
153- BlockPrintOption ();
154+ BlockPrintUI ();
154155 }
155156 }
156157 }).Get(),
@@ -163,52 +164,43 @@ void RegisterForSensitivityLabelChange()
163164``` c#
164165void RegisterForSensitivityLabelChange ()
165166{
166- webView2 .CoreWebView2 .SensitivityLabelChanged += WebView_SensitivityLabelChanged ;
167+ webView2 .CoreWebView2 .SensitivityInfoChanged += WebView_SensitivityInfoChanged ;
167168}
168169
169- void WebView_SensitivityLabelChanged (object sender , CoreWebView2SensitivityLabelEventArgs args )
170+ void WebView_SensitivityInfoChanged (object sender , object e )
170171{
171- string message = $" Sensitivity Label Changed!\n " +
172- $" SensitivityState: {args .SensitivityState }\n " ;
172+ var sensitivityInfo = webView2 .CoreWebView2 .SensitivityInfo ;
173+ var sensitivityLabelState = sensitivityInfo .SensitivityLabelsState ;
174+ var sensitivityLabels = sensitivityInfo .SensitivityLabels ;
175+
176+ // Block print action in case sensitivity state is yet to be available
177+ bool shouldBlockPrint = (sensitivityLabelState == CoreWebView2SensitivityLabelsState .Pending ));
173178
174- if (args .SensitivityLabels != null && args .SensitivityLabels .Count > 0 )
179+ // If sensitivity state is available check with the DLP provider if print rights is available
180+ if (sensitivityLabelState == CoreWebView2SensitivityLabelsState .Available ))
175181 {
176- message += $" Number of Sensitivity Labels: {args .SensitivityLabels .Count }\n " ;
177- for (int i = 0 ; i < args .SensitivityLabels .Count ; i ++ )
182+ for (int i = 0 ; i < sensitivityLabels .Count ; i ++ )
178183 {
179- CoreWebView2SensitivityLabel label = args .SensitivityLabels [i ];
180- message += $" Label {i + 1 }:\n " ;
181- message += $" Type: {label .LabelType }\n " ;
184+ CoreWebView2SensitivityLabel label = sensitivityLabels [i ];
182185
183- switch (label .LabelType )
186+ switch (label .LabelKind )
184187 {
185- case CoreWebView2SensitivityLabelType .Mip :
188+ case CoreWebView2SensitivityLabelKind .Mip :
186189 CoreWebView2MipSensitivityLabel mipLabel = (CoreWebView2MipSensitivityLabel )label ;
187- message += $" Label Id: {mipLabel .LabelId }\n " ;
188- message += $" Org Id: {mipLabel .OrganizationId }\n " ;
189- break ;
190-
191- default :
192- message += " Unknown Label Type\n " ;
190+ shouldBlockPrint || = IsPrintRightsBlockedByPurview (mipLabel .LabelId , mipLabel .OrganizationId );
193191 break ;
194192 }
195193 }
196194 }
197- else
198- {
199- message += " No Sensitivity Labels found.\n " ;
200- }
201195
202- this .Dispatcher .Invoke (() =>
203- {
204- MessageBox .Show (message , " Sensitivity Label Changed Event" ,
205- MessageBoxButton .OK , MessageBoxImage .Information );
206- });
196+ if (shouldBlockPrint ) {
197+ BlockPrintUI ();
198+ }
207199}
208200```
209201# API Details
210202
211- ## Allow listing
203+ ## Set-up allow list
212204### C++
213205
214206``` cpp
@@ -231,7 +223,7 @@ void WebView_SensitivityLabelChanged(object sender, CoreWebView2SensitivityLabel
231223```
232224
233225### .NET/WinRT
234- ```idl
226+ ```c#
235227namespace Microsoft.Web.WebView2.Core
236228{
237229 runtimeclass CoreWebView2Profile
@@ -260,7 +252,7 @@ namespace Microsoft.Web.WebView2.Core
260252// / Represents the state of sensitivity label detection and processing
261253// / for web content loaded in the WebView2 control.
262254[v1_enum]
263- typedef enum COREWEBVIEW2_SENSITIVITY_LABELS_STATE {
255+ def enum COREWEBVIEW2_SENSITIVITY_LABELS_STATE {
264256 /// Indicates that none of the loaded pages are in the allow list. Hence
265257 /// sensitivity labels are not applicable.
266258 COREWEBVIEW2_SENSITIVITY_LABELS_STATE_NOT_APPLICABLE,
@@ -284,19 +276,19 @@ typedef enum COREWEBVIEW2_SENSITIVITY_LABELS_STATE {
284276// / compatibility.
285277// / </remarks>
286278[v1_enum]
287- typedef enum COREWEBVIEW2_SENSITIVITY_LABEL_KIND {
279+ def enum COREWEBVIEW2_SENSITIVITY_LABEL_KIND {
288280 /// Represents a Microsoft Information Protection (MIP) sensitivity label.
289281 COREWEBVIEW2_SENSITIVITY_LABEL_KIND_MIP,
290282} COREWEBVIEW2_SENSITIVITY_LABEL_KIND;
291283
292284
293285// / Interface for different sensitivity label kinds used in WebView2.
294286// / This interface provides functionality for accessing sensitivity
295- // / label information applied to web content. Different label types
287+ // / label information applied to web content. Different label s
296288// / (such as Microsoft Information Protection labels) provide
297289// / specific label information and metadata.
298290[uuid(5c27e6f2-baa6-5646 -b726-db80a77b7345), object, pointer_default(unique)]
299- interface ICoreWebView2StagingSensitivityLabel : IUnknown {
291+ interface ICoreWebView2SensitivityLabel : IUnknown {
300292 /// Gets the type of the sensitivity label applied to the web content.
301293 /// This property identifies which sensitivity label system is being used
302294 /// (such as Microsoft Information Protection or other label providers).
@@ -355,13 +347,13 @@ interface ICoreWebView2SensitivityLabelCollectionView : IUnknown {
355347// / that have been reported by the web page via
356348// / [`Page Interaction Restriction Manager`](https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PageInteractionRestrictionManager/explainer.md).
357349[uuid(ac075f6f-3a2b-5701 -ab52-9f01f1a61529), object, pointer_default(unique)]
358- interface ICoreWebView2StagingSensitivityInfo : IUnknown {
350+ interface ICoreWebView2SensitivityInfo : IUnknown {
359351 /// Gets a read-only collection of all sensitivity labels detected in the
360352 /// current web document. This collection contains instances of sensitivity
361353 /// labels that have been reported by the web content.
362354 /// ` SensitivityLabels ` are valid only if SensitivityState is
363355 /// ` COREWEBVIEW2_SENSITIVITY_LABELS_STATE_AVAILABLE ` .
364- [ propget] HRESULT SensitivityLabels([ out, retval] ICoreWebView2StagingSensitivityLabelCollectionView ** value);
356+ [ propget] HRESULT SensitivityLabels([ out, retval] ICoreWebView2SensitivityLabelCollectionView ** value);
365357
366358 /// Gets the current state of sensitivity label detection.
367359 /// Refer ` COREWEBVIEW2_SENSITIVITY_LABELS_STATE ` for different states.
@@ -370,7 +362,7 @@ interface ICoreWebView2StagingSensitivityInfo : IUnknown {
370362
371363// / Receives `SensitivityInfoChanged` events.
372364[uuid(ada2e261-0e15 -5b64-8422 -f4373eb0d552), object, pointer_default(unique)]
373- interface ICoreWebView2StagingSensitivityInfoChangedEventHandler : IUnknown {
365+ interface ICoreWebView2SensitivityInfoChangedEventHandler : IUnknown {
374366 /// Provides the event args for the corresponding event.
375367 HRESULT Invoke(
376368 [ in] ICoreWebView2* sender,
@@ -384,11 +376,11 @@ interface ICoreWebView2StagingSensitivityInfoChangedEventHandler : IUnknown {
384376// / detected, updated, or removed from web pages, the SensitivityInfoChanged
385377// / event is raised.
386378[uuid(862c39a8-f64f-5a97-bae2-db5651020b34), object, pointer_default(unique)]
387- interface ICoreWebView2Staging32 : IUnknown {
379+ interface ICoreWebView2_32 : IUnknown {
388380 /// Gets the current state of sensitivity label detection for the content
389381 /// loaded in the WebView2 control.
390382 /// See ` ICoreWebView2SensitivityInfo ` for more details.
391- [ propget] HRESULT SensitivityInfo([ out, retval] ICoreWebView2StagingSensitivityInfo ** value);
383+ [ propget] HRESULT SensitivityInfo([ out, retval] ICoreWebView2SensitivityInfo ** value);
392384
393385 /// Adds an event handler for the ` SensitivityInfoChanged ` event.
394386 /// Event raised when the sensitivity label classification of web page changes.
@@ -405,7 +397,7 @@ interface ICoreWebView2Staging32 : IUnknown {
405397 /// to get the latest sensitivity label information and take appropriate
406398 /// actions based on the updated sensitivity classification.
407399 HRESULT add_SensitivityInfoChanged(
408- [ in] ICoreWebView2StagingSensitivityInfoChangedEventHandler * eventHandler,
400+ [ in] ICoreWebView2SensitivityInfoChangedEventHandler * eventHandler,
409401 [ out] EventRegistrationToken* token);
410402
411403 /// Removes an event handler previously added with ` add_SensitivityInfoChanged ` .
@@ -431,13 +423,13 @@ enum CoreWebView2SensitivityLabelsState
431423
432424runtimeclass CoreWebView2SensitivityLabel
433425{
434- // ICoreWebView2StagingSensitivityLabel members
426+ // ICoreWebView2SensitivityLabel members
435427 CoreWebView2SensitivityLabelKind LabelKind { get ; };
436428}
437429
438430runtimeclass CoreWebView2SensitivityInfo
439431{
440- // ICoreWebView2StagingSensitivityInfo members
432+ // ICoreWebView2SensitivityInfo members
441433 IVectorView < CoreWebView2SensitivityLabel > SensitivityLabels { get ; };
442434
443435 CoreWebView2SensitivityLabelsState SensitivityState { get ; };
@@ -446,16 +438,16 @@ runtimeclass CoreWebView2SensitivityInfo
446438
447439runtimeclass CoreWebView2MipSensitivityLabel
448440{
449- // ICoreWebView2StagingMipSensitivityLabel members
441+ // ICoreWebView2MipSensitivityLabel members
450442 String LabelId { get ; };
451443
452444 String OrganizationId { get ; };
453445}
454446runtimeclass CoreWebView2
455447{
456- [interface_name (" Microsoft.Web.WebView2.Core.ICoreWebView2Staging32 " )]
448+ [interface_name (" Microsoft.Web.WebView2.Core.ICoreWebView2_32 " )]
457449 {
458- // ICoreWebView2Staging32 members
450+ // ICoreWebView2_32 members
459451 CoreWebView2SensitivityInfo SensitivityInfo { get ; };
460452
461453 event Windows .Foundation .TypedEventHandler < CoreWebView2 , IInspectable > SensitivityInfoChanged ;
0 commit comments