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

Unified Diff: athena/content/content_proxy.h

Issue 548633005: Adding overview / layer framework to Activities so that unloaded / sleeping activities can be shown… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « athena/content/app_activity_unittest.cc ('k') | athena/content/content_proxy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: athena/content/content_proxy.h
diff --git a/athena/content/content_proxy.h b/athena/content/content_proxy.h
new file mode 100644
index 0000000000000000000000000000000000000000..d42c0e1c201e44be7bdc32a0c88f66cf3248eb29
--- /dev/null
+++ b/athena/content/content_proxy.h
@@ -0,0 +1,118 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ATHENA_CONTENT_CONTENT_PROXY_H_
+#define ATHENA_CONTENT_CONTENT_PROXY_H_
+
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "ui/gfx/image/image_skia.h"
+
+namespace aura {
+class Window;
+}
+
+namespace views {
+class View;
+class WebView;
+}
+
+typedef unsigned int SkColor;
+
+namespace athena {
+
+class Activity;
+class AppActivity;
+class AppActivityProxy;
+class WebActivity;
+
+// This object creates and holds proxy content which gets shown instead of the
+// actual web content, generated from the passed |web_view|.
+// The created |proxy_content_| will be destroyed with the destruction of this
+// object.
+// Calling EvictContent() will release the rendered content and replaces it with
+// a solid color to save memory.
+// Calling Reparent() will transfer the |proxy_content_| to an ActivityProxy,
+// allowing the destruction of the original activity / content.
+class ContentProxy {
+ public:
+ // Creates the object by creating a sized down |web_view| layer and making it
+ // visible inside |activity|'s window.
+ ContentProxy(views::WebView* web_view, Activity* activity);
+ // TODO(skuhne): Add a function to create this object from a passed PNG, so
+ // that we can create it from a session restore.
+
+ // With the destruction of the object, the layer should get destroyed and the
+ // content should become visible again.
+ virtual ~ContentProxy();
+
+ // Called when the content will get unloaded.
+ void ContentWillUnload();
+
+ // Can be called to save resources by creating a layer with a solid color
+ // instead of creating a content image layer.
+ // Note: Currently the GPU does create a full size texture and fills it with
+ // the given color - so there isn't really memory savings yet.
+ void EvictContent();
+
+ // Get the image of the content. If there is no image known, an empty image
+ // will be returned.
+ gfx::ImageSkia GetContentImage();
+
+ // Transfer the owned |proxy_content_| to the |new_parent_window|.
+ // Once called, the |web_view_| will be made visible again and the connection
+ // to it will be removed since the old activity might go away.
+ // Note: This function should only be used by AppActivity.
+ void Reparent(aura::Window* new_parent_window);
+
+ private:
+ // Make the original (web)content visible. This call should only be paired
+ // with HideOriginalContent.
+ void ShowOriginalContent();
+
+ // Make the content invisible. This call should only be paired with
+ // MakeVisible.
+ void HideOriginalContent();
+
+ // Creates proxy content from |web_view_|. If there is no |web_view_|,
+ // a solid |proxy_content_| with |background_color_| will be created.
+ void CreateProxyContent();
+
+ // Creates a solid |proxy_content_| with |background_color_|.
+ void CreateSolidProxyContent();
+
+ // Show the |proxy_content_| in the current |window_|.
+ void ShowProxyContent();
+
+ // Removes the |proxy_content_| from the window again.
+ void HideProxyContent();
+
+ // The web view which is associated with this object. It will be NULL after
+ // the object got called with Reparent(), since the Activity which owns it
+ // will be destroyed shortly after.
+ views::WebView* web_view_;
+
+ // The window which shows our |proxy_content_|,
+ aura::Window* window_;
+
+ // The background color to use when evicted.
+ SkColor background_color_;
+
+ // If we have an image (e.g. from session restore) it is stored here.
+ gfx::ImageSkia image_;
+
+ // True if the content is loaded.
+ bool content_loaded_;
+
+ // The content representation which which will be presented to the user. It
+ // will either contain a shrunken down image of the |web_view| content or a
+ // solid |background_color_|.
+ scoped_ptr<views::View> proxy_content_;
+
+ DISALLOW_COPY_AND_ASSIGN(ContentProxy);
+};
+
+} // namespace athena
+
+#endif // ATHENA_CONTENT_CONTENT_PROXY_H_
« no previous file with comments | « athena/content/app_activity_unittest.cc ('k') | athena/content/content_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698