| Index: ios/chrome/browser/ui/main/browser_view_wrangler.mm
|
| diff --git a/ios/chrome/browser/ui/main/browser_view_wrangler.mm b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
|
| index d31d546cd74eaa125df7ca7f5f044b9aef29fa3c..ef7f08f6cb859cc94b6d03c6cb2c943e61f2529f 100644
|
| --- a/ios/chrome/browser/ui/main/browser_view_wrangler.mm
|
| +++ b/ios/chrome/browser/ui/main/browser_view_wrangler.mm
|
| @@ -27,7 +27,6 @@
|
| @interface BrowserViewWrangler ()<TabModelObserver> {
|
| ios::ChromeBrowserState* _browserState;
|
| __unsafe_unretained id<TabModelObserver> _tabModelObserver;
|
| - BOOL _isShutdown;
|
|
|
| base::mac::ObjCPropertyReleaser _propertyReleaser_BrowserViewWrangler;
|
| }
|
| @@ -83,7 +82,25 @@
|
| }
|
|
|
| - (void)dealloc {
|
| - DCHECK(_isShutdown) << "-shutdown must be called before -dealloc";
|
| + if (_tabModelObserver) {
|
| + [_mainTabModel removeObserver:_tabModelObserver];
|
| + [_otrTabModel removeObserver:_tabModelObserver];
|
| + }
|
| + [_mainTabModel removeObserver:self];
|
| + [_otrTabModel removeObserver:self];
|
| +
|
| + // Stop URL monitoring of the main tab model.
|
| + ios_internal::breakpad::StopMonitoringURLsForTabModel(_mainTabModel);
|
| +
|
| + // Stop Breakpad state monitoring of both tab models (if necessary).
|
| + ios_internal::breakpad::StopMonitoringTabStateForTabModel(_mainTabModel);
|
| + ios_internal::breakpad::StopMonitoringTabStateForTabModel(_otrTabModel);
|
| +
|
| + // Normally other objects will take care of unhooking the tab models from
|
| + // the browser state, but this code should ensure that it happens regardless.
|
| + [_mainTabModel browserStateDestroyed];
|
| + [_otrTabModel browserStateDestroyed];
|
| +
|
| [super dealloc];
|
| }
|
|
|
| @@ -266,39 +283,6 @@
|
| }
|
| }
|
|
|
| -- (void)shutdown {
|
| - DCHECK(!_isShutdown);
|
| - _isShutdown = YES;
|
| -
|
| - if (_tabModelObserver) {
|
| - [_mainTabModel removeObserver:_tabModelObserver];
|
| - [_otrTabModel removeObserver:_tabModelObserver];
|
| - _tabModelObserver = nil;
|
| - }
|
| -
|
| - [_mainTabModel removeObserver:self];
|
| - [_otrTabModel removeObserver:self];
|
| -
|
| - // Stop URL monitoring of the main tab model.
|
| - ios_internal::breakpad::StopMonitoringURLsForTabModel(_mainTabModel);
|
| -
|
| - // Stop Breakpad state monitoring of both tab models (if necessary).
|
| - ios_internal::breakpad::StopMonitoringTabStateForTabModel(_mainTabModel);
|
| - ios_internal::breakpad::StopMonitoringTabStateForTabModel(_otrTabModel);
|
| -
|
| - // Normally other objects will take care of unhooking the tab models from
|
| - // the browser state, but this code should ensure that it happens regardless.
|
| - [_mainTabModel browserStateDestroyed];
|
| - [_otrTabModel browserStateDestroyed];
|
| -
|
| - [_mainBVC shutdown];
|
| - [_otrBVC shutdown];
|
| - self.mainBVC = nil;
|
| - self.otrBVC = nil;
|
| -
|
| - _browserState = nullptr;
|
| -}
|
| -
|
| #pragma mark - Internal methods
|
|
|
| - (TabModel*)buildOtrTabModel:(BOOL)empty {
|
|
|