Index: ios/chrome/browser/ui/open_in_controller.mm |
diff --git a/ios/chrome/browser/ui/open_in_controller.mm b/ios/chrome/browser/ui/open_in_controller.mm |
index 6a4c38233e1c3d4e21e6f072f0d2481b6c7813cf..a4e771a11a2f4979070197fcbd5e31c66194a587 100644 |
--- a/ios/chrome/browser/ui/open_in_controller.mm |
+++ b/ios/chrome/browser/ui/open_in_controller.mm |
@@ -5,11 +5,10 @@ |
#import "ios/chrome/browser/ui/open_in_controller.h" |
#include "base/files/file_path.h" |
-#include "base/ios/weak_nsobject.h" |
#include "base/location.h" |
#include "base/logging.h" |
#import "base/mac/bind_objc_block.h" |
-#include "base/mac/objc_property_releaser.h" |
+ |
#include "base/sequenced_task_runner.h" |
#include "base/strings/sys_string_conversions.h" |
#include "base/threading/sequenced_worker_pool.h" |
@@ -30,6 +29,10 @@ |
#import "ui/gfx/ios/NSString+CrStringDrawing.h" |
#include "url/gurl.h" |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
namespace { |
// The path in the temp directory containing documents that are to be opened in |
// other applications. |
@@ -64,7 +67,7 @@ const CGFloat kOverlayedViewLabelBottomMargin = 60; |
@interface OpenInController () { |
// AlertCoordinator for showing an alert if no applications were found to open |
// the current document. |
- base::scoped_nsobject<AlertCoordinator> _alertCoordinator; |
+ AlertCoordinator* _alertCoordinator; |
} |
// URLFetcher delegate method called when |fetcher_| completes a request. |
@@ -149,7 +152,7 @@ class OpenInControllerBridge |
~OpenInControllerBridge() override {} |
private: |
- OpenInController* owner_; // weak |
+ __weak OpenInController* owner_; |
}; |
@implementation OpenInController { |
@@ -160,32 +163,32 @@ class OpenInControllerBridge |
GURL documentURL_; |
// Controller for opening documents in other applications. |
- base::scoped_nsobject<UIDocumentInteractionController> documentController_; |
+ UIDocumentInteractionController* documentController_; |
// Toolbar overlay to be displayed on tap. |
- base::scoped_nsobject<OpenInToolbar> openInToolbar_; |
+ OpenInToolbar* openInToolbar_; |
// Timer used to automatically hide the |openInToolbar_| after a period. |
- base::scoped_nsobject<NSTimer> openInTimer_; |
+ NSTimer* openInTimer_; |
// Gesture recognizer to catch taps on the document. |
- base::scoped_nsobject<UITapGestureRecognizer> tapRecognizer_; |
+ UITapGestureRecognizer* tapRecognizer_; |
// Suggested filename for the document. |
- base::scoped_nsobject<NSString> suggestedFilename_; |
+ NSString* suggestedFilename_; |
// Fetcher used to redownload the document and save it in the sandbox. |
std::unique_ptr<net::URLFetcher> fetcher_; |
// CRWWebController used to check if the tap is not on a link and the |
// |openInToolbar_| should be displayed. |
- base::scoped_nsobject<CRWWebController> webController_; |
+ CRWWebController* webController_; |
// URLRequestContextGetter needed for the URLFetcher. |
scoped_refptr<net::URLRequestContextGetter> requestContext_; |
// Spinner view displayed while the file is downloading. |
- base::scoped_nsobject<UIView> overlayedView_; |
+ UIView* overlayedView_; |
// The location where the "Open in..." menu is anchored. |
CGRect anchorLocation_; |
@@ -201,8 +204,6 @@ class OpenInControllerBridge |
// Task runner on which file operations should happen. |
scoped_refptr<base::SequencedTaskRunner> sequencedTaskRunner_; |
- |
- base::mac::ObjCPropertyReleaser propertyReleaser_OpenInController_; |
} |
- (id)initWithRequestContext:(net::URLRequestContextGetter*)requestContext |
@@ -210,16 +211,15 @@ class OpenInControllerBridge |
self = [super init]; |
if (self) { |
requestContext_ = requestContext; |
- webController_.reset([webController retain]); |
- tapRecognizer_.reset([[UITapGestureRecognizer alloc] |
+ webController_ = webController; |
+ tapRecognizer_ = [[UITapGestureRecognizer alloc] |
initWithTarget:self |
- action:@selector(handleTapFrom:)]); |
+ action:@selector(handleTapFrom:)]; |
[tapRecognizer_ setDelegate:self]; |
base::SequencedWorkerPool* pool = web::WebThread::GetBlockingPool(); |
sequencedTaskRunner_ = |
pool->GetSequencedTaskRunner(pool->GetSequenceToken()); |
isOpenInMenuDisplayed_ = NO; |
- propertyReleaser_OpenInController_.Init(self, [OpenInController class]); |
} |
return self; |
} |
@@ -227,7 +227,7 @@ class OpenInControllerBridge |
- (void)enableWithDocumentURL:(const GURL&)documentURL |
suggestedFilename:(NSString*)suggestedFilename { |
documentURL_ = GURL(documentURL); |
- suggestedFilename_.reset([suggestedFilename retain]); |
+ suggestedFilename_ = suggestedFilename; |
[webController_ addGestureRecognizerToWebView:tapRecognizer_]; |
[self openInToolbar].alpha = 0.0f; |
[webController_ addToolbarViewToWebView:[self openInToolbar]]; |
@@ -245,7 +245,7 @@ class OpenInControllerBridge |
[documentController_ dismissMenuAnimated:NO]; |
[documentController_ setDelegate:nil]; |
documentURL_ = GURL(); |
- suggestedFilename_.reset(); |
+ suggestedFilename_ = nil; |
fetcher_.reset(); |
} |
@@ -253,12 +253,11 @@ class OpenInControllerBridge |
[self disable]; |
// Animation blocks may be keeping this object alive; don't extend the |
// lifetime of CRWWebController. |
- webController_.reset(); |
+ webController_ = nil; |
} |
- (void)dealloc { |
[self disable]; |
- [super dealloc]; |
} |
- (void)handleTapFrom:(UIGestureRecognizer*)gestureRecognizer { |
@@ -276,12 +275,12 @@ class OpenInControllerBridge |
[openInTimer_ setFireDate:([NSDate dateWithTimeIntervalSinceNow: |
kOpenInToolbarDisplayDuration])]; |
} else { |
- openInTimer_.reset( |
- [[NSTimer scheduledTimerWithTimeInterval:kOpenInToolbarDisplayDuration |
- target:self |
- selector:@selector(hideOpenInToolbar) |
- userInfo:nil |
- repeats:NO] retain]); |
+ openInTimer_ = |
+ [NSTimer scheduledTimerWithTimeInterval:kOpenInToolbarDisplayDuration |
+ target:self |
+ selector:@selector(hideOpenInToolbar) |
+ userInfo:nil |
+ repeats:NO]; |
UIView* openInToolbar = [self openInToolbar]; |
[UIView animateWithDuration:kOpenInToolbarAnimationDuration |
animations:^{ |
@@ -332,7 +331,7 @@ class OpenInControllerBridge |
NSString* tempDirPath = [NSTemporaryDirectory() |
stringByAppendingPathComponent:kDocumentsTempPath]; |
NSString* filePath = |
- [tempDirPath stringByAppendingPathComponent:suggestedFilename_.get()]; |
+ [tempDirPath stringByAppendingPathComponent:suggestedFilename_]; |
// In iPad the toolbar has to be displayed to anchor the "Open in" menu. |
if (!IsIPadIdiom()) |
@@ -371,7 +370,7 @@ class OpenInControllerBridge |
if (!overlayedView_) |
return; |
- UIView* overlayedView = overlayedView_.get(); |
+ UIView* overlayedView = overlayedView_; |
[UIView animateWithDuration:kOverlayViewAnimationDuration |
animations:^{ |
[overlayedView setAlpha:0.0]; |
@@ -379,17 +378,17 @@ class OpenInControllerBridge |
completion:^(BOOL finished) { |
[overlayedView removeFromSuperview]; |
}]; |
- overlayedView_.reset(); |
+ overlayedView_ = nil; |
} |
- (void)showErrorWithMessage:(NSString*)message { |
UIViewController* topViewController = |
[[[UIApplication sharedApplication] keyWindow] rootViewController]; |
- _alertCoordinator.reset([[AlertCoordinator alloc] |
- initWithBaseViewController:topViewController |
- title:nil |
- message:message]); |
+ _alertCoordinator = |
+ [[AlertCoordinator alloc] initWithBaseViewController:topViewController |
+ title:nil |
+ message:message]; |
[_alertCoordinator addItemWithTitle:l10n_util::GetNSString(IDS_OK) |
action:nil |
@@ -405,8 +404,8 @@ class OpenInControllerBridge |
if (requestContext_.get()) { |
// |requestContext_| is nil only if this is called from a unit test, in |
// which case the |documentController_| was set already. |
- documentController_.reset([[UIDocumentInteractionController |
- interactionControllerWithURL:fileURL] retain]); |
+ documentController_ = |
+ [UIDocumentInteractionController interactionControllerWithURL:fileURL]; |
} |
// TODO(cgrigoruta): The UTI is hardcoded for now, change this when we add |
@@ -435,20 +434,19 @@ class OpenInControllerBridge |
UIViewController* topViewController = |
[[[UIApplication sharedApplication] keyWindow] rootViewController]; |
UIView* topView = topViewController.view; |
- overlayedView_.reset([[UIView alloc] initWithFrame:[topView bounds]]); |
+ overlayedView_ = [[UIView alloc] initWithFrame:[topView bounds]]; |
[overlayedView_ setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | |
UIViewAutoresizingFlexibleHeight)]; |
- base::scoped_nsobject<UIView> grayBackgroundView( |
- [[UIView alloc] initWithFrame:[overlayedView_ frame]]); |
+ UIView* grayBackgroundView = |
+ [[UIView alloc] initWithFrame:[overlayedView_ frame]]; |
[grayBackgroundView setBackgroundColor:[UIColor darkGrayColor]]; |
[grayBackgroundView setAlpha:kOverlayedViewBackgroundAlpha]; |
[grayBackgroundView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | |
UIViewAutoresizingFlexibleHeight)]; |
[overlayedView_ addSubview:grayBackgroundView]; |
- base::scoped_nsobject<UIActivityIndicatorView> spinner([ |
- [UIActivityIndicatorView alloc] |
- initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]); |
+ UIActivityIndicatorView* spinner = [[UIActivityIndicatorView alloc] |
+ initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; |
[spinner setFrame:[overlayedView_ frame]]; |
[spinner setHidesWhenStopped:YES]; |
[spinner setUserInteractionEnabled:NO]; |
@@ -457,7 +455,7 @@ class OpenInControllerBridge |
UIViewAutoresizingFlexibleHeight)]; |
[overlayedView_ addSubview:spinner]; |
- base::scoped_nsobject<UILabel> label([[UILabel alloc] init]); |
+ UILabel* label = [[UILabel alloc] init]; |
[label setTextColor:[UIColor whiteColor]]; |
[label setFont:GetUIFont(FONT_HELVETICA, true, kLabelTextSize)]; |
[label setNumberOfLines:0]; |
@@ -480,16 +478,15 @@ class OpenInControllerBridge |
[label setFrame:CGRectMake(originX, originY, labelWidth, labelHeight)]; |
[overlayedView_ addSubview:label]; |
- base::scoped_nsobject<UITapGestureRecognizer> tapRecognizer( |
- [[UITapGestureRecognizer alloc] |
- initWithTarget:self |
- action:@selector(handleTapOnOverlayedView:)]); |
+ UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] |
+ initWithTarget:self |
+ action:@selector(handleTapOnOverlayedView:)]; |
[tapRecognizer setDelegate:self]; |
[overlayedView_ addGestureRecognizer:tapRecognizer]; |
[overlayedView_ setAlpha:0.0]; |
[topView addSubview:overlayedView_]; |
- UIView* overlayedView = overlayedView_.get(); |
+ UIView* overlayedView = overlayedView_; |
[UIView animateWithDuration:kOverlayViewAnimationDuration |
animations:^{ |
[overlayedView setAlpha:1.0]; |
@@ -498,11 +495,11 @@ class OpenInControllerBridge |
- (UIView*)openInToolbar { |
if (!openInToolbar_) { |
- openInToolbar_.reset([[OpenInToolbar alloc] |
+ openInToolbar_ = [[OpenInToolbar alloc] |
initWithTarget:self |
- action:@selector(exportFileWithOpenInMenuAnchoredAt:)]); |
+ action:@selector(exportFileWithOpenInMenuAnchoredAt:)]; |
} |
- return openInToolbar_.get(); |
+ return openInToolbar_; |
} |
#pragma mark - |
@@ -582,7 +579,7 @@ class OpenInControllerBridge |
NSURL* fileURL = |
[NSURL fileURLWithPath:base::SysUTF8ToNSString(filePath.value())]; |
if (downloadCanceled_) { |
- sequencedTaskRunner_->PostTask(FROM_HERE, base::BindBlock(^{ |
+ sequencedTaskRunner_->PostTask(FROM_HERE, base::BindBlockArc(^{ |
[self |
removeDocumentAtPath:[fileURL path]]; |
})); |
@@ -603,7 +600,7 @@ class OpenInControllerBridge |
- (void)documentInteractionController:(UIDocumentInteractionController*)contr |
didEndSendingToApplication:(NSString*)application { |
- sequencedTaskRunner_->PostTask(FROM_HERE, base::BindBlock(^{ |
+ sequencedTaskRunner_->PostTask(FROM_HERE, base::BindBlockArc(^{ |
[self |
removeDocumentAtPath:[[contr URL] path]]; |
})); |
@@ -628,12 +625,12 @@ class OpenInControllerBridge |
// when this method is called after the OpenIn menu is dismissed, we |
// check the BOOL |isOpenInMenuDisplayed|. |
if (isOpenInMenuDisplayed_) { |
- openInTimer_.reset( |
- [[NSTimer scheduledTimerWithTimeInterval:kOpenInToolbarDisplayDuration |
- target:self |
- selector:@selector(hideOpenInToolbar) |
- userInfo:nil |
- repeats:NO] retain]); |
+ openInTimer_ = |
+ [NSTimer scheduledTimerWithTimeInterval:kOpenInToolbarDisplayDuration |
+ target:self |
+ selector:@selector(hideOpenInToolbar) |
+ userInfo:nil |
+ repeats:NO]; |
} |
isOpenInMenuDisplayed_ = NO; |
} |
@@ -653,11 +650,11 @@ class OpenInControllerBridge |
- (void)setDocumentInteractionController: |
(UIDocumentInteractionController*)controller { |
- documentController_.reset([controller retain]); |
+ documentController_ = controller; |
} |
- (NSString*)suggestedFilename { |
- return suggestedFilename_.get(); |
+ return suggestedFilename_; |
} |
@end |