| Index: ios/chrome/app/application_state.h
|
| diff --git a/ios/chrome/app/application_state.h b/ios/chrome/app/application_state.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a5331a7b87a4830756a91b6bc48e2c8488f0ccd7
|
| --- /dev/null
|
| +++ b/ios/chrome/app/application_state.h
|
| @@ -0,0 +1,113 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// ====== New Architecture =====
|
| +// = This code is only used in the new iOS Chrome architecture. =
|
| +// ============================================================================
|
| +
|
| +#ifndef IOS_CHROME_APP_APPLICATION_STATE_H_
|
| +#define IOS_CHROME_APP_APPLICATION_STATE_H_
|
| +
|
| +#import <UIKit/UIKit.h>
|
| +
|
| +#import "ios/chrome/app/application_phase.h"
|
| +
|
| +namespace base {
|
| +class SupportsUserData;
|
| +}
|
| +
|
| +namespace ios {
|
| +class ChromeBrowserState;
|
| +}
|
| +
|
| +@protocol ApplicationStep;
|
| +@protocol URLOpening;
|
| +
|
| +typedef NSMutableArray<id<ApplicationStep>> ApplicationStepArray;
|
| +
|
| +// An ApplicationState object stores information about Chrome's status in the
|
| +// iOS application lifecycle and owns root-level global objects needed
|
| +// throughout the app (specifically, |browserState| and |window|).
|
| +// Additionally, an ApplicationState object keeps arrays of steps to perform
|
| +// in response to various changes in the overall application states.
|
| +// These steps are grouped into launch (used when the app is cold starting),
|
| +// termination (used when the app is shutting down), background (used when the
|
| +// app is backgrounding but staying resident), and foreground (used when the app
|
| +// is warm starting). Each group of steps is an ordered array of objects
|
| +// implementing the ApplicationStep protocol.
|
| +// Some methods (indicated below) will cause the ApplicationState to run one of
|
| +// these lists of steps; this consists of:
|
| +// (1) Calling -canRunInState: on the first item in the list, passing in the
|
| +// running ApplicationState object. If this returns NO, stop. Otherwise:
|
| +// (2) Removing the first item from the list and then calling -runInState:,
|
| +// again passing in the current state object. State objects can assume
|
| +// that they are no longer in the step array once -runInState: is called.
|
| +// (3) When runInState: completes, going back to (1). Since the list of steps
|
| +// had ownership of the application step that just ran, that step will
|
| +// then no longer be strongly held, and will thus be deallocated unless
|
| +// it is being strongly held elsewhere.
|
| +// Steps cannot themselves store state, since they don't persist after running
|
| +// by default. Steps can write to the ApplicationState's |state| object to
|
| +// store state.
|
| +@interface ApplicationState : NSObject
|
| +
|
| +// The UIApplication instance this object is storing state for.
|
| +@property(nonatomic, weak) UIApplication* application;
|
| +
|
| +// The launch options dictionary for this application, set via
|
| +// -launchWithOptions:
|
| +@property(nonatomic, readonly) NSDictionary* launchOptions;
|
| +
|
| +// The browser state this object stores; many launch steps are expected to
|
| +// make use of this. At least one launch step must assign to this property at
|
| +// some point in the launch sequence.
|
| +@property(nonatomic, assign) ios::ChromeBrowserState* browserState;
|
| +
|
| +// The current phase the application is in. Changing this doesn't trigger
|
| +// any launch steps; one of the phase change methods must be called to do that.
|
| +// Steps invoked during the phase change methods must update this property.
|
| +@property(nonatomic, assign) ApplicationPhase phase;
|
| +
|
| +// Persistant storage for application steps that need to have objects live
|
| +// beyond the execution of the step. This should be used sparingly for objects
|
| +// that actually need to persist for the lifetime of the app.
|
| +@property(nonatomic, readonly) base::SupportsUserData* persistentState;
|
| +
|
| +// The window for this application. Launch steps must create this, make it key
|
| +// and make it visible, although those three actions may be spread across
|
| +// more than one step.
|
| +@property(nonatomic, strong) UIWindow* window;
|
| +
|
| +// An object that can open URLs when the application is asked to do so by the
|
| +// operating system.
|
| +@property(nonatomic, weak) id<URLOpening> URLOpener;
|
| +
|
| +// Steps for each phase. Steps may add more steps to these arrays, and steps
|
| +// added in this way become strongly held by this object.
|
| +@property(nonatomic, readonly) ApplicationStepArray* launchSteps;
|
| +@property(nonatomic, readonly) ApplicationStepArray* terminationSteps;
|
| +@property(nonatomic, readonly) ApplicationStepArray* backgroundSteps;
|
| +@property(nonatomic, readonly) ApplicationStepArray* foregroundSteps;
|
| +
|
| +// Phase change methods.
|
| +
|
| +// Sets the launchOptions property to |launchOptions| and then runs the launch
|
| +// steps.
|
| +- (void)launchWithOptions:(NSDictionary*)launchOptions;
|
| +
|
| +// Runs the launch steps.
|
| +- (void)continueLaunch;
|
| +
|
| +// Runs the termination steps.
|
| +- (void)terminate;
|
| +
|
| +// Runs the background steps.
|
| +- (void)background;
|
| +
|
| +// Runs the foreground steps.
|
| +- (void)foreground;
|
| +
|
| +@end
|
| +
|
| +#endif // IOS_CHROME_APP_APPLICATION_STATE_H_
|
|
|