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/content/app_activity.h" | 5 #include "athena/content/app_activity.h" |
6 | 6 |
7 #include "apps/shell/browser/shell_app_window.h" | 7 #include "apps/shell/browser/shell_app_window.h" |
8 #include "athena/activity/public/activity_manager.h" | 8 #include "athena/activity/public/activity_manager.h" |
9 #include "content/public/browser/web_contents.h" | 9 #include "content/public/browser/web_contents.h" |
10 #include "ui/views/controls/webview/webview.h" | 10 #include "ui/views/controls/webview/webview.h" |
11 | 11 |
12 namespace athena { | 12 namespace athena { |
13 | 13 |
14 // TODO(mukai): specifies the same accelerators of WebActivity. | 14 // TODO(mukai): specifies the same accelerators of WebActivity. |
15 AppActivity::AppActivity(apps::ShellAppWindow* app_window) | 15 AppActivity::AppActivity(apps::ShellAppWindow* app_window) |
16 : app_window_(app_window), web_view_(NULL) { | 16 : app_window_(app_window), |
17 web_view_(NULL), | |
18 current_state_(ACTIVITY_UNLOADED) { | |
17 DCHECK(app_window_); | 19 DCHECK(app_window_); |
18 } | 20 } |
19 | 21 |
20 AppActivity::~AppActivity() { | 22 AppActivity::~AppActivity() { |
23 if (GetCurrentState() != ACTIVITY_UNLOADED) | |
24 SetCurrentState(ACTIVITY_UNLOADED); | |
21 } | 25 } |
22 | 26 |
23 ActivityViewModel* AppActivity::GetActivityViewModel() { | 27 ActivityViewModel* AppActivity::GetActivityViewModel() { |
24 return this; | 28 return this; |
25 } | 29 } |
26 | 30 |
31 void AppActivity::SetCurrentState(Activity::ActivityState state) { | |
32 switch (state) { | |
33 case ACTIVITY_VISIBLE: | |
34 // Fall through (for the moment). | |
35 case ACTIVITY_INVISIBLE: | |
36 // By clearing the overview mode image we allow the content to be shown. | |
37 overview_mode_image_ = gfx::ImageSkia(); | |
38 // TODO(skuhne): Find out how to reload an app from the extension system. | |
39 // If this does not work, the eviction needs to take place at a higher level. | |
oshima
2014/07/11 23:45:44
indent. please remove the commented out code. you
Mr4D (OOO till 08-26)
2014/07/12 01:38:38
Done.
| |
40 // if (web_view_->IsContentEvicted()) { | |
41 // DCHECK_EQ(ACTIVITY_UNLOAD, last_requested_state_); | |
42 // web_view_->ReloadContent(); | |
43 // } | |
44 break; | |
45 case ACTIVITY_BACKGROUND_LOW_PRIORITY: | |
46 DCHECK(ACTIVITY_VISIBLE == current_state_ || | |
47 ACTIVITY_INVISIBLE == current_state_); | |
48 // TODO(skuhne): Do this. | |
49 break; | |
50 case ACTIVITY_PERSISTENT: | |
51 DCHECK_EQ(ACTIVITY_BACKGROUND_LOW_PRIORITY, current_state_); | |
52 // TODO(skuhne): Do this. | |
53 break; | |
54 case ACTIVITY_UNLOADED: | |
55 DCHECK_NE(ACTIVITY_UNLOADED, current_state_); | |
56 // TODO(skuhne): Find out how to evict an app from the extension system. | |
57 // web_view_->EvictContent(); | |
58 break; | |
59 } | |
60 // Remember the last requested state. | |
61 current_state_ = state; | |
62 } | |
63 | |
64 Activity::ActivityState AppActivity::GetCurrentState() { | |
65 // TODO(skuhne): Check here also eviction status. | |
66 if (!web_view_) { | |
67 DCHECK_EQ(ACTIVITY_UNLOADED, current_state_); | |
68 return ACTIVITY_UNLOADED; | |
69 } | |
70 // TODO(skuhne): This should be controlled by an observer and should not | |
71 // reside here. | |
72 if (IsVisible() && current_state_ != ACTIVITY_VISIBLE) | |
73 SetCurrentState(ACTIVITY_VISIBLE); | |
74 // Note: If the activity is not visible it does not necessarily mean that it | |
75 // does not have GPU compositor resources (yet). | |
76 return current_state_; | |
77 } | |
78 | |
79 bool AppActivity::IsVisible() { | |
80 return web_view_ && web_view_->IsDrawn(); | |
81 } | |
82 | |
83 Activity::ActivityMediaState AppActivity::GetMediaState() { | |
84 // TODO(skuhne): The function GetTabMediaStateForContents(WebContents), | |
85 // and the AudioStreamMonitor needs to be moved from Chrome into contents to | |
86 // make it more modular and so that we can use it from here. | |
87 return Activity::ACTIVITY_MEDIA_STATE_NONE; | |
88 } | |
89 | |
27 void AppActivity::Init() { | 90 void AppActivity::Init() { |
28 } | 91 } |
29 | 92 |
30 SkColor AppActivity::GetRepresentativeColor() const { | 93 SkColor AppActivity::GetRepresentativeColor() const { |
31 // TODO(sad): Compute the color from the favicon. | 94 // TODO(sad): Compute the color from the favicon. |
32 return SK_ColorGRAY; | 95 return SK_ColorGRAY; |
33 } | 96 } |
34 | 97 |
35 base::string16 AppActivity::GetTitle() const { | 98 base::string16 AppActivity::GetTitle() const { |
36 return web_view_->GetWebContents()->GetTitle(); | 99 return web_view_->GetWebContents()->GetTitle(); |
37 } | 100 } |
38 | 101 |
39 bool AppActivity::UsesFrame() const { | 102 bool AppActivity::UsesFrame() const { |
40 return false; | 103 return false; |
41 } | 104 } |
42 | 105 |
43 views::View* AppActivity::GetContentsView() { | 106 views::View* AppActivity::GetContentsView() { |
44 if (!web_view_) { | 107 if (!web_view_) { |
45 // TODO(oshima): use apps::NativeAppWindowViews | 108 // TODO(oshima): use apps::NativeAppWindowViews |
46 content::WebContents* web_contents = | 109 content::WebContents* web_contents = |
47 app_window_->GetAssociatedWebContents(); | 110 app_window_->GetAssociatedWebContents(); |
48 web_view_ = new views::WebView(web_contents->GetBrowserContext()); | 111 web_view_ = new views::WebView(web_contents->GetBrowserContext()); |
49 web_view_->SetWebContents(web_contents); | 112 web_view_->SetWebContents(web_contents); |
113 SetCurrentState(ACTIVITY_INVISIBLE); | |
50 Observe(web_contents); | 114 Observe(web_contents); |
115 overview_mode_image_ = gfx::ImageSkia(); | |
51 } | 116 } |
52 return web_view_; | 117 return web_view_; |
53 } | 118 } |
54 | 119 |
120 void AppActivity::CreateOverviewModeImage() { | |
121 // TODO(skuhne): Implement this! | |
122 } | |
123 | |
124 gfx::ImageSkia AppActivity::GetOverviewModeImage() { | |
125 return overview_mode_image_; | |
126 } | |
127 | |
55 void AppActivity::TitleWasSet(content::NavigationEntry* entry, | 128 void AppActivity::TitleWasSet(content::NavigationEntry* entry, |
56 bool explicit_set) { | 129 bool explicit_set) { |
57 ActivityManager::Get()->UpdateActivity(this); | 130 ActivityManager::Get()->UpdateActivity(this); |
58 } | 131 } |
59 | 132 |
60 void AppActivity::DidUpdateFaviconURL( | 133 void AppActivity::DidUpdateFaviconURL( |
61 const std::vector<content::FaviconURL>& candidates) { | 134 const std::vector<content::FaviconURL>& candidates) { |
62 ActivityManager::Get()->UpdateActivity(this); | 135 ActivityManager::Get()->UpdateActivity(this); |
63 } | 136 } |
64 | 137 |
65 } // namespace athena | 138 } // namespace athena |
OLD | NEW |