Skip to content

Commit 1cc80be

Browse files
Add label related API examples and API details
1 parent 2937741 commit 1cc80be

1 file changed

Lines changed: 210 additions & 0 deletions

File tree

specs/SensitivityLabel.md

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,128 @@ void GetCurrentAllowlist()
112112
}
113113
}
114114
```
115+
## Register for sensitivity label change
116+
117+
```cpp
118+
AppWindow* m_appWindow;
119+
wil::com_ptr<ICoreWebView2> m_webView;
120+
EventRegistrationToken m_sensitivityLabelChangedToken = {};
121+
122+
void RegisterForSensitivityLabelChange()
123+
{
124+
auto m_webView32 = m_webView.try_query<ICoreWebView2_32>();
125+
if (m_webView32)
126+
{
127+
CHECK_FAILURE(m_webView32->add_SensitivityLabelChanged(
128+
Callback<ICoreWebView2SensitivityLabelChangedEventHandler>(
129+
[this](ICoreWebView2* sender, ICoreWebView2SensitivityLabelEventArgs* args)
130+
-> HRESULT
131+
{
132+
std::wstring labelsString;
133+
COREWEBVIEW2_SENSITIVITY_LABEL_STATE sensitivityState;
134+
CHECK_FAILURE(args->get_SensitivityState(&sensitivityState));
135+
136+
if (sensitivityState == COREWEBVIEW2_SENSITIVITY_LABEL_STATE_NONE ||
137+
sensitivityState == COREWEBVIEW2_SENSITIVITY_LABEL_STATE_UNDETERMINED)
138+
{
139+
labelsString = L"<no labels>";
140+
}
141+
switch (sensitivityState)
142+
{
143+
case COREWEBVIEW2_SENSITIVITY_LABEL_STATE_UNDETERMINED:
144+
labelsString = L"<Labels undetermined>";
145+
break;
146+
147+
case COREWEBVIEW2_SENSITIVITY_LABEL_STATE_DETERMINED:
148+
labelsString = L"<Labels determined>";
149+
break;
150+
151+
default:
152+
labelsString = L"<No sensitivity state>";
153+
break;
154+
}
155+
156+
if(sensitivityState == COREWEBVIEW2_SENSITIVITY_LABEL_STATE_DETERMINED)
157+
{
158+
Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabelCollectionView> sensitivityLabelsCollection;
159+
CHECK_FAILURE(args->get_SensitivityLabel(&sensitivityLabelsCollection));
160+
161+
// Get the count of labels
162+
UINT32 labelCount = 0;
163+
CHECK_FAILURE(sensitivityLabelsCollection->get_Count(&labelCount));
164+
165+
166+
if (labelCount == 0)
167+
{
168+
labelsString = L"No label present";
169+
}
170+
else
171+
{
172+
for (UINT32 i = 0; i < labelCount; ++i)
173+
{
174+
Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabel> sensitivityLabel;
175+
CHECK_FAILURE(sensitivityLabelsCollection->GetValueAtIndex(i, &sensitivityLabel));
176+
177+
// Get the label type
178+
COREWEBVIEW2_SENSITIVITY_LABEL_TYPE labelType;
179+
CHECK_FAILURE(sensitivityLabel->GetLabelType(&labelType));
180+
181+
if (i > 0)
182+
{
183+
labelsString += L", ";
184+
}
185+
186+
// Handle different label types
187+
switch (labelType)
188+
{
189+
case COREWEBVIEW2_SENSITIVITY_LABEL_TYPE_MIP:
190+
{
191+
Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabelMip> microsoftLabel;
192+
if (SUCCEEDED(sensitivityLabel.As(&microsoftLabel)))
193+
{
194+
wil::unique_cotaskmem_string labelId;
195+
wil::unique_cotaskmem_string organizationId;
196+
CHECK_FAILURE(microsoftLabel->get_LabelId(&labelId));
197+
CHECK_FAILURE(microsoftLabel->get_OrganizationId(&organizationId));
198+
199+
labelsString += L"Microsoft Label (ID: " +
200+
std::wstring(labelId.get() ? labelId.get() : L"<empty>") +
201+
L", Org: " +
202+
std::wstring(organizationId.get() ? organizationId.get() : L"<empty>") +
203+
L")";
204+
}
205+
break;
206+
}
207+
default:
208+
labelsString += L"Unknown Label";
209+
break;
210+
}
211+
}
212+
}
213+
}
214+
215+
// Show the sensitivity labels in a popup dialog
216+
RunAsync([this, labelsString]() {
217+
MessageBox(
218+
m_appWindow,
219+
labelsString,
220+
L"Sensitivity Label State", MB_OK);
221+
});
222+
223+
return S_OK;
224+
})
225+
.Get(),
226+
&m_sensitivityLabelChangedToken));
227+
}
228+
229+
}
230+
231+
```
115232

116233
# API Details
117234

235+
## Allow listing
236+
118237
```
119238
[uuid(764ffcc6-b341-5307-8ca4-58face289427), object, pointer_default(unique)]
120239
interface ICoreWebView2StagingEnvironment15 : IUnknown {
@@ -153,3 +272,94 @@ namespace Microsoft.Web.WebView2.Core
153272
}
154273
}
155274
```
275+
## Sensitivity label change event
276+
```
277+
/// Enum for sensitivity label State.
278+
[v1_enum]
279+
typedef enum COREWEBVIEW2_SENSITIVITY_LABEL_STATE {
280+
/// There are no allow listed pages loaded that report sensitivity label
281+
COREWEBVIEW2_SENSITIVITY_LABEL_STATE_NONE,
282+
/// There are allow listed pages in the WebView2 and the sensitivity label is not determined yet.
283+
COREWEBVIEW2_SENSITIVITY_LABEL_STATE_UNDETERMINED,
284+
/// There are allow listed pages in the WebView2 and the sensitivity label is determined.
285+
COREWEBVIEW2_SENSITIVITY_LABEL_STATE_DETERMINED,
286+
} COREWEBVIEW2_SENSITIVITY_LABEL_STATE;
287+
288+
/// Enum for sensitivity label types.
289+
[v1_enum]
290+
typedef enum COREWEBVIEW2_SENSITIVITY_LABEL_TYPE {
291+
/// Unknown or unsupported label type.
292+
COREWEBVIEW2_SENSITIVITY_LABEL_TYPE_UNKNOWN,
293+
/// Microsoft Information Protection label.
294+
COREWEBVIEW2_SENSITIVITY_LABEL_TYPE_MIP,
295+
} COREWEBVIEW2_SENSITIVITY_LABEL_TYPE;
296+
297+
/// Base interface for all sensitivity label types.
298+
[uuid(9112ece5-d54d-5d16-a595-275ae574c287), object, pointer_default(unique)]
299+
interface ICoreWebView2StagingSensitivityLabel : IUnknown {
300+
/// Gets the type of this sensitivity label.
301+
HRESULT GetLabelType(
302+
[out, retval] COREWEBVIEW2_SENSITIVITY_LABEL_TYPE* value);
303+
304+
305+
}
306+
307+
308+
/// Interface for MIP Sensitivity Label with label ID and organization ID.
309+
[uuid(1a562888-3031-5375-b8c5-8afd573e79c8), object, pointer_default(unique)]
310+
interface ICoreWebView2StagingMipSensitivityLabel : IUnknown {
311+
/// The string representing the label ID.
312+
///
313+
/// The caller must free the returned string with `CoTaskMemFree`. See
314+
/// [API Conventions](/microsoft-edge/webview2/concepts/win32-api-conventions#strings).
315+
[propget] HRESULT LabelId([out, retval] LPWSTR* value);
316+
317+
318+
/// The string representing the organization ID.
319+
///
320+
/// The caller must free the returned string with `CoTaskMemFree`. See
321+
/// [API Conventions](/microsoft-edge/webview2/concepts/win32-api-conventions#strings).
322+
[propget] HRESULT OrganizationId([out, retval] LPWSTR* value);
323+
324+
}
325+
326+
/// A collection of ICoreWebView2StagingSensitivityLabel.
327+
[uuid(2cb85219-0878-5f38-b7e9-769fab6ff887), object, pointer_default(unique)]
328+
interface ICoreWebView2StagingSensitivityLabelCollectionView : IUnknown {
329+
/// The number of elements contained in the collection.
330+
[propget] HRESULT Count([out, retval] UINT32* value);
331+
332+
/// Gets the element at the given index.
333+
HRESULT GetValueAtIndex([in] UINT32 index, [out, retval] ICoreWebView2StagingSensitivityLabel** value);
334+
}
335+
336+
337+
/// Event args for the `SensitivityLabelChanged` event.
338+
[uuid(36de2060-e013-5b03-939b-117d08d0abd5), object, pointer_default(unique)]
339+
interface ICoreWebView2StagingSensitivityLabelEventArgs : IUnknown {
340+
/// The vector of Sensitivity Labels associated with the current document.
341+
[propget] HRESULT SensitivityLabels([out, retval] ICoreWebView2StagingSensitivityLabelCollectionView** value);
342+
343+
344+
/// The state of the sensitivity label.
345+
[propget] HRESULT SensitivityState([out, retval] COREWEBVIEW2_SENSITIVITY_LABEL_STATE* value);
346+
347+
}
348+
349+
/// A continuation of the ICoreWebView2 interface to notify changes in
350+
/// web content sensitivity label.
351+
[uuid(ac4543d5-f466-5622-8b3b-24d3b195525c), object, pointer_default(unique)]
352+
interface ICoreWebView2Staging32 : IUnknown {
353+
/// Adds an event handler for the `SensitivityLabelChanged` event.
354+
/// This event is raised when the web content's sensitivity label changes.
355+
HRESULT add_SensitivityLabelChanged(
356+
[in] ICoreWebView2StagingSensitivityLabelChangedEventHandler* eventHandler,
357+
[out] EventRegistrationToken* token);
358+
359+
/// Removes an event handler previously added with `add_SensitivityLabelChanged`.
360+
HRESULT remove_SensitivityLabelChanged(
361+
[in] EventRegistrationToken token);
362+
363+
364+
}
365+
```

0 commit comments

Comments
 (0)