Index: ios/chrome/browser/ui/tabs/tab_strip_controller.mm |
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm |
index c09b68a369b2f3dce5afbcc304cdb4f01116fcdc..7261aae9e00abfa542639236173283eaf0ea035e 100644 |
--- a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm |
+++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm |
@@ -9,11 +9,9 @@ |
#include <vector> |
#include "base/i18n/rtl.h" |
-#import "base/ios/weak_nsobject.h" |
#include "base/mac/bundle_locations.h" |
#include "base/mac/foundation_util.h" |
-#include "base/mac/objc_property_releaser.h" |
-#include "base/mac/scoped_nsobject.h" |
+ |
#include "base/metrics/user_metrics.h" |
#include "base/metrics/user_metrics_action.h" |
#include "base/strings/sys_string_conversions.h" |
@@ -39,6 +37,10 @@ |
#include "third_party/google_toolbox_for_mac/src/iPhone/GTMFadeTruncatingLabel.h" |
#include "ui/gfx/image/image.h" |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
using base::UserMetricsAction; |
NSString* const kWillStartTabStripTabAnimation = |
@@ -118,27 +120,27 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
TabStripViewLayoutDelegate, |
UIGestureRecognizerDelegate, |
UIScrollViewDelegate> { |
- base::scoped_nsobject<TabModel> _tabModel; |
+ TabModel* _tabModel; |
UIView* _view; |
TabStripView* _tabStripView; |
UIButton* _buttonNewTab; |
- base::scoped_nsobject<UIButton> _tabSwitcherButton; |
+ UIButton* _tabSwitcherButton; |
// Background view of the tab switcher button. Only visible while in compact |
// layout. |
- base::scoped_nsobject<UIImageView> _tabSwitcherButtonBackgroundView; |
+ UIImageView* _tabSwitcherButtonBackgroundView; |
TabStrip::Style _style; |
- base::WeakNSProtocol<id<FullScreenControllerDelegate>> _fullscreenDelegate; |
+ __weak id<FullScreenControllerDelegate> _fullscreenDelegate; |
// Array of TabViews. There is a one-to-one correspondence between this array |
// and the set of Tabs in the TabModel. |
- base::scoped_nsobject<NSMutableArray> _tabArray; |
+ NSMutableArray* _tabArray; |
// Set of TabViews that are currently closing. These TabViews are also in |
// |_tabArray|. Used to translate between |_tabArray| indexes and TabModel |
// indexes. |
- base::scoped_nsobject<NSMutableSet> _closingTabs; |
+ NSMutableSet* _closingTabs; |
// Tracks target frames for TabViews. |
// TODO(rohitrao): This is unnecessary, as UIKit updates view frames |
@@ -155,7 +157,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
// View used to dim unselected tabs when in reordering mode. Nil when not |
// reordering tabs. |
- base::scoped_nsobject<UIView> _dimmingView; |
+ UIView* _dimmingView; |
// Is the selected tab highlighted, used when dragging or swiping tabs. |
BOOL _highlightsSelectedTab; |
@@ -165,7 +167,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
BOOL _isReordering; |
// The tab that is currently being dragged. nil when not in reordering mode. |
- base::scoped_nsobject<TabView> _draggedTab; |
+ TabView* _draggedTab; |
// The last known location of the touch that is dragging the tab. This |
// location is in the coordinate system of |[_tabStripView superview]| because |
@@ -183,8 +185,6 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
// The model index of the placeholder gap, if one exists. This value is used |
// as the new model index of the dragged tab when it is dropped. |
NSUInteger _placeholderGapModelIndex; |
- |
- base::mac::ObjCPropertyReleaser _propertyReleaser_TabStripController; |
} |
@property(nonatomic, readonly, retain) TabStripView* tabStripView; |
@@ -326,11 +326,10 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
- (instancetype)initWithTabModel:(TabModel*)tabModel |
style:(TabStrip::Style)style { |
if ((self = [super init])) { |
- _propertyReleaser_TabStripController.Init(self, [TabStripController class]); |
- _tabArray.reset([[NSMutableArray alloc] initWithCapacity:10]); |
- _closingTabs.reset([[NSMutableSet alloc] initWithCapacity:5]); |
+ _tabArray = [[NSMutableArray alloc] initWithCapacity:10]; |
+ _closingTabs = [[NSMutableSet alloc] initWithCapacity:5]; |
- _tabModel.reset([tabModel retain]); |
+ _tabModel = tabModel; |
[_tabModel addObserver:self]; |
_style = style; |
@@ -432,7 +431,6 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
[_tabStripView setDelegate:nil]; |
[_tabStripView setLayoutDelegate:nil]; |
[_tabModel removeObserver:self]; |
- [super dealloc]; |
} |
- (id<FullScreenControllerDelegate>)fullscreenDelegate { |
@@ -441,12 +439,12 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
- (void)setFullscreenDelegate: |
(id<FullScreenControllerDelegate>)fullscreenDelegate { |
- _fullscreenDelegate.reset(fullscreenDelegate); |
+ _fullscreenDelegate = fullscreenDelegate; |
} |
- (void)initializeTabArrayFromTabModel { |
DCHECK(_tabModel); |
- for (Tab* tab in _tabModel.get()) { |
+ for (Tab* tab in _tabModel) { |
BOOL isSelectedTab = [_tabModel currentTab] == tab; |
TabView* view = [self tabViewForTab:tab isSelected:isSelectedTab]; |
[_tabArray addObject:view]; |
@@ -464,8 +462,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
} |
- (TabView*)emptyTabView { |
- TabView* view = |
- [[[TabView alloc] initWithEmptyView:YES selected:YES] autorelease]; |
+ TabView* view = [[TabView alloc] initWithEmptyView:YES selected:YES]; |
[view setIncognitoStyle:(_style == TabStrip::kStyleIncognito)]; |
[view setContentMode:UIViewContentModeRedraw]; |
@@ -477,8 +474,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
} |
- (TabView*)tabViewForTab:(Tab*)tab isSelected:(BOOL)isSelected { |
- TabView* view = |
- [[[TabView alloc] initWithEmptyView:NO selected:isSelected] autorelease]; |
+ TabView* view = [[TabView alloc] initWithEmptyView:NO selected:isSelected]; |
if (UseRTLLayout()) |
[view setTransform:CGAffineTransformMakeScale(-1, 1)]; |
[view setIncognitoStyle:(_style == TabStrip::kStyleIncognito)]; |
@@ -495,10 +491,10 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
forControlEvents:UIControlEventTouchUpInside]; |
// Install a long press gesture recognizer to handle drag and drop. |
- base::scoped_nsobject<UILongPressGestureRecognizer> longPress( |
+ UILongPressGestureRecognizer* longPress = |
[[UILongPressGestureRecognizer alloc] |
initWithTarget:self |
- action:@selector(handleLongPress:)]); |
+ action:@selector(handleLongPress:)]; |
[longPress setMinimumPressDuration:kDragAndDropLongPressDuration]; |
[longPress setDelegate:self]; |
[view addGestureRecognizer:longPress]; |
@@ -533,10 +529,10 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
// Create the dimming view if it doesn't exist. In all cases, make sure it's |
// set up correctly. |
- if (_dimmingView.get()) |
+ if (_dimmingView) |
[_dimmingView setFrame:frame]; |
else |
- _dimmingView.reset([[UIView alloc] initWithFrame:frame]); |
+ _dimmingView = [[UIView alloc] initWithFrame:frame]; |
// Enable user interaction in order to eat touches from views behind it. |
[_dimmingView setUserInteractionEnabled:YES]; |
@@ -567,7 +563,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
// Do not remove the dimming view if the animation was aborted. |
if (finished) { |
[_dimmingView removeFromSuperview]; |
- _dimmingView.reset(); |
+ _dimmingView = nil; |
} |
}]; |
} |
@@ -576,7 +572,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
- (void)recordUserMetrics:(id)sender { |
if (sender == _buttonNewTab) |
base::RecordAction(UserMetricsAction("MobileTabStripNewTab")); |
- else if (sender == _tabSwitcherButton.get()) |
+ else if (sender == _tabSwitcherButton) |
base::RecordAction(UserMetricsAction("MobileTabSwitcherOpen")); |
else |
LOG(WARNING) << "Trying to record metrics for unknown sender " |
@@ -650,7 +646,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
- (NSUInteger)indexForModelIndex:(NSUInteger)modelIndex { |
NSUInteger index = modelIndex; |
NSUInteger i = 0; |
- for (TabView* tab in _tabArray.get()) { |
+ for (TabView* tab in _tabArray) { |
if ([_closingTabs containsObject:tab]) |
++index; |
@@ -667,7 +663,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
- (NSUInteger)modelIndexForIndex:(NSUInteger)index { |
NSUInteger modelIndex = 0; |
NSUInteger arrayIndex = 0; |
- for (TabView* tab in _tabArray.get()) { |
+ for (TabView* tab in _tabArray) { |
if (arrayIndex == index) { |
if ([_closingTabs containsObject:tab]) |
return NSNotFound; |
@@ -710,7 +706,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
// Set up initial drag state. |
_lastDragLocation = [gesture locationInView:[_tabStripView superview]]; |
_isReordering = YES; |
- _draggedTab.reset([view retain]); |
+ _draggedTab = view; |
_placeholderGapModelIndex = [self modelIndexForTabView:_draggedTab]; |
// Update the autoscroll distance and timer. |
@@ -785,7 +781,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
_isReordering = NO; |
_placeholderGapModelIndex = NSNotFound; |
- _draggedTab.reset(); |
+ _draggedTab = nil; |
} |
- (BOOL)isReorderingTabs { |
@@ -953,8 +949,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
// Reorder the objects in _tabArray to keep in sync with the model ordering. |
NSUInteger arrayIndex = [self indexForModelIndex:fromIndex]; |
- base::scoped_nsobject<TabView> view( |
- [[_tabArray objectAtIndex:arrayIndex] retain]); |
+ TabView* view = [_tabArray objectAtIndex:arrayIndex]; |
[_tabArray removeObject:view]; |
[_tabArray insertObject:view atIndex:toIndex]; |
[self setNeedsLayoutWithAnimation]; |
@@ -965,7 +960,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
didChangeActiveTab:(Tab*)newTab |
previousTab:(Tab*)previousTab |
atIndex:(NSUInteger)modelIndex { |
- for (TabView* view in _tabArray.get()) { |
+ for (TabView* view in _tabArray) { |
[view setSelected:NO]; |
} |
@@ -1032,8 +1027,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
CGRect buttonFrame = |
CGRectMake(CGRectGetMaxX(_view.frame) - kTabSwitcherButtonWidth, 0.0, |
kTabSwitcherButtonWidth, tabStripHeight); |
- _tabSwitcherButton.reset( |
- [[UIButton buttonWithType:UIButtonTypeCustom] retain]); |
+ _tabSwitcherButton = [UIButton buttonWithType:UIButtonTypeCustom]; |
[_tabSwitcherButton setTintColor:[UIColor whiteColor]]; |
[_tabSwitcherButton setFrame:buttonFrame]; |
[_tabSwitcherButton setContentMode:UIViewContentModeCenter]; |
@@ -1174,7 +1168,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
NSUInteger numNonClosingTabsToLeft = 0; |
NSUInteger i = 0; |
- for (TabView* tab in _tabArray.get()) { |
+ for (TabView* tab in _tabArray) { |
if ([_closingTabs containsObject:tab]) |
++i; |
@@ -1231,7 +1225,7 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
[_tabSwitcherButtonBackgroundView setHidden:YES]; |
} else { |
if (!_tabSwitcherButtonBackgroundView) { |
- _tabSwitcherButtonBackgroundView.reset([[UIImageView alloc] init]); |
+ _tabSwitcherButtonBackgroundView = [[UIImageView alloc] init]; |
const CGFloat tabStripHeight = _view.frame.size.height; |
const CGRect backgroundViewFrame = CGRectMake( |
CGRectGetMaxX(_view.frame) - kTabSwitcherButtonBackgroundWidth, 0.0, |
@@ -1555,8 +1549,8 @@ const CGFloat kNewTabButtonBottomOffsetHighRes = 2.0; |
- (TabSwitcherTabStripPlaceholderView*)placeholderView { |
TabSwitcherTabStripPlaceholderView* placeholderView = |
- [[[TabSwitcherTabStripPlaceholderView alloc] |
- initWithFrame:self.view.bounds] autorelease]; |
+ [[TabSwitcherTabStripPlaceholderView alloc] |
+ initWithFrame:self.view.bounds]; |
CGFloat xOffset = [_tabStripView contentOffset].x; |
UIView* previousView = nil; |
const NSUInteger selectedModelIndex = |