Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Side by Side Diff: ios/chrome/app/main_controller.mm

Issue 2933823002: [ObjC ARC] Converts ios/chrome/app:app_internal to ARC. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ios/chrome/app/main_controller.h ('k') | ios/chrome/app/memory_monitor.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/app/main_controller.h" 5 #import "ios/chrome/app/main_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #import <CoreSpotlight/CoreSpotlight.h> 10 #import <CoreSpotlight/CoreSpotlight.h>
11 #import <objc/objc.h> 11 #import <objc/objc.h>
12 #import <objc/runtime.h> 12 #import <objc/runtime.h>
13 13
14 #include "base/bind.h" 14 #include "base/bind.h"
15 #include "base/callback_helpers.h" 15 #include "base/callback_helpers.h"
16 #include "base/files/file_path.h" 16 #include "base/files/file_path.h"
17 #include "base/ios/block_types.h" 17 #include "base/ios/block_types.h"
18 #import "base/mac/bind_objc_block.h" 18 #import "base/mac/bind_objc_block.h"
19 #include "base/mac/bundle_locations.h" 19 #include "base/mac/bundle_locations.h"
20 #include "base/mac/foundation_util.h" 20 #include "base/mac/foundation_util.h"
21 #include "base/mac/objc_property_releaser.h"
22 #import "base/mac/scoped_nsobject.h"
23 #include "base/macros.h" 21 #include "base/macros.h"
24 #include "base/path_service.h" 22 #include "base/path_service.h"
25 #include "base/strings/sys_string_conversions.h" 23 #include "base/strings/sys_string_conversions.h"
26 #include "base/task_scheduler/post_task.h" 24 #include "base/task_scheduler/post_task.h"
27 #include "base/time/time.h" 25 #include "base/time/time.h"
28 #include "components/component_updater/component_updater_service.h" 26 #include "components/component_updater/component_updater_service.h"
29 #include "components/content_settings/core/browser/host_content_settings_map.h" 27 #include "components/content_settings/core/browser/host_content_settings_map.h"
30 #include "components/metrics/metrics_pref_names.h" 28 #include "components/metrics/metrics_pref_names.h"
31 #include "components/metrics/metrics_service.h" 29 #include "components/metrics/metrics_service.h"
32 #include "components/prefs/pref_change_registrar.h" 30 #include "components/prefs/pref_change_registrar.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 #include "ios/web/net/web_http_protocol_handler_delegate.h" 139 #include "ios/web/net/web_http_protocol_handler_delegate.h"
142 #import "ios/web/public/navigation_manager.h" 140 #import "ios/web/public/navigation_manager.h"
143 #include "ios/web/public/web_capabilities.h" 141 #include "ios/web/public/web_capabilities.h"
144 #include "ios/web/public/web_state/web_state.h" 142 #include "ios/web/public/web_state/web_state.h"
145 #import "ios/web/public/web_view_creation_util.h" 143 #import "ios/web/public/web_view_creation_util.h"
146 #include "ios/web/public/webui/web_ui_ios_controller_factory.h" 144 #include "ios/web/public/webui/web_ui_ios_controller_factory.h"
147 #include "mojo/edk/embedder/embedder.h" 145 #include "mojo/edk/embedder/embedder.h"
148 #import "net/base/mac/url_conversions.h" 146 #import "net/base/mac/url_conversions.h"
149 #include "net/url_request/url_request_context.h" 147 #include "net/url_request/url_request_context.h"
150 148
149 #if !defined(__has_feature) || !__has_feature(objc_arc)
150 #error "This file requires ARC support."
151 #endif
152
151 namespace { 153 namespace {
152 154
153 // Preference key used to store which profile is current. 155 // Preference key used to store which profile is current.
154 NSString* kIncognitoCurrentKey = @"IncognitoActive"; 156 NSString* kIncognitoCurrentKey = @"IncognitoActive";
155 157
156 // Constants for deferred initialization of preferences observer. 158 // Constants for deferred initialization of preferences observer.
157 NSString* const kPrefObserverInit = @"PrefObserverInit"; 159 NSString* const kPrefObserverInit = @"PrefObserverInit";
158 160
159 // Constants for deferring notifying the AuthenticationService of a new cold 161 // Constants for deferring notifying the AuthenticationService of a new cold
160 // start. 162 // start.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 // The object that drives the Chrome startup/shutdown logic. 241 // The object that drives the Chrome startup/shutdown logic.
240 std::unique_ptr<IOSChromeMain> _chromeMain; 242 std::unique_ptr<IOSChromeMain> _chromeMain;
241 243
242 // The ChromeBrowserState associated with the main (non-OTR) browsing mode. 244 // The ChromeBrowserState associated with the main (non-OTR) browsing mode.
243 ios::ChromeBrowserState* _mainBrowserState; // Weak. 245 ios::ChromeBrowserState* _mainBrowserState; // Weak.
244 246
245 // Coordinators used to run the Chrome UI; there will be one of these active 247 // Coordinators used to run the Chrome UI; there will be one of these active
246 // at any given time, usually |_mainCoordinator|. 248 // at any given time, usually |_mainCoordinator|.
247 // Main coordinator, backing object for the property of the same name, which 249 // Main coordinator, backing object for the property of the same name, which
248 // lazily initializes on access. 250 // lazily initializes on access.
249 base::scoped_nsobject<MainCoordinator> _mainCoordinator; 251 MainCoordinator* _mainCoordinator;
gambard 2017/06/12 12:42:47 Can probably be synthesize instead.
marq (ping after 24h) 2017/06/12 14:25:09 The lazy init behavior, coupled with a few places
gambard 2017/06/12 14:44:54 Sorry my comment was unclear. The ivar declaration
marq (ping after 24h) 2017/06/12 16:25:29 Gotcha. Done.
250 252
251 // Wrangler to handle BVC and tab model creation, access, and related logic. 253 // Wrangler to handle BVC and tab model creation, access, and related logic.
252 // Implements faetures exposed from this object through the 254 // Implements faetures exposed from this object through the
253 // BrowserViewInformation protocol. 255 // BrowserViewInformation protocol.
254 base::scoped_nsobject<BrowserViewWrangler> _browserViewWrangler; 256 BrowserViewWrangler* _browserViewWrangler;
255 257
256 // Parameters received at startup time when the app is launched from another 258 // Parameters received at startup time when the app is launched from another
257 // app. 259 // app.
258 base::scoped_nsobject<AppStartupParameters> _startupParameters; 260 AppStartupParameters* _startupParameters;
259 261
260 // Navigation View controller for the settings. 262 // Navigation View controller for the settings.
261 base::scoped_nsobject<SettingsNavigationController> 263 SettingsNavigationController* _settingsNavigationController;
262 _settingsNavigationController;
263 264
264 // View controller for switching tabs. 265 // View controller for switching tabs.
265 base::scoped_nsobject<UIViewController<TabSwitcher>> _tabSwitcherController; 266 UIViewController<TabSwitcher>* _tabSwitcherController;
266 267
267 // Controller to display the re-authentication flow. 268 // Controller to display the re-authentication flow.
268 base::scoped_nsobject<SigninInteractionController> 269 SigninInteractionController* _signinInteractionController;
269 _signinInteractionController;
270 270
271 // The number of memory warnings that have been received in this 271 // The number of memory warnings that have been received in this
272 // foreground session. 272 // foreground session.
273 int _foregroundMemoryWarningCount; 273 int _foregroundMemoryWarningCount;
gambard 2017/06/12 12:42:48 Is this used?
marq (ping after 24h) 2017/06/12 14:25:09 No, but I'll remove it in another CL.
274 274
275 // The time at which to reset the OOM crash flag in the user defaults. This 275 // The time at which to reset the OOM crash flag in the user defaults. This
276 // is used to handle receiving multiple memory warnings in short succession. 276 // is used to handle receiving multiple memory warnings in short succession.
277 CFAbsoluteTime _outOfMemoryResetTime; 277 CFAbsoluteTime _outOfMemoryResetTime;
gambard 2017/06/12 12:42:48 Is it used?
marq (ping after 24h) 2017/06/12 14:25:09 No, but I'll remove it in another CL.
278 278
279 // YES while animating the dismissal of stack view. 279 // YES while animating the dismissal of stack view.
280 BOOL _dismissingStackView; 280 BOOL _dismissingStackView;
281 281
282 // If not NONE, the current BVC should be switched to this BVC on completion 282 // If not NONE, the current BVC should be switched to this BVC on completion
283 // of stack view dismissal. 283 // of stack view dismissal.
284 StackViewDismissalMode _modeToDisplayOnStackViewDismissal; 284 StackViewDismissalMode _modeToDisplayOnStackViewDismissal;
285 285
286 // If YES, the tab switcher is currently active. 286 // If YES, the tab switcher is currently active.
287 BOOL _tabSwitcherIsActive; 287 BOOL _tabSwitcherIsActive;
288 288
289 // True if the current session began from a cold start. False if the app has 289 // True if the current session began from a cold start. False if the app has
290 // entered the background at least once since start up. 290 // entered the background at least once since start up.
291 BOOL _isColdStart; 291 BOOL _isColdStart;
292 292
293 // Keeps track of the restore state during startup. 293 // Keeps track of the restore state during startup.
294 base::scoped_nsobject<CrashRestoreHelper> _restoreHelper; 294 CrashRestoreHelper* _restoreHelper;
295 295
296 // An object to record metrics related to the user's first action. 296 // An object to record metrics related to the user's first action.
297 std::unique_ptr<FirstUserActionRecorder> _firstUserActionRecorder; 297 std::unique_ptr<FirstUserActionRecorder> _firstUserActionRecorder;
298 298
299 // RequestTrackerFactory to customize the behavior of the network stack. 299 // RequestTrackerFactory to customize the behavior of the network stack.
300 std::unique_ptr<web::RequestTrackerFactoryImpl> _requestTrackerFactory; 300 std::unique_ptr<web::RequestTrackerFactoryImpl> _requestTrackerFactory;
301 301
302 // Configuration for the HTTP protocol handler. 302 // Configuration for the HTTP protocol handler.
303 std::unique_ptr<web::WebHTTPProtocolHandlerDelegate> 303 std::unique_ptr<web::WebHTTPProtocolHandlerDelegate>
304 _httpProtocolHandlerDelegate; 304 _httpProtocolHandlerDelegate;
(...skipping 14 matching lines...) Expand all
319 BOOL _isProcessingTabSwitcherCommand; 319 BOOL _isProcessingTabSwitcherCommand;
320 BOOL _isProcessingVoiceSearchCommand; 320 BOOL _isProcessingVoiceSearchCommand;
321 321
322 // Bridge to listen to pref changes. 322 // Bridge to listen to pref changes.
323 std::unique_ptr<PrefObserverBridge> _localStatePrefObserverBridge; 323 std::unique_ptr<PrefObserverBridge> _localStatePrefObserverBridge;
324 324
325 // Registrar for pref changes notifications to the local state. 325 // Registrar for pref changes notifications to the local state.
326 PrefChangeRegistrar _localStatePrefChangeRegistrar; 326 PrefChangeRegistrar _localStatePrefChangeRegistrar;
327 327
328 // Clears browsing data from ChromeBrowserStates. 328 // Clears browsing data from ChromeBrowserStates.
329 base::scoped_nsobject<BrowsingDataRemovalController> 329 BrowsingDataRemovalController* _browsingDataRemovalController;
330 _browsingDataRemovalController;
331 330
332 // The class in charge of showing/hiding the memory debugger when the 331 // The class in charge of showing/hiding the memory debugger when the
333 // appropriate pref changes. 332 // appropriate pref changes.
334 base::scoped_nsobject<MemoryDebuggerManager> _memoryDebuggerManager; 333 MemoryDebuggerManager* _memoryDebuggerManager;
335
336 base::mac::ObjCPropertyReleaser _propertyReleaser_MainController;
337 334
338 // Responsible for indexing chrome links (such as bookmarks, most likely...) 335 // Responsible for indexing chrome links (such as bookmarks, most likely...)
339 // in system Spotlight index. 336 // in system Spotlight index.
340 base::scoped_nsobject<SpotlightManager> _spotlightManager; 337 SpotlightManager* _spotlightManager;
341 338
342 // Cached launchOptions from -didFinishLaunchingWithOptions. 339 // Cached launchOptions from -didFinishLaunchingWithOptions.
343 base::scoped_nsobject<NSDictionary> _launchOptions; 340 NSDictionary* _launchOptions;
344 341
345 // View controller for displaying the history panel. 342 // View controller for displaying the history panel.
346 base::scoped_nsobject<UIViewController> _historyPanelViewController; 343 UIViewController* _historyPanelViewController;
347 344
348 // Variable backing metricsMediator property. 345 // Variable backing metricsMediator property.
349 base::WeakNSObject<MetricsMediator> _metricsMediator; 346 __weak MetricsMediator* _metricsMediator;
350 347
351 // Hander for the startup tasks, deferred or not. 348 // Hander for the startup tasks, deferred or not.
352 base::scoped_nsobject<StartupTasks> _startupTasks; 349 StartupTasks* _startupTasks;
353 } 350 }
354 351
355 // Pointer to the main view controller, always owned by the main window. 352 // Pointer to the main view controller, always owned by the main window.
356 @property(nonatomic, readonly) MainViewController* mainViewController; 353 @property(weak, nonatomic, readonly) MainViewController* mainViewController;
357 354
358 // The main coordinator, lazily created the first time it is accessed. Manages 355 // The main coordinator, lazily created the first time it is accessed. Manages
359 // the MainViewController. This property should not be accessed before the 356 // the MainViewController. This property should not be accessed before the
360 // browser has started up to the FOREGROUND stage. 357 // browser has started up to the FOREGROUND stage.
361 @property(nonatomic, readonly) MainCoordinator* mainCoordinator; 358 @property(weak, nonatomic, readonly) MainCoordinator* mainCoordinator;
362 359
363 // A property to track whether the QR Scanner should be started upon tab 360 // A property to track whether the QR Scanner should be started upon tab
364 // switcher dismissal. It can only be YES if the QR Scanner experiment is 361 // switcher dismissal. It can only be YES if the QR Scanner experiment is
365 // enabled. 362 // enabled.
366 @property(nonatomic, readwrite) BOOL startQRScannerAfterTabSwitcherDismissal; 363 @property(nonatomic, readwrite) BOOL startQRScannerAfterTabSwitcherDismissal;
367 // Whether the QR Scanner should be started upon tab switcher dismissal. 364 // Whether the QR Scanner should be started upon tab switcher dismissal.
368 @property(nonatomic, readwrite) BOOL startVoiceSearchAfterTabSwitcherDismissal; 365 @property(nonatomic, readwrite) BOOL startVoiceSearchAfterTabSwitcherDismissal;
369 // Whether the omnibox should be focused upon tab switcher dismissal. 366 // Whether the omnibox should be focused upon tab switcher dismissal.
370 @property(nonatomic, readwrite) BOOL startFocusOmniboxAfterTabSwitcherDismissal; 367 @property(nonatomic, readwrite) BOOL startFocusOmniboxAfterTabSwitcherDismissal;
371 368
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 _startVoiceSearchAfterTabSwitcherDismissal; 543 _startVoiceSearchAfterTabSwitcherDismissal;
547 @synthesize startQRScannerAfterTabSwitcherDismissal = 544 @synthesize startQRScannerAfterTabSwitcherDismissal =
548 _startQRScannerAfterTabSwitcherDismissal; 545 _startQRScannerAfterTabSwitcherDismissal;
549 @synthesize startFocusOmniboxAfterTabSwitcherDismissal = 546 @synthesize startFocusOmniboxAfterTabSwitcherDismissal =
550 _startFocusOmniboxAfterTabSwitcherDismissal; 547 _startFocusOmniboxAfterTabSwitcherDismissal;
551 548
552 #pragma mark - Application lifecycle 549 #pragma mark - Application lifecycle
553 550
554 - (instancetype)init { 551 - (instancetype)init {
555 if ((self = [super init])) { 552 if ((self = [super init])) {
556 _propertyReleaser_MainController.Init(self, [MainController class]); 553 _startupTasks = [[StartupTasks alloc] init];
557 _startupTasks.reset([[StartupTasks alloc] init]);
558 } 554 }
559 return self; 555 return self;
560 } 556 }
561 557
562 - (void)dealloc { 558 - (void)dealloc {
563 [[NSNotificationCenter defaultCenter] removeObserver:self]; 559 [[NSNotificationCenter defaultCenter] removeObserver:self];
564 net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); 560 net::HTTPProtocolHandlerDelegate::SetInstance(nullptr);
565 net::RequestTracker::SetRequestTrackerFactory(nullptr); 561 net::RequestTracker::SetRequestTrackerFactory(nullptr);
566 [NSObject cancelPreviousPerformRequestsWithTarget:self]; 562 [NSObject cancelPreviousPerformRequestsWithTarget:self];
567 [super dealloc];
568 } 563 }
569 564
570 // This function starts up to only what is needed at each stage of the 565 // This function starts up to only what is needed at each stage of the
571 // initialization. It is possible to continue initialization later. 566 // initialization. It is possible to continue initialization later.
572 - (void)startUpBrowserToStage:(BrowserInitializationStageType)stage { 567 - (void)startUpBrowserToStage:(BrowserInitializationStageType)stage {
573 if (_browserInitializationStage < INITIALIZATION_STAGE_BASIC && 568 if (_browserInitializationStage < INITIALIZATION_STAGE_BASIC &&
574 stage >= INITIALIZATION_STAGE_BASIC) { 569 stage >= INITIALIZATION_STAGE_BASIC) {
575 [self startUpBrowserBasicInitialization]; 570 [self startUpBrowserBasicInitialization];
576 _browserInitializationStage = INITIALIZATION_STAGE_BASIC; 571 _browserInitializationStage = INITIALIZATION_STAGE_BASIC;
577 } 572 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 _browserStateManager = 674 _browserStateManager =
680 GetApplicationContext()->GetChromeBrowserStateManager(); 675 GetApplicationContext()->GetChromeBrowserStateManager();
681 ios::ChromeBrowserState* chromeBrowserState = 676 ios::ChromeBrowserState* chromeBrowserState =
682 _browserStateManager->GetLastUsedBrowserState(); 677 _browserStateManager->GetLastUsedBrowserState();
683 678
684 // The CrashRestoreHelper must clean up the old browser state information 679 // The CrashRestoreHelper must clean up the old browser state information
685 // before the tabModels can be created. |_restoreHelper| must be kept alive 680 // before the tabModels can be created. |_restoreHelper| must be kept alive
686 // until the BVC receives the browser state and tab model. 681 // until the BVC receives the browser state and tab model.
687 BOOL postCrashLaunch = [self mustShowRestoreInfobar]; 682 BOOL postCrashLaunch = [self mustShowRestoreInfobar];
688 if (postCrashLaunch) { 683 if (postCrashLaunch) {
689 _restoreHelper.reset( 684 _restoreHelper =
690 [[CrashRestoreHelper alloc] initWithBrowserState:chromeBrowserState]); 685 [[CrashRestoreHelper alloc] initWithBrowserState:chromeBrowserState];
691 [_restoreHelper moveAsideSessionInformation]; 686 [_restoreHelper moveAsideSessionInformation];
692 } 687 }
693 688
694 // Initialize and set the main browser state. 689 // Initialize and set the main browser state.
695 [self initializeBrowserState:chromeBrowserState]; 690 [self initializeBrowserState:chromeBrowserState];
696 _mainBrowserState = chromeBrowserState; 691 _mainBrowserState = chromeBrowserState;
697 _browserViewWrangler.reset([[BrowserViewWrangler alloc] 692 _browserViewWrangler =
698 initWithBrowserState:_mainBrowserState 693 [[BrowserViewWrangler alloc] initWithBrowserState:_mainBrowserState
699 tabModelObserver:self]); 694 tabModelObserver:self];
700 // Ensure the main tab model is created. 695 // Ensure the main tab model is created.
701 ignore_result([_browserViewWrangler mainTabModel]); 696 ignore_result([_browserViewWrangler mainTabModel]);
702 697
703 _spotlightManager.reset([[SpotlightManager 698 _spotlightManager =
704 spotlightManagerWithBrowserState:_mainBrowserState] retain]); 699 [SpotlightManager spotlightManagerWithBrowserState:_mainBrowserState];
705 700
706 ShareExtensionService* service = 701 ShareExtensionService* service =
707 ShareExtensionServiceFactory::GetForBrowserState(_mainBrowserState); 702 ShareExtensionServiceFactory::GetForBrowserState(_mainBrowserState);
708 service->Initialize(); 703 service->Initialize();
709 704
710 // Before bringing up the UI, make sure the launch mode is correct, and 705 // Before bringing up the UI, make sure the launch mode is correct, and
711 // check for previous crashes. 706 // check for previous crashes.
712 BOOL startInIncognito = [standardDefaults boolForKey:kIncognitoCurrentKey]; 707 BOOL startInIncognito = [standardDefaults boolForKey:kIncognitoCurrentKey];
713 BOOL switchFromIncognito = startInIncognito && ![self canLaunchInIncognito]; 708 BOOL switchFromIncognito = startInIncognito && ![self canLaunchInIncognito];
714 709
(...skipping 14 matching lines...) Expand all
729 [MetricsMediator logLaunchMetricsWithStartupInformation:self 724 [MetricsMediator logLaunchMetricsWithStartupInformation:self
730 browserViewInformation:_browserViewWrangler]; 725 browserViewInformation:_browserViewWrangler];
731 726
732 [self scheduleLowPriorityStartupTasks]; 727 [self scheduleLowPriorityStartupTasks];
733 728
734 [_browserViewWrangler updateDeviceSharingManager]; 729 [_browserViewWrangler updateDeviceSharingManager];
735 730
736 [self openTabFromLaunchOptions:_launchOptions 731 [self openTabFromLaunchOptions:_launchOptions
737 startupInformation:self 732 startupInformation:self
738 appState:self.appState]; 733 appState:self.appState];
739 _launchOptions.reset(); 734 _launchOptions = nil;
740 735
741 mojo::edk::Init(); 736 mojo::edk::Init();
742 737
743 if (!_startupParameters) { 738 if (!_startupParameters) {
744 // The startup parameters may create new tabs or navigations. If the restore 739 // The startup parameters may create new tabs or navigations. If the restore
745 // infobar is displayed now, it may be dismissed immediately and the user 740 // infobar is displayed now, it may be dismissed immediately and the user
746 // will never be able to restore the session. 741 // will never be able to restore the session.
747 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]]; 742 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]];
748 _restoreHelper.reset(); 743 _restoreHelper = nil;
749 } 744 }
750 745
751 [self scheduleTasksRequiringBVCWithBrowserState]; 746 [self scheduleTasksRequiringBVCWithBrowserState];
752 747
753 // Now that everything is properly set up, run the tests. 748 // Now that everything is properly set up, run the tests.
754 tests_hook::RunTestsIfPresent(); 749 tests_hook::RunTestsIfPresent();
755 } 750 }
756 751
757 - (void)initializeBrowserState:(ios::ChromeBrowserState*)browserState { 752 - (void)initializeBrowserState:(ios::ChromeBrowserState*)browserState {
758 DCHECK(!browserState->IsOffTheRecord()); 753 DCHECK(!browserState->IsOffTheRecord());
759 search_engines::UpdateSearchEnginesIfNeeded( 754 search_engines::UpdateSearchEnginesIfNeeded(
760 browserState->GetPrefs(), 755 browserState->GetPrefs(),
761 ios::TemplateURLServiceFactory::GetForBrowserState(browserState)); 756 ios::TemplateURLServiceFactory::GetForBrowserState(browserState));
762 757
763 if ([TouchToSearchPermissionsMediator isTouchToSearchAvailableOnDevice]) { 758 if ([TouchToSearchPermissionsMediator isTouchToSearchAvailableOnDevice]) {
764 base::scoped_nsobject<TouchToSearchPermissionsMediator> 759 TouchToSearchPermissionsMediator* touchToSearchPermissions =
765 touchToSearchPermissions([[TouchToSearchPermissionsMediator alloc] 760 [[TouchToSearchPermissionsMediator alloc]
766 initWithBrowserState:browserState]); 761 initWithBrowserState:browserState];
767 if (experimental_flags::IsForceResetContextualSearchEnabled()) { 762 if (experimental_flags::IsForceResetContextualSearchEnabled()) {
768 [touchToSearchPermissions setPreferenceState:TouchToSearch::UNDECIDED]; 763 [touchToSearchPermissions setPreferenceState:TouchToSearch::UNDECIDED];
769 } 764 }
770 ContextualSearch::RecordPreferenceState( 765 ContextualSearch::RecordPreferenceState(
771 [touchToSearchPermissions preferenceState]); 766 [touchToSearchPermissions preferenceState]);
772 } 767 }
773 } 768 }
774 769
775 - (void)handleFirstRunUIWillFinish { 770 - (void)handleFirstRunUIWillFinish {
776 DCHECK(_isPresentingFirstRunUI); 771 DCHECK(_isPresentingFirstRunUI);
777 _isPresentingFirstRunUI = NO; 772 _isPresentingFirstRunUI = NO;
778 [[NSNotificationCenter defaultCenter] 773 [[NSNotificationCenter defaultCenter]
779 removeObserver:self 774 removeObserver:self
780 name:kChromeFirstRunUIWillFinishNotification 775 name:kChromeFirstRunUIWillFinishNotification
781 object:nil]; 776 object:nil];
782 777
783 [self markEulaAsAccepted]; 778 [self markEulaAsAccepted];
784 779
785 if (_startupParameters.get()) { 780 if (_startupParameters) {
786 [self dismissModalsAndOpenSelectedTabInMode:ApplicationMode::NORMAL 781 [self dismissModalsAndOpenSelectedTabInMode:ApplicationMode::NORMAL
787 withURL:[_startupParameters externalURL] 782 withURL:[_startupParameters externalURL]
788 transition:ui::PAGE_TRANSITION_LINK 783 transition:ui::PAGE_TRANSITION_LINK
789 completion:nil]; 784 completion:nil];
790 _startupParameters.reset(); 785 _startupParameters = nil;
791 } 786 }
792 } 787 }
793 788
794 - (void)handleFirstRunUIDidFinish { 789 - (void)handleFirstRunUIDidFinish {
795 [[NSNotificationCenter defaultCenter] 790 [[NSNotificationCenter defaultCenter]
796 removeObserver:self 791 removeObserver:self
797 name:kChromeFirstRunUIDidFinishNotification 792 name:kChromeFirstRunUIDidFinishNotification
798 object:nil]; 793 object:nil];
799 794
800 // As soon as First Run has finished, give OmniboxGeolocationController an 795 // As soon as First Run has finished, give OmniboxGeolocationController an
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 } 832 }
838 833
839 // Always set the new otr tab model on iPad with tab switcher enabled. 834 // Always set the new otr tab model on iPad with tab switcher enabled.
840 // Notify the _tabSwitcherController with the new otrBVC. 835 // Notify the _tabSwitcherController with the new otrBVC.
841 if (IsIPadIdiom() || _tabSwitcherIsActive) 836 if (IsIPadIdiom() || _tabSwitcherIsActive)
842 [_tabSwitcherController setOtrTabModel:self.otrTabModel]; 837 [_tabSwitcherController setOtrTabModel:self.otrTabModel];
843 } 838 }
844 839
845 - (BrowsingDataRemovalController*)browsingDataRemovalController { 840 - (BrowsingDataRemovalController*)browsingDataRemovalController {
846 if (!_browsingDataRemovalController) { 841 if (!_browsingDataRemovalController) {
847 _browsingDataRemovalController.reset( 842 _browsingDataRemovalController =
848 [[BrowsingDataRemovalController alloc] initWithDelegate:self]); 843 [[BrowsingDataRemovalController alloc] initWithDelegate:self];
849 } 844 }
850 return _browsingDataRemovalController; 845 return _browsingDataRemovalController;
851 } 846 }
852 847
853 - (void)setWebUsageEnabled:(BOOL)enabled { 848 - (void)setWebUsageEnabled:(BOOL)enabled {
854 DCHECK([NSThread isMainThread]); 849 DCHECK([NSThread isMainThread]);
855 if (enabled) { 850 if (enabled) {
856 [self activateBVCAndMakeCurrentBVCPrimary]; 851 [self activateBVCAndMakeCurrentBVCPrimary];
857 } else { 852 } else {
858 [self.mainBVC setActive:NO]; 853 [self.mainBVC setActive:NO];
859 [self.otrBVC setActive:NO]; 854 [self.otrBVC setActive:NO];
860 } 855 }
861 } 856 }
862 857
863 - (void)activateBVCAndMakeCurrentBVCPrimary { 858 - (void)activateBVCAndMakeCurrentBVCPrimary {
864 // If there are pending removal operations, the activation will be deferred 859 // If there are pending removal operations, the activation will be deferred
865 // until the callback for |removeBrowsingDataFromBrowserState:| is received. 860 // until the callback for |removeBrowsingDataFromBrowserState:| is received.
866 if (![self.browsingDataRemovalController 861 if (![self.browsingDataRemovalController
867 hasPendingRemovalOperations:self.currentBrowserState]) { 862 hasPendingRemovalOperations:self.currentBrowserState]) {
868 [self.mainBVC setActive:YES]; 863 [self.mainBVC setActive:YES];
869 [self.otrBVC setActive:YES]; 864 [self.otrBVC setActive:YES];
870 865
871 [self.currentBVC setPrimary:YES]; 866 [self.currentBVC setPrimary:YES];
872 } 867 }
873 } 868 }
874 869
875 #pragma mark - BrowserLauncher implementation. 870 #pragma mark - BrowserLauncher implementation.
876 871
877 - (NSDictionary*)launchOptions { 872 - (NSDictionary*)launchOptions {
gambard 2017/06/12 12:42:48 Synthesize?
marq (ping after 24h) 2017/06/12 14:25:09 Done.
878 return _launchOptions; 873 return _launchOptions;
879 } 874 }
880 875
881 - (void)setLaunchOptions:(NSDictionary*)launchOptions { 876 - (void)setLaunchOptions:(NSDictionary*)launchOptions {
882 _launchOptions.reset([launchOptions retain]); 877 _launchOptions = launchOptions;
883 } 878 }
884 879
885 #pragma mark - Property implementation. 880 #pragma mark - Property implementation.
886 881
887 - (id<BrowserViewInformation>)browserViewInformation { 882 - (id<BrowserViewInformation>)browserViewInformation {
888 return _browserViewWrangler; 883 return _browserViewWrangler;
889 } 884 }
890 885
891 - (AppStartupParameters*)startupParameters { 886 - (AppStartupParameters*)startupParameters {
gambard 2017/06/12 12:42:48 Remove this getter and the setter below for a synt
marq (ping after 24h) 2017/06/12 14:25:09 Done.
892 return _startupParameters; 887 return _startupParameters;
893 } 888 }
894 889
895 - (void)setStartupParameters:(AppStartupParameters*)startupParameters { 890 - (void)setStartupParameters:(AppStartupParameters*)startupParameters {
896 _startupParameters.reset([startupParameters retain]); 891 _startupParameters = startupParameters;
897 } 892 }
898 893
899 - (MainViewController*)mainViewController { 894 - (MainViewController*)mainViewController {
900 return self.mainCoordinator.mainViewController; 895 return self.mainCoordinator.mainViewController;
901 } 896 }
902 897
903 - (MainCoordinator*)mainCoordinator { 898 - (MainCoordinator*)mainCoordinator {
904 if (_browserInitializationStage == INITIALIZATION_STAGE_BASIC) { 899 if (_browserInitializationStage == INITIALIZATION_STAGE_BASIC) {
905 NOTREACHED() << "mainCoordinator accessed too early in initialization."; 900 NOTREACHED() << "mainCoordinator accessed too early in initialization.";
906 return nil; 901 return nil;
907 } 902 }
908 if (!_mainCoordinator) { 903 if (!_mainCoordinator) {
909 // Lazily create the main coordinator. 904 // Lazily create the main coordinator.
910 _mainCoordinator.reset( 905 _mainCoordinator = [[MainCoordinator alloc] initWithWindow:self.window];
911 [[MainCoordinator alloc] initWithWindow:self.window]);
912 } 906 }
913 return _mainCoordinator; 907 return _mainCoordinator;
914 } 908 }
915 909
916 - (BOOL)isFirstLaunchAfterUpgrade { 910 - (BOOL)isFirstLaunchAfterUpgrade {
917 return [[PreviousSessionInfo sharedInstance] isFirstSessionAfterUpgrade]; 911 return [[PreviousSessionInfo sharedInstance] isFirstSessionAfterUpgrade];
918 } 912 }
919 913
920 - (MetricsMediator*)metricsMediator { 914 - (MetricsMediator*)metricsMediator {
gambard 2017/06/12 12:42:47 Same, synthesize here and below instead?
marq (ping after 24h) 2017/06/12 14:25:09 Done.
921 return _metricsMediator; 915 return _metricsMediator;
922 } 916 }
923 917
924 - (void)setMetricsMediator:(MetricsMediator*)metricsMediator { 918 - (void)setMetricsMediator:(MetricsMediator*)metricsMediator {
925 _metricsMediator.reset(metricsMediator); 919 _metricsMediator = metricsMediator;
926 } 920 }
927 921
928 - (SettingsNavigationController*)settingsNavigationController { 922 - (SettingsNavigationController*)settingsNavigationController {
gambard 2017/06/12 12:42:48 Same
marq (ping after 24h) 2017/06/12 14:25:09 Done.
929 return _settingsNavigationController; 923 return _settingsNavigationController;
930 } 924 }
931 925
932 - (void)setSettingsNavigationController: 926 - (void)setSettingsNavigationController:
933 (SettingsNavigationController*)settingsNavigationController { 927 (SettingsNavigationController*)settingsNavigationController {
934 _settingsNavigationController.reset([settingsNavigationController retain]); 928 _settingsNavigationController = settingsNavigationController;
935 } 929 }
936 930
937 #pragma mark - StartupInformation implementation. 931 #pragma mark - StartupInformation implementation.
938 932
939 - (FirstUserActionRecorder*)firstUserActionRecorder { 933 - (FirstUserActionRecorder*)firstUserActionRecorder {
940 return _firstUserActionRecorder.get(); 934 return _firstUserActionRecorder.get();
941 } 935 }
942 936
943 - (void)resetFirstUserActionRecorder { 937 - (void)resetFirstUserActionRecorder {
944 _firstUserActionRecorder.reset(); 938 _firstUserActionRecorder.reset();
945 } 939 }
946 940
947 - (void)expireFirstUserActionRecorderAfterDelay:(NSTimeInterval)delay { 941 - (void)expireFirstUserActionRecorderAfterDelay:(NSTimeInterval)delay {
948 [self performSelector:@selector(expireFirstUserActionRecorder) 942 [self performSelector:@selector(expireFirstUserActionRecorder)
949 withObject:nil 943 withObject:nil
950 afterDelay:delay]; 944 afterDelay:delay];
951 } 945 }
952 946
953 - (void)activateFirstUserActionRecorderWithBackgroundTime: 947 - (void)activateFirstUserActionRecorderWithBackgroundTime:
954 (NSTimeInterval)backgroundTime { 948 (NSTimeInterval)backgroundTime {
955 base::TimeDelta delta = base::TimeDelta::FromSeconds(backgroundTime); 949 base::TimeDelta delta = base::TimeDelta::FromSeconds(backgroundTime);
956 _firstUserActionRecorder.reset(new FirstUserActionRecorder(delta)); 950 _firstUserActionRecorder.reset(new FirstUserActionRecorder(delta));
957 } 951 }
958 952
959 - (void)stopChromeMain { 953 - (void)stopChromeMain {
960 [_spotlightManager shutdown]; 954 [_spotlightManager shutdown];
961 _spotlightManager.reset(); 955 _spotlightManager = nil;
962 956
963 _browserViewWrangler.reset(); 957 _browserViewWrangler = nil;
964 _chromeMain.reset(); 958 _chromeMain.reset();
965 } 959 }
966 960
967 - (BOOL)isTabSwitcherActive { 961 - (BOOL)isTabSwitcherActive {
968 return _tabSwitcherIsActive; 962 return _tabSwitcherIsActive;
969 } 963 }
970 964
971 #pragma mark - BrowserViewInformation implementation. 965 #pragma mark - BrowserViewInformation implementation.
972 966
973 - (void)haltAllTabs { 967 - (void)haltAllTabs {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1152 if (![self mustShowRestoreInfobar]) { 1146 if (![self mustShowRestoreInfobar]) {
1153 [self scheduleSnapshotPurge]; 1147 [self scheduleSnapshotPurge];
1154 } 1148 }
1155 } 1149 }
1156 1150
1157 - (void)scheduleMemoryDebuggingTools { 1151 - (void)scheduleMemoryDebuggingTools {
1158 if (experimental_flags::IsMemoryDebuggingEnabled()) { 1152 if (experimental_flags::IsMemoryDebuggingEnabled()) {
1159 [[DeferredInitializationRunner sharedInstance] 1153 [[DeferredInitializationRunner sharedInstance]
1160 enqueueBlockNamed:kMemoryDebuggingToolsStartup 1154 enqueueBlockNamed:kMemoryDebuggingToolsStartup
1161 block:^{ 1155 block:^{
1162 _memoryDebuggerManager.reset( 1156 _memoryDebuggerManager = [[MemoryDebuggerManager alloc]
1163 [[MemoryDebuggerManager alloc] 1157 initWithView:self.window
1164 initWithView:self.window 1158 prefs:GetApplicationContext()
1165 prefs:GetApplicationContext() 1159 ->GetLocalState()];
1166 ->GetLocalState()]);
1167 }]; 1160 }];
1168 } 1161 }
1169 } 1162 }
1170 1163
1171 - (void)startFreeMemoryMonitoring { 1164 - (void)startFreeMemoryMonitoring {
1172 base::PostTaskWithTraits( 1165 base::PostTaskWithTraits(
1173 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, 1166 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
1174 base::BindOnce(&ios_internal::AsynchronousFreeMemoryMonitor)); 1167 base::BindOnce(&ios_internal::AsynchronousFreeMemoryMonitor));
1175 } 1168 }
1176 1169
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 } 1284 }
1292 if (_tabSwitcherIsActive) 1285 if (_tabSwitcherIsActive)
1293 [self dismissTabSwitcherWithoutAnimationInModel:self.mainTabModel]; 1286 [self dismissTabSwitcherWithoutAnimationInModel:self.mainTabModel];
1294 if (firstRun || [self shouldOpenNTPTabOnActivationOfTabModel:tabModel]) { 1287 if (firstRun || [self shouldOpenNTPTabOnActivationOfTabModel:tabModel]) {
1295 [self.currentBVC newTab:nil]; 1288 [self.currentBVC newTab:nil];
1296 } 1289 }
1297 1290
1298 if (firstRun) { 1291 if (firstRun) {
1299 [self showFirstRunUI]; 1292 [self showFirstRunUI];
1300 // Do not ever show the 'restore' infobar during first run. 1293 // Do not ever show the 'restore' infobar during first run.
1301 _restoreHelper.reset(); 1294 _restoreHelper = nil;
1302 } 1295 }
1303 } 1296 }
1304 1297
1305 - (void)showFirstRunUI { 1298 - (void)showFirstRunUI {
1306 // Register for notification when First Run is completed. 1299 // Register for notification when First Run is completed.
1307 // Some initializations are held back until First Run modal dialog 1300 // Some initializations are held back until First Run modal dialog
1308 // is dismissed. 1301 // is dismissed.
1309 [[NSNotificationCenter defaultCenter] 1302 [[NSNotificationCenter defaultCenter]
1310 addObserver:self 1303 addObserver:self
1311 selector:@selector(handleFirstRunUIWillFinish) 1304 selector:@selector(handleFirstRunUIWillFinish)
1312 name:kChromeFirstRunUIWillFinishNotification 1305 name:kChromeFirstRunUIWillFinishNotification
1313 object:nil]; 1306 object:nil];
1314 [[NSNotificationCenter defaultCenter] 1307 [[NSNotificationCenter defaultCenter]
1315 addObserver:self 1308 addObserver:self
1316 selector:@selector(handleFirstRunUIDidFinish) 1309 selector:@selector(handleFirstRunUIDidFinish)
1317 name:kChromeFirstRunUIDidFinishNotification 1310 name:kChromeFirstRunUIDidFinishNotification
1318 object:nil]; 1311 object:nil];
1319 1312
1320 base::scoped_nsobject<WelcomeToChromeViewController> welcomeToChrome( 1313 WelcomeToChromeViewController* welcomeToChrome =
1321 [[WelcomeToChromeViewController alloc] 1314 [[WelcomeToChromeViewController alloc]
1322 initWithBrowserState:_mainBrowserState 1315 initWithBrowserState:_mainBrowserState
1323 tabModel:self.mainTabModel]); 1316 tabModel:self.mainTabModel];
1324 base::scoped_nsobject<UINavigationController> navController( 1317 UINavigationController* navController =
1325 [[OrientationLimitingNavigationController alloc] 1318 [[OrientationLimitingNavigationController alloc]
1326 initWithRootViewController:welcomeToChrome]); 1319 initWithRootViewController:welcomeToChrome];
1327 [navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 1320 [navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
1328 CGRect appFrame = [[UIScreen mainScreen] bounds]; 1321 CGRect appFrame = [[UIScreen mainScreen] bounds];
1329 [[navController view] setFrame:appFrame]; 1322 [[navController view] setFrame:appFrame];
1330 _isPresentingFirstRunUI = YES; 1323 _isPresentingFirstRunUI = YES;
1331 [self.mainBVC presentViewController:navController animated:NO completion:nil]; 1324 [self.mainBVC presentViewController:navController animated:NO completion:nil];
1332 } 1325 }
1333 1326
1334 - (void)crashIfRequested { 1327 - (void)crashIfRequested {
1335 if (experimental_flags::IsStartupCrashEnabled()) { 1328 if (experimental_flags::IsStartupCrashEnabled()) {
1336 // Flush out the value cached for 1329 // Flush out the value cached for
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 1375
1383 break; 1376 break;
1384 } 1377 }
1385 } 1378 }
1386 } 1379 }
1387 1380
1388 - (void)showPromo:(UIViewController*)promo { 1381 - (void)showPromo:(UIViewController*)promo {
1389 // Make sure we have the BVC here with a valid profile. 1382 // Make sure we have the BVC here with a valid profile.
1390 DCHECK([self.currentBVC browserState]); 1383 DCHECK([self.currentBVC browserState]);
1391 1384
1392 base::scoped_nsobject<OrientationLimitingNavigationController> navController( 1385 OrientationLimitingNavigationController* navController =
1393 [[OrientationLimitingNavigationController alloc] 1386 [[OrientationLimitingNavigationController alloc]
1394 initWithRootViewController:promo]); 1387 initWithRootViewController:promo];
1395 1388
1396 // Avoid presenting the promo if the current device orientation is not 1389 // Avoid presenting the promo if the current device orientation is not
1397 // supported. The promo will be presented at a later moment, when the device 1390 // supported. The promo will be presented at a later moment, when the device
1398 // orientation is supported. 1391 // orientation is supported.
1399 UIInterfaceOrientation orientation = 1392 UIInterfaceOrientation orientation =
1400 [UIApplication sharedApplication].statusBarOrientation; 1393 [UIApplication sharedApplication].statusBarOrientation;
1401 NSUInteger supportedOrientationsMask = 1394 NSUInteger supportedOrientationsMask =
1402 [navController supportedInterfaceOrientations]; 1395 [navController supportedInterfaceOrientations];
1403 if (!((1 << orientation) & supportedOrientationsMask)) 1396 if (!((1 << orientation) & supportedOrientationsMask))
1404 return; 1397 return;
(...skipping 18 matching lines...) Expand all
1423 break; 1416 break;
1424 case IDC_NEW_INCOGNITO_TAB: 1417 case IDC_NEW_INCOGNITO_TAB:
1425 [self createNewTabInBVC:self.otrBVC sender:sender]; 1418 [self createNewTabInBVC:self.otrBVC sender:sender];
1426 break; 1419 break;
1427 case IDC_OPEN_URL: 1420 case IDC_OPEN_URL:
1428 [self openUrl:base::mac::ObjCCast<OpenUrlCommand>(sender)]; 1421 [self openUrl:base::mac::ObjCCast<OpenUrlCommand>(sender)];
1429 break; 1422 break;
1430 case IDC_OPTIONS: 1423 case IDC_OPTIONS:
1431 [self showSettings]; 1424 [self showSettings];
1432 break; 1425 break;
1433 case IDC_REPORT_AN_ISSUE: 1426 case IDC_REPORT_AN_ISSUE: {
1434 dispatch_async(dispatch_get_main_queue(), ^{ 1427 dispatch_async(dispatch_get_main_queue(), ^{
1435 [self showReportAnIssue]; 1428 [self showReportAnIssue];
1436 }); 1429 });
1437 break; 1430 } break;
gambard 2017/06/12 12:42:48 Is this cl format? Why is break outside of the bra
1438 case IDC_SHOW_SIGNIN_IOS: { 1431 case IDC_SHOW_SIGNIN_IOS: {
1439 ShowSigninCommand* command = 1432 ShowSigninCommand* command =
1440 base::mac::ObjCCastStrict<ShowSigninCommand>(sender); 1433 base::mac::ObjCCastStrict<ShowSigninCommand>(sender);
1441 if (command.operation == AUTHENTICATION_OPERATION_DISMISS) { 1434 if (command.operation == AUTHENTICATION_OPERATION_DISMISS) {
1442 [self dismissSigninInteractionController]; 1435 [self dismissSigninInteractionController];
1443 } else { 1436 } else {
1444 [self showSigninWithOperation:command.operation 1437 [self showSigninWithOperation:command.operation
1445 identity:command.identity 1438 identity:command.identity
1446 accessPoint:command.accessPoint 1439 accessPoint:command.accessPoint
1447 promoAction:command.promoAction 1440 promoAction:command.promoAction
(...skipping 10 matching lines...) Expand all
1458 break; 1451 break;
1459 case IDC_SHOW_SYNC_PASSPHRASE_SETTINGS: 1452 case IDC_SHOW_SYNC_PASSPHRASE_SETTINGS:
1460 [self showSyncEncryptionPassphrase]; 1453 [self showSyncEncryptionPassphrase];
1461 break; 1454 break;
1462 case IDC_SHOW_SAVE_PASSWORDS_SETTINGS: 1455 case IDC_SHOW_SAVE_PASSWORDS_SETTINGS:
1463 [self showSavePasswordsSettings]; 1456 [self showSavePasswordsSettings];
1464 break; 1457 break;
1465 case IDC_SHOW_HISTORY: 1458 case IDC_SHOW_HISTORY:
1466 [self showHistory]; 1459 [self showHistory];
1467 break; 1460 break;
1468 case IDC_TOGGLE_TAB_SWITCHER: 1461 case IDC_TOGGLE_TAB_SWITCHER: {
1469 DCHECK(!_tabSwitcherIsActive); 1462 DCHECK(!_tabSwitcherIsActive);
1470 if (!_isProcessingVoiceSearchCommand) { 1463 if (!_isProcessingVoiceSearchCommand) {
1471 [self showTabSwitcher]; 1464 [self showTabSwitcher];
1472 _isProcessingTabSwitcherCommand = YES; 1465 _isProcessingTabSwitcherCommand = YES;
1473 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1466 dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
1474 kExpectedTransitionDurationInNanoSeconds), 1467 kExpectedTransitionDurationInNanoSeconds),
1475 dispatch_get_main_queue(), ^{ 1468 dispatch_get_main_queue(), ^{
1476 _isProcessingTabSwitcherCommand = NO; 1469 _isProcessingTabSwitcherCommand = NO;
1477 }); 1470 });
1478 } 1471 }
1479 break; 1472 } break;
1473
1480 case IDC_PRELOAD_VOICE_SEARCH: 1474 case IDC_PRELOAD_VOICE_SEARCH:
1481 [self.currentBVC chromeExecuteCommand:sender]; 1475 [self.currentBVC chromeExecuteCommand:sender];
1482 break; 1476 break;
1483 case IDC_VOICE_SEARCH: 1477 case IDC_VOICE_SEARCH: {
1484 if (!_isProcessingTabSwitcherCommand) { 1478 if (!_isProcessingTabSwitcherCommand) {
1485 [self startVoiceSearch]; 1479 [self startVoiceSearch];
1486 _isProcessingVoiceSearchCommand = YES; 1480 _isProcessingVoiceSearchCommand = YES;
1487 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1481 dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
1488 kExpectedTransitionDurationInNanoSeconds), 1482 kExpectedTransitionDurationInNanoSeconds),
1489 dispatch_get_main_queue(), ^{ 1483 dispatch_get_main_queue(), ^{
1490 _isProcessingVoiceSearchCommand = NO; 1484 _isProcessingVoiceSearchCommand = NO;
1491 }); 1485 });
1492 } 1486 }
1493 break; 1487 } break;
1488
1494 case IDC_CLEAR_BROWSING_DATA_IOS: { 1489 case IDC_CLEAR_BROWSING_DATA_IOS: {
1495 // Clear both the main browser state and the associated incognito 1490 // Clear both the main browser state and the associated incognito
1496 // browser state. 1491 // browser state.
1497 ClearBrowsingDataCommand* command = 1492 ClearBrowsingDataCommand* command =
1498 base::mac::ObjCCastStrict<ClearBrowsingDataCommand>(sender); 1493 base::mac::ObjCCastStrict<ClearBrowsingDataCommand>(sender);
1499 ios::ChromeBrowserState* browserState = 1494 ios::ChromeBrowserState* browserState =
1500 [command browserState]->GetOriginalChromeBrowserState(); 1495 [command browserState]->GetOriginalChromeBrowserState();
1501 int mask = [command mask]; 1496 int mask = [command mask];
1502 browsing_data::TimePeriod timePeriod = [command timePeriod]; 1497 browsing_data::TimePeriod timePeriod = [command timePeriod];
1503 [self removeBrowsingDataFromBrowserState:browserState 1498 [self removeBrowsingDataFromBrowserState:browserState
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 #pragma mark - Tab closure handlers 1658 #pragma mark - Tab closure handlers
1664 1659
1665 - (void)lastIncognitoTabClosed { 1660 - (void)lastIncognitoTabClosed {
1666 DCHECK(_mainBrowserState->HasOffTheRecordChromeBrowserState()); 1661 DCHECK(_mainBrowserState->HasOffTheRecordChromeBrowserState());
1667 [self clearIOSSpecificIncognitoData]; 1662 [self clearIOSSpecificIncognitoData];
1668 1663
1669 // OffTheRecordProfileIOData cannot be deleted before all the requests are 1664 // OffTheRecordProfileIOData cannot be deleted before all the requests are
1670 // deleted. All of the request trackers associated with the closed OTR tabs 1665 // deleted. All of the request trackers associated with the closed OTR tabs
1671 // will have posted CancelRequest calls to the IO thread by now; this just 1666 // will have posted CancelRequest calls to the IO thread by now; this just
1672 // waits for those calls to run before calling |deleteIncognitoBrowserState|. 1667 // waits for those calls to run before calling |deleteIncognitoBrowserState|.
1673 web::RequestTrackerImpl::RunAfterRequestsCancel(base::BindBlock(^{ 1668 web::RequestTrackerImpl::RunAfterRequestsCancel(base::BindBlockArc(^{
1674 [self deleteIncognitoBrowserState]; 1669 [self deleteIncognitoBrowserState];
1675 })); 1670 }));
1676 1671
1677 // a) The first condition can happen when the last incognito tab is closed 1672 // a) The first condition can happen when the last incognito tab is closed
1678 // from the tab switcher. 1673 // from the tab switcher.
1679 // b) The second condition can happen if some other code (like JS) triggers 1674 // b) The second condition can happen if some other code (like JS) triggers
1680 // closure of tabs from the otr tab model when it's not current. 1675 // closure of tabs from the otr tab model when it's not current.
1681 // Nothing to do here. The next user action (like clicking on an existing 1676 // Nothing to do here. The next user action (like clicking on an existing
1682 // regular tab or creating a new incognito tab from the settings menu) will 1677 // regular tab or creating a new incognito tab from the settings menu) will
1683 // take care of the logic to mode switch. 1678 // take care of the logic to mode switch.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1755 BrowserViewController* currentBVC = self.currentBVC; 1750 BrowserViewController* currentBVC = self.currentBVC;
1756 Tab* currentTab = [[currentBVC tabModel] currentTab]; 1751 Tab* currentTab = [[currentBVC tabModel] currentTab];
1757 1752
1758 // In order to generate the transition between the current browser view 1753 // In order to generate the transition between the current browser view
1759 // controller and the tab switcher controller it's possible that multiple 1754 // controller and the tab switcher controller it's possible that multiple
1760 // screenshots of the same tab are taken. Since taking a screenshot is 1755 // screenshots of the same tab are taken. Since taking a screenshot is
1761 // expensive we activate snapshot coalescing in the scope of this function 1756 // expensive we activate snapshot coalescing in the scope of this function
1762 // which will cache the first snapshot for the tab and reuse it instead of 1757 // which will cache the first snapshot for the tab and reuse it instead of
1763 // regenerating a new one each time. 1758 // regenerating a new one each time.
1764 [currentTab setSnapshotCoalescingEnabled:YES]; 1759 [currentTab setSnapshotCoalescingEnabled:YES];
1765 base::ScopedClosureRunner runner(base::BindBlock(^{ 1760 base::ScopedClosureRunner runner(base::BindBlockArc(^{
1766 [currentTab setSnapshotCoalescingEnabled:NO]; 1761 [currentTab setSnapshotCoalescingEnabled:NO];
1767 })); 1762 }));
1768 1763
1769 [currentBVC prepareToEnterTabSwitcher:nil]; 1764 [currentBVC prepareToEnterTabSwitcher:nil];
1770 1765
1771 if (!_tabSwitcherController.get()) { 1766 if (!_tabSwitcherController) {
1772 if (IsIPadIdiom()) { 1767 if (IsIPadIdiom()) {
1773 _tabSwitcherController.reset([[TabSwitcherController alloc] 1768 _tabSwitcherController = [[TabSwitcherController alloc]
1774 initWithBrowserState:_mainBrowserState 1769 initWithBrowserState:_mainBrowserState
1775 mainTabModel:self.mainTabModel 1770 mainTabModel:self.mainTabModel
1776 otrTabModel:self.otrTabModel 1771 otrTabModel:self.otrTabModel
1777 activeTabModel:self.currentTabModel]); 1772 activeTabModel:self.currentTabModel];
1778 } else { 1773 } else {
1779 _tabSwitcherController.reset([[StackViewController alloc] 1774 _tabSwitcherController = [[StackViewController alloc]
1780 initWithMainTabModel:self.mainTabModel 1775 initWithMainTabModel:self.mainTabModel
1781 otrTabModel:self.otrTabModel 1776 otrTabModel:self.otrTabModel
1782 activeTabModel:self.currentTabModel]); 1777 activeTabModel:self.currentTabModel];
1783 } 1778 }
1784 } else { 1779 } else {
1785 // The StackViewController is kept in memory to avoid the performance hit of 1780 // The StackViewController is kept in memory to avoid the performance hit of
1786 // loading from the nib on next showing, but clears out its card models to 1781 // loading from the nib on next showing, but clears out its card models to
1787 // release memory. The tab models are required to rebuild the card stacks. 1782 // release memory. The tab models are required to rebuild the card stacks.
1788 [_tabSwitcherController 1783 [_tabSwitcherController
1789 restoreInternalStateWithMainTabModel:self.mainTabModel 1784 restoreInternalStateWithMainTabModel:self.mainTabModel
1790 otrTabModel:self.otrTabModel 1785 otrTabModel:self.otrTabModel
1791 activeTabModel:self.currentTabModel]; 1786 activeTabModel:self.currentTabModel];
1792 } 1787 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1881 // Prevent wayward touches from wreaking havoc while the stack view is being 1876 // Prevent wayward touches from wreaking havoc while the stack view is being
1882 // dismissed. 1877 // dismissed.
1883 [[_tabSwitcherController view] setUserInteractionEnabled:NO]; 1878 [[_tabSwitcherController view] setUserInteractionEnabled:NO];
1884 BrowserViewController* targetBVC = 1879 BrowserViewController* targetBVC =
1885 (tabModel == self.mainTabModel) ? self.mainBVC : self.otrBVC; 1880 (tabModel == self.mainTabModel) ? self.mainBVC : self.otrBVC;
1886 self.currentBVC = targetBVC; 1881 self.currentBVC = targetBVC;
1887 } 1882 }
1888 1883
1889 - (void)finishDismissingStackView { 1884 - (void)finishDismissingStackView {
1890 DCHECK_EQ(self.mainViewController.activeViewController, 1885 DCHECK_EQ(self.mainViewController.activeViewController,
1891 _tabSwitcherController.get()); 1886 _tabSwitcherController);
1892 1887
1893 if (_modeToDisplayOnStackViewDismissal == StackViewDismissalMode::NORMAL) { 1888 if (_modeToDisplayOnStackViewDismissal == StackViewDismissalMode::NORMAL) {
1894 self.currentBVC = self.mainBVC; 1889 self.currentBVC = self.mainBVC;
1895 } else if (_modeToDisplayOnStackViewDismissal == 1890 } else if (_modeToDisplayOnStackViewDismissal ==
1896 StackViewDismissalMode::INCOGNITO) { 1891 StackViewDismissalMode::INCOGNITO) {
1897 self.currentBVC = self.otrBVC; 1892 self.currentBVC = self.otrBVC;
1898 } 1893 }
1899 1894
1900 _modeToDisplayOnStackViewDismissal = StackViewDismissalMode::NONE; 1895 _modeToDisplayOnStackViewDismissal = StackViewDismissalMode::NONE;
1901 1896
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1954 removeBrowsingDataFromBrowserState:browserState 1949 removeBrowsingDataFromBrowserState:browserState
1955 mask:mask 1950 mask:mask
1956 timePeriod:timePeriod 1951 timePeriod:timePeriod
1957 completionHandler:browsingDataRemoved]; 1952 completionHandler:browsingDataRemoved];
1958 } 1953 }
1959 1954
1960 #pragma mark - Navigation Controllers 1955 #pragma mark - Navigation Controllers
1961 1956
1962 - (void)presentSignedInAccountsViewControllerForBrowserState: 1957 - (void)presentSignedInAccountsViewControllerForBrowserState:
1963 (ios::ChromeBrowserState*)browserState { 1958 (ios::ChromeBrowserState*)browserState {
1964 base::scoped_nsobject<UIViewController> accountsViewController( 1959 UIViewController* accountsViewController = [
1965 [[SignedInAccountsViewController alloc] 1960 [SignedInAccountsViewController alloc] initWithBrowserState:browserState];
1966 initWithBrowserState:browserState]);
1967 [[self topPresentedViewController] 1961 [[self topPresentedViewController]
1968 presentViewController:accountsViewController 1962 presentViewController:accountsViewController
1969 animated:YES 1963 animated:YES
1970 completion:nil]; 1964 completion:nil];
1971 } 1965 }
1972 1966
1973 - (void)showSettings { 1967 - (void)showSettings {
1974 if (_settingsNavigationController) 1968 if (_settingsNavigationController)
1975 return; 1969 return;
1976 [[DeferredInitializationRunner sharedInstance] 1970 [[DeferredInitializationRunner sharedInstance]
1977 runBlockIfNecessary:kPrefObserverInit]; 1971 runBlockIfNecessary:kPrefObserverInit];
1978 DCHECK(_localStatePrefObserverBridge); 1972 DCHECK(_localStatePrefObserverBridge);
1979 _settingsNavigationController.reset([SettingsNavigationController 1973 _settingsNavigationController = [SettingsNavigationController
1980 newSettingsMainControllerWithMainBrowserState:_mainBrowserState 1974 newSettingsMainControllerWithMainBrowserState:_mainBrowserState
1981 currentBrowserState:self.currentBrowserState 1975 currentBrowserState:self.currentBrowserState
1982 delegate:self]); 1976 delegate:self];
1983 [[self topPresentedViewController] 1977 [[self topPresentedViewController]
1984 presentViewController:_settingsNavigationController 1978 presentViewController:_settingsNavigationController
1985 animated:YES 1979 animated:YES
1986 completion:nil]; 1980 completion:nil];
1987 } 1981 }
1988 1982
1989 - (void)showAccountsSettings { 1983 - (void)showAccountsSettings {
1990 if (_settingsNavigationController) 1984 if (_settingsNavigationController)
1991 return; 1985 return;
1992 if ([self currentBrowserState]->IsOffTheRecord()) { 1986 if ([self currentBrowserState]->IsOffTheRecord()) {
1993 NOTREACHED(); 1987 NOTREACHED();
1994 return; 1988 return;
1995 } 1989 }
1996 _settingsNavigationController.reset([SettingsNavigationController 1990 _settingsNavigationController = [SettingsNavigationController
1997 newAccountsController:self.currentBrowserState 1991 newAccountsController:self.currentBrowserState
1998 delegate:self]); 1992 delegate:self];
1999 [[self topPresentedViewController] 1993 [[self topPresentedViewController]
2000 presentViewController:_settingsNavigationController 1994 presentViewController:_settingsNavigationController
2001 animated:YES 1995 animated:YES
2002 completion:nil]; 1996 completion:nil];
2003 } 1997 }
2004 1998
2005 - (void)showSyncSettings { 1999 - (void)showSyncSettings {
2006 if (_settingsNavigationController) 2000 if (_settingsNavigationController)
2007 return; 2001 return;
2008 _settingsNavigationController.reset([SettingsNavigationController 2002 _settingsNavigationController =
2009 newSyncController:_mainBrowserState 2003 [SettingsNavigationController newSyncController:_mainBrowserState
2010 allowSwitchSyncAccount:YES 2004 allowSwitchSyncAccount:YES
2011 delegate:self]); 2005 delegate:self];
2012 [[self topPresentedViewController] 2006 [[self topPresentedViewController]
2013 presentViewController:_settingsNavigationController 2007 presentViewController:_settingsNavigationController
2014 animated:YES 2008 animated:YES
2015 completion:nil]; 2009 completion:nil];
2016 } 2010 }
2017 2011
2018 - (void)showSavePasswordsSettings { 2012 - (void)showSavePasswordsSettings {
2019 if (_settingsNavigationController) 2013 if (_settingsNavigationController)
2020 return; 2014 return;
2021 _settingsNavigationController.reset([SettingsNavigationController 2015 _settingsNavigationController =
2022 newSavePasswordsController:_mainBrowserState 2016 [SettingsNavigationController newSavePasswordsController:_mainBrowserState
2023 delegate:self]); 2017 delegate:self];
2024 [[self topPresentedViewController] 2018 [[self topPresentedViewController]
2025 presentViewController:_settingsNavigationController 2019 presentViewController:_settingsNavigationController
2026 animated:YES 2020 animated:YES
2027 completion:nil]; 2021 completion:nil];
2028 } 2022 }
2029 2023
2030 - (void)showAutofillSettings { 2024 - (void)showAutofillSettings {
2031 if (_settingsNavigationController) 2025 if (_settingsNavigationController)
2032 return; 2026 return;
2033 _settingsNavigationController.reset([SettingsNavigationController 2027 _settingsNavigationController =
2034 newAutofillController:_mainBrowserState 2028 [SettingsNavigationController newAutofillController:_mainBrowserState
2035 delegate:self]); 2029 delegate:self];
2036 [[self topPresentedViewController] 2030 [[self topPresentedViewController]
2037 presentViewController:_settingsNavigationController 2031 presentViewController:_settingsNavigationController
2038 animated:YES 2032 animated:YES
2039 completion:nil]; 2033 completion:nil];
2040 } 2034 }
2041 2035
2042 - (void)showReportAnIssue { 2036 - (void)showReportAnIssue {
2043 if (_settingsNavigationController) 2037 if (_settingsNavigationController)
2044 return; 2038 return;
2045 _settingsNavigationController.reset([SettingsNavigationController 2039 _settingsNavigationController =
2046 newUserFeedbackController:_mainBrowserState 2040 [SettingsNavigationController newUserFeedbackController:_mainBrowserState
2047 delegate:self 2041 delegate:self
2048 feedbackDataSource:self]); 2042 feedbackDataSource:self];
2049 [[self topPresentedViewController] 2043 [[self topPresentedViewController]
2050 presentViewController:_settingsNavigationController 2044 presentViewController:_settingsNavigationController
2051 animated:YES 2045 animated:YES
2052 completion:nil]; 2046 completion:nil];
2053 } 2047 }
2054 2048
2055 - (void)showSyncEncryptionPassphrase { 2049 - (void)showSyncEncryptionPassphrase {
2056 if (_settingsNavigationController) 2050 if (_settingsNavigationController)
2057 return; 2051 return;
2058 _settingsNavigationController.reset([SettingsNavigationController 2052 _settingsNavigationController = [SettingsNavigationController
2059 newSyncEncryptionPassphraseController:_mainBrowserState 2053 newSyncEncryptionPassphraseController:_mainBrowserState
2060 delegate:self]); 2054 delegate:self];
2061 [[self topPresentedViewController] 2055 [[self topPresentedViewController]
2062 presentViewController:_settingsNavigationController 2056 presentViewController:_settingsNavigationController
2063 animated:YES 2057 animated:YES
2064 completion:nil]; 2058 completion:nil];
2065 } 2059 }
2066 2060
2067 - (void)showClearBrowsingDataSettingsController { 2061 - (void)showClearBrowsingDataSettingsController {
2068 if (_settingsNavigationController) 2062 if (_settingsNavigationController)
2069 return; 2063 return;
2070 _settingsNavigationController.reset([SettingsNavigationController 2064 _settingsNavigationController = [SettingsNavigationController
2071 newClearBrowsingDataController:_mainBrowserState 2065 newClearBrowsingDataController:_mainBrowserState
2072 delegate:self]); 2066 delegate:self];
2073 [[self topPresentedViewController] 2067 [[self topPresentedViewController]
2074 presentViewController:_settingsNavigationController 2068 presentViewController:_settingsNavigationController
2075 animated:YES 2069 animated:YES
2076 completion:nil]; 2070 completion:nil];
2077 } 2071 }
2078 2072
2079 - (void)showContextualSearchSettingsController { 2073 - (void)showContextualSearchSettingsController {
2080 if (_settingsNavigationController) 2074 if (_settingsNavigationController)
2081 return; 2075 return;
2082 _settingsNavigationController.reset([SettingsNavigationController 2076 _settingsNavigationController = [SettingsNavigationController
2083 newContextualSearchController:_mainBrowserState 2077 newContextualSearchController:_mainBrowserState
2084 delegate:self]); 2078 delegate:self];
2085 [[self topPresentedViewController] 2079 [[self topPresentedViewController]
2086 presentViewController:_settingsNavigationController 2080 presentViewController:_settingsNavigationController
2087 animated:YES 2081 animated:YES
2088 completion:nil]; 2082 completion:nil];
2089 } 2083 }
2090 2084
2091 - (void)showSigninWithOperation:(AuthenticationOperation)operation 2085 - (void)showSigninWithOperation:(AuthenticationOperation)operation
2092 identity:(ChromeIdentity*)identity 2086 identity:(ChromeIdentity*)identity
2093 accessPoint:(signin_metrics::AccessPoint)accessPoint 2087 accessPoint:(signin_metrics::AccessPoint)accessPoint
2094 promoAction:(signin_metrics::PromoAction)promoAction 2088 promoAction:(signin_metrics::PromoAction)promoAction
2095 callback:(ShowSigninCommandCompletionCallback)callback { 2089 callback:(ShowSigninCommandCompletionCallback)callback {
2096 DCHECK_NE(AUTHENTICATION_OPERATION_DISMISS, operation); 2090 DCHECK_NE(AUTHENTICATION_OPERATION_DISMISS, operation);
2097 2091
2098 if (_signinInteractionController) { 2092 if (_signinInteractionController) {
2099 // Avoid showing the sign in screen if there is already a sign-in operation 2093 // Avoid showing the sign in screen if there is already a sign-in operation
2100 // in progress. 2094 // in progress.
2101 return; 2095 return;
2102 } 2096 }
2103 2097
2104 BOOL areSettingsPresented = _settingsNavigationController != NULL; 2098 BOOL areSettingsPresented = _settingsNavigationController != NULL;
2105 _signinInteractionController.reset([[SigninInteractionController alloc] 2099 _signinInteractionController = [[SigninInteractionController alloc]
2106 initWithBrowserState:_mainBrowserState 2100 initWithBrowserState:_mainBrowserState
2107 presentingViewController:[self topPresentedViewController] 2101 presentingViewController:[self topPresentedViewController]
2108 isPresentedOnSettings:areSettingsPresented 2102 isPresentedOnSettings:areSettingsPresented
2109 accessPoint:accessPoint 2103 accessPoint:accessPoint
2110 promoAction:promoAction]); 2104 promoAction:promoAction];
2111 2105
2112 signin_ui::CompletionCallback completion = ^(BOOL success) { 2106 signin_ui::CompletionCallback completion = ^(BOOL success) {
2113 _signinInteractionController.reset(); 2107 _signinInteractionController = nil;
2114 if (callback) 2108 if (callback)
2115 callback(success); 2109 callback(success);
2116 }; 2110 };
2117 2111
2118 switch (operation) { 2112 switch (operation) {
2119 case AUTHENTICATION_OPERATION_DISMISS: 2113 case AUTHENTICATION_OPERATION_DISMISS:
2120 // Special case handled above. 2114 // Special case handled above.
2121 NOTREACHED(); 2115 NOTREACHED();
2122 break; 2116 break;
2123 case AUTHENTICATION_OPERATION_REAUTHENTICATE: 2117 case AUTHENTICATION_OPERATION_REAUTHENTICATE:
(...skipping 11 matching lines...) Expand all
2135 } 2129 }
2136 2130
2137 - (void)showAddAccount { 2131 - (void)showAddAccount {
2138 if (_signinInteractionController) { 2132 if (_signinInteractionController) {
2139 // Avoid showing the sign in screen if there is already a sign-in operation 2133 // Avoid showing the sign in screen if there is already a sign-in operation
2140 // in progress. 2134 // in progress.
2141 return; 2135 return;
2142 } 2136 }
2143 2137
2144 BOOL areSettingsPresented = _settingsNavigationController != NULL; 2138 BOOL areSettingsPresented = _settingsNavigationController != NULL;
2145 _signinInteractionController.reset([[SigninInteractionController alloc] 2139 _signinInteractionController = [[SigninInteractionController alloc]
2146 initWithBrowserState:_mainBrowserState 2140 initWithBrowserState:_mainBrowserState
2147 presentingViewController:[self topPresentedViewController] 2141 presentingViewController:[self topPresentedViewController]
2148 isPresentedOnSettings:areSettingsPresented 2142 isPresentedOnSettings:areSettingsPresented
2149 accessPoint:signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN 2143 accessPoint:signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN
2150 promoAction:signin_metrics::PromoAction:: 2144 promoAction:signin_metrics::PromoAction::
2151 PROMO_ACTION_NO_SIGNIN_PROMO]); 2145 PROMO_ACTION_NO_SIGNIN_PROMO];
2152 2146
2153 [_signinInteractionController 2147 [_signinInteractionController
2154 addAccountWithCompletion:^(BOOL success) { 2148 addAccountWithCompletion:^(BOOL success) {
2155 _signinInteractionController.reset(); 2149 _signinInteractionController = nil;
2156 } 2150 }
2157 viewController:self.mainViewController]; 2151 viewController:self.mainViewController];
2158 } 2152 }
2159 2153
2160 - (void)showHistory { 2154 - (void)showHistory {
2161 _historyPanelViewController.reset([[HistoryPanelViewController 2155 _historyPanelViewController = [HistoryPanelViewController
2162 controllerToPresentForBrowserState:_mainBrowserState 2156 controllerToPresentForBrowserState:_mainBrowserState
2163 loader:self.currentBVC] retain]); 2157 loader:self.currentBVC];
2164 [self.currentBVC presentViewController:_historyPanelViewController 2158 [self.currentBVC presentViewController:_historyPanelViewController
2165 animated:YES 2159 animated:YES
2166 completion:nil]; 2160 completion:nil];
2167 } 2161 }
2168 2162
2169 - (void)dismissSigninInteractionController { 2163 - (void)dismissSigninInteractionController {
2170 // The sign-in interaction controller is destroyed as a result of calling 2164 // The sign-in interaction controller is destroyed as a result of calling
2171 // |cancelAndDismiss|. Destroying it here may lead to a missing call of the 2165 // |cancelAndDismiss|. Destroying it here may lead to a missing call of the
2172 // |ShowSigninCommandCompletionCallback| passed when starting a show sign-in 2166 // |ShowSigninCommandCompletionCallback| passed when starting a show sign-in
2173 // operation. 2167 // operation.
2174 [_signinInteractionController cancelAndDismiss]; 2168 [_signinInteractionController cancelAndDismiss];
2175 } 2169 }
2176 2170
2177 - (ShowSigninCommandCompletionCallback)successfulSigninCompletion: 2171 - (ShowSigninCommandCompletionCallback)successfulSigninCompletion:
2178 (ProceduralBlock)callback { 2172 (ProceduralBlock)callback {
2179 return [[^(BOOL successful) { 2173 return [^(BOOL successful) {
2180 ios::ChromeBrowserState* browserState = [self currentBrowserState]; 2174 ios::ChromeBrowserState* browserState = [self currentBrowserState];
2181 if (browserState->IsOffTheRecord()) { 2175 if (browserState->IsOffTheRecord()) {
2182 NOTREACHED() 2176 NOTREACHED()
2183 << "Ignore call to |handleSignInFinished| when in incognito."; 2177 << "Ignore call to |handleSignInFinished| when in incognito.";
2184 return; 2178 return;
2185 } 2179 }
2186 DCHECK_EQ(self.mainBVC, self.currentBVC); 2180 DCHECK_EQ(self.mainBVC, self.currentBVC);
2187 SigninManager* signinManager = 2181 SigninManager* signinManager =
2188 ios::SigninManagerFactory::GetForBrowserState(browserState); 2182 ios::SigninManagerFactory::GetForBrowserState(browserState);
2189 if (signinManager->IsAuthenticated()) 2183 if (signinManager->IsAuthenticated())
2190 callback(); 2184 callback();
2191 } copy] autorelease]; 2185 } copy];
2192 } 2186 }
2193 2187
2194 - (void)showNativeAppsSettings { 2188 - (void)showNativeAppsSettings {
2195 if (_settingsNavigationController) 2189 if (_settingsNavigationController)
2196 return; 2190 return;
2197 _settingsNavigationController.reset([SettingsNavigationController 2191 _settingsNavigationController =
2198 newNativeAppsController:_mainBrowserState 2192 [SettingsNavigationController newNativeAppsController:_mainBrowserState
2199 delegate:self]); 2193 delegate:self];
2200 [[self topPresentedViewController] 2194 [[self topPresentedViewController]
2201 presentViewController:_settingsNavigationController 2195 presentViewController:_settingsNavigationController
2202 animated:YES 2196 animated:YES
2203 completion:nil]; 2197 completion:nil];
2204 } 2198 }
2205 2199
2206 - (void)closeSettingsAnimated:(BOOL)animated 2200 - (void)closeSettingsAnimated:(BOOL)animated
2207 completion:(ProceduralBlock)completion { 2201 completion:(ProceduralBlock)completion {
2208 DCHECK(_settingsNavigationController); 2202 DCHECK(_settingsNavigationController);
2209 [_settingsNavigationController settingsWillBeDismissed]; 2203 [_settingsNavigationController settingsWillBeDismissed];
2210 UIViewController* presentingViewController = 2204 UIViewController* presentingViewController =
2211 [_settingsNavigationController presentingViewController]; 2205 [_settingsNavigationController presentingViewController];
2212 DCHECK(presentingViewController); 2206 DCHECK(presentingViewController);
2213 [presentingViewController dismissViewControllerAnimated:animated 2207 [presentingViewController dismissViewControllerAnimated:animated
2214 completion:^{ 2208 completion:^{
2215 if (completion) 2209 if (completion)
2216 completion(); 2210 completion();
2217 }]; 2211 }];
2218 _settingsNavigationController.reset(); 2212 _settingsNavigationController = nil;
2219 } 2213 }
2220 2214
2221 #pragma mark - TabModelObserver 2215 #pragma mark - TabModelObserver
2222 2216
2223 // Called when the number of tabs changes. Triggers the switcher view when 2217 // Called when the number of tabs changes. Triggers the switcher view when
2224 // the last tab is closed on a device that uses the switcher. 2218 // the last tab is closed on a device that uses the switcher.
2225 - (void)tabModelDidChangeTabCount:(TabModel*)notifiedTabModel { 2219 - (void)tabModelDidChangeTabCount:(TabModel*)notifiedTabModel {
2226 TabModel* currentTabModel = [self currentTabModel]; 2220 TabModel* currentTabModel = [self currentTabModel];
2227 // Do nothing on initialization. 2221 // Do nothing on initialization.
2228 if (!currentTabModel) 2222 if (!currentTabModel)
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
2334 [self.currentBVC focusOmnibox]; 2328 [self.currentBVC focusOmnibox];
2335 }); 2329 });
2336 } 2330 }
2337 } 2331 }
2338 2332
2339 if (_restoreHelper) { 2333 if (_restoreHelper) {
2340 // Now that all the operations on the tabs have been done, display the 2334 // Now that all the operations on the tabs have been done, display the
2341 // restore infobar if needed. 2335 // restore infobar if needed.
2342 dispatch_async(dispatch_get_main_queue(), ^{ 2336 dispatch_async(dispatch_get_main_queue(), ^{
2343 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]]; 2337 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]];
2344 _restoreHelper.reset(); 2338 _restoreHelper = nil;
2345 }); 2339 });
2346 } 2340 }
2347 2341
2348 return tab; 2342 return tab;
2349 } 2343 }
2350 2344
2351 - (void)dismissModalDialogsWithCompletion:(ProceduralBlock)completion { 2345 - (void)dismissModalDialogsWithCompletion:(ProceduralBlock)completion {
2352 // Immediately hide modals from the provider (alert views, action sheets, 2346 // Immediately hide modals from the provider (alert views, action sheets,
2353 // popovers). They will be ultimately dismissed by their owners, but at least, 2347 // popovers). They will be ultimately dismissed by their owners, but at least,
2354 // they are not visible. 2348 // they are not visible.
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
2555 @end 2549 @end
2556 2550
2557 #pragma mark - TestingOnly 2551 #pragma mark - TestingOnly
2558 2552
2559 @implementation MainController (TestingOnly) 2553 @implementation MainController (TestingOnly)
2560 2554
2561 - (DeviceSharingManager*)deviceSharingManager { 2555 - (DeviceSharingManager*)deviceSharingManager {
2562 return [_browserViewWrangler deviceSharingManager]; 2556 return [_browserViewWrangler deviceSharingManager];
2563 } 2557 }
2564 2558
2565 - (UIViewController<TabSwitcher>*)tabSwitcherController { 2559 - (UIViewController<TabSwitcher>*)tabSwitcherController {
gambard 2017/06/12 12:42:48 Synthesize?
marq (ping after 24h) 2017/06/12 14:25:09 These properties are only declared in the TestingO
gambard 2017/06/12 14:44:54 Acknowledged.
2566 return _tabSwitcherController.get(); 2560 return _tabSwitcherController;
2567 } 2561 }
2568 2562
2569 - (void)setTabSwitcherController:(UIViewController<TabSwitcher>*)controller { 2563 - (void)setTabSwitcherController:(UIViewController<TabSwitcher>*)controller {
2570 _tabSwitcherController.reset([controller retain]); 2564 _tabSwitcherController = controller;
2571 } 2565 }
2572 2566
2573 - (SigninInteractionController*)signinInteractionController { 2567 - (SigninInteractionController*)signinInteractionController {
gambard 2017/06/12 12:42:48 Synthesize?
marq (ping after 24h) 2017/06/12 14:25:09 See above.
2574 return _signinInteractionController.get(); 2568 return _signinInteractionController;
2575 } 2569 }
2576 2570
2577 - (UIViewController*)topPresentedViewController { 2571 - (UIViewController*)topPresentedViewController {
2578 return top_view_controller::TopPresentedViewControllerFrom( 2572 return top_view_controller::TopPresentedViewControllerFrom(
2579 self.mainViewController); 2573 self.mainViewController);
2580 } 2574 }
2581 2575
2582 - (void)setTabSwitcherActive:(BOOL)active { 2576 - (void)setTabSwitcherActive:(BOOL)active {
gambard 2017/06/12 12:42:48 Synthesize
marq (ping after 24h) 2017/06/12 14:25:09 Not for this CL, and also see above.
2583 _tabSwitcherIsActive = active; 2577 _tabSwitcherIsActive = active;
2584 } 2578 }
2585 2579
2586 - (BOOL)dismissingTabSwitcher { 2580 - (BOOL)dismissingTabSwitcher {
gambard 2017/06/12 12:42:48 Synthesize
marq (ping after 24h) 2017/06/12 14:25:09 Not for this CL, and also see above.
2587 return _dismissingStackView; 2581 return _dismissingStackView;
2588 } 2582 }
2589 2583
2590 - (void)setStartupParametersWithURL:(const GURL&)launchURL { 2584 - (void)setStartupParametersWithURL:(const GURL&)launchURL {
2591 NSString* sourceApplication = @"Fake App"; 2585 NSString* sourceApplication = @"Fake App";
2592 _startupParameters.reset([[ChromeAppStartupParameters 2586 _startupParameters = [ChromeAppStartupParameters
2593 newChromeAppStartupParametersWithURL:net::NSURLWithGURL(launchURL) 2587 newChromeAppStartupParametersWithURL:net::NSURLWithGURL(launchURL)
2594 fromSourceApplication:sourceApplication] retain]); 2588 fromSourceApplication:sourceApplication];
2595 } 2589 }
2596 2590
2597 - (void)setUpAsForegrounded { 2591 - (void)setUpAsForegrounded {
2598 _isColdStart = NO; 2592 _isColdStart = NO;
2599 _browserInitializationStage = INITIALIZATION_STAGE_FOREGROUND; 2593 _browserInitializationStage = INITIALIZATION_STAGE_FOREGROUND;
2600 // Create a BrowserViewWrangler with a null browser state. This will trigger 2594 // Create a BrowserViewWrangler with a null browser state. This will trigger
2601 // assertions if the BrowserViewWrangler is asked to create any BVC or 2595 // assertions if the BrowserViewWrangler is asked to create any BVC or
2602 // tabModel objects, but it will accept assignments to them. 2596 // tabModel objects, but it will accept assignments to them.
2603 _browserViewWrangler.reset([[BrowserViewWrangler alloc] 2597 _browserViewWrangler =
2604 initWithBrowserState:nullptr 2598 [[BrowserViewWrangler alloc] initWithBrowserState:nullptr
2605 tabModelObserver:self]); 2599 tabModelObserver:self];
2606 // This is a test utility method that bypasses the ususal setup steps, so 2600 // This is a test utility method that bypasses the ususal setup steps, so
2607 // verify that the main coordinator hasn't been created yet, then start it 2601 // verify that the main coordinator hasn't been created yet, then start it
2608 // via lazy initialization. 2602 // via lazy initialization.
2609 DCHECK(!_mainCoordinator); 2603 DCHECK(!_mainCoordinator);
2610 [self.mainCoordinator start]; 2604 [self.mainCoordinator start];
2611 } 2605 }
2612 2606
2613 - (void)setUpForTestingWithCompletionHandler: 2607 - (void)setUpForTestingWithCompletionHandler:
2614 (ProceduralBlock)completionHandler { 2608 (ProceduralBlock)completionHandler {
2615 self.currentBVC = self.mainBVC; 2609 self.currentBVC = self.mainBVC;
2616 2610
2617 int removeAllMask = ~0; 2611 int removeAllMask = ~0;
2618 scoped_refptr<CallbackCounter> callbackCounter = 2612 scoped_refptr<CallbackCounter> callbackCounter =
2619 new CallbackCounter(base::BindBlock(^{ 2613 new CallbackCounter(base::BindBlockArc(^{
2620 [self setUpCurrentBVCForTesting]; 2614 [self setUpCurrentBVCForTesting];
2621 if (completionHandler) { 2615 if (completionHandler) {
2622 completionHandler(); 2616 completionHandler();
2623 } 2617 }
2624 })); 2618 }));
2625 id decrementCallbackCounterCount = ^{ 2619 id decrementCallbackCounterCount = ^{
2626 callbackCounter->DecrementCount(); 2620 callbackCounter->DecrementCount();
2627 }; 2621 };
2628 2622
2629 callbackCounter->IncrementCount(); 2623 callbackCounter->IncrementCount();
2630 [self removeBrowsingDataFromBrowserState:_mainBrowserState 2624 [self removeBrowsingDataFromBrowserState:_mainBrowserState
2631 mask:removeAllMask 2625 mask:removeAllMask
2632 timePeriod:browsing_data::TimePeriod::ALL_TIME 2626 timePeriod:browsing_data::TimePeriod::ALL_TIME
2633 completionHandler:decrementCallbackCounterCount]; 2627 completionHandler:decrementCallbackCounterCount];
2634 } 2628 }
2635 2629
2636 @end 2630 @end
OLDNEW
« no previous file with comments | « ios/chrome/app/main_controller.h ('k') | ios/chrome/app/memory_monitor.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698