OLD | NEW |
1 /// Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 #include "athena/activity/public/activity_factory.h" | 5 #include "athena/activity/public/activity_factory.h" |
6 #include "athena/activity/public/activity_manager.h" | 6 #include "athena/activity/public/activity_manager.h" |
7 #include "athena/content/app_activity.h" | 7 #include "athena/content/app_activity.h" |
8 #include "athena/content/app_activity_registry.h" | 8 #include "athena/content/app_activity_registry.h" |
9 #include "athena/content/public/app_registry.h" | 9 #include "athena/content/public/app_registry.h" |
10 #include "athena/extensions/public/extensions_delegate.h" | 10 #include "athena/extensions/public/extensions_delegate.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 AppActivityRegistry* app_activity_registry() { | 46 AppActivityRegistry* app_activity_registry() { |
47 return app_activity_registry_; | 47 return app_activity_registry_; |
48 } | 48 } |
49 | 49 |
50 // Activity: | 50 // Activity: |
51 virtual ActivityViewModel* GetActivityViewModel() OVERRIDE { | 51 virtual ActivityViewModel* GetActivityViewModel() OVERRIDE { |
52 return this; | 52 return this; |
53 } | 53 } |
54 virtual void SetCurrentState(Activity::ActivityState state) OVERRIDE { | 54 virtual void SetCurrentState(Activity::ActivityState state) OVERRIDE { |
55 current_state_ = state; | 55 current_state_ = state; |
| 56 if (state == ACTIVITY_UNLOADED) |
| 57 app_activity_registry_->Unload(); |
56 } | 58 } |
57 virtual ActivityState GetCurrentState() OVERRIDE { | 59 virtual ActivityState GetCurrentState() OVERRIDE { |
58 return current_state_; | 60 return current_state_; |
59 } | 61 } |
60 virtual bool IsVisible() OVERRIDE { | 62 virtual bool IsVisible() OVERRIDE { |
61 return true; | 63 return true; |
62 } | 64 } |
63 virtual ActivityMediaState GetMediaState() OVERRIDE { | 65 virtual ActivityMediaState GetMediaState() OVERRIDE { |
64 return Activity::ACTIVITY_MEDIA_STATE_NONE; | 66 return Activity::ACTIVITY_MEDIA_STATE_NONE; |
65 } | 67 } |
66 virtual aura::Window* GetWindow() OVERRIDE { | 68 virtual aura::Window* GetWindow() OVERRIDE { |
67 return view_->GetWidget()->GetNativeWindow(); | 69 return view_->GetWidget()->GetNativeWindow(); |
68 } | 70 } |
69 | 71 |
70 // AppActivity: | 72 // AppActivity: |
71 virtual views::WebView* GetWebView() OVERRIDE { return NULL; } | 73 virtual views::WebView* GetWebView() OVERRIDE { return NULL; } |
72 | 74 |
73 // ActivityViewModel: | 75 // ActivityViewModel: |
74 virtual void Init() OVERRIDE {} | 76 virtual void Init() OVERRIDE {} |
75 virtual SkColor GetRepresentativeColor() const OVERRIDE { return 0; } | 77 virtual SkColor GetRepresentativeColor() const OVERRIDE { return 0; } |
76 virtual base::string16 GetTitle() const OVERRIDE { return title_; } | 78 virtual base::string16 GetTitle() const OVERRIDE { return title_; } |
77 virtual bool UsesFrame() const OVERRIDE { return true; } | 79 virtual bool UsesFrame() const OVERRIDE { return true; } |
78 virtual views::View* GetContentsView() OVERRIDE { return view_; } | 80 virtual views::View* GetContentsView() OVERRIDE { return view_; } |
79 virtual views::Widget* CreateWidget() OVERRIDE { return NULL; } | 81 virtual views::Widget* CreateWidget() OVERRIDE { return NULL; } |
80 virtual void CreateOverviewModeImage() OVERRIDE {} | 82 virtual gfx::ImageSkia GetOverviewModeImage() OVERRIDE { |
| 83 return gfx::ImageSkia(); |
| 84 } |
81 | 85 |
82 private: | 86 private: |
83 // If known the registry which holds all activities for the associated app. | 87 // If known the registry which holds all activities for the associated app. |
84 AppActivityRegistry* app_activity_registry_; | 88 AppActivityRegistry* app_activity_registry_; |
85 | 89 |
86 // The title of the activity. | 90 // The title of the activity. |
87 base::string16 title_; | 91 base::string16 title_; |
88 | 92 |
89 // Our view. | 93 // Our view. |
90 views::View* view_; | 94 views::View* view_; |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 TestAppActivity* app_activity = CreateAppActivity(kDummyApp1); | 275 TestAppActivity* app_activity = CreateAppActivity(kDummyApp1); |
272 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); | 276 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
273 AppActivityRegistry* app_activity_registry = | 277 AppActivityRegistry* app_activity_registry = |
274 app_activity->app_activity_registry(); | 278 app_activity->app_activity_registry(); |
275 EXPECT_EQ(1, app_activity_registry->NumberOfActivities()); | 279 EXPECT_EQ(1, app_activity_registry->NumberOfActivities()); |
276 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity->GetCurrentState()); | 280 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity->GetCurrentState()); |
277 | 281 |
278 // Calling Unload now should not do anything since at least one activity in | 282 // Calling Unload now should not do anything since at least one activity in |
279 // the registry is still visible. | 283 // the registry is still visible. |
280 app_activity_registry->Unload(); | 284 app_activity_registry->Unload(); |
| 285 RunAllPendingInMessageLoop(); |
281 EXPECT_EQ(0, test_extensions_delegate()->unload_called()); | 286 EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
282 | 287 |
283 // After setting our activity to unloaded however the application should get | 288 // After setting our activity to unloaded however the application should get |
284 // unloaded as requested. | 289 // unloaded as requested. |
285 app_activity->SetCurrentState(Activity::ACTIVITY_UNLOADED); | 290 app_activity->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
286 app_activity_registry->Unload(); | 291 RunAllPendingInMessageLoop(); |
287 EXPECT_EQ(1, test_extensions_delegate()->unload_called()); | 292 EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
288 | 293 |
289 // Check that our created application is gone, and instead a proxy got | 294 // Check that our created application is gone, and instead a proxy got |
290 // created. | 295 // created. |
291 ASSERT_EQ(1, AppRegistry::Get()->NumberOfApplications()); | 296 ASSERT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
292 ASSERT_EQ(app_activity_registry, | 297 ASSERT_EQ(app_activity_registry, |
293 AppRegistry::Get()->GetAppActivityRegistry(kDummyApp1, NULL)); | 298 AppRegistry::Get()->GetAppActivityRegistry(kDummyApp1, NULL)); |
294 EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); | 299 EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); |
295 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); | 300 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
296 ASSERT_TRUE(activity_proxy); | 301 ASSERT_TRUE(activity_proxy); |
(...skipping 20 matching lines...) Expand all Loading... |
317 EXPECT_EQ(3, GetActivityPosition(app_activity1b)); | 322 EXPECT_EQ(3, GetActivityPosition(app_activity1b)); |
318 EXPECT_EQ(2, GetActivityPosition(app_activity2b)); | 323 EXPECT_EQ(2, GetActivityPosition(app_activity2b)); |
319 EXPECT_EQ(1, GetActivityPosition(app_activity2a)); | 324 EXPECT_EQ(1, GetActivityPosition(app_activity2a)); |
320 EXPECT_EQ(0, GetActivityPosition(app_activity1a)); | 325 EXPECT_EQ(0, GetActivityPosition(app_activity1a)); |
321 | 326 |
322 // Unload an app and make sure that the proxy is in the newest activity slot. | 327 // Unload an app and make sure that the proxy is in the newest activity slot. |
323 AppActivityRegistry* app_activity_registry = | 328 AppActivityRegistry* app_activity_registry = |
324 app_activity2a->app_activity_registry(); | 329 app_activity2a->app_activity_registry(); |
325 app_activity2a->SetCurrentState(Activity::ACTIVITY_UNLOADED); | 330 app_activity2a->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
326 app_activity2b->SetCurrentState(Activity::ACTIVITY_UNLOADED); | 331 app_activity2b->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
327 app_activity2a->app_activity_registry()->Unload(); | 332 RunAllPendingInMessageLoop(); |
328 EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); | 333 EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); |
329 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); | 334 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
330 RunAllPendingInMessageLoop(); | 335 RunAllPendingInMessageLoop(); |
331 | 336 |
332 EXPECT_EQ(2, GetActivityPosition(app_activity1b)); | 337 EXPECT_EQ(2, GetActivityPosition(app_activity1b)); |
333 EXPECT_EQ(1, GetActivityPosition(activity_proxy)); | 338 EXPECT_EQ(1, GetActivityPosition(activity_proxy)); |
334 EXPECT_EQ(0, GetActivityPosition(app_activity1a)); | 339 EXPECT_EQ(0, GetActivityPosition(app_activity1a)); |
335 EXPECT_EQ(0, test_extensions_delegate()->restart_called()); | 340 EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
336 | 341 |
337 DeleteActivity(activity_proxy); | 342 DeleteActivity(activity_proxy); |
(...skipping 16 matching lines...) Expand all Loading... |
354 app_activity1->app_activity_registry(); | 359 app_activity1->app_activity_registry(); |
355 EXPECT_EQ(app_activity_registry, app_activity2->app_activity_registry()); | 360 EXPECT_EQ(app_activity_registry, app_activity2->app_activity_registry()); |
356 EXPECT_EQ(app_activity_registry, app_activity3->app_activity_registry()); | 361 EXPECT_EQ(app_activity_registry, app_activity3->app_activity_registry()); |
357 EXPECT_EQ(3, app_activity_registry->NumberOfActivities()); | 362 EXPECT_EQ(3, app_activity_registry->NumberOfActivities()); |
358 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity1->GetCurrentState()); | 363 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity1->GetCurrentState()); |
359 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity2->GetCurrentState()); | 364 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity2->GetCurrentState()); |
360 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity3->GetCurrentState()); | 365 EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity3->GetCurrentState()); |
361 | 366 |
362 // After setting all activities to UNLOADED the application should unload. | 367 // After setting all activities to UNLOADED the application should unload. |
363 app_activity1->SetCurrentState(Activity::ACTIVITY_UNLOADED); | 368 app_activity1->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
364 app_activity1->app_activity_registry()->Unload(); | 369 RunAllPendingInMessageLoop(); |
365 EXPECT_EQ(0, test_extensions_delegate()->unload_called()); | 370 EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
366 app_activity2->SetCurrentState(Activity::ACTIVITY_UNLOADED); | 371 app_activity2->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
367 app_activity2->app_activity_registry()->Unload(); | 372 RunAllPendingInMessageLoop(); |
368 EXPECT_EQ(0, test_extensions_delegate()->unload_called()); | 373 EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
369 app_activity3->SetCurrentState(Activity::ACTIVITY_UNLOADED); | 374 app_activity3->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
370 app_activity3->app_activity_registry()->Unload(); | 375 RunAllPendingInMessageLoop(); |
371 EXPECT_EQ(1, test_extensions_delegate()->unload_called()); | 376 EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
372 | 377 |
373 // Now there should only be the proxy activity left. | 378 // Now there should only be the proxy activity left. |
374 ASSERT_EQ(1, AppRegistry::Get()->NumberOfApplications()); | 379 ASSERT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
375 ASSERT_EQ(app_activity_registry, | 380 ASSERT_EQ(app_activity_registry, |
376 AppRegistry::Get()->GetAppActivityRegistry(kDummyApp1, NULL)); | 381 AppRegistry::Get()->GetAppActivityRegistry(kDummyApp1, NULL)); |
377 EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); | 382 EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); |
378 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); | 383 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
379 ASSERT_TRUE(activity_proxy); | 384 ASSERT_TRUE(activity_proxy); |
380 EXPECT_NE(app_activity1, activity_proxy); | 385 EXPECT_NE(app_activity1, activity_proxy); |
(...skipping 17 matching lines...) Expand all Loading... |
398 // position. | 403 // position. |
399 DisableResourceManager(); | 404 DisableResourceManager(); |
400 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); | 405 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
401 | 406 |
402 TestAppActivity* app_activity = CreateAppActivity(kDummyApp1); | 407 TestAppActivity* app_activity = CreateAppActivity(kDummyApp1); |
403 AppActivityRegistry* app_activity_registry = | 408 AppActivityRegistry* app_activity_registry = |
404 app_activity->app_activity_registry(); | 409 app_activity->app_activity_registry(); |
405 | 410 |
406 // Unload the activity. | 411 // Unload the activity. |
407 app_activity->SetCurrentState(Activity::ACTIVITY_UNLOADED); | 412 app_activity->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
408 app_activity_registry->Unload(); | 413 RunAllPendingInMessageLoop(); |
409 EXPECT_EQ(1, test_extensions_delegate()->unload_called()); | 414 EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
410 | 415 |
411 // Try to activate the activity again. This will force the application to | 416 // Try to activate the activity again. This will force the application to |
412 // reload. | 417 // reload. |
413 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); | 418 Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
414 activity_proxy->SetCurrentState(Activity::ACTIVITY_VISIBLE); | 419 activity_proxy->SetCurrentState(Activity::ACTIVITY_VISIBLE); |
415 EXPECT_EQ(1, test_extensions_delegate()->restart_called()); | 420 EXPECT_EQ(1, test_extensions_delegate()->restart_called()); |
416 | 421 |
417 // However - the restart in this test framework does not really restart and | 422 // However - the restart in this test framework does not really restart and |
418 // all objects should be still there.. | 423 // all objects should be still there.. |
419 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); | 424 EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
420 EXPECT_TRUE(app_activity_registry->unloaded_activity_proxy()); | 425 EXPECT_TRUE(app_activity_registry->unloaded_activity_proxy()); |
421 Activity::Delete(app_activity_registry->unloaded_activity_proxy()); | 426 Activity::Delete(app_activity_registry->unloaded_activity_proxy()); |
422 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); | 427 EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
423 } | 428 } |
424 | 429 |
425 } // namespace test | 430 } // namespace test |
426 } // namespace athena | 431 } // namespace athena |
OLD | NEW |