Index: ios/chrome/browser/ui/stack_view/card_view.mm |
diff --git a/ios/chrome/browser/ui/stack_view/card_view.mm b/ios/chrome/browser/ui/stack_view/card_view.mm |
index 0ca24d4c40d7edd9d0520efe319fe27cd32f2a07..1cf126057901472e221fdfcdf347377055554517 100644 |
--- a/ios/chrome/browser/ui/stack_view/card_view.mm |
+++ b/ios/chrome/browser/ui/stack_view/card_view.mm |
@@ -26,8 +26,7 @@ |
#include <algorithm> |
#import "base/mac/foundation_util.h" |
-#import "base/mac/objc_property_releaser.h" |
-#import "base/mac/scoped_nsobject.h" |
+ |
#include "components/strings/grit/components_strings.h" |
#import "ios/chrome/browser/ui/animation_util.h" |
#import "ios/chrome/browser/ui/reversed_animation.h" |
@@ -43,6 +42,10 @@ |
#include "ui/gfx/image/image.h" |
#import "ui/gfx/ios/uikit_util.h" |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
using ios::material::TimingFunction; |
const UIEdgeInsets kCardImageInsets = {48.0, 4.0, 4.0, 4.0}; |
@@ -85,10 +88,10 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
@interface CardTabView : UIView |
@property(nonatomic, assign) CardCloseButtonSide closeButtonSide; |
-@property(nonatomic, retain) UIImageView* favIconView; |
-@property(nonatomic, retain) UIImage* favicon; |
-@property(nonatomic, retain) CloseButton* closeButton; |
-@property(nonatomic, retain) TitleLabel* titleLabel; |
+@property(nonatomic, strong) UIImageView* favIconView; |
+@property(nonatomic, strong) UIImage* favicon; |
+@property(nonatomic, strong) CloseButton* closeButton; |
+@property(nonatomic, strong) TitleLabel* titleLabel; |
@property(nonatomic, assign) BOOL isIncognito; |
// Layout helper selectors that calculate the frames for subviews given the |
@@ -124,9 +127,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
@end |
-@implementation CardTabView { |
- base::mac::ObjCPropertyReleaser _propertyReleaser_CardTabView; |
-} |
+@implementation CardTabView |
#pragma mark - Property Implementation |
@@ -146,7 +147,6 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
if (!self) |
return self; |
- _propertyReleaser_CardTabView.Init(self, [CardTabView class]); |
_isIncognito = isIncognito; |
UIImage* image = ImageWithName(@"default_favicon", _isIncognito); |
@@ -272,8 +272,6 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
- (void)setFavicon:(UIImage*)favicon { |
if (favicon != _favicon) { |
- [favicon retain]; |
- [_favicon release]; |
_favicon = favicon; |
[self updateFaviconImage]; |
} |
@@ -437,22 +435,22 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
#pragma mark - |
@interface CardView () { |
- base::scoped_nsobject<UIImageView> _contents; |
- base::scoped_nsobject<CardTabView> _tab; |
- id _cardCloseTarget; // weak |
+ UIImageView* _contents; |
+ CardTabView* _tab; |
+ __weak id _cardCloseTarget; |
SEL _cardCloseAction; |
- id _accessibilityTarget; // weak |
+ __weak id _accessibilityTarget; |
SEL _accessibilityAction; |
BOOL _isIncognito; // YES if the card should use the incognito styling. |
// Pieces of the card frame, split into four UIViews. |
- base::scoped_nsobject<UIImageView> _frameLeft; |
- base::scoped_nsobject<UIImageView> _frameRight; |
- base::scoped_nsobject<UIImageView> _frameTop; |
- base::scoped_nsobject<UIImageView> _frameBottom; |
- base::scoped_nsobject<UIImageView> _frameShadowImageView; |
- base::scoped_nsobject<CALayer> _shadowMask; |
+ UIImageView* _frameLeft; |
+ UIImageView* _frameRight; |
+ UIImageView* _frameTop; |
+ UIImageView* _frameBottom; |
+ UIImageView* _frameShadowImageView; |
+ CALayer* _shadowMask; |
} |
// The LayoutRect for the CardTabView. |
@@ -511,7 +509,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
self.contentMode = UIViewContentModeRedraw; |
CGRect shadowFrame = UIEdgeInsetsInsetRect(bounds, kCardShadowLayoutOutsets); |
- _frameShadowImageView.reset([[UIImageView alloc] initWithFrame:shadowFrame]); |
+ _frameShadowImageView = [[UIImageView alloc] initWithFrame:shadowFrame]; |
[_frameShadowImageView |
setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | |
UIViewAutoresizingFlexibleHeight)]; |
@@ -526,7 +524,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
[_frameShadowImageView setImage:image]; |
CGRect snapshotFrame = UIEdgeInsetsInsetRect(bounds, kCardImageInsets); |
- _contents.reset([[UIImageView alloc] initWithFrame:snapshotFrame]); |
+ _contents = [[UIImageView alloc] initWithFrame:snapshotFrame]; |
[_contents setClipsToBounds:YES]; |
[_contents setContentMode:UIViewContentModeScaleAspectFill]; |
[_contents setFrame:snapshotFrame]; |
@@ -539,7 +537,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
UIEdgeInsets imageStretchInsets = UIEdgeInsetsMake( |
0.5 * image.size.height, 0.0, 0.5 * image.size.height, 0.0); |
image = [image resizableImageWithCapInsets:imageStretchInsets]; |
- _frameLeft.reset([[UIImageView alloc] initWithImage:image]); |
+ _frameLeft = [[UIImageView alloc] initWithImage:image]; |
[self addSubview:_frameLeft]; |
image = [UIImage imageNamed:isIncognito ? @"border_frame_incognito_right" |
@@ -547,7 +545,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
imageStretchInsets = UIEdgeInsetsMake(0.5 * image.size.height, 0.0, |
0.5 * image.size.height, 0.0); |
image = [image resizableImageWithCapInsets:imageStretchInsets]; |
- _frameRight.reset([[UIImageView alloc] initWithImage:image]); |
+ _frameRight = [[UIImageView alloc] initWithImage:image]; |
[self addSubview:_frameRight]; |
image = [UIImage imageNamed:isIncognito ? @"border_frame_incognito_top" |
@@ -555,7 +553,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
imageStretchInsets = UIEdgeInsetsMake(0.0, 0.5 * image.size.width, 0.0, |
0.5 * image.size.width); |
image = [image resizableImageWithCapInsets:imageStretchInsets]; |
- _frameTop.reset([[UIImageView alloc] initWithImage:image]); |
+ _frameTop = [[UIImageView alloc] initWithImage:image]; |
[self addSubview:_frameTop]; |
image = [UIImage imageNamed:isIncognito ? @"border_frame_incognito_bottom" |
@@ -563,12 +561,11 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
imageStretchInsets = UIEdgeInsetsMake(0.0, 0.5 * image.size.width, 0.0, |
0.5 * image.size.width); |
image = [image resizableImageWithCapInsets:imageStretchInsets]; |
- _frameBottom.reset([[UIImageView alloc] initWithImage:image]); |
+ _frameBottom = [[UIImageView alloc] initWithImage:image]; |
[self addSubview:_frameBottom]; |
- _tab.reset([[CardTabView alloc] |
- initWithFrame:LayoutRectGetRect([self tabLayout]) |
- isIncognito:_isIncognito]); |
+ _tab = [[CardTabView alloc] initWithFrame:LayoutRectGetRect([self tabLayout]) |
+ isIncognito:_isIncognito]; |
[_tab setCloseButtonSide:IsPortrait() ? CardCloseButtonSide::TRAILING |
: CardCloseButtonSide::LEADING]; |
[[_tab closeButton] addTarget:self |
@@ -647,7 +644,10 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
} |
- (void)closeButtonWasTapped:(id)sender { |
+#pragma clang diagnostic push |
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks" |
[_cardCloseTarget performSelector:_cardCloseAction withObject:self]; |
+#pragma clang diagnostic pop |
// Disable the tab's close button to prevent touch handling from the button |
// while it's animating closed. |
[_tab closeButton].enabled = NO; |
@@ -679,7 +679,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
} |
- (void)updateImageBoundsAndZoom { |
- UIImageView* imageView = _contents.get(); |
+ UIImageView* imageView = _contents; |
DCHECK(!CGRectEqualToRect(self.bounds, CGRectZero)); |
imageView.frame = UIEdgeInsetsInsetRect(self.bounds, kCardImageInsets); |
@@ -698,8 +698,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
// Create copy of animation (animations become immutable after they're added |
// to the layer). |
- base::scoped_nsobject<CAAnimationGroup> updatedAnimation( |
- static_cast<CAAnimationGroup*>([snapshotAnimation copy])); |
+ CAAnimationGroup* updatedAnimation = [snapshotAnimation copy]; |
// Extract begin and end sizes of the card. |
CAAnimation* cardAnimation = |
[self.layer animationForKey:kCardViewAnimationKey]; |
@@ -746,7 +745,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
if (self.shouldMaskShadow) { |
if (!_shadowMask) { |
- _shadowMask.reset([[CALayer alloc] init]); |
+ _shadowMask = [[CALayer alloc] init]; |
[_shadowMask setBackgroundColor:[UIColor blackColor].CGColor]; |
} |
[_frameShadowImageView layer].mask = _shadowMask; |
@@ -952,7 +951,7 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
forKey:kCardViewAnimationKey]; |
if (self.shouldMaskShadow) { |
frameAnimation = FrameAnimationMake( |
- _shadowMask.get(), [self shadowMaskFrameForBounds:beginBounds], |
+ _shadowMask, [self shadowMaskFrameForBounds:beginBounds], |
[self shadowMaskFrameForBounds:endBounds]); |
frameAnimation.duration = frameDuration; |
frameAnimation.timingFunction = frameTiming; |
@@ -1029,7 +1028,10 @@ UIImage* ImageWithName(NSString* image_name, BOOL is_incognito) { |
} |
- (void)elementDidBecomeFocused:(id)sender { |
+#pragma clang diagnostic push |
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks" |
[_accessibilityTarget performSelector:_accessibilityAction withObject:sender]; |
+#pragma clang diagnostic pop |
} |
@end |