Chromium Code Reviews| Index: athena/content/app_activity.cc |
| diff --git a/athena/content/app_activity.cc b/athena/content/app_activity.cc |
| index 62ecb2cf859ab326e85c897d97ba4b4aab4bf78a..2f83d99744f8c1e4f2b255bbd6587120947a647e 100644 |
| --- a/athena/content/app_activity.cc |
| +++ b/athena/content/app_activity.cc |
| @@ -22,30 +22,24 @@ AppActivity::AppActivity(const std::string& app_id) |
| app_activity_registry_(NULL) { |
| } |
| -AppActivity::~AppActivity() { |
| - // If this activity is registered, we unregister it now. |
| - if (app_activity_registry_) |
| - app_activity_registry_->UnregisterAppActivity(this); |
| -} |
| - |
| ActivityViewModel* AppActivity::GetActivityViewModel() { |
| return this; |
| } |
| void AppActivity::SetCurrentState(Activity::ActivityState state) { |
| - ActivityState current_state = state; |
| + DCHECK_NE(state, current_state_); |
| + ActivityState current_state = current_state_; |
| // Remember the last requested state now so that a call to GetCurrentState() |
| // returns the new state. |
| current_state_ = state; |
| switch (state) { |
| case ACTIVITY_VISIBLE: |
| - // Fall through (for the moment). |
| + MakeVisible(); |
| + return; |
| case ACTIVITY_INVISIBLE: |
| - // By clearing the overview mode image we allow the content to be shown. |
| - overview_mode_image_ = gfx::ImageSkia(); |
| - // Note: A reload from the unloaded state will be performed through the |
| - // |AppActivityProxy| object and no further action isn't necessary here. |
| + if (current_state == ACTIVITY_VISIBLE) |
| + MakeInvisible(); |
| break; |
| case ACTIVITY_BACKGROUND_LOW_PRIORITY: |
| DCHECK(ACTIVITY_VISIBLE == current_state || |
| @@ -70,23 +64,14 @@ void AppActivity::SetCurrentState(Activity::ActivityState state) { |
| Activity::ActivityState AppActivity::GetCurrentState() { |
| if (!web_view_) { |
| DCHECK_EQ(ACTIVITY_UNLOADED, current_state_); |
| - return ACTIVITY_UNLOADED; |
| } |
|
oshima
2014/09/04 16:39:23
nuke {}
Mr4D (OOO till 08-26)
2014/09/04 19:10:57
Done.
|
| - // TODO(skuhne): This should be controlled by an observer and should not |
| - // reside here. |
| - if (IsVisible() && current_state_ != ACTIVITY_VISIBLE) |
| - SetCurrentState(ACTIVITY_VISIBLE); |
| - // Note: If the activity is not visible it does not necessarily mean that it |
| - // does not have GPU compositor resources (yet). |
| return current_state_; |
| } |
| bool AppActivity::IsVisible() { |
| return web_view_ && |
| - web_view_->IsDrawn() && |
| - current_state_ != ACTIVITY_UNLOADED && |
| - GetWindow() && |
| - GetWindow()->IsVisible(); |
| + web_view_->visible() && |
| + current_state_ != ACTIVITY_UNLOADED; |
| } |
| Activity::ActivityMediaState AppActivity::GetMediaState() { |
| @@ -101,6 +86,18 @@ aura::Window* AppActivity::GetWindow() { |
| } |
| void AppActivity::Init() { |
| + DCHECK(app_activity_registry_); |
| + Activity* app_proxy = app_activity_registry_->unloaded_activity_proxy(); |
| + if (app_proxy) { |
| + // TODO(skuhne): This should call the WindowListProvider to re-arrange. |
| + // Note: At this time the |AppActivity| did not get registered to the |
| + // |ResourceManager| - so we can move it around if needed. |
| + aura::Window* proxy_window = app_proxy->GetWindow(); |
| + proxy_window->parent()->StackChildBelow(GetWindow(), proxy_window); |
| + Activity::CloseActivity(app_proxy); |
| + // With the removal the object, the proxy should be deleted. |
| + DCHECK(!app_activity_registry_->unloaded_activity_proxy()); |
| + } |
| } |
| SkColor AppActivity::GetRepresentativeColor() const { |
| @@ -122,9 +119,16 @@ views::View* AppActivity::GetContentsView() { |
| content::WebContents* web_contents = GetWebContents(); |
| web_view_ = new views::WebView(web_contents->GetBrowserContext()); |
| web_view_->SetWebContents(web_contents); |
| - SetCurrentState(ACTIVITY_INVISIBLE); |
| + // Make sure the content gets properly shown. |
| + if (current_state_ == ACTIVITY_VISIBLE) { |
| + MakeVisible(); |
| + } else if (current_state_ == ACTIVITY_INVISIBLE) { |
| + MakeInvisible(); |
| + } else { |
| + // If not previously specified, we change the state now to invisible.. |
| + SetCurrentState(ACTIVITY_INVISIBLE); |
| + } |
| Observe(web_contents); |
| - overview_mode_image_ = gfx::ImageSkia(); |
| RegisterActivity(); |
| } |
| return web_view_; |
| @@ -138,6 +142,12 @@ gfx::ImageSkia AppActivity::GetOverviewModeImage() { |
| return overview_mode_image_; |
| } |
| +AppActivity::~AppActivity() { |
| + // If this activity is registered, we unregister it now. |
| + if (app_activity_registry_) |
| + app_activity_registry_->UnregisterAppActivity(this); |
| +} |
| + |
| void AppActivity::TitleWasSet(content::NavigationEntry* entry, |
| bool explicit_set) { |
| ActivityManager::Get()->UpdateActivity(this); |
| @@ -162,4 +172,37 @@ void AppActivity::RegisterActivity() { |
| app_activity_registry_->RegisterAppActivity(this); |
| } |
| +void AppActivity::MakeVisible() { |
| + // TODO(skuhne): Once we know how to handle the Overview mode, this has to |
| + // be moved into an ActivityContentController which is used by all activities. |
| + // Make the content visible. |
| + // TODO(skuhne): If this can be combined with web_activity, move this into a |
| + // separate class. |
| + web_view_->SetVisible(true); |
| + web_view_->GetWebContents()->WasShown(); |
| + // Remove our proxy image. |
| + // TODO(skuhne): Once we have figured out how to do overview mode that code |
| + // needs to go here. |
| + overview_mode_image_ = gfx::ImageSkia(); |
| +} |
| + |
| +void AppActivity::MakeInvisible() { |
| + // TODO(skuhne): Once we know how to handle the Overview mode, this has to |
| + // be moved into an ActivityContentController which is used by all activities. |
| + // TODO(skuhne): If this can be combined with web_activity, move this into a |
| + // separate class. |
| + DCHECK(web_view_->visible()); |
| + // Create our proxy image. |
| + if (current_state_ == ACTIVITY_VISIBLE) { |
| + // Create a proxy image of the current visible content. |
| + // TODO(skuhne): Do this once we figure out how to do overview mode. |
| + overview_mode_image_ = gfx::ImageSkia(); |
| + } |
| + // Now we can hide this. |
| + // Note: This might have to be done asynchronously after the readback took |
| + // place. |
| + web_view_->GetWebContents()->WasHidden(); |
| + web_view_->SetVisible(false); |
| +} |
| + |
| } // namespace athena |