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

Side by Side Diff: ios/chrome/app/application_delegate/app_state.mm

Issue 2621943002: [ObjC ARC] Converts ios/chrome/app/application_delegate:application_delegate_internal to ARC. (Closed)
Patch Set: comment Created 3 years, 11 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/application_delegate/app_state.h" 5 #import "ios/chrome/app/application_delegate/app_state.h"
6 6
7 #include "base/critical_closure.h" 7 #include "base/critical_closure.h"
8 #import "base/mac/bind_objc_block.h" 8 #import "base/mac/bind_objc_block.h"
9 #import "base/mac/scoped_nsobject.h"
10 #include "components/metrics/metrics_service.h" 9 #include "components/metrics/metrics_service.h"
10 #import "ios/chrome/app/main_application_delegate.h"
11 #import "ios/chrome/app/application_delegate/app_navigation.h" 11 #import "ios/chrome/app/application_delegate/app_navigation.h"
12 #import "ios/chrome/app/application_delegate/browser_launcher.h" 12 #import "ios/chrome/app/application_delegate/browser_launcher.h"
13 #import "ios/chrome/app/application_delegate/memory_warning_helper.h" 13 #import "ios/chrome/app/application_delegate/memory_warning_helper.h"
14 #import "ios/chrome/app/application_delegate/metrics_mediator.h" 14 #import "ios/chrome/app/application_delegate/metrics_mediator.h"
15 #import "ios/chrome/app/application_delegate/startup_information.h" 15 #import "ios/chrome/app/application_delegate/startup_information.h"
16 #import "ios/chrome/app/application_delegate/tab_opening.h" 16 #import "ios/chrome/app/application_delegate/tab_opening.h"
17 #import "ios/chrome/app/application_delegate/tab_switching.h" 17 #import "ios/chrome/app/application_delegate/tab_switching.h"
18 #import "ios/chrome/app/application_delegate/user_activity_handler.h" 18 #import "ios/chrome/app/application_delegate/user_activity_handler.h"
19 #import "ios/chrome/app/deferred_initialization_runner.h" 19 #import "ios/chrome/app/deferred_initialization_runner.h"
20 #import "ios/chrome/app/safe_mode/safe_mode_coordinator.h" 20 #import "ios/chrome/app/safe_mode/safe_mode_coordinator.h"
(...skipping 12 matching lines...) Expand all
33 #import "ios/chrome/browser/ui/browser_view_controller.h" 33 #import "ios/chrome/browser/ui/browser_view_controller.h"
34 #import "ios/chrome/browser/ui/main/browser_view_information.h" 34 #import "ios/chrome/browser/ui/main/browser_view_information.h"
35 #include "ios/net/cookies/cookie_store_ios.h" 35 #include "ios/net/cookies/cookie_store_ios.h"
36 #include "ios/net/cookies/system_cookie_util.h" 36 #include "ios/net/cookies/system_cookie_util.h"
37 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" 37 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
38 #include "ios/public/provider/chrome/browser/distribution/app_distribution_provi der.h" 38 #include "ios/public/provider/chrome/browser/distribution/app_distribution_provi der.h"
39 #import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider .h" 39 #import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider .h"
40 #include "ios/web/net/request_tracker_impl.h" 40 #include "ios/web/net/request_tracker_impl.h"
41 #include "net/url_request/url_request_context.h" 41 #include "net/url_request/url_request_context.h"
42 42
43 #if !defined(__has_feature) || !__has_feature(objc_arc)
44 #error "This file requires ARC support."
45 #endif
46
43 namespace { 47 namespace {
44 // Helper method to post |closure| on the UI thread. 48 // Helper method to post |closure| on the UI thread.
45 void PostTaskOnUIThread(const base::Closure& closure) { 49 void PostTaskOnUIThread(const base::Closure& closure) {
46 web::WebThread::PostTask(web::WebThread::UI, FROM_HERE, closure); 50 web::WebThread::PostTask(web::WebThread::UI, FROM_HERE, closure);
47 } 51 }
48 NSString* const kStartupAttemptReset = @"StartupAttempReset"; 52 NSString* const kStartupAttemptReset = @"StartupAttempReset";
49 } // namespace 53 } // namespace
50 54
51 @interface AppState ()<SafeModeCoordinatorDelegate> { 55 @interface AppState ()<SafeModeCoordinatorDelegate> {
52 // Container for startup information. 56 // Container for startup information.
53 base::WeakNSProtocol<id<StartupInformation>> _startupInformation; 57 __weak id<StartupInformation> _startupInformation;
54 // Browser launcher to launch browser in different states. 58 // Browser launcher to launch browser in different states.
55 base::WeakNSProtocol<id<BrowserLauncher>> _browserLauncher; 59 __weak id<BrowserLauncher> _browserLauncher;
56 // UIApplicationDelegate for the application. 60 // UIApplicationDelegate for the application.
57 base::WeakNSObject<MainApplicationDelegate> _mainApplicationDelegate; 61 __weak MainApplicationDelegate* _mainApplicationDelegate;
58 // Window for the application. 62 // Window for the application.
59 base::WeakNSObject<UIWindow> _window; 63 __weak UIWindow* _window;
60 64
61 // Variables backing properties of same name. 65 // Variables backing properties of same name.
62 base::scoped_nsobject<SafeModeCoordinator> _safeModeCoordinator; 66 SafeModeCoordinator* _safeModeCoordinator;
63 67
64 // Start of the current session, used for UMA. 68 // Start of the current session, used for UMA.
65 base::TimeTicks _sessionStartTime; 69 base::TimeTicks _sessionStartTime;
66 // YES if the app is currently in the process of terminating. 70 // YES if the app is currently in the process of terminating.
67 BOOL _appIsTerminating; 71 BOOL _appIsTerminating;
68 // Indicates if an NTP tab should be opened once the application has become 72 // Indicates if an NTP tab should be opened once the application has become
69 // active. 73 // active.
70 BOOL _shouldOpenNTPTabOnActive; 74 BOOL _shouldOpenNTPTabOnActive;
71 // Interstitial view used to block any incognito tabs after backgrounding. 75 // Interstitial view used to block any incognito tabs after backgrounding.
72 base::scoped_nsobject<UIView> _incognitoBlocker; 76 UIView* _incognitoBlocker;
73 // Whether the application is currently in the background. 77 // Whether the application is currently in the background.
74 // This is a workaround for rdar://22392526 where 78 // This is a workaround for rdar://22392526 where
75 // -applicationDidEnterBackground: can be called twice. 79 // -applicationDidEnterBackground: can be called twice.
76 // TODO(crbug.com/546196): Remove this once rdar://22392526 is fixed. 80 // TODO(crbug.com/546196): Remove this once rdar://22392526 is fixed.
77 BOOL _applicationInBackground; 81 BOOL _applicationInBackground;
78 // YES if cookies are currently being flushed to disk. 82 // YES if cookies are currently being flushed to disk.
79 BOOL _savingCookies; 83 BOOL _savingCookies;
80 } 84 }
81 85
82 // Safe mode coordinator. If this is non-nil, the app is displaying the safe 86 // Safe mode coordinator. If this is non-nil, the app is displaying the safe
83 // mode UI. 87 // mode UI.
84 @property(nonatomic, retain) SafeModeCoordinator* safeModeCoordinator; 88 @property(nonatomic, strong) SafeModeCoordinator* safeModeCoordinator;
85 89
86 // Return value for -requiresHandlingAfterLaunchWithOptions that determines if 90 // Return value for -requiresHandlingAfterLaunchWithOptions that determines if
87 // UIKit should make followup delegate calls such as 91 // UIKit should make followup delegate calls such as
88 // -performActionForShortcutItem or -openURL. 92 // -performActionForShortcutItem or -openURL.
89 @property(nonatomic, assign) BOOL shouldPerformAdditionalDelegateHandling; 93 @property(nonatomic, assign) BOOL shouldPerformAdditionalDelegateHandling;
90 94
91 // This method is the first to be called when user launches the application. 95 // This method is the first to be called when user launches the application.
92 // Depending on the background tasks history, the state of the application is 96 // Depending on the background tasks history, the state of the application is
93 // either INITIALIZATION_STAGE_BASIC or INITIALIZATION_STAGE_BACKGROUND so this 97 // either INITIALIZATION_STAGE_BASIC or INITIALIZATION_STAGE_BACKGROUND so this
94 // step cannot be included in the |startUpBrowserToStage:| method. 98 // step cannot be included in the |startUpBrowserToStage:| method.
(...skipping 13 matching lines...) Expand all
108 NOTREACHED(); 112 NOTREACHED();
109 return nil; 113 return nil;
110 } 114 }
111 115
112 - (instancetype) 116 - (instancetype)
113 initWithBrowserLauncher:(id<BrowserLauncher>)browserLauncher 117 initWithBrowserLauncher:(id<BrowserLauncher>)browserLauncher
114 startupInformation:(id<StartupInformation>)startupInformation 118 startupInformation:(id<StartupInformation>)startupInformation
115 applicationDelegate:(MainApplicationDelegate*)applicationDelegate { 119 applicationDelegate:(MainApplicationDelegate*)applicationDelegate {
116 self = [super init]; 120 self = [super init];
117 if (self) { 121 if (self) {
118 _startupInformation.reset(startupInformation); 122 _startupInformation = startupInformation;
119 _browserLauncher.reset(browserLauncher); 123 _browserLauncher = browserLauncher;
120 _mainApplicationDelegate.reset(applicationDelegate); 124 _mainApplicationDelegate = applicationDelegate;
121 } 125 }
122 return self; 126 return self;
123 } 127 }
124 128
125 #pragma mark - Properties implementation 129 #pragma mark - Properties implementation
126 130
127 - (SafeModeCoordinator*)safeModeCoordinator { 131 - (SafeModeCoordinator*)safeModeCoordinator {
128 return _safeModeCoordinator; 132 return _safeModeCoordinator;
129 } 133 }
130 134
131 - (void)setSafeModeCoordinator:(SafeModeCoordinator*)safeModeCoordinator { 135 - (void)setSafeModeCoordinator:(SafeModeCoordinator*)safeModeCoordinator {
132 _safeModeCoordinator.reset([safeModeCoordinator retain]); 136 _safeModeCoordinator = safeModeCoordinator;
133 } 137 }
134 138
135 - (void)setWindow:(UIWindow*)window { 139 - (void)setWindow:(UIWindow*)window {
136 _window.reset(window); 140 _window = window;
137 } 141 }
138 142
139 - (UIWindow*)window { 143 - (UIWindow*)window {
140 return _window; 144 return _window;
141 } 145 }
142 146
143 #pragma mark - Public methods. 147 #pragma mark - Public methods.
144 148
145 - (void)applicationDidEnterBackground:(UIApplication*)application 149 - (void)applicationDidEnterBackground:(UIApplication*)application
146 memoryHelper:(MemoryWarningHelper*)memoryHelper 150 memoryHelper:(MemoryWarningHelper*)memoryHelper
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 if (([[_browserLauncher browserViewInformation] currentBrowserState] && 189 if (([[_browserLauncher browserViewInformation] currentBrowserState] &&
186 [[_browserLauncher browserViewInformation] currentBrowserState] 190 [[_browserLauncher browserViewInformation] currentBrowserState]
187 ->IsOffTheRecord()) || 191 ->IsOffTheRecord()) ||
188 (tabSwitcherIsActive && 192 (tabSwitcherIsActive &&
189 ![[[_browserLauncher browserViewInformation] otrTabModel] isEmpty])) { 193 ![[[_browserLauncher browserViewInformation] otrTabModel] isEmpty])) {
190 // Cover the largest area potentially shown in the app switcher, in case the 194 // Cover the largest area potentially shown in the app switcher, in case the
191 // screenshot is reused in a different orientation or size class. 195 // screenshot is reused in a different orientation or size class.
192 CGRect screenBounds = [[UIScreen mainScreen] bounds]; 196 CGRect screenBounds = [[UIScreen mainScreen] bounds];
193 CGFloat maxDimension = 197 CGFloat maxDimension =
194 std::max(CGRectGetWidth(screenBounds), CGRectGetHeight(screenBounds)); 198 std::max(CGRectGetWidth(screenBounds), CGRectGetHeight(screenBounds));
195 _incognitoBlocker.reset([[UIView alloc] 199 _incognitoBlocker = [[UIView alloc]
196 initWithFrame:CGRectMake(0, 0, maxDimension, maxDimension)]); 200 initWithFrame:CGRectMake(0, 0, maxDimension, maxDimension)];
197 InstallBackgroundInView(_incognitoBlocker); 201 InstallBackgroundInView(_incognitoBlocker);
198 [_window addSubview:_incognitoBlocker]; 202 [_window addSubview:_incognitoBlocker];
199 } 203 }
200 204
201 // Do not save cookies if it is already in progress. 205 // Do not save cookies if it is already in progress.
202 if ([[_browserLauncher browserViewInformation] currentBVC].browserState && 206 if ([[_browserLauncher browserViewInformation] currentBVC].browserState &&
203 !_savingCookies) { 207 !_savingCookies) {
204 // Save cookies to disk. The empty critical closure guarantees that the task 208 // Save cookies to disk. The empty critical closure guarantees that the task
205 // will be run before backgrounding. 209 // will be run before backgrounding.
206 scoped_refptr<net::URLRequestContextGetter> getter = 210 scoped_refptr<net::URLRequestContextGetter> getter =
207 [[_browserLauncher browserViewInformation] currentBVC] 211 [[_browserLauncher browserViewInformation] currentBVC]
208 .browserState->GetRequestContext(); 212 .browserState->GetRequestContext();
209 _savingCookies = YES; 213 _savingCookies = YES;
210 base::Closure criticalClosure = base::MakeCriticalClosure(base::BindBlock(^{ 214 base::Closure criticalClosure =
211 DCHECK_CURRENTLY_ON(web::WebThread::UI); 215 base::MakeCriticalClosure(base::BindBlockArc(^{
212 _savingCookies = NO; 216 DCHECK_CURRENTLY_ON(web::WebThread::UI);
213 })); 217 _savingCookies = NO;
218 }));
214 web::WebThread::PostTask( 219 web::WebThread::PostTask(
215 web::WebThread::IO, FROM_HERE, base::BindBlock(^{ 220 web::WebThread::IO, FROM_HERE, base::BindBlockArc(^{
216 net::CookieStoreIOS* store = static_cast<net::CookieStoreIOS*>( 221 net::CookieStoreIOS* store = static_cast<net::CookieStoreIOS*>(
217 getter->GetURLRequestContext()->cookie_store()); 222 getter->GetURLRequestContext()->cookie_store());
218 // FlushStore() runs its callback on any thread. Jump back to UI. 223 // FlushStore() runs its callback on any thread. Jump back to UI.
219 store->FlushStore(base::Bind(&PostTaskOnUIThread, criticalClosure)); 224 store->FlushStore(base::Bind(&PostTaskOnUIThread, criticalClosure));
220 })); 225 }));
221 } 226 }
222 227
223 // Mark the startup as clean if it hasn't already been. 228 // Mark the startup as clean if it hasn't already been.
224 [[DeferredInitializationRunner sharedInstance] 229 [[DeferredInitializationRunner sharedInstance]
225 runBlockIfNecessary:kStartupAttemptReset]; 230 runBlockIfNecessary:kStartupAttemptReset];
(...skipping 26 matching lines...) Expand all
252 // is not complete. 257 // is not complete.
253 [self initializeUI]; 258 [self initializeUI];
254 return; 259 return;
255 } 260 }
256 if ([self isInSafeMode]) 261 if ([self isInSafeMode])
257 return; 262 return;
258 263
259 _applicationInBackground = NO; 264 _applicationInBackground = NO;
260 265
261 [_incognitoBlocker removeFromSuperview]; 266 [_incognitoBlocker removeFromSuperview];
262 _incognitoBlocker.reset(); 267 _incognitoBlocker = nil;
263 268
264 breakpad_helper::SetCurrentlyInBackground(false); 269 breakpad_helper::SetCurrentlyInBackground(false);
265 270
266 // Update the state of metrics and crash reporting, as the method of 271 // Update the state of metrics and crash reporting, as the method of
267 // communication may have changed while the app was in the background. 272 // communication may have changed while the app was in the background.
268 [metricsMediator updateMetricsStateBasedOnPrefsUserTriggered:NO]; 273 [metricsMediator updateMetricsStateBasedOnPrefsUserTriggered:NO];
269 274
270 // Send any feedback that might be still on temporary storage. 275 // Send any feedback that might be still on temporary storage.
271 ios::GetChromeBrowserProvider()->GetUserFeedbackProvider()->Synchronize(); 276 ios::GetChromeBrowserProvider()->GetUserFeedbackProvider()->Synchronize();
272 277
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 UMA_HISTOGRAM_COUNTS_10000("CookieIOS.CookieCountOnForegrounding", 313 UMA_HISTOGRAM_COUNTS_10000("CookieIOS.CookieCountOnForegrounding",
309 cookie_count); 314 cookie_count);
310 net::CheckForCookieLoss(cookie_count, 315 net::CheckForCookieLoss(cookie_count,
311 net::COOKIES_APPLICATION_FOREGROUNDED); 316 net::COOKIES_APPLICATION_FOREGROUNDED);
312 } 317 }
313 } 318 }
314 319
315 - (void)resumeSessionWithTabOpener:(id<TabOpening>)tabOpener 320 - (void)resumeSessionWithTabOpener:(id<TabOpening>)tabOpener
316 tabSwitcher:(id<TabSwitching>)tabSwitcher { 321 tabSwitcher:(id<TabSwitching>)tabSwitcher {
317 [_incognitoBlocker removeFromSuperview]; 322 [_incognitoBlocker removeFromSuperview];
318 _incognitoBlocker.reset(); 323 _incognitoBlocker = nil;
319 324
320 DCHECK([_browserLauncher browserInitializationStage] == 325 DCHECK([_browserLauncher browserInitializationStage] ==
321 INITIALIZATION_STAGE_FOREGROUND); 326 INITIALIZATION_STAGE_FOREGROUND);
322 _sessionStartTime = base::TimeTicks::Now(); 327 _sessionStartTime = base::TimeTicks::Now();
323 [[[_browserLauncher browserViewInformation] mainTabModel] 328 [[[_browserLauncher browserViewInformation] mainTabModel]
324 resetSessionMetrics]; 329 resetSessionMetrics];
325 330
326 if ([_startupInformation startupParameters]) { 331 if ([_startupInformation startupParameters]) {
327 [UserActivityHandler 332 [UserActivityHandler
328 handleStartupParametersWithTabOpener:tabOpener 333 handleStartupParametersWithTabOpener:tabOpener
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 441
437 #pragma mark - Internal methods. 442 #pragma mark - Internal methods.
438 443
439 - (void)initializeUI { 444 - (void)initializeUI {
440 _userInteracted = YES; 445 _userInteracted = YES;
441 [self saveLaunchDetailsToDefaults]; 446 [self saveLaunchDetailsToDefaults];
442 447
443 DCHECK([_window rootViewController] == nil); 448 DCHECK([_window rootViewController] == nil);
444 if ([SafeModeCoordinator shouldStart]) { 449 if ([SafeModeCoordinator shouldStart]) {
445 SafeModeCoordinator* safeModeCoordinator = 450 SafeModeCoordinator* safeModeCoordinator =
446 [[[SafeModeCoordinator alloc] initWithWindow:_window] autorelease]; 451 [[SafeModeCoordinator alloc] initWithWindow:_window];
447 452
448 self.safeModeCoordinator = safeModeCoordinator; 453 self.safeModeCoordinator = safeModeCoordinator;
449 [self.safeModeCoordinator setDelegate:self]; 454 [self.safeModeCoordinator setDelegate:self];
450 455
451 // Activate the main window, which will prompt the views to load. 456 // Activate the main window, which will prompt the views to load.
452 [_window makeKeyAndVisible]; 457 [_window makeKeyAndVisible];
453 458
454 [self.safeModeCoordinator start]; 459 [self.safeModeCoordinator start];
455 return; 460 return;
456 } 461 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 self = [self initWithBrowserLauncher:browserLauncher 495 self = [self initWithBrowserLauncher:browserLauncher
491 startupInformation:startupInformation 496 startupInformation:startupInformation
492 applicationDelegate:applicationDelegate]; 497 applicationDelegate:applicationDelegate];
493 if (self) { 498 if (self) {
494 _shouldOpenNTPTabOnActive = shouldOpenNTP; 499 _shouldOpenNTPTabOnActive = shouldOpenNTP;
495 } 500 }
496 return self; 501 return self;
497 } 502 }
498 503
499 @end 504 @end
OLDNEW
« no previous file with comments | « ios/chrome/app/application_delegate/app_state.h ('k') | ios/chrome/app/application_delegate/background_activity.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698