@@ -83,118 +83,71 @@ EventRegistrationToken m_sensitivityLabelChangedToken = {};
8383
8484void 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(µsoftLabel)))
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