Index: ios/chrome/browser/tabs/tab_model.mm |
diff --git a/ios/chrome/browser/tabs/tab_model.mm b/ios/chrome/browser/tabs/tab_model.mm |
index 278d1394d2e1f3939f9f7e67be72743436200614..b3d60d2cece4a7a975cffeb3d1e03ca06de77f0b 100644 |
--- a/ios/chrome/browser/tabs/tab_model.mm |
+++ b/ios/chrome/browser/tabs/tab_model.mm |
@@ -11,7 +11,6 @@ |
#include "base/bind.h" |
#include "base/logging.h" |
#import "base/mac/foundation_util.h" |
-#import "base/mac/scoped_nsobject.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/metrics/user_metrics_action.h" |
#include "base/strings/sys_string_conversions.h" |
@@ -60,6 +59,10 @@ |
#import "ios/web/web_state/web_state_impl.h" |
#include "url/gurl.h" |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
NSString* const kTabModelTabWillStartLoadingNotification = |
@"kTabModelTabWillStartLoadingNotification"; |
NSString* const kTabModelTabDidStartLoadingNotification = |
@@ -147,8 +150,7 @@ void CleanCertificatePolicyCache( |
// Strong references to id<WebStateListObserving> wrapped by non-owning |
// WebStateListObserverBridges. |
- base::scoped_nsobject<NSArray<id<WebStateListObserving>>> |
- _retainedWebStateListObservers; |
+ NSArray<id<WebStateListObserving>>* _retainedWebStateListObservers; |
// The delegate for sync. |
std::unique_ptr<TabModelSyncedWindowDelegate> _syncedWindowDelegate; |
@@ -161,9 +163,9 @@ void CleanCertificatePolicyCache( |
// Backs up property with the same name. |
const SessionID _sessionID; |
// Saves session's state. |
- base::scoped_nsobject<SessionServiceIOS> _sessionService; |
+ SessionServiceIOS* _sessionService; |
// List of TabModelObservers. |
- base::scoped_nsobject<TabModelObservers> _observers; |
+ TabModelObservers* _observers; |
// Used to ensure thread-safety of the certificate policy management code. |
base::CancelableTaskTracker _clearPoliciesTaskTracker; |
@@ -172,10 +174,6 @@ void CleanCertificatePolicyCache( |
// Session window for the contents of the tab model. |
@property(nonatomic, readonly) SessionIOS* sessionForSaving; |
-// Helper method that posts a notification with the given name with |tab| |
-// in the userInfo dictionary under the kTabModelTabKey. |
-- (void)postNotificationName:(NSString*)notificationName withTab:(Tab*)tab; |
- |
// Helper method to restore a saved session and control if the state should |
// be persisted or not. Used to implement the public -restoreSessionWindow: |
// method and restoring session in the initialiser. |
@@ -220,11 +218,9 @@ void CleanCertificatePolicyCache( |
for (const auto& webStateListObserver : _webStateListObservers) |
_webStateList->RemoveObserver(webStateListObserver.get()); |
_webStateListObservers.clear(); |
- _retainedWebStateListObservers.reset(); |
+ _retainedWebStateListObservers = nil; |
_clearPoliciesTaskTracker.TryCancelAll(); |
- |
- [super dealloc]; |
} |
#pragma mark - Public methods |
@@ -269,7 +265,7 @@ void CleanCertificatePolicyCache( |
sessionService:(SessionServiceIOS*)service |
browserState:(ios::ChromeBrowserState*)browserState { |
if ((self = [super init])) { |
- _observers.reset([[TabModelObservers observers] retain]); |
+ _observers = [TabModelObservers observers]; |
_webStateListDelegate = |
base::MakeUnique<TabModelWebStateListDelegate>(self); |
@@ -294,16 +290,16 @@ void CleanCertificatePolicyCache( |
// There must be a valid session service defined to consume session windows. |
DCHECK(service); |
- _sessionService.reset([service retain]); |
+ _sessionService = service; |
- base::scoped_nsobject<NSMutableArray<id<WebStateListObserving>>> |
- retainedWebStateListObservers([[NSMutableArray alloc] init]); |
+ NSMutableArray<id<WebStateListObserving>>* retainedWebStateListObservers = |
+ [[NSMutableArray alloc] init]; |
- base::scoped_nsobject<TabModelClosingWebStateObserver> |
- tabModelClosingWebStateObserver([[TabModelClosingWebStateObserver alloc] |
- initWithTabModel:self |
- restoreService:IOSChromeTabRestoreServiceFactory:: |
- GetForBrowserState(_browserState)]); |
+ TabModelClosingWebStateObserver* tabModelClosingWebStateObserver = [ |
+ [TabModelClosingWebStateObserver alloc] |
+ initWithTabModel:self |
+ restoreService:IOSChromeTabRestoreServiceFactory::GetForBrowserState( |
+ _browserState)]; |
[retainedWebStateListObservers addObject:tabModelClosingWebStateObserver]; |
_webStateListObservers.push_back( |
@@ -320,17 +316,16 @@ void CleanCertificatePolicyCache( |
} |
_webStateListObservers.push_back(base::MakeUnique<TabParentingObserver>()); |
- base::scoped_nsobject<TabModelSelectedTabObserver> |
- tabModelSelectedTabObserver( |
- [[TabModelSelectedTabObserver alloc] initWithTabModel:self]); |
+ TabModelSelectedTabObserver* tabModelSelectedTabObserver = |
+ [[TabModelSelectedTabObserver alloc] initWithTabModel:self]; |
[retainedWebStateListObservers addObject:tabModelSelectedTabObserver]; |
_webStateListObservers.push_back( |
base::MakeUnique<WebStateListObserverBridge>( |
tabModelSelectedTabObserver)); |
- base::scoped_nsobject<TabModelObserversBridge> tabModelObserversBridge( |
+ TabModelObserversBridge* tabModelObserversBridge = |
[[TabModelObserversBridge alloc] initWithTabModel:self |
- tabModelObservers:_observers.get()]); |
+ tabModelObservers:_observers]; |
[retainedWebStateListObservers addObject:tabModelObserversBridge]; |
_webStateListObservers.push_back( |
base::MakeUnique<WebStateListObserverBridge>(tabModelObserversBridge)); |
@@ -342,7 +337,7 @@ void CleanCertificatePolicyCache( |
for (const auto& webStateListObserver : _webStateListObservers) |
_webStateList->AddObserver(webStateListObserver.get()); |
- _retainedWebStateListObservers.reset([retainedWebStateListObservers copy]); |
+ _retainedWebStateListObservers = [retainedWebStateListObservers copy]; |
if (window) { |
DCHECK([_observers empty]); |
@@ -670,7 +665,7 @@ void CleanCertificatePolicyCache( |
#pragma mark - NSFastEnumeration |
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState*)state |
- objects:(id*)objects |
+ objects:(id __unsafe_unretained*)objects |
rohitrao (ping after 24h)
2017/05/09 15:06:41
Why is this change necessary?
|
count:(NSUInteger)count { |
return [_fastEnumerationHelper->GetFastEnumeration() |
countByEnumeratingWithState:state |
@@ -700,18 +695,6 @@ void CleanCertificatePolicyCache( |
initWithWindows:@[ SerializeWebStateList(_webStateList.get()) ]]; |
} |
-- (void)postNotificationName:(NSString*)notificationName withTab:(Tab*)tab { |
- // A scoped_nsobject is used rather than an NSDictionary with static |
- // initializer dictionaryWithObject, because that approach adds the dictionary |
- // to the autorelease pool, which in turn holds Tab alive longer than |
- // necessary. |
- base::scoped_nsobject<NSDictionary> userInfo( |
- [[NSDictionary alloc] initWithObjectsAndKeys:tab, kTabModelTabKey, nil]); |
- [[NSNotificationCenter defaultCenter] postNotificationName:notificationName |
- object:self |
- userInfo:userInfo]; |
-} |
- |
- (BOOL)restoreSessionWindow:(SessionWindowIOS*)window |
persistState:(BOOL)persistState { |
DCHECK(_browserState); |
@@ -736,8 +719,8 @@ void CleanCertificatePolicyCache( |
scoped_refptr<web::CertificatePolicyCache> policyCache = |
web::BrowserState::GetCertificatePolicyCache(_browserState); |
- base::scoped_nsobject<NSMutableArray<Tab*>> restoredTabs( |
- [[NSMutableArray alloc] initWithCapacity:window.sessions.count]); |
+ NSMutableArray<Tab*>* restoredTabs = |
+ [[NSMutableArray alloc] initWithCapacity:window.sessions.count]; |
for (int index = oldCount; index < _webStateList->count(); ++index) { |
web::WebState* webState = _webStateList->GetWebStateAt(index); |
@@ -763,7 +746,7 @@ void CleanCertificatePolicyCache( |
} |
} |
if (_tabUsageRecorder) |
- _tabUsageRecorder->InitialRestoredTabs(self.currentTab, restoredTabs.get()); |
+ _tabUsageRecorder->InitialRestoredTabs(self.currentTab, restoredTabs); |
return closedNTPTab; |
} |