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

Side by Side Diff: athena/content/app_activity_unittest.cc

Issue 477523002: Athena: Adding basic resource management framework (un-/re-loading) of V2 applications (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 /// Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "athena/activity/public/activity_manager.h"
6
7 #include "athena/activity/public/activity_factory.h"
8 #include "athena/content/app_activity.h"
9 #include "athena/content/app_activity_registry.h"
10 #include "athena/content/public/app_content_delegate.h"
11 #include "athena/content/public/app_registry.h"
12 #include "athena/test/athena_test_base.h"
13 #include "extensions/shell/browser/shell_app_window.h"
14 #include "ui/views/view.h"
15
16
17 namespace content {
18 class BrowserContext;
19 }
20
21 namespace athena {
22 namespace test {
23
24 namespace {
25
26 // An identifier for the running apps.
27 const char kDummyApp1[] = "aaaaaaa";
28 const char kDummyApp2[] = "bbbbbbb";
29
30 // A dummy test app activity which works without content / ShellAppWindow.
31 class TestAppActivity : public AppActivity {
32 public:
33 explicit TestAppActivity(const std::string& app_id) :
34 AppActivity(NULL),
35 app_id_(app_id),
36 view_(new views::View()) {
37 app_activity_registry_ =
38 AppRegistry::Get()->GetAppActivityRegistry(app_id, NULL);
39 app_activity_registry_->RegisterAppActivity(this);
40 }
41 virtual ~TestAppActivity() {
42 app_activity_registry_->UnregisterAppActivity(this);
43 // We need to remove ourselves here since the activity will not be destroyed
44 // with the window closure.
45 ActivityManager::Get()->RemoveActivity(this);
46 }
47
48 AppActivityRegistry* app_activity_registry() {
49 return app_activity_registry_;
50 }
51
52 // Activity:
53 virtual ActivityViewModel* GetActivityViewModel() OVERRIDE {
54 return this;
55 }
56 virtual bool IsVisible() OVERRIDE {
57 return true;
58 }
59 virtual ActivityMediaState GetMediaState() OVERRIDE {
60 return Activity::ACTIVITY_MEDIA_STATE_NONE;
61 }
62 virtual aura::Window* GetWindow() OVERRIDE { return NULL; }
63
64 // ActivityViewModel:
65 virtual void Init() OVERRIDE {}
66 virtual SkColor GetRepresentativeColor() const OVERRIDE { return 0; }
67 virtual base::string16 GetTitle() const OVERRIDE { return title_; }
68 virtual bool UsesFrame() const OVERRIDE { return true; }
69 virtual views::View* GetContentsView() OVERRIDE { return view_; }
70 virtual void CreateOverviewModeImage() OVERRIDE {}
71
72 private:
73 // If known the registry which holds all activities for the associated app.
74 AppActivityRegistry* app_activity_registry_;
75
76 // The application ID.
77 const std::string& app_id_;
78
79 // The title of the activity.
80 base::string16 title_;
81
82 // Our view.
83 views::View* view_;
84
85 DISALLOW_COPY_AND_ASSIGN(TestAppActivity);
86 };
87
88 // An AppContentDelegateClass which we can query for call stats.
89 class TestAppContentDelegate : public AppContentDelegate {
90 public:
91 TestAppContentDelegate() : unload_called_(0),
92 restart_called_(0) {}
93 virtual ~TestAppContentDelegate() {}
94
95 int unload_called() { return unload_called_; }
96 int restart_called() { return restart_called_; }
97 void SetExtensionID(const std::string& extension_id) {
98 extension_id_to_return_ = extension_id;
99 }
100
101 // Unload an application. Returns true when unloaded.
102 virtual bool UnloadApplication(
103 const std::string& app_id,
104 content::BrowserContext* browser_context) OVERRIDE {
105 unload_called_++;
106 return true;
107 }
108 // Restarts an application. Returns true when the restart was initiated.
109 virtual bool RestartApplication(
110 const std::string& app_id,
111 content::BrowserContext* browser_context) OVERRIDE {
112 restart_called_++;
113 return true;
114 }
115 // Returns the application ID (or an empty string) for a given web content.
116 virtual std::string GetExtensionID(
117 content::WebContents* web_contents) OVERRIDE {
118 return extension_id_to_return_;
119 }
120
121 private:
122 int unload_called_;
123 int restart_called_;
124 std::string extension_id_to_return_;
125
126 DISALLOW_COPY_AND_ASSIGN(TestAppContentDelegate);
127 };
128
129 } // namespace
130
131 // Our testing base.
132 class AppActivityTest : public AthenaTestBase {
133 public:
134 AppActivityTest() : test_app_content_delegate_(NULL) {}
135 virtual ~AppActivityTest() {}
136
137 // AthenaTestBase:
138 virtual void SetUp() OVERRIDE {
139 AthenaTestBase::SetUp();
140 // Create and install our TestAppContentDelegate with instrumentation.
141 test_app_content_delegate_ = new TestAppContentDelegate();
142 AppRegistry::Get()->SetDelegate(test_app_content_delegate_);
143 }
144
145 // A function to create an Activity.
146 TestAppActivity* CreateAppActivity(const std::string& app_id) {
147 TestAppActivity* activity = new TestAppActivity(app_id);
148 ActivityManager::Get()->AddActivity(activity);
149 return activity;
150 }
151
152 protected:
153 TestAppContentDelegate* test_app_content_delegate() {
154 return test_app_content_delegate_;
155 }
156
157 private:
158 TestAppContentDelegate* test_app_content_delegate_;
159
160 DISALLOW_COPY_AND_ASSIGN(AppActivityTest);
161 };
162
163 // Only creates one activity and destroys it.
164 TEST_F(AppActivityTest, OneAppActivity) {
165 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications());
166 {
167 scoped_ptr<TestAppActivity> app_activity(CreateAppActivity(kDummyApp1));
168 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications());
169 EXPECT_EQ(1, app_activity->app_activity_registry()->NumberOfActivities());
170 }
171 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications());
172 EXPECT_EQ(0, test_app_content_delegate()->unload_called());
173 EXPECT_EQ(0, test_app_content_delegate()->restart_called());
174 }
175
176 // Test running of two applications.
177 TEST_F(AppActivityTest, TwoAppsWithOneActivityEach) {
178 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications());
179 {
180 scoped_ptr<TestAppActivity> app_activity1(CreateAppActivity(kDummyApp1));
181 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications());
182 EXPECT_EQ(1, app_activity1->app_activity_registry()->NumberOfActivities());
183 scoped_ptr<TestAppActivity> app_activity2(CreateAppActivity(kDummyApp2));
184 EXPECT_EQ(2, AppRegistry::Get()->NumberOfApplications());
185 EXPECT_EQ(1, app_activity2->app_activity_registry()->NumberOfActivities());
186 EXPECT_EQ(1, app_activity1->app_activity_registry()->NumberOfActivities());
187 }
188 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications());
189 EXPECT_EQ(0, test_app_content_delegate()->unload_called());
190 EXPECT_EQ(0, test_app_content_delegate()->restart_called());
191 }
192
193 // Create and destroy two activities for the same application.
194 TEST_F(AppActivityTest, TwoAppActivities) {
195 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications());
196 {
197 TestAppActivity* app_activity1 = CreateAppActivity(kDummyApp1);
198 TestAppActivity* app_activity2 = CreateAppActivity(kDummyApp1);
199 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications());
200 EXPECT_EQ(2, app_activity1->app_activity_registry()->NumberOfActivities());
201 EXPECT_EQ(app_activity1->app_activity_registry(),
202 app_activity2->app_activity_registry());
203 delete app_activity1;
oshima 2014/08/18 17:51:43 scoped_ptr
Mr4D (OOO till 08-26) 2014/08/18 22:36:31 This is outdated and got already changed.
204 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications());
205 EXPECT_EQ(1, app_activity2->app_activity_registry()->NumberOfActivities());
206 delete app_activity2;
207 }
208 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications());
209 {
210 TestAppActivity* app_activity1 = CreateAppActivity(kDummyApp1);
211 TestAppActivity* app_activity2 = CreateAppActivity(kDummyApp1);
212 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications());
213 EXPECT_EQ(2, app_activity1->app_activity_registry()->NumberOfActivities());
214 EXPECT_EQ(app_activity1->app_activity_registry(),
215 app_activity2->app_activity_registry());
216 delete app_activity2;
217 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications());
218 EXPECT_EQ(1, app_activity1->app_activity_registry()->NumberOfActivities());
219 delete app_activity1;
220 }
221 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications());
222 EXPECT_EQ(0, test_app_content_delegate()->unload_called());
223 EXPECT_EQ(0, test_app_content_delegate()->restart_called());
224 }
225
226 // Test unload and the creation of the proxy.
227 TEST_F(AppActivityTest, TestUnloadWithoutDestruction) {
228 // TODO.
229 }
230
231 // Test that when unloading an app while multiple apps / activities are present,
232 // the proxy gets created in the correct location.
233 TEST_F(AppActivityTest, TestUnloadProxyLocation) {
234 // TODO.
235 }
236
237 // Test that an unload with multiple activities of the same app will only unload
238 // when all activities were marked for unloading.
239 TEST_F(AppActivityTest, TestMultipleActivityUnloadLock) {
240 // TODO.
241 }
242
243 // Test that activating the proxy will reload the application.
244 TEST_F(AppActivityTest, TestUnloadWithReload) {
245 // TODO.
246 }
247
248 } // namespace test
249 } // namespace athena
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698