Index: athena/content/web_activity.cc |
diff --git a/athena/content/web_activity.cc b/athena/content/web_activity.cc |
index a169e243cf45e5aafc8d5eed9da485f84b4be010..580fb7dc9a116556370cb4e756f1d41abaadd22e 100644 |
--- a/athena/content/web_activity.cc |
+++ b/athena/content/web_activity.cc |
@@ -6,6 +6,7 @@ |
#include "athena/activity/public/activity_factory.h" |
#include "athena/activity/public/activity_manager.h" |
+#include "athena/content/content_proxy.h" |
#include "athena/content/public/dialogs.h" |
#include "athena/input/public/accelerator_manager.h" |
#include "base/bind.h" |
@@ -179,6 +180,10 @@ class AthenaWebView : public views::WebView { |
scoped_ptr<content::WebContents> old_contents(SwapWebContents( |
scoped_ptr<content::WebContents>(content::WebContents::Create( |
content::WebContents::CreateParams(browser_context()))))); |
+ // If there is a progress bar, we need to get rid of it now since its |
+ // associated content, parent window and layers will disappear with evicting |
+ // the content. |
+ progress_bar_.reset(); |
evicted_web_contents_.reset( |
content::WebContents::Create(content::WebContents::CreateParams( |
old_contents->GetBrowserContext()))); |
@@ -380,15 +385,18 @@ void WebActivity::SetCurrentState(Activity::ActivityState state) { |
case ACTIVITY_VISIBLE: |
if (!web_view_) |
break; |
- MakeVisible(); |
+ HideContentProxy(); |
ReloadAndObserve(); |
break; |
case ACTIVITY_INVISIBLE: |
if (!web_view_) |
break; |
+ |
if (current_state_ == ACTIVITY_VISIBLE) |
- MakeInvisible(); |
- ReloadAndObserve(); |
+ ShowContentProxy(); |
+ else |
+ ReloadAndObserve(); |
+ |
break; |
case ACTIVITY_BACKGROUND_LOW_PRIORITY: |
DCHECK(ACTIVITY_VISIBLE == current_state_ || |
@@ -402,6 +410,8 @@ void WebActivity::SetCurrentState(Activity::ActivityState state) { |
break; |
case ACTIVITY_UNLOADED: |
DCHECK_NE(ACTIVITY_UNLOADED, current_state_); |
+ if (content_proxy_) |
+ content_proxy_->ContentWillUnload(); |
Observe(NULL); |
web_view_->EvictContent(); |
break; |
@@ -467,10 +477,10 @@ views::View* WebActivity::GetContentsView() { |
web_view_->LoadInitialURL(url_); |
// Make sure the content gets properly shown. |
if (current_state_ == ACTIVITY_VISIBLE) { |
- MakeVisible(); |
+ HideContentProxy(); |
ReloadAndObserve(); |
} else if (current_state_ == ACTIVITY_INVISIBLE) { |
- MakeInvisible(); |
+ ShowContentProxy(); |
ReloadAndObserve(); |
} else { |
// If not previously specified, we change the state now to invisible.. |
@@ -484,23 +494,26 @@ views::Widget* WebActivity::CreateWidget() { |
return NULL; // Use default widget. |
} |
-void WebActivity::CreateOverviewModeImage() { |
- // TODO(skuhne): Create an overview. |
-} |
- |
gfx::ImageSkia WebActivity::GetOverviewModeImage() { |
- return overview_mode_image_; |
+ if (content_proxy_.get()) |
+ content_proxy_->GetContentImage(); |
+ return gfx::ImageSkia(); |
} |
void WebActivity::PrepareContentsForOverview() { |
// Turn on fast resizing to avoid re-laying out the web contents when |
- // entering / exiting overview mode. |
- web_view_->SetFastResize(true); |
+ // entering / exiting overview mode and the content is visible. |
+ if (!content_proxy_.get()) |
+ web_view_->SetFastResize(true); |
} |
void WebActivity::ResetContentsView() { |
- web_view_->SetFastResize(false); |
- web_view_->Layout(); |
+ // Turn on fast resizing to avoid re-laying out the web contents when |
+ // entering / exiting overview mode and the content is visible. |
+ if (!content_proxy_.get()) { |
+ web_view_->SetFastResize(false); |
+ web_view_->Layout(); |
+ } |
} |
void WebActivity::TitleWasSet(content::NavigationEntry* entry, |
@@ -553,37 +566,14 @@ void WebActivity::DidChangeThemeColor(SkColor theme_color) { |
ActivityManager::Get()->UpdateActivity(this); |
} |
-void WebActivity::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 app_activity, move this into a |
- // separate class. |
- web_view_->SetVisible(true); |
- web_view_->GetWebContents()->GetNativeView()->Show(); |
- // If we have a proxy image, we can delete it now since the contet goes live. |
- // TODO(skuhne): Once we have figured out how to do overview mode that code |
- // needs to go here. |
- overview_mode_image_ = gfx::ImageSkia(); |
+void WebActivity::HideContentProxy() { |
+ if (content_proxy_.get()) |
+ content_proxy_.reset(NULL); |
} |
-void WebActivity::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 app_activity, move this into a |
- // separate class. |
- DCHECK(web_view_->visible()); |
- // Create our proxy image / layer. |
- 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 read back took |
- // place. |
- web_view_->GetWebContents()->GetNativeView()->Hide(); |
- web_view_->SetVisible(false); |
+void WebActivity::ShowContentProxy() { |
+ if (!content_proxy_.get() && web_view_) |
+ content_proxy_.reset(new ContentProxy(web_view_, this)); |
} |
void WebActivity::ReloadAndObserve() { |