| Index: ios/chrome/browser/ui/omnibox/page_info_view_controller.mm | 
| diff --git a/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm b/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm | 
| index 26503905b88760e8316b198d4b3ced5c20047b70..5d3d3aaa9fd26216ac74b941be6820d1c8d1d44f 100644 | 
| --- a/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm | 
| +++ b/ios/chrome/browser/ui/omnibox/page_info_view_controller.mm | 
| @@ -8,8 +8,6 @@ | 
| #include "base/location.h" | 
| #include "base/mac/bundle_locations.h" | 
| #import "base/mac/foundation_util.h" | 
| -#include "base/mac/objc_property_releaser.h" | 
| -#include "base/mac/scoped_nsobject.h" | 
| #include "base/message_loop/message_loop.h" | 
| #include "base/single_thread_task_runner.h" | 
| #include "base/strings/sys_string_conversions.h" | 
| @@ -33,6 +31,10 @@ | 
| #import "ui/gfx/ios/NSString+CrStringDrawing.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; | 
|  | 
| namespace { | 
| @@ -126,13 +128,21 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| base::TimeDelta::FromMilliseconds(1000 /* milliseconds */)); | 
| } | 
|  | 
| +void PageInfoModelBubbleBridge::PerformLayout() { | 
| +  // If the window is animating closed when this is called, the | 
| +  // animation could be holding the last reference to |controller_| | 
| +  // (and thus |this|).  Pin it until the task is completed. | 
| +  base::scoped_nsobject<PageInfoViewController> keep_alive(controller_); | 
| +  [controller_ performLayout]; | 
| +} | 
| + | 
| @interface PageInfoViewController ()<UIGestureRecognizerDelegate> { | 
| // Scroll View inside the PageInfoView used to display content that exceeds | 
| // the available space. | 
| -  base::scoped_nsobject<UIScrollView> scrollView_; | 
| +  UIScrollView* scrollView_; | 
| // Container View added inside the Scroll View. All content is added to this | 
| // view instead of PopupMenuController.containerView_. | 
| -  base::scoped_nsobject<BidiContainerView> innerContainerView_; | 
| +  BidiContainerView* innerContainerView_; | 
|  | 
| // Origin of the arrow at the top of the popup window. | 
| CGPoint origin_; | 
| @@ -151,8 +161,6 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
|  | 
| // YES when the popup has finished animating in. NO otherwise. | 
| BOOL animateInCompleted_; | 
| - | 
| -  base::mac::ObjCPropertyReleaser propertyReleaser_PageInfoViewController_; | 
| } | 
|  | 
| // Adds the state image at a pre-determined x position and the given y. This | 
| @@ -186,8 +194,8 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| // Sends the IDC_HIDE_PAGE_INFO command to hide the current popup. | 
| - (void)close; | 
|  | 
| -@property(nonatomic, retain) UIView* containerView; | 
| -@property(nonatomic, retain) UIView* popupContainer; | 
| +@property(nonatomic, strong) UIView* containerView; | 
| +@property(nonatomic, strong) UIView* popupContainer; | 
| @end | 
|  | 
| @implementation PageInfoViewController | 
| @@ -202,11 +210,8 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| DCHECK(parent); | 
| self = [super init]; | 
| if (self) { | 
| -    propertyReleaser_PageInfoViewController_.Init( | 
| -        self, [PageInfoViewController class]); | 
| - | 
| -    scrollView_.reset( | 
| -        [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 240, 128)]); | 
| +    scrollView_ = | 
| +        [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 240, 128)]; | 
| [scrollView_ setMultipleTouchEnabled:YES]; | 
| [scrollView_ setClipsToBounds:YES]; | 
| [scrollView_ setShowsHorizontalScrollIndicator:NO]; | 
| @@ -215,8 +220,8 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| setAutoresizingMask:(UIViewAutoresizingFlexibleTrailingMargin() | | 
| UIViewAutoresizingFlexibleTopMargin)]; | 
|  | 
| -    innerContainerView_.reset( | 
| -        [[BidiContainerView alloc] initWithFrame:CGRectMake(0, 0, 194, 327)]); | 
| +    innerContainerView_ = | 
| +        [[BidiContainerView alloc] initWithFrame:CGRectMake(0, 0, 194, 327)]; | 
| [innerContainerView_ setBackgroundColor:[UIColor clearColor]]; | 
| [innerContainerView_ | 
| setAccessibilityLabel:@"Page Security Info Scroll Container"]; | 
| @@ -238,10 +243,10 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| textWidth_ = viewWidth_ - (kImageSize + kImageSpacing + kFramePadding * 2 + | 
| kScrollViewInset * 2); | 
|  | 
| -    base::scoped_nsobject<UILongPressGestureRecognizer> touchDownRecognizer( | 
| +    UILongPressGestureRecognizer* touchDownRecognizer = | 
| [[UILongPressGestureRecognizer alloc] | 
| initWithTarget:self | 
| -                    action:@selector(rootViewTapped:)]); | 
| +                    action:@selector(rootViewTapped:)]; | 
| // Setting the duration to .001 makes this similar to a control event | 
| // UIControlEventTouchDown. | 
| [touchDownRecognizer setMinimumPressDuration:.001]; | 
| @@ -398,7 +403,7 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| [innerContainerView_ setSubviewNeedsAdjustmentForRTL:view]; | 
| } | 
|  | 
| -  [scrollView_ setContentSize:innerContainerView_.get().frame.size]; | 
| +  [scrollView_ setContentSize:innerContainerView_.frame.size]; | 
| } | 
|  | 
| - (void)close { | 
| @@ -417,17 +422,16 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| toSubviews:(NSMutableArray*)subviews | 
| atOffset:(CGFloat)offset { | 
| CGRect frame = CGRectMake(kFramePadding, offset, kImageSize, kImageSize); | 
| -  base::scoped_nsobject<UIImageView> imageView( | 
| -      [[UIImageView alloc] initWithFrame:frame]); | 
| +  UIImageView* imageView = [[UIImageView alloc] initWithFrame:frame]; | 
| [imageView setImage:model_->GetIconImage(info.icon_id)->ToUIImage()]; | 
| -  [subviews addObject:imageView.get()]; | 
| +  [subviews addObject:imageView]; | 
| } | 
|  | 
| - (CGFloat)addHeadlineViewForInfo:(const PageInfoModel::SectionInfo&)info | 
| toSubviews:(NSMutableArray*)subviews | 
| atPoint:(CGPoint)point { | 
| CGRect frame = CGRectMake(point.x, point.y, textWidth_, kHeadlineHeight); | 
| -  base::scoped_nsobject<UILabel> label([[UILabel alloc] initWithFrame:frame]); | 
| +  UILabel* label = [[UILabel alloc] initWithFrame:frame]; | 
| [label setTextAlignment:NSTextAlignmentNatural]; | 
| [label setText:base::SysUTF16ToNSString(info.headline)]; | 
| [label setTextColor:PageInfoTextColor()]; | 
| @@ -435,7 +439,7 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| [label setBackgroundColor:[UIColor clearColor]]; | 
| [label setFrame:frame]; | 
| [label setLineBreakMode:NSLineBreakByTruncatingHead]; | 
| -  [subviews addObject:label.get()]; | 
| +  [subviews addObject:label]; | 
| return CGRectGetHeight(frame); | 
| } | 
|  | 
| @@ -443,7 +447,7 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| toSubviews:(NSMutableArray*)subviews | 
| atPoint:(CGPoint)point { | 
| CGRect frame = CGRectMake(point.x, point.y, textWidth_, kImageSize); | 
| -  base::scoped_nsobject<UILabel> label([[UILabel alloc] initWithFrame:frame]); | 
| +  UILabel* label = [[UILabel alloc] initWithFrame:frame]; | 
| [label setTextAlignment:NSTextAlignmentNatural]; | 
| NSString* description = base::SysUTF16ToNSString(info.description); | 
| UIFont* font = [MDCTypography captionFont]; | 
| @@ -459,7 +463,7 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| [description cr_boundingSizeWithSize:constraintSize font:font]; | 
| frame.size.height = sizeToFit.height; | 
| [label setFrame:frame]; | 
| -  [subviews addObject:label.get()]; | 
| +  [subviews addObject:label]; | 
| return CGRectGetHeight(frame); | 
| } | 
|  | 
| @@ -467,7 +471,7 @@ void PageInfoModelBubbleBridge::OnPageInfoModelChanged() { | 
| if (buttonAction == PageInfoModel::BUTTON_NONE) { | 
| return nil; | 
| } | 
| -  UIButton* button = [[[UIButton alloc] initWithFrame:CGRectZero] autorelease]; | 
| +  UIButton* button = [[UIButton alloc] initWithFrame:CGRectZero]; | 
| int messageId = IDS_IOS_PAGE_INFO_RELOAD; | 
| NSInteger tag = IDC_RELOAD; | 
| NSString* accessibilityID = @"Reload button"; | 
|  |