Index: ios/chrome/browser/ui/ntp/new_tab_page_controller.mm |
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm |
index 60b9af7395c35994df572a3c71bede26497f526b..ab10976e3b2533e1943b2dcd92ebff64b6387623 100644 |
--- a/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm |
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_controller.mm |
@@ -6,9 +6,8 @@ |
#import <QuartzCore/QuartzCore.h> |
-#import "base/ios/weak_nsobject.h" |
#include "base/logging.h" |
-#include "base/mac/objc_property_releaser.h" |
+ |
#include "base/metrics/user_metrics.h" |
#include "base/metrics/user_metrics_action.h" |
#include "components/prefs/pref_service.h" |
@@ -30,6 +29,7 @@ |
#import "ios/chrome/browser/ui/ntp/google_landing_view_controller.h" |
#import "ios/chrome/browser/ui/ntp/incognito_panel_controller.h" |
#import "ios/chrome/browser/ui/ntp/new_tab_page_bar_item.h" |
+#import "ios/chrome/browser/ui/ntp/new_tab_page_controller_testing.h" |
#import "ios/chrome/browser/ui/ntp/new_tab_page_view.h" |
#import "ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.h" |
#import "ios/chrome/browser/ui/rtl_geometry.h" |
@@ -40,6 +40,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 |
+ |
using base::UserMetricsAction; |
namespace { |
@@ -108,16 +112,22 @@ enum { |
} // anonymous namespace |
@interface NewTabPageController () { |
+ BookmarkHomeTabletNTPController* bookmarkController_; |
+ GoogleLandingViewController* googleLandingController_; |
+ id<NewTabPagePanelProtocol> incognitoController_; |
+ // The currently visible controller, one of the above. |
+ __weak id<NewTabPagePanelProtocol> currentController_; |
+ |
ios::ChromeBrowserState* browserState_; // Weak. |
- id<UrlLoader> loader_; // Weak. |
- id<CRWSwipeRecognizerProvider> swipeRecognizerProvider_; // Weak. |
- id<NewTabPageControllerObserver> newTabPageObserver_; // Weak. |
+ __weak id<UrlLoader> loader_; |
+ __weak id<CRWSwipeRecognizerProvider> swipeRecognizerProvider_; |
+ __weak id<NewTabPageControllerObserver> newTabPageObserver_; |
NewTabPageView* newTabPageView_; |
- base::scoped_nsobject<GoogleLandingMediator> googleLandingMediator_; |
+ GoogleLandingMediator* googleLandingMediator_; |
- base::scoped_nsobject<RecentTabsPanelController> openTabsController_; |
+ RecentTabsPanelController* openTabsController_; |
// Has the scrollView been initialized. |
BOOL scrollInitialized_; |
@@ -125,14 +135,12 @@ enum { |
NSMutableDictionary* dominantColorCache_; // Weak, owned by bvc. |
// Delegate to focus and blur the omnibox. |
- base::WeakNSProtocol<id<OmniboxFocuser>> focuser_; |
+ __weak id<OmniboxFocuser> focuser_; |
// Delegate to fetch the ToolbarModel and current web state from. |
- base::WeakNSProtocol<id<WebToolbarDelegate>> webToolbarDelegate_; |
- |
- base::scoped_nsobject<TabModel> tabModel_; |
+ __weak id<WebToolbarDelegate> webToolbarDelegate_; |
- base::mac::ObjCPropertyReleaser propertyReleaser_NewTabPageController_; |
+ TabModel* tabModel_; |
} |
// Load and bring panel into view. |
@@ -161,7 +169,7 @@ enum { |
// Returns the ID for the currently selected panel. |
- (NewTabPage::PanelIdentifier)selectedPanelID; |
-@property(nonatomic, retain) NewTabPageView* ntpView; |
+@property(nonatomic, strong) NewTabPageView* ntpView; |
// To ease modernizing the NTP only the internal panels are being converted |
// to UIViewControllers. This means all the plumbing between the |
@@ -170,11 +178,11 @@ enum { |
// controller would be owned by a coordinator, in this case the old NTP |
// controller adds and removes child view controllers itself when a load |
// is initiated, and when WebController calls -willBeDismissed. |
-@property(nonatomic, assign) UIViewController* parentViewController; |
+@property(nonatomic, weak) UIViewController* parentViewController; |
// To ease modernizing the NTP a non-descript CommandDispatcher is passed thru |
// to be used by the reuabled NTP panels. |
-@property(nonatomic, assign) id dispatcher; |
+@property(nonatomic, weak) id dispatcher; |
@end |
@@ -198,26 +206,24 @@ enum { |
self = [super initWithNibName:nil url:url]; |
if (self) { |
DCHECK(browserState); |
- propertyReleaser_NewTabPageController_.Init(self, |
- [NewTabPageController class]); |
browserState_ = browserState; |
loader_ = loader; |
newTabPageObserver_ = ntpObserver; |
parentViewController_ = parentViewController; |
dispatcher_ = dispatcher; |
- focuser_.reset(focuser); |
- webToolbarDelegate_.reset(webToolbarDelegate); |
- tabModel_.reset([tabModel retain]); |
+ focuser_ = focuser; |
+ webToolbarDelegate_ = webToolbarDelegate; |
+ tabModel_ = tabModel; |
dominantColorCache_ = colorCache; |
self.title = l10n_util::GetNSString(IDS_NEW_TAB_TITLE); |
scrollInitialized_ = NO; |
- base::scoped_nsobject<UIScrollView> scrollView( |
- [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 412)]); |
+ UIScrollView* scrollView = |
+ [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 412)]; |
[scrollView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | |
UIViewAutoresizingFlexibleHeight)]; |
- base::scoped_nsobject<NewTabPageBar> tabBar( |
- [[NewTabPageBar alloc] initWithFrame:CGRectMake(0, 412, 320, 48)]); |
+ NewTabPageBar* tabBar = |
+ [[NewTabPageBar alloc] initWithFrame:CGRectMake(0, 412, 320, 48)]; |
newTabPageView_ = |
[[NewTabPageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460) |
andScrollView:scrollView |
@@ -317,7 +323,6 @@ enum { |
[bookmarkController_ setDelegate:nil]; |
[openTabsController_ setDelegate:nil]; |
[[NSNotificationCenter defaultCenter] removeObserver:self]; |
- [super dealloc]; |
} |
#pragma mark - CRWNativeContent |
@@ -533,26 +538,25 @@ enum { |
// Only load the controllers once. |
if (item.identifier == NewTabPage::kBookmarksPanel) { |
if (!bookmarkController_) { |
- base::scoped_nsobject<BookmarkControllerFactory> factory( |
- [[BookmarkControllerFactory alloc] init]); |
- bookmarkController_.reset([[factory |
- bookmarkPanelControllerForBrowserState:browserState_ |
- loader:loader_ |
- colorCache:dominantColorCache_] retain]); |
+ BookmarkControllerFactory* factory = |
+ [[BookmarkControllerFactory alloc] init]; |
+ bookmarkController_ = |
+ [factory bookmarkPanelControllerForBrowserState:browserState_ |
+ loader:loader_ |
+ colorCache:dominantColorCache_]; |
} |
panelController = bookmarkController_; |
view = [bookmarkController_ view]; |
[bookmarkController_ setDelegate:self]; |
} else if (item.identifier == NewTabPage::kMostVisitedPanel) { |
if (!googleLandingController_) { |
- googleLandingController_.reset( |
- [[GoogleLandingViewController alloc] init]); |
+ googleLandingController_ = [[GoogleLandingViewController alloc] init]; |
[googleLandingController_ setDispatcher:self.dispatcher]; |
- googleLandingMediator_.reset([[GoogleLandingMediator alloc] |
+ googleLandingMediator_ = [[GoogleLandingMediator alloc] |
initWithConsumer:googleLandingController_ |
browserState:browserState_ |
dispatcher:self.dispatcher |
- webStateList:[tabModel_ webStateList]]); |
+ webStateList:[tabModel_ webStateList]]; |
[googleLandingController_ setDataSource:googleLandingMediator_]; |
} |
panelController = googleLandingController_; |
@@ -560,18 +564,18 @@ enum { |
[googleLandingController_ setDelegate:self]; |
} else if (item.identifier == NewTabPage::kOpenTabsPanel) { |
if (!openTabsController_) |
- openTabsController_.reset([[RecentTabsPanelController alloc] |
- initWithLoader:loader_ |
- browserState:browserState_]); |
+ openTabsController_ = |
+ [[RecentTabsPanelController alloc] initWithLoader:loader_ |
+ browserState:browserState_]; |
// TODO(crbug.com/708319): Also set panelController for opentabs here. |
view = [openTabsController_ view]; |
[openTabsController_ setDelegate:self]; |
} else if (item.identifier == NewTabPage::kIncognitoPanel) { |
if (!incognitoController_) |
- incognitoController_.reset([[IncognitoPanelController alloc] |
- initWithLoader:loader_ |
- browserState:browserState_ |
- webToolbarDelegate:webToolbarDelegate_]); |
+ incognitoController_ = |
+ [[IncognitoPanelController alloc] initWithLoader:loader_ |
+ browserState:browserState_ |
+ webToolbarDelegate:webToolbarDelegate_]; |
// TODO(crbug.com/708319): Also set panelController for incognito here. |
view = [incognitoController_ view]; |
} else { |
@@ -612,12 +616,12 @@ enum { |
[self.ntpView.scrollView setContentOffset:point animated:animate]; |
} else { |
if (item.identifier == NewTabPage::kBookmarksPanel) { |
- base::scoped_nsobject<GenericChromeCommand> command( |
- [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_BOOKMARK_MANAGER]); |
+ GenericChromeCommand* command = |
+ [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_BOOKMARK_MANAGER]; |
[self.ntpView chromeExecuteCommand:command]; |
} else if (item.identifier == NewTabPage::kOpenTabsPanel) { |
- base::scoped_nsobject<GenericChromeCommand> command( |
- [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_OTHER_DEVICES]); |
+ GenericChromeCommand* command = |
+ [[GenericChromeCommand alloc] initWithTag:IDC_SHOW_OTHER_DEVICES]; |
[self.ntpView chromeExecuteCommand:command]; |
} |
} |
@@ -662,20 +666,20 @@ enum { |
id<NewTabPagePanelProtocol> oldController = currentController_; |
self.ntpView.tabBar.selectedIndex = index; |
if (item.identifier == NewTabPage::kBookmarksPanel) |
- currentController_ = bookmarkController_.get(); |
+ currentController_ = bookmarkController_; |
else if (item.identifier == NewTabPage::kMostVisitedPanel) |
- currentController_ = googleLandingController_.get(); |
+ currentController_ = googleLandingController_; |
else if (item.identifier == NewTabPage::kOpenTabsPanel) |
- currentController_ = openTabsController_.get(); |
+ currentController_ = openTabsController_; |
else if (item.identifier == NewTabPage::kIncognitoPanel) |
- currentController_ = incognitoController_.get(); |
+ currentController_ = incognitoController_; |
[bookmarkController_ |
- setScrollsToTop:(currentController_ == bookmarkController_.get())]; |
+ setScrollsToTop:(currentController_ == bookmarkController_)]; |
[googleLandingController_ |
- setScrollsToTop:(currentController_ == googleLandingController_.get())]; |
+ setScrollsToTop:(currentController_ == googleLandingController_)]; |
[openTabsController_ |
- setScrollsToTop:(currentController_ == openTabsController_.get())]; |
+ setScrollsToTop:(currentController_ == openTabsController_)]; |
[self.ntpView.tabBar |
setShadowAlpha:[currentController_ alphaForBottomShadow]]; |
@@ -746,4 +750,22 @@ enum { |
setShadowAlpha:[ntpPanelController alphaForBottomShadow]]; |
} |
+#pragma mark - TestSupport |
+ |
+- (id<NewTabPagePanelProtocol>)currentController { |
+ return currentController_; |
+} |
+ |
+- (BookmarkHomeTabletNTPController*)bookmarkController { |
+ return bookmarkController_; |
+} |
+ |
+- (id<NewTabPagePanelProtocol>)incognitoController { |
+ return incognitoController_; |
+} |
+ |
+- (GoogleLandingViewController*)googleLandingController { |
+ return googleLandingController_; |
+} |
+ |
@end |