@@ -178,26 +178,21 @@ HRESULT AppWindow::DeleteProfile(ICoreWebView2* webView2)
178
178
179
179
void AppWindow::RegisterEventHandlers()
180
180
{
181
- CHECK_FAILURE(m_webView->add_Closed(
182
- Microsoft::WRL::Callback< ICoreWebView2ClosedEventHandler >(
183
- [ this ] (ICoreWebView2_20 * sender, ICoreWebView2EventArgs * args )
184
- {
185
- COREWEBVIEW2_CLOSED_REASON reason;
186
- CHECK_FAILURE(args->get_Reason(&reason));
187
- if (reason == COREWEBVIEW2_CLOSED_REASON::COREWEBVIEW2_CLOSED_REASON_PROFILE_DELETED )
181
+ wil::com_ptr< ICoreWebView2Profile > webView2Profile;
182
+ webView2_13->get_Profile(&webView2Profile);
183
+ if (webView2Profile )
184
+ {
185
+ webView2Profile->add_ProfileDeletionStarted(
186
+ Microsoft::WRL::Callback< ICoreWebView2ProfileDeletionStartedEventHandler >(
187
+ [ this ] (ICoreWebView2Profile7 * sender, IUnknown * args )
188
188
{
189
189
RunAsync( [ this] ( )
190
190
{
191
- std::wstring message =
192
- L"The webview2 has been closed and the reason is profile "
193
- L"has been marked as deleted.";
194
- MessageBox(
195
- m_mainWindow, message.c_str(), L"webview2 closed", MB_OK);
196
191
CloseAppWindow();
197
- });
198
- }
199
- return S_OK ;
200
- }).Get(), nullptr));
192
+ }
193
+ return S_OK;
194
+ }).Get(),nullptr) ;
195
+ }
201
196
}
202
197
```
203
198
@@ -274,20 +269,15 @@ public DeleteProfile(CoreWebView2Controller controller)
274
269
275
270
void WebView_CoreWebView2InitializationCompleted (object sender , CoreWebView2InitializationCompletedEventArgs e )
276
271
{
277
- webView . CoreWebView2 . Closed += CoreWebView2_Closed ;
272
+ WebViewProfile . ProfileDeletionStarted += CoreWebView2_ProfileDeletionStarted ;
278
273
}
279
274
280
- private void CoreWebView2_Closed (object sender , CoreWebView2ClosedEventArgs e )
275
+ private void CoreWebView2_ProfileDeletionStarted (object sender , object e )
281
276
{
282
- if ( e . Reason == CoreWebView2ClosedReason . ProfileDeleted )
277
+ this . Dispatcher . InvokeAsync (() =>
283
278
{
284
- this .Dispatcher .InvokeAsync (() =>
285
- {
286
- String message = " The webview2 has been closed and the reason is profile has been marked as deleted" ;
287
- MessageBox .Show (message );
288
- Close ();
289
- });
290
- }
279
+ Close ();
280
+ });
291
281
}
292
282
```
293
283
@@ -299,13 +289,11 @@ private void CoreWebView2_Closed(object sender, CoreWebView2ClosedEventArgs e)
299
289
interface ICoreWebView2ControllerOptions;
300
290
interface ICoreWebView2Environment5;
301
291
interface ICoreWebView2_7;
302
- interface ICoreWebView2_9;
303
292
interface ICoreWebView2Profile;
304
293
interface ICoreWebView2Profile2;
305
294
interface ICoreWebView2Profile3;
306
295
interface ICoreWebView2Profile4;
307
- interface ICoreWebView2ClosedEventHandler;
308
- interface ICoreWebView2ClosedEventArgs;
296
+ interface ICoreWebView2ProfileDeletionStartedEventHandler;
309
297
310
298
/// This interface is used to manage profile options that created by 'CreateCoreWebView2ControllerOptions'.
311
299
[uuid(C2669A3A-03A9-45E9-97EA-03CD55E5DC03), object, pointer_default(unique)]
@@ -399,60 +387,44 @@ interface ICoreWebView2Profile2 : ICoreWebView2Profile {
399
387
[propget] HRESULT CookieManager([out, retval] ICoreWebView2CookieManager** cookieManager);
400
388
}
401
389
402
- [uuid(2765B8BD-7C57-4B76-B8AA-1EC940FE92CC), object, pointer_default(unique)]
403
- interface ICoreWebView2Profile4 : IUnknown {
404
- /// After the API is called, the profile will be marked for deletion. The
405
- /// local profile's directory will be tried to delete at browser process
406
- /// exit, if fail to delete, it will recursively try to delete at next
407
- /// browser process start until successful.
408
- /// The corresponding webview2s will be auto closed and its Closed event
409
- /// handle function will be triggered with the reason is
410
- /// COREWEBVIEW2_CLOSED_REASON.COREWEBVIEW2_CLOSED_REASON_PROFILE_DELETED.
390
+ /// Interfaces in profile for Delete.
391
+ [uuid(7CB8811D-A9B6-425E-9C57-0B0E599BAC5D), object, pointer_default(unique)]
392
+ interface ICoreWebView2Profile7 : IUnknown {
393
+ /// After the API is called, the profile will be marked for deletion. If the
394
+ /// profile has been marked for deletion, this API will return S_OK directly.
395
+ /// The local profile's directory will be tried to delete at browser
396
+ /// process exit, if fail to delete, it will recursively try to delete at
397
+ /// next browser process start until successful.
398
+ /// When the profile is marked for deletion, the corresponding
399
+ /// `ProfileDeletionStarted` event handle of each profile with the same name
400
+ /// in current or different process will be all triggered. See
401
+ /// `add_ProfileDeletionStarted` for more information.
411
402
/// If create a new profile with the same name as the profile that has been
412
403
/// marked as deleted will be failure with the HRESULT:ERROR_INVALID_STATE
413
404
/// (0x8007139FL).
414
405
HRESULT Delete();
415
- }
416
406
417
- [uuid(cc39bea3-f6f8-471b-919f-fa253e2fff03), object, pointer_default(unique)]
418
- interface ICoreWebView2_9 : IUnknown {
419
- /// Add an event handler for the `Closed` event. `Closed` enent handle runs
420
- /// when the webview2 is closed passivly. When this event is raised, the
421
- /// webview2 cannot be used anymore.
422
- HRESULT add_Closed(
423
- [in] ICoreWebView2ClosedEventHandler* eventHandler,
407
+ /// The `ProfileDeletionStarted` event will be raised when profile has been
408
+ /// marked as deleted. When this event has been raised, it is recommended to
409
+ /// do some clean works and then close the webview2.
410
+ HRESULT add_ProfileDeletionStarted (
411
+ [in] ICoreWebView2ProfileDeletionStartedEventHandler* eventHandler,
424
412
[out] EventRegistrationToken* token);
425
413
426
- /// Remove an event handler previously added with `add_Closed `.
427
- HRESULT remove_Closed (
414
+ /// Remove an event handler previously added with `add_ProfileDeletionStarted `.
415
+ HRESULT remove_ProfileDeletionStarted (
428
416
[in] EventRegistrationToken token);
429
417
}
430
418
431
- /// The reason of webview2 closed.
432
- [v1_enum]
433
- typedef enum COREWEBVIEW2_CLOSED_REASON {
434
- /// Indicates that the reason of webview2 closed is its corresponding
435
- /// Profile has been or marked as deleted.
436
- COREWEBVIEW2_CLOSED_REASON_PROFILE_DELETED,
437
- } COREWEBVIEW2_CLOSED_REASON;
438
-
439
- /// Receives the webview2 `Closed` event.
419
+ /// Receives the profile `ProfileDeletionStarted` event.
440
420
[uuid(970BB7E0-A257-4A76-BE15-5BDEB00B5673), object, pointer_default(unique)]
441
- interface ICoreWebView2ClosedEventHandler : IUnknown {
442
- /// Called to provide the implementer with the event args for the
443
- /// corresponding event.
444
- HRESULT Invoke([in] ICoreWebView2_20* sender,
445
- [in] ICoreWebView2ClosedEventArgs* args);
421
+ interface ICoreWebView2ProfileDeletionStartedEventHandler : IUnknown {
422
+ /// Called to provide the implementer for the ProfileDeletionStarted event.
423
+ /// No event args exist and the `args` parameter is set to `null`.
424
+ HRESULT Invoke(
425
+ [in] ICoreWebView2Profile7* sender,
426
+ [in] IUnknown* args);
446
427
}
447
-
448
- /// This is the event args interface for webview2 `Closed` event handle.
449
- [uuid(0e1730c1-03df-4ad2-b847-be4d63adf777), object, pointer_default(unique)]
450
- interface ICoreWebView2ClosedEventArgs : IUnknown {
451
- /// webview2 closed reason.
452
- [propget] HRESULT Reason([out, retval]
453
- COREWEBVIEW2_CLOSED_REASON* value);
454
- }
455
-
456
428
```
457
429
458
430
## .NET and WinRT
@@ -488,28 +460,6 @@ namespace Microsoft.Web.WebView2.Core
488
460
CoreWebView2ControllerWindowReference ParentWindow ,
489
461
CoreWebView2ControllerOptions options );
490
462
}
491
-
492
- runtimeclass CoreWebView2
493
- {
494
- // ...
495
- CoreWebView2Profile Profile { get ; };
496
-
497
- [interface_name (" Microsoft.Web.WebView2.Core.ICoreWebView2_9" )]
498
- {
499
- event Windows .Foundation .TypedEventHandler < CoreWebView2 , CoreWebView2ClosedEventArgs > Closed ;
500
- }
501
- }
502
-
503
- enum CoreWebView2ClosedReason
504
- {
505
- ProfileDeleted = 0 ,
506
- };
507
-
508
- runtimeclass CoreWebView2ClosedEventArgs
509
- {
510
- CoreWebView2ClosedReason Reason { get ; };
511
- }
512
-
513
463
runtimeclass CoreWebView2Profile
514
464
{
515
465
String ProfileName { get ; };
@@ -520,10 +470,10 @@ namespace Microsoft.Web.WebView2.Core
520
470
521
471
CoreWebView2CookieManager CookieManager { get ; };
522
472
523
- [interface_name (" Microsoft.Web.WebView2.Core.ICoreWebView2Profile4 " )]
473
+ [interface_name (" Microsoft.Web.WebView2.Core.ICoreWebView2Profile7 " )]
524
474
{
525
- // ICoreWebView2Profile4 members
526
475
void Delete ();
476
+ event Windows .Foundation .TypedEventHandler < CoreWebView2Profile , Object > ProfileDeletionStarted ;
527
477
}
528
478
}
529
479
}
0 commit comments