Skip to content

Commit 31003d4

Browse files
Address API review comments: dotnet samples for Sensitivity event
1 parent 7f2c776 commit 31003d4

File tree

1 file changed

+56
-64
lines changed

1 file changed

+56
-64
lines changed

specs/SensitivityLabel.md

Lines changed: 56 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -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,
1515
enabling applications to monitor changes in sensitivity labels within hosted
1616
content. This functionality is restricted to domains explicitly included in an
1717
allow 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

3636
Configure the PageInteractionRestrictionManager allow list to enable Sensitivity
3737
label 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;
7373
var 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

8383
profile.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
9094
AppWindow* m_appWindow;
@@ -93,15 +97,15 @@ EventRegistrationToken m_sensitivityLabelChangedToken = {};
9397

9498
void 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#
164165
void 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#
235227
namespace 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

432424
runtimeclass CoreWebView2SensitivityLabel
433425
{
434-
// ICoreWebView2StagingSensitivityLabel members
426+
// ICoreWebView2SensitivityLabel members
435427
CoreWebView2SensitivityLabelKind LabelKind { get; };
436428
}
437429

438430
runtimeclass 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

447439
runtimeclass CoreWebView2MipSensitivityLabel
448440
{
449-
// ICoreWebView2StagingMipSensitivityLabel members
441+
// ICoreWebView2MipSensitivityLabel members
450442
String LabelId { get; };
451443

452444
String OrganizationId { get; };
453445
}
454446
runtimeclass 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

Comments
 (0)