OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/clean/chrome/app/steps/tab_grid_coordinator+application_step.h" | 5 #import "ios/clean/chrome/app/steps/root_coordinator+application_step.h" |
6 | 6 |
7 #import "base/supports_user_data.h" | 7 #import "base/supports_user_data.h" |
8 #import "ios/clean/chrome/app/application_state.h" | 8 #import "ios/clean/chrome/app/application_state.h" |
9 #import "ios/shared/chrome/browser/ui/browser_list/browser.h" | 9 #import "ios/shared/chrome/browser/ui/browser_list/browser.h" |
10 #import "ios/shared/chrome/browser/ui/browser_list/browser_list.h" | 10 #import "ios/shared/chrome/browser/ui/browser_list/browser_list.h" |
11 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.
h" | 11 #import "ios/shared/chrome/browser/ui/coordinators/browser_coordinator+internal.
h" |
12 | 12 |
13 #if !defined(__has_feature) || !__has_feature(objc_arc) | 13 #if !defined(__has_feature) || !__has_feature(objc_arc) |
14 #error "This file requires ARC support." | 14 #error "This file requires ARC support." |
15 #endif | 15 #endif |
16 | 16 |
17 namespace { | 17 namespace { |
18 // SupportsUserData storage container for a BrowserCoordinator object, which | 18 // SupportsUserData storage container for a BrowserCoordinator object, which |
19 // keeps a strong reference to the object it is initialized with. | 19 // keeps a strong reference to the object it is initialized with. |
20 class RootCoordinatorContainer : public base::SupportsUserData::Data { | 20 class RootCoordinatorContainer : public base::SupportsUserData::Data { |
21 public: | 21 public: |
22 explicit RootCoordinatorContainer(BrowserCoordinator* coordinator) | 22 explicit RootCoordinatorContainer(BrowserCoordinator* coordinator) |
23 : coordinator_(coordinator) {} | 23 : coordinator_(coordinator) {} |
24 | 24 |
25 private: | 25 private: |
26 // Mark this variable unused to avoid a compiler warning; the compiler | 26 // Mark this variable unused to avoid a compiler warning; the compiler |
27 // doesn't have visibility into the ARC-injected retain/release. | 27 // doesn't have visibility into the ARC-injected retain/release. |
28 BrowserCoordinator* __attribute__((unused)) coordinator_; | 28 BrowserCoordinator* __attribute__((unused)) coordinator_; |
29 }; | 29 }; |
30 | 30 |
31 const char kRootCoordinatorContainerKey[] = "root_coordinator"; | 31 const char kRootCoordinatorContainerKey[] = "root_coordinator"; |
32 } // namespace | 32 } // namespace |
33 | 33 |
34 @interface StopTabGridCoordinator : NSObject<ApplicationStep> | 34 @interface StopRootCoordinator : NSObject<ApplicationStep> |
35 @end | 35 @end |
36 | 36 |
37 @implementation TabGridCoordinator (ApplicationStep) | 37 @implementation RootCoordinator (ApplicationStep) |
38 | 38 |
39 - (BOOL)canRunInState:(ApplicationState*)state { | 39 - (BOOL)canRunInState:(ApplicationState*)state { |
40 return [state.window isKeyWindow] && state.phase == APPLICATION_FOREGROUNDED; | 40 return [state.window isKeyWindow] && state.phase == APPLICATION_FOREGROUNDED; |
41 } | 41 } |
42 | 42 |
43 - (void)runInState:(ApplicationState*)state { | 43 - (void)runInState:(ApplicationState*)state { |
44 self.browser = | 44 self.browser = |
45 BrowserList::FromBrowserState(state.browserState)->CreateNewBrowser(); | 45 BrowserList::FromBrowserState(state.browserState)->CreateNewBrowser(); |
46 [self start]; | 46 [self start]; |
47 | 47 |
48 state.window.rootViewController = self.viewController; | 48 state.window.rootViewController = self.viewController; |
49 | 49 |
50 // Size the main view controller to fit the whole screen. | 50 // Size the main view controller to fit the whole screen. |
51 [self.viewController.view setFrame:state.window.bounds]; | 51 [self.viewController.view setFrame:state.window.bounds]; |
52 | 52 |
53 // Tell the application state to use this object to open URLs. | 53 // Tell the application state to use this object to open URLs. |
54 state.URLOpener = self; | 54 state.URLOpener = self; |
55 | 55 |
56 // Show the window. | 56 // Show the window. |
57 state.window.hidden = NO; | 57 state.window.hidden = NO; |
58 | 58 |
59 // Make sure this object stays alive. | 59 // Make sure this object stays alive. |
60 state.persistentState->SetUserData(kRootCoordinatorContainerKey, | 60 state.persistentState->SetUserData(kRootCoordinatorContainerKey, |
61 new RootCoordinatorContainer(self)); | 61 new RootCoordinatorContainer(self)); |
62 | 62 |
63 // Add a termination step to remove this object. | 63 // Add a termination step to remove this object. |
64 [[state terminationSteps] addObject:[[StopTabGridCoordinator alloc] init]]; | 64 [[state terminationSteps] addObject:[[StopRootCoordinator alloc] init]]; |
65 } | 65 } |
66 | 66 |
67 @end | 67 @end |
68 | 68 |
69 @implementation StopTabGridCoordinator | 69 @implementation StopRootCoordinator |
70 | 70 |
71 - (BOOL)canRunInState:(ApplicationState*)state { | 71 - (BOOL)canRunInState:(ApplicationState*)state { |
72 return state.phase = APPLICATION_TERMINATING; | 72 return state.phase = APPLICATION_TERMINATING; |
73 } | 73 } |
74 | 74 |
75 - (void)runInState:(ApplicationState*)state { | 75 - (void)runInState:(ApplicationState*)state { |
76 state.persistentState->RemoveUserData(kRootCoordinatorContainerKey); | 76 state.persistentState->RemoveUserData(kRootCoordinatorContainerKey); |
77 } | 77 } |
78 | 78 |
79 @end | 79 @end |
OLD | NEW |