Index: ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm |
diff --git a/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm b/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm |
index 447209e8403d8516ebfb566dd7d8412824536214..54db5f3a2b67e40be66f4c5451a44fc809784a2a 100644 |
--- a/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm |
+++ b/ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.mm |
@@ -5,6 +5,7 @@ |
#import "ios/clean/chrome/browser/ui/web_contents/web_contents_mediator.h" |
#include "base/memory/ptr_util.h" |
+#include "base/scoped_observer.h" |
#include "ios/chrome/browser/chrome_url_constants.h" |
#import "ios/chrome/browser/web_state_list/web_state_list.h" |
#import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h" |
@@ -23,10 +24,23 @@ |
@implementation WebContentsMediator { |
std::unique_ptr<WebStateListObserverBridge> _webStateListObserver; |
+ std::unique_ptr<ScopedObserver<WebStateList, WebStateListObserverBridge>> |
+ _scopedWebStateListObserver; |
} |
@synthesize webStateList = _webStateList; |
@synthesize consumer = _consumer; |
+- (instancetype)init { |
+ self = [super init]; |
+ if (self) { |
+ _webStateListObserver = base::MakeUnique<WebStateListObserverBridge>(self); |
+ _scopedWebStateListObserver = base::MakeUnique< |
+ ScopedObserver<WebStateList, WebStateListObserverBridge>>( |
+ _webStateListObserver.get()); |
+ } |
+ return self; |
+} |
+ |
- (void)dealloc { |
[self disconnect]; |
} |
@@ -44,16 +58,12 @@ |
#pragma mark - Properties |
- (void)setWebStateList:(WebStateList*)webStateList { |
- if (_webStateList) { |
- _webStateList->RemoveObserver(_webStateListObserver.get()); |
- _webStateListObserver.reset(); |
- } |
+ _scopedWebStateListObserver->RemoveAll(); |
_webStateList = webStateList; |
if (!_webStateList) { |
return; |
} |
- _webStateListObserver = base::MakeUnique<WebStateListObserverBridge>(self); |
- _webStateList->AddObserver(_webStateListObserver.get()); |
+ _scopedWebStateListObserver->Add(_webStateList); |
if (_webStateList->GetActiveWebState()) { |
[self updateConsumerWithWebState:_webStateList->GetActiveWebState()]; |
} |