Skip to content

Commit abf524c

Browse files
Update label sample code to block print use case
1 parent 5b5870f commit abf524c

File tree

1 file changed

+65
-112
lines changed

1 file changed

+65
-112
lines changed

specs/SensitivityLabel.md

Lines changed: 65 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -83,118 +83,71 @@ EventRegistrationToken m_sensitivityLabelChangedToken = {};
8383

8484
void RegisterForSensitivityLabelChange()
8585
{
86-
auto m_webView32 = m_webView.try_query<ICoreWebView2_32>();
87-
if (m_webView32)
88-
{
89-
CHECK_FAILURE(m_webView32->add_SensitivityLabelChanged(
90-
Callback<ICoreWebView2SensitivityLabelChangedEventHandler>(
91-
[this](ICoreWebView2* sender, ICoreWebView2SensitivityLabelEventArgs* args)
92-
-> HRESULT
93-
{
94-
std::wstring labelsString;
95-
COREWEBVIEW2_SENSITIVITY_LABEL_STATE sensitivityState;
96-
CHECK_FAILURE(args->get_SensitivityState(&sensitivityState));
97-
98-
switch (sensitivityState)
99-
{
100-
case COREWEBVIEW2_SENSITIVITY_LABEL_STATE_UNDETERMINED:
101-
labelsString = L"<Labels undetermined>";
102-
break;
103-
104-
case COREWEBVIEW2_SENSITIVITY_LABEL_STATE_DETERMINED:
105-
labelsString = L"<Labels determined>";
106-
break;
107-
108-
default:
109-
labelsString = L"<No sensitivity state>";
110-
break;
111-
}
112-
113-
if(sensitivityState == COREWEBVIEW2_SENSITIVITY_LABEL_STATE_DETERMINED)
114-
{
115-
Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabelCollectionView>
116-
sensitivityLabelsCollection;
117-
CHECK_FAILURE(args->get_SensitivityLabels(
118-
&sensitivityLabelsCollection));
119-
120-
// Get the count of labels
121-
UINT32 labelCount = 0;
122-
CHECK_FAILURE(sensitivityLabelsCollection->get_Count(&labelCount));
123-
124-
125-
if (labelCount == 0)
126-
{
127-
labelsString = L"No label present";
128-
}
129-
else
130-
{
131-
for (UINT32 i = 0; i < labelCount; ++i)
132-
{
133-
Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabel>
134-
sensitivityLabel;
135-
CHECK_FAILURE(sensitivityLabelsCollection->GetValueAtIndex(
136-
i, &sensitivityLabel));
137-
138-
// Get the label type
139-
COREWEBVIEW2_SENSITIVITY_LABEL_KIND labelKind;
140-
CHECK_FAILURE(sensitivityLabel->get_LabelKind(&labelKind));
141-
142-
if (i > 0)
143-
{
144-
labelsString += L", ";
145-
}
146-
147-
// Handle different label types
148-
switch (labelType)
149-
{
150-
case COREWEBVIEW2_SENSITIVITY_LABEL_KIND_MIP:
151-
{
152-
Microsoft::WRL::ComPtr<ICoreWebView2SensitivityLabelMip>
153-
microsoftLabel;
154-
if (SUCCEEDED(sensitivityLabel.As(&microsoftLabel)))
155-
{
156-
wil::unique_cotaskmem_string labelId;
157-
wil::unique_cotaskmem_string organizationId;
158-
CHECK_FAILURE(microsoftLabel->get_LabelId(
159-
&labelId));
160-
CHECK_FAILURE(microsoftLabel->get_OrganizationId(
161-
&organizationId));
162-
163-
labelsString += L"Microsoft Label (ID: " +
164-
std::wstring(labelId.get() ?
165-
labelId.get() : L"<empty>") +
166-
L", Org: " +
167-
std::wstring(organizationId.get() ?
168-
organizationId.get() : L"<empty>") +
169-
L")";
170-
}
171-
break;
172-
}
173-
default:
174-
labelsString += L"Unknown Label";
175-
break;
176-
}
177-
}
178-
}
179-
}
180-
181-
// Show the sensitivity labels in a popup dialog
182-
RunAsync([this, labelsString]() {
183-
MessageBox(
184-
m_appWindow,
185-
labelsString,
186-
L"Sensitivity Label State", MB_OK);
187-
});
188-
189-
return S_OK;
190-
})
191-
.Get(),
192-
&m_sensitivityLabelChangedToken));
193-
}
194-
86+
auto webView32 = m_webView.try_query<ICoreWebView2Staging32>();
87+
if (webView32)
88+
{
89+
CHECK_FAILURE(webView32->add_SensitivityInfoChanged(
90+
Callback<ICoreWebView2StagingSensitivityInfoChangedEventHandler>(
91+
[this](ICoreWebView2* sender, IUnknown* args) -> HRESULT
92+
{
93+
auto webView32 = this->m_webView.try_query<ICoreWebView2Staging32>();
94+
ICoreWebView2StagingSensitivityInfo* sensitivityInfo = nullptr;
95+
webView32->get_SensitivityInfo(&sensitivityInfo);
96+
97+
COREWEBVIEW2_SENSITIVITY_LABELS_STATE sensitivityLabelsState;
98+
CHECK_FAILURE(sensitivityInfo->get_SensitivityLabelsState(&sensitivityLabelsState));
99+
100+
// Block print action in case sensitivity state is yet to be available
101+
bool shouldBlockPrint = (sensitivityLabelsState == COREWEBVIEW2_SENSITIVITY_LABELS_STATE_PENDING);
102+
103+
// If sensitivity state is available check with the DLP provider if print rights is available
104+
if(sensitivityLabelsState == COREWEBVIEW2_SENSITIVITY_LABELS_STATE_AVAILABLE)
105+
{
106+
Microsoft::WRL::ComPtr<ICoreWebView2StagingSensitivityLabelCollectionView> sensitivityLabelsCollection;
107+
CHECK_FAILURE(sensitivityInfo->get_SensitivityLabels(&sensitivityLabelsCollection));
108+
109+
// Get the count of labels
110+
UINT32 labelCount = 0;
111+
CHECK_FAILURE(sensitivityLabelsCollection->get_Count(&labelCount));
112+
113+
for (UINT32 i = 0; i < labelCount; ++i)
114+
{
115+
Microsoft::WRL::ComPtr<ICoreWebView2StagingSensitivityLabel> sensitivityLabel;
116+
CHECK_FAILURE(sensitivityLabelsCollection->GetValueAtIndex(i, &sensitivityLabel));
117+
118+
// Get the label kind COREWEBVIEW2_SENSITIVITY_LABEL_KIND
119+
COREWEBVIEW2_SENSITIVITY_LABEL_KIND labelKind;
120+
CHECK_FAILURE(sensitivityLabel->get_LabelKind(&labelKind));
121+
if (labelKind == COREWEBVIEW2_SENSITIVITY_LABEL_KIND_MIP)
122+
{
123+
// Try to get as MIP label
124+
Microsoft::WRL::ComPtr<ICoreWebView2StagingMipSensitivityLabel> mipLabel;
125+
if (SUCCEEDED(sensitivityLabel.As(&mipLabel)))
126+
{
127+
wil::unique_cotaskmem_string labelId;
128+
wil::unique_cotaskmem_string organizationId;
129+
CHECK_FAILURE(mipLabel->get_LabelId(&labelId));
130+
CHECK_FAILURE(mipLabel->get_OrganizationId(&organizationId));
131+
132+
// Query Purview for label metadata and check for Print rights
133+
bool isPrintAllowed = IsPrintRightsAllowedByPurview(labelId, organizationId)
134+
135+
// Block print if any of the document blocks print
136+
shouldBlockPrint ||= isPrintAllowed;
137+
}
138+
}
139+
}
140+
141+
if (shouldBlockPrint)
142+
{
143+
BlockPrintOption();
144+
}
145+
}
146+
}).Get(),
147+
&m_sensitivityLabelChangedToken));
148+
}
195149
}
196-
197-
```
150+
```
198151
### .NET/WinRT Sample
199152

200153
```c#
@@ -435,7 +388,7 @@ interface ICoreWebView2StagingSensitivityInfo : IUnknown {
435388

436389
/// Gets the current state of sensitivity label detection.
437390
/// Refer `COREWEBVIEW2_SENSITIVITY_LABELS_STATE` for different states.
438-
[propget] HRESULT SensitivityState([out, retval] COREWEBVIEW2_SENSITIVITY_LABELS_STATE* value);
391+
[propget] HRESULT SensitivityLabelsState([out, retval] COREWEBVIEW2_SENSITIVITY_LABELS_STATE* value);
439392
}
440393

441394
/// Receives `SensitivityInfoChanged` events.

0 commit comments

Comments
 (0)