| OLD | NEW |
| 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 Loading... |
| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 | 237 |
| 236 // Weak; owned by the ChromeBrowserProvider. | 238 // Weak; owned by the ChromeBrowserProvider. |
| 237 ios::ChromeBrowserStateManager* _browserStateManager; | 239 ios::ChromeBrowserStateManager* _browserStateManager; |
| 238 | 240 |
| 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 | |
| 246 // at any given time, usually |_mainCoordinator|. | |
| 247 // Main coordinator, backing object for the property of the same name, which | |
| 248 // lazily initializes on access. | |
| 249 base::scoped_nsobject<MainCoordinator> _mainCoordinator; | |
| 250 | |
| 251 // Wrangler to handle BVC and tab model creation, access, and related logic. | 247 // Wrangler to handle BVC and tab model creation, access, and related logic. |
| 252 // Implements faetures exposed from this object through the | 248 // Implements faetures exposed from this object through the |
| 253 // BrowserViewInformation protocol. | 249 // BrowserViewInformation protocol. |
| 254 base::scoped_nsobject<BrowserViewWrangler> _browserViewWrangler; | 250 BrowserViewWrangler* _browserViewWrangler; |
| 255 | 251 |
| 256 // Parameters received at startup time when the app is launched from another | 252 // Parameters received at startup time when the app is launched from another |
| 257 // app. | 253 // app. |
| 258 base::scoped_nsobject<AppStartupParameters> _startupParameters; | 254 AppStartupParameters* _startupParameters; |
| 259 | 255 |
| 260 // Navigation View controller for the settings. | 256 // Navigation View controller for the settings. |
| 261 base::scoped_nsobject<SettingsNavigationController> | 257 SettingsNavigationController* _settingsNavigationController; |
| 262 _settingsNavigationController; | |
| 263 | 258 |
| 264 // View controller for switching tabs. | 259 // View controller for switching tabs. |
| 265 base::scoped_nsobject<UIViewController<TabSwitcher>> _tabSwitcherController; | 260 UIViewController<TabSwitcher>* _tabSwitcherController; |
| 266 | 261 |
| 267 // Controller to display the re-authentication flow. | 262 // Controller to display the re-authentication flow. |
| 268 base::scoped_nsobject<SigninInteractionController> | 263 SigninInteractionController* _signinInteractionController; |
| 269 _signinInteractionController; | |
| 270 | 264 |
| 271 // YES while animating the dismissal of stack view. | 265 // YES while animating the dismissal of stack view. |
| 272 BOOL _dismissingStackView; | 266 BOOL _dismissingStackView; |
| 273 | 267 |
| 274 // If not NONE, the current BVC should be switched to this BVC on completion | 268 // If not NONE, the current BVC should be switched to this BVC on completion |
| 275 // of stack view dismissal. | 269 // of stack view dismissal. |
| 276 StackViewDismissalMode _modeToDisplayOnStackViewDismissal; | 270 StackViewDismissalMode _modeToDisplayOnStackViewDismissal; |
| 277 | 271 |
| 278 // If YES, the tab switcher is currently active. | 272 // If YES, the tab switcher is currently active. |
| 279 BOOL _tabSwitcherIsActive; | 273 BOOL _tabSwitcherIsActive; |
| 280 | 274 |
| 281 // True if the current session began from a cold start. False if the app has | 275 // True if the current session began from a cold start. False if the app has |
| 282 // entered the background at least once since start up. | 276 // entered the background at least once since start up. |
| 283 BOOL _isColdStart; | 277 BOOL _isColdStart; |
| 284 | 278 |
| 285 // Keeps track of the restore state during startup. | 279 // Keeps track of the restore state during startup. |
| 286 base::scoped_nsobject<CrashRestoreHelper> _restoreHelper; | 280 CrashRestoreHelper* _restoreHelper; |
| 287 | 281 |
| 288 // An object to record metrics related to the user's first action. | 282 // An object to record metrics related to the user's first action. |
| 289 std::unique_ptr<FirstUserActionRecorder> _firstUserActionRecorder; | 283 std::unique_ptr<FirstUserActionRecorder> _firstUserActionRecorder; |
| 290 | 284 |
| 291 // RequestTrackerFactory to customize the behavior of the network stack. | 285 // RequestTrackerFactory to customize the behavior of the network stack. |
| 292 std::unique_ptr<web::RequestTrackerFactoryImpl> _requestTrackerFactory; | 286 std::unique_ptr<web::RequestTrackerFactoryImpl> _requestTrackerFactory; |
| 293 | 287 |
| 294 // Configuration for the HTTP protocol handler. | 288 // Configuration for the HTTP protocol handler. |
| 295 std::unique_ptr<web::WebHTTPProtocolHandlerDelegate> | 289 std::unique_ptr<web::WebHTTPProtocolHandlerDelegate> |
| 296 _httpProtocolHandlerDelegate; | 290 _httpProtocolHandlerDelegate; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 311 BOOL _isProcessingTabSwitcherCommand; | 305 BOOL _isProcessingTabSwitcherCommand; |
| 312 BOOL _isProcessingVoiceSearchCommand; | 306 BOOL _isProcessingVoiceSearchCommand; |
| 313 | 307 |
| 314 // Bridge to listen to pref changes. | 308 // Bridge to listen to pref changes. |
| 315 std::unique_ptr<PrefObserverBridge> _localStatePrefObserverBridge; | 309 std::unique_ptr<PrefObserverBridge> _localStatePrefObserverBridge; |
| 316 | 310 |
| 317 // Registrar for pref changes notifications to the local state. | 311 // Registrar for pref changes notifications to the local state. |
| 318 PrefChangeRegistrar _localStatePrefChangeRegistrar; | 312 PrefChangeRegistrar _localStatePrefChangeRegistrar; |
| 319 | 313 |
| 320 // Clears browsing data from ChromeBrowserStates. | 314 // Clears browsing data from ChromeBrowserStates. |
| 321 base::scoped_nsobject<BrowsingDataRemovalController> | 315 BrowsingDataRemovalController* _browsingDataRemovalController; |
| 322 _browsingDataRemovalController; | |
| 323 | 316 |
| 324 // The class in charge of showing/hiding the memory debugger when the | 317 // The class in charge of showing/hiding the memory debugger when the |
| 325 // appropriate pref changes. | 318 // appropriate pref changes. |
| 326 base::scoped_nsobject<MemoryDebuggerManager> _memoryDebuggerManager; | 319 MemoryDebuggerManager* _memoryDebuggerManager; |
| 327 | |
| 328 base::mac::ObjCPropertyReleaser _propertyReleaser_MainController; | |
| 329 | 320 |
| 330 // Responsible for indexing chrome links (such as bookmarks, most likely...) | 321 // Responsible for indexing chrome links (such as bookmarks, most likely...) |
| 331 // in system Spotlight index. | 322 // in system Spotlight index. |
| 332 base::scoped_nsobject<SpotlightManager> _spotlightManager; | 323 SpotlightManager* _spotlightManager; |
| 333 | 324 |
| 334 // Cached launchOptions from -didFinishLaunchingWithOptions. | 325 // Cached launchOptions from -didFinishLaunchingWithOptions. |
| 335 base::scoped_nsobject<NSDictionary> _launchOptions; | 326 NSDictionary* _launchOptions; |
| 336 | 327 |
| 337 // View controller for displaying the history panel. | 328 // View controller for displaying the history panel. |
| 338 base::scoped_nsobject<UIViewController> _historyPanelViewController; | 329 UIViewController* _historyPanelViewController; |
| 339 | 330 |
| 340 // Variable backing metricsMediator property. | 331 // Variable backing metricsMediator property. |
| 341 base::WeakNSObject<MetricsMediator> _metricsMediator; | 332 __weak MetricsMediator* _metricsMediator; |
| 342 | 333 |
| 343 // Hander for the startup tasks, deferred or not. | 334 // Hander for the startup tasks, deferred or not. |
| 344 base::scoped_nsobject<StartupTasks> _startupTasks; | 335 StartupTasks* _startupTasks; |
| 345 } | 336 } |
| 346 | 337 |
| 347 // Pointer to the main view controller, always owned by the main window. | 338 // Pointer to the main view controller, always owned by the main window. |
| 348 @property(nonatomic, readonly) MainViewController* mainViewController; | 339 @property(weak, nonatomic, readonly) MainViewController* mainViewController; |
| 349 | 340 |
| 350 // The main coordinator, lazily created the first time it is accessed. Manages | 341 // The main coordinator, lazily created the first time it is accessed. Manages |
| 351 // the MainViewController. This property should not be accessed before the | 342 // the MainViewController. This property should not be accessed before the |
| 352 // browser has started up to the FOREGROUND stage. | 343 // browser has started up to the FOREGROUND stage. |
| 353 @property(nonatomic, readonly) MainCoordinator* mainCoordinator; | 344 @property(nonatomic, readonly) MainCoordinator* mainCoordinator; |
| 354 | 345 |
| 355 // A property to track whether the QR Scanner should be started upon tab | 346 // A property to track whether the QR Scanner should be started upon tab |
| 356 // switcher dismissal. It can only be YES if the QR Scanner experiment is | 347 // switcher dismissal. It can only be YES if the QR Scanner experiment is |
| 357 // enabled. | 348 // enabled. |
| 358 @property(nonatomic, readwrite) BOOL startQRScannerAfterTabSwitcherDismissal; | 349 @property(nonatomic, readwrite) BOOL startQRScannerAfterTabSwitcherDismissal; |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 // Initializes the application to INITIALIZATION_STAGE_BACKGROUND, which is | 512 // Initializes the application to INITIALIZATION_STAGE_BACKGROUND, which is |
| 522 // needed by background handlers. | 513 // needed by background handlers. |
| 523 - (void)startUpBrowserBackgroundInitialization; | 514 - (void)startUpBrowserBackgroundInitialization; |
| 524 // Initializes the application to INITIALIZATION_STAGE_FOREGROUND, which is | 515 // Initializes the application to INITIALIZATION_STAGE_FOREGROUND, which is |
| 525 // needed when application runs in foreground. | 516 // needed when application runs in foreground. |
| 526 - (void)startUpBrowserForegroundInitialization; | 517 - (void)startUpBrowserForegroundInitialization; |
| 527 @end | 518 @end |
| 528 | 519 |
| 529 @implementation MainController | 520 @implementation MainController |
| 530 | 521 |
| 522 @synthesize mainCoordinator = _mainCoordinator; |
| 531 @synthesize appState = _appState; | 523 @synthesize appState = _appState; |
| 532 @synthesize appLaunchTime = _appLaunchTime; | 524 @synthesize appLaunchTime = _appLaunchTime; |
| 533 @synthesize browserInitializationStage = _browserInitializationStage; | 525 @synthesize browserInitializationStage = _browserInitializationStage; |
| 534 @synthesize window = _window; | 526 @synthesize window = _window; |
| 535 @synthesize isPresentingFirstRunUI = _isPresentingFirstRunUI; | 527 @synthesize isPresentingFirstRunUI = _isPresentingFirstRunUI; |
| 536 @synthesize isColdStart = _isColdStart; | 528 @synthesize isColdStart = _isColdStart; |
| 537 @synthesize startVoiceSearchAfterTabSwitcherDismissal = | 529 @synthesize startVoiceSearchAfterTabSwitcherDismissal = |
| 538 _startVoiceSearchAfterTabSwitcherDismissal; | 530 _startVoiceSearchAfterTabSwitcherDismissal; |
| 539 @synthesize startQRScannerAfterTabSwitcherDismissal = | 531 @synthesize startQRScannerAfterTabSwitcherDismissal = |
| 540 _startQRScannerAfterTabSwitcherDismissal; | 532 _startQRScannerAfterTabSwitcherDismissal; |
| 541 @synthesize startFocusOmniboxAfterTabSwitcherDismissal = | 533 @synthesize startFocusOmniboxAfterTabSwitcherDismissal = |
| 542 _startFocusOmniboxAfterTabSwitcherDismissal; | 534 _startFocusOmniboxAfterTabSwitcherDismissal; |
| 535 @synthesize launchOptions = _launchOptions; |
| 536 @synthesize startupParameters = _startupParameters; |
| 537 @synthesize metricsMediator = _metricsMediator; |
| 538 @synthesize settingsNavigationController = _settingsNavigationController; |
| 543 | 539 |
| 544 #pragma mark - Application lifecycle | 540 #pragma mark - Application lifecycle |
| 545 | 541 |
| 546 - (instancetype)init { | 542 - (instancetype)init { |
| 547 if ((self = [super init])) { | 543 if ((self = [super init])) { |
| 548 _propertyReleaser_MainController.Init(self, [MainController class]); | 544 _startupTasks = [[StartupTasks alloc] init]; |
| 549 _startupTasks.reset([[StartupTasks alloc] init]); | |
| 550 } | 545 } |
| 551 return self; | 546 return self; |
| 552 } | 547 } |
| 553 | 548 |
| 554 - (void)dealloc { | 549 - (void)dealloc { |
| 555 [[NSNotificationCenter defaultCenter] removeObserver:self]; | 550 [[NSNotificationCenter defaultCenter] removeObserver:self]; |
| 556 net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); | 551 net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); |
| 557 net::RequestTracker::SetRequestTrackerFactory(nullptr); | 552 net::RequestTracker::SetRequestTrackerFactory(nullptr); |
| 558 [NSObject cancelPreviousPerformRequestsWithTarget:self]; | 553 [NSObject cancelPreviousPerformRequestsWithTarget:self]; |
| 559 [super dealloc]; | |
| 560 } | 554 } |
| 561 | 555 |
| 562 // This function starts up to only what is needed at each stage of the | 556 // This function starts up to only what is needed at each stage of the |
| 563 // initialization. It is possible to continue initialization later. | 557 // initialization. It is possible to continue initialization later. |
| 564 - (void)startUpBrowserToStage:(BrowserInitializationStageType)stage { | 558 - (void)startUpBrowserToStage:(BrowserInitializationStageType)stage { |
| 565 if (_browserInitializationStage < INITIALIZATION_STAGE_BASIC && | 559 if (_browserInitializationStage < INITIALIZATION_STAGE_BASIC && |
| 566 stage >= INITIALIZATION_STAGE_BASIC) { | 560 stage >= INITIALIZATION_STAGE_BASIC) { |
| 567 [self startUpBrowserBasicInitialization]; | 561 [self startUpBrowserBasicInitialization]; |
| 568 _browserInitializationStage = INITIALIZATION_STAGE_BASIC; | 562 _browserInitializationStage = INITIALIZATION_STAGE_BASIC; |
| 569 } | 563 } |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 _browserStateManager = | 665 _browserStateManager = |
| 672 GetApplicationContext()->GetChromeBrowserStateManager(); | 666 GetApplicationContext()->GetChromeBrowserStateManager(); |
| 673 ios::ChromeBrowserState* chromeBrowserState = | 667 ios::ChromeBrowserState* chromeBrowserState = |
| 674 _browserStateManager->GetLastUsedBrowserState(); | 668 _browserStateManager->GetLastUsedBrowserState(); |
| 675 | 669 |
| 676 // The CrashRestoreHelper must clean up the old browser state information | 670 // The CrashRestoreHelper must clean up the old browser state information |
| 677 // before the tabModels can be created. |_restoreHelper| must be kept alive | 671 // before the tabModels can be created. |_restoreHelper| must be kept alive |
| 678 // until the BVC receives the browser state and tab model. | 672 // until the BVC receives the browser state and tab model. |
| 679 BOOL postCrashLaunch = [self mustShowRestoreInfobar]; | 673 BOOL postCrashLaunch = [self mustShowRestoreInfobar]; |
| 680 if (postCrashLaunch) { | 674 if (postCrashLaunch) { |
| 681 _restoreHelper.reset( | 675 _restoreHelper = |
| 682 [[CrashRestoreHelper alloc] initWithBrowserState:chromeBrowserState]); | 676 [[CrashRestoreHelper alloc] initWithBrowserState:chromeBrowserState]; |
| 683 [_restoreHelper moveAsideSessionInformation]; | 677 [_restoreHelper moveAsideSessionInformation]; |
| 684 } | 678 } |
| 685 | 679 |
| 686 // Initialize and set the main browser state. | 680 // Initialize and set the main browser state. |
| 687 [self initializeBrowserState:chromeBrowserState]; | 681 [self initializeBrowserState:chromeBrowserState]; |
| 688 _mainBrowserState = chromeBrowserState; | 682 _mainBrowserState = chromeBrowserState; |
| 689 [_browserViewWrangler shutdown]; | 683 [_browserViewWrangler shutdown]; |
| 690 _browserViewWrangler.reset([[BrowserViewWrangler alloc] | 684 _browserViewWrangler = |
| 691 initWithBrowserState:_mainBrowserState | 685 [[BrowserViewWrangler alloc] initWithBrowserState:_mainBrowserState |
| 692 tabModelObserver:self]); | 686 tabModelObserver:self]; |
| 693 // Ensure the main tab model is created. | 687 // Ensure the main tab model is created. |
| 694 ignore_result([_browserViewWrangler mainTabModel]); | 688 ignore_result([_browserViewWrangler mainTabModel]); |
| 695 | 689 |
| 696 _spotlightManager.reset([[SpotlightManager | 690 _spotlightManager = |
| 697 spotlightManagerWithBrowserState:_mainBrowserState] retain]); | 691 [SpotlightManager spotlightManagerWithBrowserState:_mainBrowserState]; |
| 698 | 692 |
| 699 ShareExtensionService* service = | 693 ShareExtensionService* service = |
| 700 ShareExtensionServiceFactory::GetForBrowserState(_mainBrowserState); | 694 ShareExtensionServiceFactory::GetForBrowserState(_mainBrowserState); |
| 701 service->Initialize(); | 695 service->Initialize(); |
| 702 | 696 |
| 703 // Before bringing up the UI, make sure the launch mode is correct, and | 697 // Before bringing up the UI, make sure the launch mode is correct, and |
| 704 // check for previous crashes. | 698 // check for previous crashes. |
| 705 BOOL startInIncognito = [standardDefaults boolForKey:kIncognitoCurrentKey]; | 699 BOOL startInIncognito = [standardDefaults boolForKey:kIncognitoCurrentKey]; |
| 706 BOOL switchFromIncognito = startInIncognito && ![self canLaunchInIncognito]; | 700 BOOL switchFromIncognito = startInIncognito && ![self canLaunchInIncognito]; |
| 707 | 701 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 722 [MetricsMediator logLaunchMetricsWithStartupInformation:self | 716 [MetricsMediator logLaunchMetricsWithStartupInformation:self |
| 723 browserViewInformation:_browserViewWrangler]; | 717 browserViewInformation:_browserViewWrangler]; |
| 724 | 718 |
| 725 [self scheduleLowPriorityStartupTasks]; | 719 [self scheduleLowPriorityStartupTasks]; |
| 726 | 720 |
| 727 [_browserViewWrangler updateDeviceSharingManager]; | 721 [_browserViewWrangler updateDeviceSharingManager]; |
| 728 | 722 |
| 729 [self openTabFromLaunchOptions:_launchOptions | 723 [self openTabFromLaunchOptions:_launchOptions |
| 730 startupInformation:self | 724 startupInformation:self |
| 731 appState:self.appState]; | 725 appState:self.appState]; |
| 732 _launchOptions.reset(); | 726 _launchOptions = nil; |
| 733 | 727 |
| 734 mojo::edk::Init(); | 728 mojo::edk::Init(); |
| 735 | 729 |
| 736 if (!_startupParameters) { | 730 if (!_startupParameters) { |
| 737 // The startup parameters may create new tabs or navigations. If the restore | 731 // The startup parameters may create new tabs or navigations. If the restore |
| 738 // infobar is displayed now, it may be dismissed immediately and the user | 732 // infobar is displayed now, it may be dismissed immediately and the user |
| 739 // will never be able to restore the session. | 733 // will never be able to restore the session. |
| 740 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]]; | 734 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]]; |
| 741 _restoreHelper.reset(); | 735 _restoreHelper = nil; |
| 742 } | 736 } |
| 743 | 737 |
| 744 [self scheduleTasksRequiringBVCWithBrowserState]; | 738 [self scheduleTasksRequiringBVCWithBrowserState]; |
| 745 | 739 |
| 746 // Now that everything is properly set up, run the tests. | 740 // Now that everything is properly set up, run the tests. |
| 747 tests_hook::RunTestsIfPresent(); | 741 tests_hook::RunTestsIfPresent(); |
| 748 } | 742 } |
| 749 | 743 |
| 750 - (void)initializeBrowserState:(ios::ChromeBrowserState*)browserState { | 744 - (void)initializeBrowserState:(ios::ChromeBrowserState*)browserState { |
| 751 DCHECK(!browserState->IsOffTheRecord()); | 745 DCHECK(!browserState->IsOffTheRecord()); |
| 752 search_engines::UpdateSearchEnginesIfNeeded( | 746 search_engines::UpdateSearchEnginesIfNeeded( |
| 753 browserState->GetPrefs(), | 747 browserState->GetPrefs(), |
| 754 ios::TemplateURLServiceFactory::GetForBrowserState(browserState)); | 748 ios::TemplateURLServiceFactory::GetForBrowserState(browserState)); |
| 755 | 749 |
| 756 if ([TouchToSearchPermissionsMediator isTouchToSearchAvailableOnDevice]) { | 750 if ([TouchToSearchPermissionsMediator isTouchToSearchAvailableOnDevice]) { |
| 757 base::scoped_nsobject<TouchToSearchPermissionsMediator> | 751 TouchToSearchPermissionsMediator* touchToSearchPermissions = |
| 758 touchToSearchPermissions([[TouchToSearchPermissionsMediator alloc] | 752 [[TouchToSearchPermissionsMediator alloc] |
| 759 initWithBrowserState:browserState]); | 753 initWithBrowserState:browserState]; |
| 760 if (experimental_flags::IsForceResetContextualSearchEnabled()) { | 754 if (experimental_flags::IsForceResetContextualSearchEnabled()) { |
| 761 [touchToSearchPermissions setPreferenceState:TouchToSearch::UNDECIDED]; | 755 [touchToSearchPermissions setPreferenceState:TouchToSearch::UNDECIDED]; |
| 762 } | 756 } |
| 763 ContextualSearch::RecordPreferenceState( | 757 ContextualSearch::RecordPreferenceState( |
| 764 [touchToSearchPermissions preferenceState]); | 758 [touchToSearchPermissions preferenceState]); |
| 765 } | 759 } |
| 766 } | 760 } |
| 767 | 761 |
| 768 - (void)handleFirstRunUIWillFinish { | 762 - (void)handleFirstRunUIWillFinish { |
| 769 DCHECK(_isPresentingFirstRunUI); | 763 DCHECK(_isPresentingFirstRunUI); |
| 770 _isPresentingFirstRunUI = NO; | 764 _isPresentingFirstRunUI = NO; |
| 771 [[NSNotificationCenter defaultCenter] | 765 [[NSNotificationCenter defaultCenter] |
| 772 removeObserver:self | 766 removeObserver:self |
| 773 name:kChromeFirstRunUIWillFinishNotification | 767 name:kChromeFirstRunUIWillFinishNotification |
| 774 object:nil]; | 768 object:nil]; |
| 775 | 769 |
| 776 [self markEulaAsAccepted]; | 770 [self markEulaAsAccepted]; |
| 777 | 771 |
| 778 if (_startupParameters.get()) { | 772 if (_startupParameters) { |
| 779 [self dismissModalsAndOpenSelectedTabInMode:ApplicationMode::NORMAL | 773 [self dismissModalsAndOpenSelectedTabInMode:ApplicationMode::NORMAL |
| 780 withURL:[_startupParameters externalURL] | 774 withURL:[_startupParameters externalURL] |
| 781 transition:ui::PAGE_TRANSITION_LINK | 775 transition:ui::PAGE_TRANSITION_LINK |
| 782 completion:nil]; | 776 completion:nil]; |
| 783 _startupParameters.reset(); | 777 _startupParameters = nil; |
| 784 } | 778 } |
| 785 } | 779 } |
| 786 | 780 |
| 787 - (void)handleFirstRunUIDidFinish { | 781 - (void)handleFirstRunUIDidFinish { |
| 788 [[NSNotificationCenter defaultCenter] | 782 [[NSNotificationCenter defaultCenter] |
| 789 removeObserver:self | 783 removeObserver:self |
| 790 name:kChromeFirstRunUIDidFinishNotification | 784 name:kChromeFirstRunUIDidFinishNotification |
| 791 object:nil]; | 785 object:nil]; |
| 792 | 786 |
| 793 // As soon as First Run has finished, give OmniboxGeolocationController an | 787 // As soon as First Run has finished, give OmniboxGeolocationController an |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 } | 824 } |
| 831 | 825 |
| 832 // Always set the new otr tab model on iPad with tab switcher enabled. | 826 // Always set the new otr tab model on iPad with tab switcher enabled. |
| 833 // Notify the _tabSwitcherController with the new otrBVC. | 827 // Notify the _tabSwitcherController with the new otrBVC. |
| 834 if (IsIPadIdiom() || _tabSwitcherIsActive) | 828 if (IsIPadIdiom() || _tabSwitcherIsActive) |
| 835 [_tabSwitcherController setOtrTabModel:self.otrTabModel]; | 829 [_tabSwitcherController setOtrTabModel:self.otrTabModel]; |
| 836 } | 830 } |
| 837 | 831 |
| 838 - (BrowsingDataRemovalController*)browsingDataRemovalController { | 832 - (BrowsingDataRemovalController*)browsingDataRemovalController { |
| 839 if (!_browsingDataRemovalController) { | 833 if (!_browsingDataRemovalController) { |
| 840 _browsingDataRemovalController.reset( | 834 _browsingDataRemovalController = |
| 841 [[BrowsingDataRemovalController alloc] initWithDelegate:self]); | 835 [[BrowsingDataRemovalController alloc] initWithDelegate:self]; |
| 842 } | 836 } |
| 843 return _browsingDataRemovalController; | 837 return _browsingDataRemovalController; |
| 844 } | 838 } |
| 845 | 839 |
| 846 - (void)setWebUsageEnabled:(BOOL)enabled { | 840 - (void)setWebUsageEnabled:(BOOL)enabled { |
| 847 DCHECK([NSThread isMainThread]); | 841 DCHECK([NSThread isMainThread]); |
| 848 if (enabled) { | 842 if (enabled) { |
| 849 [self activateBVCAndMakeCurrentBVCPrimary]; | 843 [self activateBVCAndMakeCurrentBVCPrimary]; |
| 850 } else { | 844 } else { |
| 851 [self.mainBVC setActive:NO]; | 845 [self.mainBVC setActive:NO]; |
| 852 [self.otrBVC setActive:NO]; | 846 [self.otrBVC setActive:NO]; |
| 853 } | 847 } |
| 854 } | 848 } |
| 855 | 849 |
| 856 - (void)activateBVCAndMakeCurrentBVCPrimary { | 850 - (void)activateBVCAndMakeCurrentBVCPrimary { |
| 857 // If there are pending removal operations, the activation will be deferred | 851 // If there are pending removal operations, the activation will be deferred |
| 858 // until the callback for |removeBrowsingDataFromBrowserState:| is received. | 852 // until the callback for |removeBrowsingDataFromBrowserState:| is received. |
| 859 if (![self.browsingDataRemovalController | 853 if (![self.browsingDataRemovalController |
| 860 hasPendingRemovalOperations:self.currentBrowserState]) { | 854 hasPendingRemovalOperations:self.currentBrowserState]) { |
| 861 [self.mainBVC setActive:YES]; | 855 [self.mainBVC setActive:YES]; |
| 862 [self.otrBVC setActive:YES]; | 856 [self.otrBVC setActive:YES]; |
| 863 | 857 |
| 864 [self.currentBVC setPrimary:YES]; | 858 [self.currentBVC setPrimary:YES]; |
| 865 } | 859 } |
| 866 } | 860 } |
| 867 | 861 |
| 868 #pragma mark - BrowserLauncher implementation. | |
| 869 | |
| 870 - (NSDictionary*)launchOptions { | |
| 871 return _launchOptions; | |
| 872 } | |
| 873 | |
| 874 - (void)setLaunchOptions:(NSDictionary*)launchOptions { | |
| 875 _launchOptions.reset([launchOptions retain]); | |
| 876 } | |
| 877 | |
| 878 #pragma mark - Property implementation. | 862 #pragma mark - Property implementation. |
| 879 | 863 |
| 880 - (id<BrowserViewInformation>)browserViewInformation { | 864 - (id<BrowserViewInformation>)browserViewInformation { |
| 881 return _browserViewWrangler; | 865 return _browserViewWrangler; |
| 882 } | 866 } |
| 883 | 867 |
| 884 - (AppStartupParameters*)startupParameters { | |
| 885 return _startupParameters; | |
| 886 } | |
| 887 | |
| 888 - (void)setStartupParameters:(AppStartupParameters*)startupParameters { | |
| 889 _startupParameters.reset([startupParameters retain]); | |
| 890 } | |
| 891 | |
| 892 - (MainViewController*)mainViewController { | 868 - (MainViewController*)mainViewController { |
| 893 return self.mainCoordinator.mainViewController; | 869 return self.mainCoordinator.mainViewController; |
| 894 } | 870 } |
| 895 | 871 |
| 896 - (MainCoordinator*)mainCoordinator { | 872 - (MainCoordinator*)mainCoordinator { |
| 897 if (_browserInitializationStage == INITIALIZATION_STAGE_BASIC) { | 873 if (_browserInitializationStage == INITIALIZATION_STAGE_BASIC) { |
| 898 NOTREACHED() << "mainCoordinator accessed too early in initialization."; | 874 NOTREACHED() << "mainCoordinator accessed too early in initialization."; |
| 899 return nil; | 875 return nil; |
| 900 } | 876 } |
| 901 if (!_mainCoordinator) { | 877 if (!_mainCoordinator) { |
| 902 // Lazily create the main coordinator. | 878 // Lazily create the main coordinator. |
| 903 _mainCoordinator.reset( | 879 _mainCoordinator = [[MainCoordinator alloc] initWithWindow:self.window]; |
| 904 [[MainCoordinator alloc] initWithWindow:self.window]); | |
| 905 } | 880 } |
| 906 return _mainCoordinator; | 881 return _mainCoordinator; |
| 907 } | 882 } |
| 908 | 883 |
| 909 - (BOOL)isFirstLaunchAfterUpgrade { | 884 - (BOOL)isFirstLaunchAfterUpgrade { |
| 910 return [[PreviousSessionInfo sharedInstance] isFirstSessionAfterUpgrade]; | 885 return [[PreviousSessionInfo sharedInstance] isFirstSessionAfterUpgrade]; |
| 911 } | 886 } |
| 912 | 887 |
| 913 - (MetricsMediator*)metricsMediator { | |
| 914 return _metricsMediator; | |
| 915 } | |
| 916 | |
| 917 - (void)setMetricsMediator:(MetricsMediator*)metricsMediator { | |
| 918 _metricsMediator.reset(metricsMediator); | |
| 919 } | |
| 920 | |
| 921 - (SettingsNavigationController*)settingsNavigationController { | |
| 922 return _settingsNavigationController; | |
| 923 } | |
| 924 | |
| 925 - (void)setSettingsNavigationController: | |
| 926 (SettingsNavigationController*)settingsNavigationController { | |
| 927 _settingsNavigationController.reset([settingsNavigationController retain]); | |
| 928 } | |
| 929 | |
| 930 #pragma mark - StartupInformation implementation. | 888 #pragma mark - StartupInformation implementation. |
| 931 | 889 |
| 932 - (FirstUserActionRecorder*)firstUserActionRecorder { | 890 - (FirstUserActionRecorder*)firstUserActionRecorder { |
| 933 return _firstUserActionRecorder.get(); | 891 return _firstUserActionRecorder.get(); |
| 934 } | 892 } |
| 935 | 893 |
| 936 - (void)resetFirstUserActionRecorder { | 894 - (void)resetFirstUserActionRecorder { |
| 937 _firstUserActionRecorder.reset(); | 895 _firstUserActionRecorder.reset(); |
| 938 } | 896 } |
| 939 | 897 |
| 940 - (void)expireFirstUserActionRecorderAfterDelay:(NSTimeInterval)delay { | 898 - (void)expireFirstUserActionRecorderAfterDelay:(NSTimeInterval)delay { |
| 941 [self performSelector:@selector(expireFirstUserActionRecorder) | 899 [self performSelector:@selector(expireFirstUserActionRecorder) |
| 942 withObject:nil | 900 withObject:nil |
| 943 afterDelay:delay]; | 901 afterDelay:delay]; |
| 944 } | 902 } |
| 945 | 903 |
| 946 - (void)activateFirstUserActionRecorderWithBackgroundTime: | 904 - (void)activateFirstUserActionRecorderWithBackgroundTime: |
| 947 (NSTimeInterval)backgroundTime { | 905 (NSTimeInterval)backgroundTime { |
| 948 base::TimeDelta delta = base::TimeDelta::FromSeconds(backgroundTime); | 906 base::TimeDelta delta = base::TimeDelta::FromSeconds(backgroundTime); |
| 949 _firstUserActionRecorder.reset(new FirstUserActionRecorder(delta)); | 907 _firstUserActionRecorder.reset(new FirstUserActionRecorder(delta)); |
| 950 } | 908 } |
| 951 | 909 |
| 952 - (void)stopChromeMain { | 910 - (void)stopChromeMain { |
| 953 [_spotlightManager shutdown]; | 911 [_spotlightManager shutdown]; |
| 954 _spotlightManager.reset(); | 912 _spotlightManager = nil; |
| 955 | 913 |
| 956 [_browserViewWrangler shutdown]; | 914 [_browserViewWrangler shutdown]; |
| 957 _browserViewWrangler.reset(); | 915 _browserViewWrangler = nil; |
| 958 | 916 |
| 959 _chromeMain.reset(); | 917 _chromeMain.reset(); |
| 960 } | 918 } |
| 961 | 919 |
| 962 - (BOOL)isTabSwitcherActive { | 920 - (BOOL)isTabSwitcherActive { |
| 963 return _tabSwitcherIsActive; | 921 return _tabSwitcherIsActive; |
| 964 } | 922 } |
| 965 | 923 |
| 966 #pragma mark - BrowserViewInformation implementation. | 924 #pragma mark - BrowserViewInformation implementation. |
| 967 | 925 |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 if (![self mustShowRestoreInfobar]) { | 1105 if (![self mustShowRestoreInfobar]) { |
| 1148 [self scheduleSnapshotPurge]; | 1106 [self scheduleSnapshotPurge]; |
| 1149 } | 1107 } |
| 1150 } | 1108 } |
| 1151 | 1109 |
| 1152 - (void)scheduleMemoryDebuggingTools { | 1110 - (void)scheduleMemoryDebuggingTools { |
| 1153 if (experimental_flags::IsMemoryDebuggingEnabled()) { | 1111 if (experimental_flags::IsMemoryDebuggingEnabled()) { |
| 1154 [[DeferredInitializationRunner sharedInstance] | 1112 [[DeferredInitializationRunner sharedInstance] |
| 1155 enqueueBlockNamed:kMemoryDebuggingToolsStartup | 1113 enqueueBlockNamed:kMemoryDebuggingToolsStartup |
| 1156 block:^{ | 1114 block:^{ |
| 1157 _memoryDebuggerManager.reset( | 1115 _memoryDebuggerManager = [[MemoryDebuggerManager alloc] |
| 1158 [[MemoryDebuggerManager alloc] | 1116 initWithView:self.window |
| 1159 initWithView:self.window | 1117 prefs:GetApplicationContext() |
| 1160 prefs:GetApplicationContext() | 1118 ->GetLocalState()]; |
| 1161 ->GetLocalState()]); | |
| 1162 }]; | 1119 }]; |
| 1163 } | 1120 } |
| 1164 } | 1121 } |
| 1165 | 1122 |
| 1166 - (void)startFreeMemoryMonitoring { | 1123 - (void)startFreeMemoryMonitoring { |
| 1167 base::PostTaskWithTraits( | 1124 base::PostTaskWithTraits( |
| 1168 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, | 1125 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, |
| 1169 base::BindOnce(&ios_internal::AsynchronousFreeMemoryMonitor)); | 1126 base::BindOnce(&ios_internal::AsynchronousFreeMemoryMonitor)); |
| 1170 } | 1127 } |
| 1171 | 1128 |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1286 } | 1243 } |
| 1287 if (_tabSwitcherIsActive) | 1244 if (_tabSwitcherIsActive) |
| 1288 [self dismissTabSwitcherWithoutAnimationInModel:self.mainTabModel]; | 1245 [self dismissTabSwitcherWithoutAnimationInModel:self.mainTabModel]; |
| 1289 if (firstRun || [self shouldOpenNTPTabOnActivationOfTabModel:tabModel]) { | 1246 if (firstRun || [self shouldOpenNTPTabOnActivationOfTabModel:tabModel]) { |
| 1290 [self.currentBVC newTab:nil]; | 1247 [self.currentBVC newTab:nil]; |
| 1291 } | 1248 } |
| 1292 | 1249 |
| 1293 if (firstRun) { | 1250 if (firstRun) { |
| 1294 [self showFirstRunUI]; | 1251 [self showFirstRunUI]; |
| 1295 // Do not ever show the 'restore' infobar during first run. | 1252 // Do not ever show the 'restore' infobar during first run. |
| 1296 _restoreHelper.reset(); | 1253 _restoreHelper = nil; |
| 1297 } | 1254 } |
| 1298 } | 1255 } |
| 1299 | 1256 |
| 1300 - (void)showFirstRunUI { | 1257 - (void)showFirstRunUI { |
| 1301 // Register for notification when First Run is completed. | 1258 // Register for notification when First Run is completed. |
| 1302 // Some initializations are held back until First Run modal dialog | 1259 // Some initializations are held back until First Run modal dialog |
| 1303 // is dismissed. | 1260 // is dismissed. |
| 1304 [[NSNotificationCenter defaultCenter] | 1261 [[NSNotificationCenter defaultCenter] |
| 1305 addObserver:self | 1262 addObserver:self |
| 1306 selector:@selector(handleFirstRunUIWillFinish) | 1263 selector:@selector(handleFirstRunUIWillFinish) |
| 1307 name:kChromeFirstRunUIWillFinishNotification | 1264 name:kChromeFirstRunUIWillFinishNotification |
| 1308 object:nil]; | 1265 object:nil]; |
| 1309 [[NSNotificationCenter defaultCenter] | 1266 [[NSNotificationCenter defaultCenter] |
| 1310 addObserver:self | 1267 addObserver:self |
| 1311 selector:@selector(handleFirstRunUIDidFinish) | 1268 selector:@selector(handleFirstRunUIDidFinish) |
| 1312 name:kChromeFirstRunUIDidFinishNotification | 1269 name:kChromeFirstRunUIDidFinishNotification |
| 1313 object:nil]; | 1270 object:nil]; |
| 1314 | 1271 |
| 1315 base::scoped_nsobject<WelcomeToChromeViewController> welcomeToChrome( | 1272 WelcomeToChromeViewController* welcomeToChrome = |
| 1316 [[WelcomeToChromeViewController alloc] | 1273 [[WelcomeToChromeViewController alloc] |
| 1317 initWithBrowserState:_mainBrowserState | 1274 initWithBrowserState:_mainBrowserState |
| 1318 tabModel:self.mainTabModel]); | 1275 tabModel:self.mainTabModel]; |
| 1319 base::scoped_nsobject<UINavigationController> navController( | 1276 UINavigationController* navController = |
| 1320 [[OrientationLimitingNavigationController alloc] | 1277 [[OrientationLimitingNavigationController alloc] |
| 1321 initWithRootViewController:welcomeToChrome]); | 1278 initWithRootViewController:welcomeToChrome]; |
| 1322 [navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; | 1279 [navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; |
| 1323 CGRect appFrame = [[UIScreen mainScreen] bounds]; | 1280 CGRect appFrame = [[UIScreen mainScreen] bounds]; |
| 1324 [[navController view] setFrame:appFrame]; | 1281 [[navController view] setFrame:appFrame]; |
| 1325 _isPresentingFirstRunUI = YES; | 1282 _isPresentingFirstRunUI = YES; |
| 1326 [self.mainBVC presentViewController:navController animated:NO completion:nil]; | 1283 [self.mainBVC presentViewController:navController animated:NO completion:nil]; |
| 1327 } | 1284 } |
| 1328 | 1285 |
| 1329 - (void)crashIfRequested { | 1286 - (void)crashIfRequested { |
| 1330 if (experimental_flags::IsStartupCrashEnabled()) { | 1287 if (experimental_flags::IsStartupCrashEnabled()) { |
| 1331 // Flush out the value cached for | 1288 // Flush out the value cached for |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1377 | 1334 |
| 1378 break; | 1335 break; |
| 1379 } | 1336 } |
| 1380 } | 1337 } |
| 1381 } | 1338 } |
| 1382 | 1339 |
| 1383 - (void)showPromo:(UIViewController*)promo { | 1340 - (void)showPromo:(UIViewController*)promo { |
| 1384 // Make sure we have the BVC here with a valid profile. | 1341 // Make sure we have the BVC here with a valid profile. |
| 1385 DCHECK([self.currentBVC browserState]); | 1342 DCHECK([self.currentBVC browserState]); |
| 1386 | 1343 |
| 1387 base::scoped_nsobject<OrientationLimitingNavigationController> navController( | 1344 OrientationLimitingNavigationController* navController = |
| 1388 [[OrientationLimitingNavigationController alloc] | 1345 [[OrientationLimitingNavigationController alloc] |
| 1389 initWithRootViewController:promo]); | 1346 initWithRootViewController:promo]; |
| 1390 | 1347 |
| 1391 // Avoid presenting the promo if the current device orientation is not | 1348 // Avoid presenting the promo if the current device orientation is not |
| 1392 // supported. The promo will be presented at a later moment, when the device | 1349 // supported. The promo will be presented at a later moment, when the device |
| 1393 // orientation is supported. | 1350 // orientation is supported. |
| 1394 UIInterfaceOrientation orientation = | 1351 UIInterfaceOrientation orientation = |
| 1395 [UIApplication sharedApplication].statusBarOrientation; | 1352 [UIApplication sharedApplication].statusBarOrientation; |
| 1396 NSUInteger supportedOrientationsMask = | 1353 NSUInteger supportedOrientationsMask = |
| 1397 [navController supportedInterfaceOrientations]; | 1354 [navController supportedInterfaceOrientations]; |
| 1398 if (!((1 << orientation) & supportedOrientationsMask)) | 1355 if (!((1 << orientation) & supportedOrientationsMask)) |
| 1399 return; | 1356 return; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1418 break; | 1375 break; |
| 1419 case IDC_NEW_INCOGNITO_TAB: | 1376 case IDC_NEW_INCOGNITO_TAB: |
| 1420 [self createNewTabInBVC:self.otrBVC sender:sender]; | 1377 [self createNewTabInBVC:self.otrBVC sender:sender]; |
| 1421 break; | 1378 break; |
| 1422 case IDC_OPEN_URL: | 1379 case IDC_OPEN_URL: |
| 1423 [self openUrl:base::mac::ObjCCast<OpenUrlCommand>(sender)]; | 1380 [self openUrl:base::mac::ObjCCast<OpenUrlCommand>(sender)]; |
| 1424 break; | 1381 break; |
| 1425 case IDC_OPTIONS: | 1382 case IDC_OPTIONS: |
| 1426 [self showSettings]; | 1383 [self showSettings]; |
| 1427 break; | 1384 break; |
| 1428 case IDC_REPORT_AN_ISSUE: | 1385 case IDC_REPORT_AN_ISSUE: { |
| 1429 dispatch_async(dispatch_get_main_queue(), ^{ | 1386 dispatch_async(dispatch_get_main_queue(), ^{ |
| 1430 [self showReportAnIssue]; | 1387 [self showReportAnIssue]; |
| 1431 }); | 1388 }); |
| 1432 break; | 1389 } break; |
| 1433 case IDC_SHOW_SIGNIN_IOS: { | 1390 case IDC_SHOW_SIGNIN_IOS: { |
| 1434 ShowSigninCommand* command = | 1391 ShowSigninCommand* command = |
| 1435 base::mac::ObjCCastStrict<ShowSigninCommand>(sender); | 1392 base::mac::ObjCCastStrict<ShowSigninCommand>(sender); |
| 1436 if (command.operation == AUTHENTICATION_OPERATION_DISMISS) { | 1393 if (command.operation == AUTHENTICATION_OPERATION_DISMISS) { |
| 1437 [self dismissSigninInteractionController]; | 1394 [self dismissSigninInteractionController]; |
| 1438 } else { | 1395 } else { |
| 1439 [self showSigninWithOperation:command.operation | 1396 [self showSigninWithOperation:command.operation |
| 1440 identity:command.identity | 1397 identity:command.identity |
| 1441 accessPoint:command.accessPoint | 1398 accessPoint:command.accessPoint |
| 1442 promoAction:command.promoAction | 1399 promoAction:command.promoAction |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1453 break; | 1410 break; |
| 1454 case IDC_SHOW_SYNC_PASSPHRASE_SETTINGS: | 1411 case IDC_SHOW_SYNC_PASSPHRASE_SETTINGS: |
| 1455 [self showSyncEncryptionPassphrase]; | 1412 [self showSyncEncryptionPassphrase]; |
| 1456 break; | 1413 break; |
| 1457 case IDC_SHOW_SAVE_PASSWORDS_SETTINGS: | 1414 case IDC_SHOW_SAVE_PASSWORDS_SETTINGS: |
| 1458 [self showSavePasswordsSettings]; | 1415 [self showSavePasswordsSettings]; |
| 1459 break; | 1416 break; |
| 1460 case IDC_SHOW_HISTORY: | 1417 case IDC_SHOW_HISTORY: |
| 1461 [self showHistory]; | 1418 [self showHistory]; |
| 1462 break; | 1419 break; |
| 1463 case IDC_TOGGLE_TAB_SWITCHER: | 1420 case IDC_TOGGLE_TAB_SWITCHER: { |
| 1464 DCHECK(!_tabSwitcherIsActive); | 1421 DCHECK(!_tabSwitcherIsActive); |
| 1465 if (!_isProcessingVoiceSearchCommand) { | 1422 if (!_isProcessingVoiceSearchCommand) { |
| 1466 [self showTabSwitcher]; | 1423 [self showTabSwitcher]; |
| 1467 _isProcessingTabSwitcherCommand = YES; | 1424 _isProcessingTabSwitcherCommand = YES; |
| 1468 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, | 1425 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, |
| 1469 kExpectedTransitionDurationInNanoSeconds), | 1426 kExpectedTransitionDurationInNanoSeconds), |
| 1470 dispatch_get_main_queue(), ^{ | 1427 dispatch_get_main_queue(), ^{ |
| 1471 _isProcessingTabSwitcherCommand = NO; | 1428 _isProcessingTabSwitcherCommand = NO; |
| 1472 }); | 1429 }); |
| 1473 } | 1430 } |
| 1474 break; | 1431 } break; |
| 1432 |
| 1475 case IDC_PRELOAD_VOICE_SEARCH: | 1433 case IDC_PRELOAD_VOICE_SEARCH: |
| 1476 [self.currentBVC chromeExecuteCommand:sender]; | 1434 [self.currentBVC chromeExecuteCommand:sender]; |
| 1477 break; | 1435 break; |
| 1478 case IDC_VOICE_SEARCH: | 1436 case IDC_VOICE_SEARCH: { |
| 1479 if (!_isProcessingTabSwitcherCommand) { | 1437 if (!_isProcessingTabSwitcherCommand) { |
| 1480 [self startVoiceSearch]; | 1438 [self startVoiceSearch]; |
| 1481 _isProcessingVoiceSearchCommand = YES; | 1439 _isProcessingVoiceSearchCommand = YES; |
| 1482 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, | 1440 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, |
| 1483 kExpectedTransitionDurationInNanoSeconds), | 1441 kExpectedTransitionDurationInNanoSeconds), |
| 1484 dispatch_get_main_queue(), ^{ | 1442 dispatch_get_main_queue(), ^{ |
| 1485 _isProcessingVoiceSearchCommand = NO; | 1443 _isProcessingVoiceSearchCommand = NO; |
| 1486 }); | 1444 }); |
| 1487 } | 1445 } |
| 1488 break; | 1446 } break; |
| 1447 |
| 1489 case IDC_CLEAR_BROWSING_DATA_IOS: { | 1448 case IDC_CLEAR_BROWSING_DATA_IOS: { |
| 1490 // Clear both the main browser state and the associated incognito | 1449 // Clear both the main browser state and the associated incognito |
| 1491 // browser state. | 1450 // browser state. |
| 1492 ClearBrowsingDataCommand* command = | 1451 ClearBrowsingDataCommand* command = |
| 1493 base::mac::ObjCCastStrict<ClearBrowsingDataCommand>(sender); | 1452 base::mac::ObjCCastStrict<ClearBrowsingDataCommand>(sender); |
| 1494 ios::ChromeBrowserState* browserState = | 1453 ios::ChromeBrowserState* browserState = |
| 1495 [command browserState]->GetOriginalChromeBrowserState(); | 1454 [command browserState]->GetOriginalChromeBrowserState(); |
| 1496 int mask = [command mask]; | 1455 int mask = [command mask]; |
| 1497 browsing_data::TimePeriod timePeriod = [command timePeriod]; | 1456 browsing_data::TimePeriod timePeriod = [command timePeriod]; |
| 1498 [self removeBrowsingDataFromBrowserState:browserState | 1457 [self removeBrowsingDataFromBrowserState:browserState |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1658 #pragma mark - Tab closure handlers | 1617 #pragma mark - Tab closure handlers |
| 1659 | 1618 |
| 1660 - (void)lastIncognitoTabClosed { | 1619 - (void)lastIncognitoTabClosed { |
| 1661 DCHECK(_mainBrowserState->HasOffTheRecordChromeBrowserState()); | 1620 DCHECK(_mainBrowserState->HasOffTheRecordChromeBrowserState()); |
| 1662 [self clearIOSSpecificIncognitoData]; | 1621 [self clearIOSSpecificIncognitoData]; |
| 1663 | 1622 |
| 1664 // OffTheRecordProfileIOData cannot be deleted before all the requests are | 1623 // OffTheRecordProfileIOData cannot be deleted before all the requests are |
| 1665 // deleted. All of the request trackers associated with the closed OTR tabs | 1624 // deleted. All of the request trackers associated with the closed OTR tabs |
| 1666 // will have posted CancelRequest calls to the IO thread by now; this just | 1625 // will have posted CancelRequest calls to the IO thread by now; this just |
| 1667 // waits for those calls to run before calling |deleteIncognitoBrowserState|. | 1626 // waits for those calls to run before calling |deleteIncognitoBrowserState|. |
| 1668 web::RequestTrackerImpl::RunAfterRequestsCancel(base::BindBlock(^{ | 1627 web::RequestTrackerImpl::RunAfterRequestsCancel(base::BindBlockArc(^{ |
| 1669 [self deleteIncognitoBrowserState]; | 1628 [self deleteIncognitoBrowserState]; |
| 1670 })); | 1629 })); |
| 1671 | 1630 |
| 1672 // a) The first condition can happen when the last incognito tab is closed | 1631 // a) The first condition can happen when the last incognito tab is closed |
| 1673 // from the tab switcher. | 1632 // from the tab switcher. |
| 1674 // b) The second condition can happen if some other code (like JS) triggers | 1633 // b) The second condition can happen if some other code (like JS) triggers |
| 1675 // closure of tabs from the otr tab model when it's not current. | 1634 // closure of tabs from the otr tab model when it's not current. |
| 1676 // Nothing to do here. The next user action (like clicking on an existing | 1635 // Nothing to do here. The next user action (like clicking on an existing |
| 1677 // regular tab or creating a new incognito tab from the settings menu) will | 1636 // regular tab or creating a new incognito tab from the settings menu) will |
| 1678 // take care of the logic to mode switch. | 1637 // take care of the logic to mode switch. |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1750 BrowserViewController* currentBVC = self.currentBVC; | 1709 BrowserViewController* currentBVC = self.currentBVC; |
| 1751 Tab* currentTab = [[currentBVC tabModel] currentTab]; | 1710 Tab* currentTab = [[currentBVC tabModel] currentTab]; |
| 1752 | 1711 |
| 1753 // In order to generate the transition between the current browser view | 1712 // In order to generate the transition between the current browser view |
| 1754 // controller and the tab switcher controller it's possible that multiple | 1713 // controller and the tab switcher controller it's possible that multiple |
| 1755 // screenshots of the same tab are taken. Since taking a screenshot is | 1714 // screenshots of the same tab are taken. Since taking a screenshot is |
| 1756 // expensive we activate snapshot coalescing in the scope of this function | 1715 // expensive we activate snapshot coalescing in the scope of this function |
| 1757 // which will cache the first snapshot for the tab and reuse it instead of | 1716 // which will cache the first snapshot for the tab and reuse it instead of |
| 1758 // regenerating a new one each time. | 1717 // regenerating a new one each time. |
| 1759 [currentTab setSnapshotCoalescingEnabled:YES]; | 1718 [currentTab setSnapshotCoalescingEnabled:YES]; |
| 1760 base::ScopedClosureRunner runner(base::BindBlock(^{ | 1719 base::ScopedClosureRunner runner(base::BindBlockArc(^{ |
| 1761 [currentTab setSnapshotCoalescingEnabled:NO]; | 1720 [currentTab setSnapshotCoalescingEnabled:NO]; |
| 1762 })); | 1721 })); |
| 1763 | 1722 |
| 1764 [currentBVC prepareToEnterTabSwitcher:nil]; | 1723 [currentBVC prepareToEnterTabSwitcher:nil]; |
| 1765 | 1724 |
| 1766 if (!_tabSwitcherController.get()) { | 1725 if (!_tabSwitcherController) { |
| 1767 if (IsIPadIdiom()) { | 1726 if (IsIPadIdiom()) { |
| 1768 _tabSwitcherController.reset([[TabSwitcherController alloc] | 1727 _tabSwitcherController = [[TabSwitcherController alloc] |
| 1769 initWithBrowserState:_mainBrowserState | 1728 initWithBrowserState:_mainBrowserState |
| 1770 mainTabModel:self.mainTabModel | 1729 mainTabModel:self.mainTabModel |
| 1771 otrTabModel:self.otrTabModel | 1730 otrTabModel:self.otrTabModel |
| 1772 activeTabModel:self.currentTabModel]); | 1731 activeTabModel:self.currentTabModel]; |
| 1773 } else { | 1732 } else { |
| 1774 _tabSwitcherController.reset([[StackViewController alloc] | 1733 _tabSwitcherController = [[StackViewController alloc] |
| 1775 initWithMainTabModel:self.mainTabModel | 1734 initWithMainTabModel:self.mainTabModel |
| 1776 otrTabModel:self.otrTabModel | 1735 otrTabModel:self.otrTabModel |
| 1777 activeTabModel:self.currentTabModel]); | 1736 activeTabModel:self.currentTabModel]; |
| 1778 } | 1737 } |
| 1779 } else { | 1738 } else { |
| 1780 // The StackViewController is kept in memory to avoid the performance hit of | 1739 // The StackViewController is kept in memory to avoid the performance hit of |
| 1781 // loading from the nib on next showing, but clears out its card models to | 1740 // loading from the nib on next showing, but clears out its card models to |
| 1782 // release memory. The tab models are required to rebuild the card stacks. | 1741 // release memory. The tab models are required to rebuild the card stacks. |
| 1783 [_tabSwitcherController | 1742 [_tabSwitcherController |
| 1784 restoreInternalStateWithMainTabModel:self.mainTabModel | 1743 restoreInternalStateWithMainTabModel:self.mainTabModel |
| 1785 otrTabModel:self.otrTabModel | 1744 otrTabModel:self.otrTabModel |
| 1786 activeTabModel:self.currentTabModel]; | 1745 activeTabModel:self.currentTabModel]; |
| 1787 } | 1746 } |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1876 // Prevent wayward touches from wreaking havoc while the stack view is being | 1835 // Prevent wayward touches from wreaking havoc while the stack view is being |
| 1877 // dismissed. | 1836 // dismissed. |
| 1878 [[_tabSwitcherController view] setUserInteractionEnabled:NO]; | 1837 [[_tabSwitcherController view] setUserInteractionEnabled:NO]; |
| 1879 BrowserViewController* targetBVC = | 1838 BrowserViewController* targetBVC = |
| 1880 (tabModel == self.mainTabModel) ? self.mainBVC : self.otrBVC; | 1839 (tabModel == self.mainTabModel) ? self.mainBVC : self.otrBVC; |
| 1881 self.currentBVC = targetBVC; | 1840 self.currentBVC = targetBVC; |
| 1882 } | 1841 } |
| 1883 | 1842 |
| 1884 - (void)finishDismissingStackView { | 1843 - (void)finishDismissingStackView { |
| 1885 DCHECK_EQ(self.mainViewController.activeViewController, | 1844 DCHECK_EQ(self.mainViewController.activeViewController, |
| 1886 _tabSwitcherController.get()); | 1845 _tabSwitcherController); |
| 1887 | 1846 |
| 1888 if (_modeToDisplayOnStackViewDismissal == StackViewDismissalMode::NORMAL) { | 1847 if (_modeToDisplayOnStackViewDismissal == StackViewDismissalMode::NORMAL) { |
| 1889 self.currentBVC = self.mainBVC; | 1848 self.currentBVC = self.mainBVC; |
| 1890 } else if (_modeToDisplayOnStackViewDismissal == | 1849 } else if (_modeToDisplayOnStackViewDismissal == |
| 1891 StackViewDismissalMode::INCOGNITO) { | 1850 StackViewDismissalMode::INCOGNITO) { |
| 1892 self.currentBVC = self.otrBVC; | 1851 self.currentBVC = self.otrBVC; |
| 1893 } | 1852 } |
| 1894 | 1853 |
| 1895 _modeToDisplayOnStackViewDismissal = StackViewDismissalMode::NONE; | 1854 _modeToDisplayOnStackViewDismissal = StackViewDismissalMode::NONE; |
| 1896 | 1855 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1949 removeBrowsingDataFromBrowserState:browserState | 1908 removeBrowsingDataFromBrowserState:browserState |
| 1950 mask:mask | 1909 mask:mask |
| 1951 timePeriod:timePeriod | 1910 timePeriod:timePeriod |
| 1952 completionHandler:browsingDataRemoved]; | 1911 completionHandler:browsingDataRemoved]; |
| 1953 } | 1912 } |
| 1954 | 1913 |
| 1955 #pragma mark - Navigation Controllers | 1914 #pragma mark - Navigation Controllers |
| 1956 | 1915 |
| 1957 - (void)presentSignedInAccountsViewControllerForBrowserState: | 1916 - (void)presentSignedInAccountsViewControllerForBrowserState: |
| 1958 (ios::ChromeBrowserState*)browserState { | 1917 (ios::ChromeBrowserState*)browserState { |
| 1959 base::scoped_nsobject<UIViewController> accountsViewController( | 1918 UIViewController* accountsViewController = [ |
| 1960 [[SignedInAccountsViewController alloc] | 1919 [SignedInAccountsViewController alloc] initWithBrowserState:browserState]; |
| 1961 initWithBrowserState:browserState]); | |
| 1962 [[self topPresentedViewController] | 1920 [[self topPresentedViewController] |
| 1963 presentViewController:accountsViewController | 1921 presentViewController:accountsViewController |
| 1964 animated:YES | 1922 animated:YES |
| 1965 completion:nil]; | 1923 completion:nil]; |
| 1966 } | 1924 } |
| 1967 | 1925 |
| 1968 - (void)showSettings { | 1926 - (void)showSettings { |
| 1969 if (_settingsNavigationController) | 1927 if (_settingsNavigationController) |
| 1970 return; | 1928 return; |
| 1971 [[DeferredInitializationRunner sharedInstance] | 1929 [[DeferredInitializationRunner sharedInstance] |
| 1972 runBlockIfNecessary:kPrefObserverInit]; | 1930 runBlockIfNecessary:kPrefObserverInit]; |
| 1973 DCHECK(_localStatePrefObserverBridge); | 1931 DCHECK(_localStatePrefObserverBridge); |
| 1974 _settingsNavigationController.reset([SettingsNavigationController | 1932 _settingsNavigationController = [SettingsNavigationController |
| 1975 newSettingsMainControllerWithMainBrowserState:_mainBrowserState | 1933 newSettingsMainControllerWithMainBrowserState:_mainBrowserState |
| 1976 currentBrowserState:self.currentBrowserState | 1934 currentBrowserState:self.currentBrowserState |
| 1977 delegate:self]); | 1935 delegate:self]; |
| 1978 [[self topPresentedViewController] | 1936 [[self topPresentedViewController] |
| 1979 presentViewController:_settingsNavigationController | 1937 presentViewController:_settingsNavigationController |
| 1980 animated:YES | 1938 animated:YES |
| 1981 completion:nil]; | 1939 completion:nil]; |
| 1982 } | 1940 } |
| 1983 | 1941 |
| 1984 - (void)showAccountsSettings { | 1942 - (void)showAccountsSettings { |
| 1985 if (_settingsNavigationController) | 1943 if (_settingsNavigationController) |
| 1986 return; | 1944 return; |
| 1987 if ([self currentBrowserState]->IsOffTheRecord()) { | 1945 if ([self currentBrowserState]->IsOffTheRecord()) { |
| 1988 NOTREACHED(); | 1946 NOTREACHED(); |
| 1989 return; | 1947 return; |
| 1990 } | 1948 } |
| 1991 _settingsNavigationController.reset([SettingsNavigationController | 1949 _settingsNavigationController = [SettingsNavigationController |
| 1992 newAccountsController:self.currentBrowserState | 1950 newAccountsController:self.currentBrowserState |
| 1993 delegate:self]); | 1951 delegate:self]; |
| 1994 [[self topPresentedViewController] | 1952 [[self topPresentedViewController] |
| 1995 presentViewController:_settingsNavigationController | 1953 presentViewController:_settingsNavigationController |
| 1996 animated:YES | 1954 animated:YES |
| 1997 completion:nil]; | 1955 completion:nil]; |
| 1998 } | 1956 } |
| 1999 | 1957 |
| 2000 - (void)showSyncSettings { | 1958 - (void)showSyncSettings { |
| 2001 if (_settingsNavigationController) | 1959 if (_settingsNavigationController) |
| 2002 return; | 1960 return; |
| 2003 _settingsNavigationController.reset([SettingsNavigationController | 1961 _settingsNavigationController = |
| 2004 newSyncController:_mainBrowserState | 1962 [SettingsNavigationController newSyncController:_mainBrowserState |
| 2005 allowSwitchSyncAccount:YES | 1963 allowSwitchSyncAccount:YES |
| 2006 delegate:self]); | 1964 delegate:self]; |
| 2007 [[self topPresentedViewController] | 1965 [[self topPresentedViewController] |
| 2008 presentViewController:_settingsNavigationController | 1966 presentViewController:_settingsNavigationController |
| 2009 animated:YES | 1967 animated:YES |
| 2010 completion:nil]; | 1968 completion:nil]; |
| 2011 } | 1969 } |
| 2012 | 1970 |
| 2013 - (void)showSavePasswordsSettings { | 1971 - (void)showSavePasswordsSettings { |
| 2014 if (_settingsNavigationController) | 1972 if (_settingsNavigationController) |
| 2015 return; | 1973 return; |
| 2016 _settingsNavigationController.reset([SettingsNavigationController | 1974 _settingsNavigationController = |
| 2017 newSavePasswordsController:_mainBrowserState | 1975 [SettingsNavigationController newSavePasswordsController:_mainBrowserState |
| 2018 delegate:self]); | 1976 delegate:self]; |
| 2019 [[self topPresentedViewController] | 1977 [[self topPresentedViewController] |
| 2020 presentViewController:_settingsNavigationController | 1978 presentViewController:_settingsNavigationController |
| 2021 animated:YES | 1979 animated:YES |
| 2022 completion:nil]; | 1980 completion:nil]; |
| 2023 } | 1981 } |
| 2024 | 1982 |
| 2025 - (void)showAutofillSettings { | 1983 - (void)showAutofillSettings { |
| 2026 if (_settingsNavigationController) | 1984 if (_settingsNavigationController) |
| 2027 return; | 1985 return; |
| 2028 _settingsNavigationController.reset([SettingsNavigationController | 1986 _settingsNavigationController = |
| 2029 newAutofillController:_mainBrowserState | 1987 [SettingsNavigationController newAutofillController:_mainBrowserState |
| 2030 delegate:self]); | 1988 delegate:self]; |
| 2031 [[self topPresentedViewController] | 1989 [[self topPresentedViewController] |
| 2032 presentViewController:_settingsNavigationController | 1990 presentViewController:_settingsNavigationController |
| 2033 animated:YES | 1991 animated:YES |
| 2034 completion:nil]; | 1992 completion:nil]; |
| 2035 } | 1993 } |
| 2036 | 1994 |
| 2037 - (void)showReportAnIssue { | 1995 - (void)showReportAnIssue { |
| 2038 if (_settingsNavigationController) | 1996 if (_settingsNavigationController) |
| 2039 return; | 1997 return; |
| 2040 _settingsNavigationController.reset([SettingsNavigationController | 1998 _settingsNavigationController = |
| 2041 newUserFeedbackController:_mainBrowserState | 1999 [SettingsNavigationController newUserFeedbackController:_mainBrowserState |
| 2042 delegate:self | 2000 delegate:self |
| 2043 feedbackDataSource:self]); | 2001 feedbackDataSource:self]; |
| 2044 [[self topPresentedViewController] | 2002 [[self topPresentedViewController] |
| 2045 presentViewController:_settingsNavigationController | 2003 presentViewController:_settingsNavigationController |
| 2046 animated:YES | 2004 animated:YES |
| 2047 completion:nil]; | 2005 completion:nil]; |
| 2048 } | 2006 } |
| 2049 | 2007 |
| 2050 - (void)showSyncEncryptionPassphrase { | 2008 - (void)showSyncEncryptionPassphrase { |
| 2051 if (_settingsNavigationController) | 2009 if (_settingsNavigationController) |
| 2052 return; | 2010 return; |
| 2053 _settingsNavigationController.reset([SettingsNavigationController | 2011 _settingsNavigationController = [SettingsNavigationController |
| 2054 newSyncEncryptionPassphraseController:_mainBrowserState | 2012 newSyncEncryptionPassphraseController:_mainBrowserState |
| 2055 delegate:self]); | 2013 delegate:self]; |
| 2056 [[self topPresentedViewController] | 2014 [[self topPresentedViewController] |
| 2057 presentViewController:_settingsNavigationController | 2015 presentViewController:_settingsNavigationController |
| 2058 animated:YES | 2016 animated:YES |
| 2059 completion:nil]; | 2017 completion:nil]; |
| 2060 } | 2018 } |
| 2061 | 2019 |
| 2062 - (void)showClearBrowsingDataSettingsController { | 2020 - (void)showClearBrowsingDataSettingsController { |
| 2063 if (_settingsNavigationController) | 2021 if (_settingsNavigationController) |
| 2064 return; | 2022 return; |
| 2065 _settingsNavigationController.reset([SettingsNavigationController | 2023 _settingsNavigationController = [SettingsNavigationController |
| 2066 newClearBrowsingDataController:_mainBrowserState | 2024 newClearBrowsingDataController:_mainBrowserState |
| 2067 delegate:self]); | 2025 delegate:self]; |
| 2068 [[self topPresentedViewController] | 2026 [[self topPresentedViewController] |
| 2069 presentViewController:_settingsNavigationController | 2027 presentViewController:_settingsNavigationController |
| 2070 animated:YES | 2028 animated:YES |
| 2071 completion:nil]; | 2029 completion:nil]; |
| 2072 } | 2030 } |
| 2073 | 2031 |
| 2074 - (void)showContextualSearchSettingsController { | 2032 - (void)showContextualSearchSettingsController { |
| 2075 if (_settingsNavigationController) | 2033 if (_settingsNavigationController) |
| 2076 return; | 2034 return; |
| 2077 _settingsNavigationController.reset([SettingsNavigationController | 2035 _settingsNavigationController = [SettingsNavigationController |
| 2078 newContextualSearchController:_mainBrowserState | 2036 newContextualSearchController:_mainBrowserState |
| 2079 delegate:self]); | 2037 delegate:self]; |
| 2080 [[self topPresentedViewController] | 2038 [[self topPresentedViewController] |
| 2081 presentViewController:_settingsNavigationController | 2039 presentViewController:_settingsNavigationController |
| 2082 animated:YES | 2040 animated:YES |
| 2083 completion:nil]; | 2041 completion:nil]; |
| 2084 } | 2042 } |
| 2085 | 2043 |
| 2086 - (void)showSigninWithOperation:(AuthenticationOperation)operation | 2044 - (void)showSigninWithOperation:(AuthenticationOperation)operation |
| 2087 identity:(ChromeIdentity*)identity | 2045 identity:(ChromeIdentity*)identity |
| 2088 accessPoint:(signin_metrics::AccessPoint)accessPoint | 2046 accessPoint:(signin_metrics::AccessPoint)accessPoint |
| 2089 promoAction:(signin_metrics::PromoAction)promoAction | 2047 promoAction:(signin_metrics::PromoAction)promoAction |
| 2090 callback:(ShowSigninCommandCompletionCallback)callback { | 2048 callback:(ShowSigninCommandCompletionCallback)callback { |
| 2091 DCHECK_NE(AUTHENTICATION_OPERATION_DISMISS, operation); | 2049 DCHECK_NE(AUTHENTICATION_OPERATION_DISMISS, operation); |
| 2092 | 2050 |
| 2093 if (_signinInteractionController) { | 2051 if (_signinInteractionController) { |
| 2094 // Avoid showing the sign in screen if there is already a sign-in operation | 2052 // Avoid showing the sign in screen if there is already a sign-in operation |
| 2095 // in progress. | 2053 // in progress. |
| 2096 return; | 2054 return; |
| 2097 } | 2055 } |
| 2098 | 2056 |
| 2099 BOOL areSettingsPresented = _settingsNavigationController != NULL; | 2057 BOOL areSettingsPresented = _settingsNavigationController != NULL; |
| 2100 _signinInteractionController.reset([[SigninInteractionController alloc] | 2058 _signinInteractionController = [[SigninInteractionController alloc] |
| 2101 initWithBrowserState:_mainBrowserState | 2059 initWithBrowserState:_mainBrowserState |
| 2102 presentingViewController:[self topPresentedViewController] | 2060 presentingViewController:[self topPresentedViewController] |
| 2103 isPresentedOnSettings:areSettingsPresented | 2061 isPresentedOnSettings:areSettingsPresented |
| 2104 accessPoint:accessPoint | 2062 accessPoint:accessPoint |
| 2105 promoAction:promoAction]); | 2063 promoAction:promoAction]; |
| 2106 | 2064 |
| 2107 signin_ui::CompletionCallback completion = ^(BOOL success) { | 2065 signin_ui::CompletionCallback completion = ^(BOOL success) { |
| 2108 _signinInteractionController.reset(); | 2066 _signinInteractionController = nil; |
| 2109 if (callback) | 2067 if (callback) |
| 2110 callback(success); | 2068 callback(success); |
| 2111 }; | 2069 }; |
| 2112 | 2070 |
| 2113 switch (operation) { | 2071 switch (operation) { |
| 2114 case AUTHENTICATION_OPERATION_DISMISS: | 2072 case AUTHENTICATION_OPERATION_DISMISS: |
| 2115 // Special case handled above. | 2073 // Special case handled above. |
| 2116 NOTREACHED(); | 2074 NOTREACHED(); |
| 2117 break; | 2075 break; |
| 2118 case AUTHENTICATION_OPERATION_REAUTHENTICATE: | 2076 case AUTHENTICATION_OPERATION_REAUTHENTICATE: |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2130 } | 2088 } |
| 2131 | 2089 |
| 2132 - (void)showAddAccount { | 2090 - (void)showAddAccount { |
| 2133 if (_signinInteractionController) { | 2091 if (_signinInteractionController) { |
| 2134 // Avoid showing the sign in screen if there is already a sign-in operation | 2092 // Avoid showing the sign in screen if there is already a sign-in operation |
| 2135 // in progress. | 2093 // in progress. |
| 2136 return; | 2094 return; |
| 2137 } | 2095 } |
| 2138 | 2096 |
| 2139 BOOL areSettingsPresented = _settingsNavigationController != NULL; | 2097 BOOL areSettingsPresented = _settingsNavigationController != NULL; |
| 2140 _signinInteractionController.reset([[SigninInteractionController alloc] | 2098 _signinInteractionController = [[SigninInteractionController alloc] |
| 2141 initWithBrowserState:_mainBrowserState | 2099 initWithBrowserState:_mainBrowserState |
| 2142 presentingViewController:[self topPresentedViewController] | 2100 presentingViewController:[self topPresentedViewController] |
| 2143 isPresentedOnSettings:areSettingsPresented | 2101 isPresentedOnSettings:areSettingsPresented |
| 2144 accessPoint:signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN | 2102 accessPoint:signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN |
| 2145 promoAction:signin_metrics::PromoAction:: | 2103 promoAction:signin_metrics::PromoAction:: |
| 2146 PROMO_ACTION_NO_SIGNIN_PROMO]); | 2104 PROMO_ACTION_NO_SIGNIN_PROMO]; |
| 2147 | 2105 |
| 2148 [_signinInteractionController | 2106 [_signinInteractionController |
| 2149 addAccountWithCompletion:^(BOOL success) { | 2107 addAccountWithCompletion:^(BOOL success) { |
| 2150 _signinInteractionController.reset(); | 2108 _signinInteractionController = nil; |
| 2151 } | 2109 } |
| 2152 viewController:self.mainViewController]; | 2110 viewController:self.mainViewController]; |
| 2153 } | 2111 } |
| 2154 | 2112 |
| 2155 - (void)showHistory { | 2113 - (void)showHistory { |
| 2156 _historyPanelViewController.reset([[HistoryPanelViewController | 2114 _historyPanelViewController = [HistoryPanelViewController |
| 2157 controllerToPresentForBrowserState:_mainBrowserState | 2115 controllerToPresentForBrowserState:_mainBrowserState |
| 2158 loader:self.currentBVC] retain]); | 2116 loader:self.currentBVC]; |
| 2159 [self.currentBVC presentViewController:_historyPanelViewController | 2117 [self.currentBVC presentViewController:_historyPanelViewController |
| 2160 animated:YES | 2118 animated:YES |
| 2161 completion:nil]; | 2119 completion:nil]; |
| 2162 } | 2120 } |
| 2163 | 2121 |
| 2164 - (void)dismissSigninInteractionController { | 2122 - (void)dismissSigninInteractionController { |
| 2165 // The sign-in interaction controller is destroyed as a result of calling | 2123 // The sign-in interaction controller is destroyed as a result of calling |
| 2166 // |cancelAndDismiss|. Destroying it here may lead to a missing call of the | 2124 // |cancelAndDismiss|. Destroying it here may lead to a missing call of the |
| 2167 // |ShowSigninCommandCompletionCallback| passed when starting a show sign-in | 2125 // |ShowSigninCommandCompletionCallback| passed when starting a show sign-in |
| 2168 // operation. | 2126 // operation. |
| 2169 [_signinInteractionController cancelAndDismiss]; | 2127 [_signinInteractionController cancelAndDismiss]; |
| 2170 } | 2128 } |
| 2171 | 2129 |
| 2172 - (ShowSigninCommandCompletionCallback)successfulSigninCompletion: | 2130 - (ShowSigninCommandCompletionCallback)successfulSigninCompletion: |
| 2173 (ProceduralBlock)callback { | 2131 (ProceduralBlock)callback { |
| 2174 return [[^(BOOL successful) { | 2132 return [^(BOOL successful) { |
| 2175 ios::ChromeBrowserState* browserState = [self currentBrowserState]; | 2133 ios::ChromeBrowserState* browserState = [self currentBrowserState]; |
| 2176 if (browserState->IsOffTheRecord()) { | 2134 if (browserState->IsOffTheRecord()) { |
| 2177 NOTREACHED() | 2135 NOTREACHED() |
| 2178 << "Ignore call to |handleSignInFinished| when in incognito."; | 2136 << "Ignore call to |handleSignInFinished| when in incognito."; |
| 2179 return; | 2137 return; |
| 2180 } | 2138 } |
| 2181 DCHECK_EQ(self.mainBVC, self.currentBVC); | 2139 DCHECK_EQ(self.mainBVC, self.currentBVC); |
| 2182 SigninManager* signinManager = | 2140 SigninManager* signinManager = |
| 2183 ios::SigninManagerFactory::GetForBrowserState(browserState); | 2141 ios::SigninManagerFactory::GetForBrowserState(browserState); |
| 2184 if (signinManager->IsAuthenticated()) | 2142 if (signinManager->IsAuthenticated()) |
| 2185 callback(); | 2143 callback(); |
| 2186 } copy] autorelease]; | 2144 } copy]; |
| 2187 } | 2145 } |
| 2188 | 2146 |
| 2189 - (void)showNativeAppsSettings { | 2147 - (void)showNativeAppsSettings { |
| 2190 if (_settingsNavigationController) | 2148 if (_settingsNavigationController) |
| 2191 return; | 2149 return; |
| 2192 _settingsNavigationController.reset([SettingsNavigationController | 2150 _settingsNavigationController = |
| 2193 newNativeAppsController:_mainBrowserState | 2151 [SettingsNavigationController newNativeAppsController:_mainBrowserState |
| 2194 delegate:self]); | 2152 delegate:self]; |
| 2195 [[self topPresentedViewController] | 2153 [[self topPresentedViewController] |
| 2196 presentViewController:_settingsNavigationController | 2154 presentViewController:_settingsNavigationController |
| 2197 animated:YES | 2155 animated:YES |
| 2198 completion:nil]; | 2156 completion:nil]; |
| 2199 } | 2157 } |
| 2200 | 2158 |
| 2201 - (void)closeSettingsAnimated:(BOOL)animated | 2159 - (void)closeSettingsAnimated:(BOOL)animated |
| 2202 completion:(ProceduralBlock)completion { | 2160 completion:(ProceduralBlock)completion { |
| 2203 DCHECK(_settingsNavigationController); | 2161 DCHECK(_settingsNavigationController); |
| 2204 [_settingsNavigationController settingsWillBeDismissed]; | 2162 [_settingsNavigationController settingsWillBeDismissed]; |
| 2205 UIViewController* presentingViewController = | 2163 UIViewController* presentingViewController = |
| 2206 [_settingsNavigationController presentingViewController]; | 2164 [_settingsNavigationController presentingViewController]; |
| 2207 DCHECK(presentingViewController); | 2165 DCHECK(presentingViewController); |
| 2208 [presentingViewController dismissViewControllerAnimated:animated | 2166 [presentingViewController dismissViewControllerAnimated:animated |
| 2209 completion:^{ | 2167 completion:^{ |
| 2210 if (completion) | 2168 if (completion) |
| 2211 completion(); | 2169 completion(); |
| 2212 }]; | 2170 }]; |
| 2213 _settingsNavigationController.reset(); | 2171 _settingsNavigationController = nil; |
| 2214 } | 2172 } |
| 2215 | 2173 |
| 2216 #pragma mark - TabModelObserver | 2174 #pragma mark - TabModelObserver |
| 2217 | 2175 |
| 2218 // Called when the number of tabs changes. Triggers the switcher view when | 2176 // Called when the number of tabs changes. Triggers the switcher view when |
| 2219 // the last tab is closed on a device that uses the switcher. | 2177 // the last tab is closed on a device that uses the switcher. |
| 2220 - (void)tabModelDidChangeTabCount:(TabModel*)notifiedTabModel { | 2178 - (void)tabModelDidChangeTabCount:(TabModel*)notifiedTabModel { |
| 2221 TabModel* currentTabModel = [self currentTabModel]; | 2179 TabModel* currentTabModel = [self currentTabModel]; |
| 2222 // Do nothing on initialization. | 2180 // Do nothing on initialization. |
| 2223 if (!currentTabModel) | 2181 if (!currentTabModel) |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2329 [self.currentBVC focusOmnibox]; | 2287 [self.currentBVC focusOmnibox]; |
| 2330 }); | 2288 }); |
| 2331 } | 2289 } |
| 2332 } | 2290 } |
| 2333 | 2291 |
| 2334 if (_restoreHelper) { | 2292 if (_restoreHelper) { |
| 2335 // Now that all the operations on the tabs have been done, display the | 2293 // Now that all the operations on the tabs have been done, display the |
| 2336 // restore infobar if needed. | 2294 // restore infobar if needed. |
| 2337 dispatch_async(dispatch_get_main_queue(), ^{ | 2295 dispatch_async(dispatch_get_main_queue(), ^{ |
| 2338 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]]; | 2296 [_restoreHelper showRestoreIfNeeded:[self currentTabModel]]; |
| 2339 _restoreHelper.reset(); | 2297 _restoreHelper = nil; |
| 2340 }); | 2298 }); |
| 2341 } | 2299 } |
| 2342 | 2300 |
| 2343 return tab; | 2301 return tab; |
| 2344 } | 2302 } |
| 2345 | 2303 |
| 2346 - (void)dismissModalDialogsWithCompletion:(ProceduralBlock)completion { | 2304 - (void)dismissModalDialogsWithCompletion:(ProceduralBlock)completion { |
| 2347 // Immediately hide modals from the provider (alert views, action sheets, | 2305 // Immediately hide modals from the provider (alert views, action sheets, |
| 2348 // popovers). They will be ultimately dismissed by their owners, but at least, | 2306 // popovers). They will be ultimately dismissed by their owners, but at least, |
| 2349 // they are not visible. | 2307 // they are not visible. |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2551 | 2509 |
| 2552 #pragma mark - TestingOnly | 2510 #pragma mark - TestingOnly |
| 2553 | 2511 |
| 2554 @implementation MainController (TestingOnly) | 2512 @implementation MainController (TestingOnly) |
| 2555 | 2513 |
| 2556 - (DeviceSharingManager*)deviceSharingManager { | 2514 - (DeviceSharingManager*)deviceSharingManager { |
| 2557 return [_browserViewWrangler deviceSharingManager]; | 2515 return [_browserViewWrangler deviceSharingManager]; |
| 2558 } | 2516 } |
| 2559 | 2517 |
| 2560 - (UIViewController<TabSwitcher>*)tabSwitcherController { | 2518 - (UIViewController<TabSwitcher>*)tabSwitcherController { |
| 2561 return _tabSwitcherController.get(); | 2519 return _tabSwitcherController; |
| 2562 } | 2520 } |
| 2563 | 2521 |
| 2564 - (void)setTabSwitcherController:(UIViewController<TabSwitcher>*)controller { | 2522 - (void)setTabSwitcherController:(UIViewController<TabSwitcher>*)controller { |
| 2565 _tabSwitcherController.reset([controller retain]); | 2523 _tabSwitcherController = controller; |
| 2566 } | 2524 } |
| 2567 | 2525 |
| 2568 - (SigninInteractionController*)signinInteractionController { | 2526 - (SigninInteractionController*)signinInteractionController { |
| 2569 return _signinInteractionController.get(); | 2527 return _signinInteractionController; |
| 2570 } | 2528 } |
| 2571 | 2529 |
| 2572 - (UIViewController*)topPresentedViewController { | 2530 - (UIViewController*)topPresentedViewController { |
| 2573 return top_view_controller::TopPresentedViewControllerFrom( | 2531 return top_view_controller::TopPresentedViewControllerFrom( |
| 2574 self.mainViewController); | 2532 self.mainViewController); |
| 2575 } | 2533 } |
| 2576 | 2534 |
| 2577 - (void)setTabSwitcherActive:(BOOL)active { | 2535 - (void)setTabSwitcherActive:(BOOL)active { |
| 2578 _tabSwitcherIsActive = active; | 2536 _tabSwitcherIsActive = active; |
| 2579 } | 2537 } |
| 2580 | 2538 |
| 2581 - (BOOL)dismissingTabSwitcher { | 2539 - (BOOL)dismissingTabSwitcher { |
| 2582 return _dismissingStackView; | 2540 return _dismissingStackView; |
| 2583 } | 2541 } |
| 2584 | 2542 |
| 2585 - (void)setStartupParametersWithURL:(const GURL&)launchURL { | 2543 - (void)setStartupParametersWithURL:(const GURL&)launchURL { |
| 2586 NSString* sourceApplication = @"Fake App"; | 2544 NSString* sourceApplication = @"Fake App"; |
| 2587 _startupParameters.reset([[ChromeAppStartupParameters | 2545 _startupParameters = [ChromeAppStartupParameters |
| 2588 newChromeAppStartupParametersWithURL:net::NSURLWithGURL(launchURL) | 2546 newChromeAppStartupParametersWithURL:net::NSURLWithGURL(launchURL) |
| 2589 fromSourceApplication:sourceApplication] retain]); | 2547 fromSourceApplication:sourceApplication]; |
| 2590 } | 2548 } |
| 2591 | 2549 |
| 2592 - (void)setUpAsForegrounded { | 2550 - (void)setUpAsForegrounded { |
| 2593 _isColdStart = NO; | 2551 _isColdStart = NO; |
| 2594 _browserInitializationStage = INITIALIZATION_STAGE_FOREGROUND; | 2552 _browserInitializationStage = INITIALIZATION_STAGE_FOREGROUND; |
| 2595 // Create a BrowserViewWrangler with a null browser state. This will trigger | 2553 // Create a BrowserViewWrangler with a null browser state. This will trigger |
| 2596 // assertions if the BrowserViewWrangler is asked to create any BVC or | 2554 // assertions if the BrowserViewWrangler is asked to create any BVC or |
| 2597 // tabModel objects, but it will accept assignments to them. | 2555 // tabModel objects, but it will accept assignments to them. |
| 2598 [_browserViewWrangler shutdown]; | 2556 [_browserViewWrangler shutdown]; |
| 2599 _browserViewWrangler.reset([[BrowserViewWrangler alloc] | 2557 _browserViewWrangler = |
| 2600 initWithBrowserState:nullptr | 2558 [[BrowserViewWrangler alloc] initWithBrowserState:nullptr |
| 2601 tabModelObserver:self]); | 2559 tabModelObserver:self]; |
| 2602 // This is a test utility method that bypasses the ususal setup steps, so | 2560 // This is a test utility method that bypasses the ususal setup steps, so |
| 2603 // verify that the main coordinator hasn't been created yet, then start it | 2561 // verify that the main coordinator hasn't been created yet, then start it |
| 2604 // via lazy initialization. | 2562 // via lazy initialization. |
| 2605 DCHECK(!_mainCoordinator); | 2563 DCHECK(!_mainCoordinator); |
| 2606 [self.mainCoordinator start]; | 2564 [self.mainCoordinator start]; |
| 2607 } | 2565 } |
| 2608 | 2566 |
| 2609 - (void)setUpForTestingWithCompletionHandler: | 2567 - (void)setUpForTestingWithCompletionHandler: |
| 2610 (ProceduralBlock)completionHandler { | 2568 (ProceduralBlock)completionHandler { |
| 2611 self.currentBVC = self.mainBVC; | 2569 self.currentBVC = self.mainBVC; |
| 2612 | 2570 |
| 2613 int removeAllMask = ~0; | 2571 int removeAllMask = ~0; |
| 2614 scoped_refptr<CallbackCounter> callbackCounter = | 2572 scoped_refptr<CallbackCounter> callbackCounter = |
| 2615 new CallbackCounter(base::BindBlock(^{ | 2573 new CallbackCounter(base::BindBlockArc(^{ |
| 2616 [self setUpCurrentBVCForTesting]; | 2574 [self setUpCurrentBVCForTesting]; |
| 2617 if (completionHandler) { | 2575 if (completionHandler) { |
| 2618 completionHandler(); | 2576 completionHandler(); |
| 2619 } | 2577 } |
| 2620 })); | 2578 })); |
| 2621 id decrementCallbackCounterCount = ^{ | 2579 id decrementCallbackCounterCount = ^{ |
| 2622 callbackCounter->DecrementCount(); | 2580 callbackCounter->DecrementCount(); |
| 2623 }; | 2581 }; |
| 2624 | 2582 |
| 2625 callbackCounter->IncrementCount(); | 2583 callbackCounter->IncrementCount(); |
| 2626 [self removeBrowsingDataFromBrowserState:_mainBrowserState | 2584 [self removeBrowsingDataFromBrowserState:_mainBrowserState |
| 2627 mask:removeAllMask | 2585 mask:removeAllMask |
| 2628 timePeriod:browsing_data::TimePeriod::ALL_TIME | 2586 timePeriod:browsing_data::TimePeriod::ALL_TIME |
| 2629 completionHandler:decrementCallbackCounterCount]; | 2587 completionHandler:decrementCallbackCounterCount]; |
| 2630 } | 2588 } |
| 2631 | 2589 |
| 2632 @end | 2590 @end |
| OLD | NEW |