Index: ios/chrome/browser/ui/history/history_collection_view_controller.mm |
diff --git a/ios/chrome/browser/ui/history/history_collection_view_controller.mm b/ios/chrome/browser/ui/history/history_collection_view_controller.mm |
index 0bc1bfea868c09cf546df8df1743fee2bcffc923..253fc7a6effb259d7f240e727e7626d43cb7ec90 100644 |
--- a/ios/chrome/browser/ui/history/history_collection_view_controller.mm |
+++ b/ios/chrome/browser/ui/history/history_collection_view_controller.mm |
@@ -8,10 +8,7 @@ |
#include <memory> |
-#import "base/ios/weak_nsobject.h" |
#include "base/mac/foundation_util.h" |
-#import "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" |
@@ -40,6 +37,7 @@ |
#include "ios/chrome/browser/ui/history/history_util.h" |
#import "ios/chrome/browser/ui/url_loader.h" |
#include "ios/chrome/grit/ios_strings.h" |
+#import "ios/third_party/material_components_ios/src/components/ActivityIndicator/src/MDCActivityIndicator.h" |
#import "ios/third_party/material_components_ios/src/components/Collections/src/MaterialCollections.h" |
#import "ios/third_party/material_components_ios/src/components/Palettes/src/MaterialPalettes.h" |
#import "ios/web/public/referrer.h" |
@@ -48,6 +46,10 @@ |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/l10n/l10n_util_mac.h" |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
namespace { |
typedef NS_ENUM(NSInteger, ItemType) { |
ItemTypeHistoryEntry = kItemTypeEnumZero, |
@@ -66,30 +68,27 @@ const CGFloat kSeparatorInset = 10; |
HistoryEntryInserterDelegate, |
HistoryEntryItemDelegate, |
HistoryServiceFacadeDelegate> { |
- base::mac::ObjCPropertyReleaser |
- _propertyReleaser_HistoryCollectionViewController; |
// Facade for communicating with HistoryService and WebHistoryService. |
std::unique_ptr<HistoryServiceFacade> _historyServiceFacade; |
// The main browser state. Not owned by HistoryCollectionViewController. |
ios::ChromeBrowserState* _browserState; |
// Backing ivar for delegate property. |
- base::WeakNSProtocol<id<HistoryCollectionViewControllerDelegate>> _delegate; |
+ __weak id<HistoryCollectionViewControllerDelegate> _delegate; |
// Backing ivar for URLLoader property. |
- base::WeakNSProtocol<id<UrlLoader>> _URLLoader; |
+ __weak id<UrlLoader> _URLLoader; |
} |
// Object to manage insertion of history entries into the collection view model. |
-@property(nonatomic, retain) HistoryEntryInserter* entryInserter; |
+@property(nonatomic, strong) HistoryEntryInserter* entryInserter; |
// Delegate for the history collection view. |
-@property(nonatomic, assign, readonly) |
- id<HistoryCollectionViewControllerDelegate> |
- delegate; |
+@property(nonatomic, weak, readonly) id<HistoryCollectionViewControllerDelegate> |
+ delegate; |
// UrlLoader for navigating to history entries. |
-@property(nonatomic, assign, readonly) id<UrlLoader> URLLoader; |
+@property(nonatomic, weak, readonly) id<UrlLoader> URLLoader; |
// The current query for visible history entries. |
@property(nonatomic, copy) NSString* currentQuery; |
// Coordinator for displaying context menus for history entries. |
-@property(nonatomic, assign) ContextMenuCoordinator* contextMenuCoordinator; |
+@property(nonatomic, strong) ContextMenuCoordinator* contextMenuCoordinator; |
// Type of displayed history entries. Entries can be synced or local, or there |
// may be no history entries. |
@property(nonatomic, assign) HistoryEntriesStatus entriesType; |
@@ -151,12 +150,10 @@ const CGFloat kSeparatorInset = 10; |
delegate { |
self = [super initWithStyle:CollectionViewControllerStyleDefault]; |
if (self) { |
- _propertyReleaser_HistoryCollectionViewController.Init( |
- self, [HistoryCollectionViewController class]); |
_historyServiceFacade.reset(new HistoryServiceFacade(browserState, self)); |
_browserState = browserState; |
- _delegate.reset(delegate); |
- _URLLoader.reset(loader); |
+ _delegate = delegate; |
+ _URLLoader = loader; |
[self loadModel]; |
// Add initial info section as header. |
[self.collectionViewModel |
@@ -181,10 +178,10 @@ const CGFloat kSeparatorInset = 10; |
self.collectionView.keyboardDismissMode = |
UIScrollViewKeyboardDismissModeOnDrag; |
- base::scoped_nsobject<UILongPressGestureRecognizer> longPressRecognizer([ |
+ UILongPressGestureRecognizer* longPressRecognizer = [ |
[UILongPressGestureRecognizer alloc] |
initWithTarget:self |
- action:@selector(displayContextMenuInvokedByGestureRecognizer:)]); |
+ action:@selector(displayContextMenuInvokedByGestureRecognizer:)]; |
[self.collectionView addGestureRecognizer:longPressRecognizer]; |
} |
@@ -357,19 +354,17 @@ const CGFloat kSeparatorInset = 10; |
// loading indicator removal will not be observed. |
[self updateEntriesStatusMessage]; |
- __block base::scoped_nsobject<NSMutableArray> filterResults( |
- [[NSMutableArray array] retain]); |
- __block base::scoped_nsobject<NSString> searchQuery( |
- [base::SysUTF16ToNSString(result.query) copy]); |
+ __block NSMutableArray* filterResults = [NSMutableArray array]; |
+ __block NSString* searchQuery = [base::SysUTF16ToNSString(result.query) copy]; |
[self.collectionView performBatchUpdates:^{ |
// There should always be at least a header section present. |
DCHECK([[self collectionViewModel] numberOfSections]); |
for (const history::HistoryEntry& entry : entries) { |
HistoryEntryItem* item = |
- [[[HistoryEntryItem alloc] initWithType:ItemTypeHistoryEntry |
- historyEntry:entry |
- browserState:_browserState |
- delegate:self] autorelease]; |
+ [[HistoryEntryItem alloc] initWithType:ItemTypeHistoryEntry |
+ historyEntry:entry |
+ browserState:_browserState |
+ delegate:self]; |
[self.entryInserter insertHistoryEntryItem:item]; |
if ([self isSearching] || self.filterQueryResult) { |
[filterResults addObject:item]; |
@@ -573,16 +568,15 @@ const CGFloat kSeparatorInset = 10; |
- (void)updateEntriesStatusMessage { |
CollectionViewItem* entriesStatusItem = nil; |
if (!self.hasHistoryEntries) { |
- CollectionViewTextItem* noResultsItem = [[[CollectionViewTextItem alloc] |
- initWithType:ItemTypeEntriesStatus] autorelease]; |
+ CollectionViewTextItem* noResultsItem = |
+ [[CollectionViewTextItem alloc] initWithType:ItemTypeEntriesStatus]; |
noResultsItem.text = |
self.isSearching ? l10n_util::GetNSString(IDS_HISTORY_NO_SEARCH_RESULTS) |
: l10n_util::GetNSString(IDS_HISTORY_NO_RESULTS); |
entriesStatusItem = noResultsItem; |
} else { |
HistoryEntriesStatusItem* historyEntriesStatusItem = |
- [[[HistoryEntriesStatusItem alloc] initWithType:ItemTypeEntriesStatus] |
- autorelease]; |
+ [[HistoryEntriesStatusItem alloc] initWithType:ItemTypeEntriesStatus]; |
historyEntriesStatusItem.delegate = self; |
AuthenticationService* authService = |
AuthenticationServiceFactory::GetForBrowserState(_browserState); |
@@ -691,8 +685,8 @@ const CGFloat kSeparatorInset = 10; |
fromSectionWithIdentifier:kSectionIdentifierEnumZero]; |
[self.collectionView deleteItemsAtIndexPaths:@[ indexPath ]]; |
} |
- CollectionViewItem* loadingIndicatorItem = [[[CollectionViewItem alloc] |
- initWithType:ItemTypeActivityIndicator] autorelease]; |
+ CollectionViewItem* loadingIndicatorItem = |
+ [[CollectionViewItem alloc] initWithType:ItemTypeActivityIndicator]; |
loadingIndicatorItem.cellClass = [ActivityIndicatorCell class]; |
[self.collectionViewModel addItem:loadingIndicatorItem |
toSectionWithIdentifier:kEntriesStatusSectionIdentifier]; |
@@ -724,10 +718,10 @@ const CGFloat kSeparatorInset = 10; |
HistoryEntryItem* entry = base::mac::ObjCCastStrict<HistoryEntryItem>( |
[self.collectionViewModel itemAtIndexPath:touchedItemIndexPath]); |
- base::WeakNSObject<HistoryCollectionViewController> weakSelf(self); |
+ __weak HistoryCollectionViewController* weakSelf = self; |
web::ContextMenuParams params; |
params.location = touchLocation; |
- params.view.reset([self.collectionView retain]); |
+ params.view.reset(self.collectionView); |
NSString* menuTitle = |
base::SysUTF16ToNSString(url_formatter::FormatUrl(entry.URL)); |
params.menu_title.reset([menuTitle copy]); |