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

Unified Diff: athena/content/content_proxy.cc

Issue 863033002: Delete athena/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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/content_proxy.h ('k') | athena/content/media_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: athena/content/content_proxy.cc
diff --git a/athena/content/content_proxy.cc b/athena/content/content_proxy.cc
deleted file mode 100644
index ca089b389937863ecce9814ab7cbb92c87e46021..0000000000000000000000000000000000000000
--- a/athena/content/content_proxy.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-// 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.
-
-#include "athena/content/content_proxy.h"
-
-#include "base/bind.h"
-#include "base/threading/worker_pool.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/render_widget_host_view.h"
-#include "content/public/browser/web_contents.h"
-#include "ui/aura/window.h"
-#include "ui/gfx/codec/png_codec.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/image/image.h"
-#include "ui/gfx/image/image_png_rep.h"
-#include "ui/views/controls/webview/webview.h"
-#include "ui/views/widget/widget.h"
-
-namespace athena {
-
-// Encodes an A8 SkBitmap to grayscale PNG in a worker thread.
-class ProxyImageData : public base::RefCountedThreadSafe<ProxyImageData> {
- public:
- ProxyImageData() {
- }
-
- void EncodeImage(const SkBitmap& bitmap, base::Closure callback) {
- if (!base::WorkerPool::PostTaskAndReply(FROM_HERE,
- base::Bind(&ProxyImageData::EncodeOnWorker,
- this,
- bitmap),
- callback,
- true)) {
- // When coming here, the resulting image will be empty.
- DCHECK(false) << "Cannot start bitmap encode task.";
- callback.Run();
- }
- }
-
- scoped_refptr<base::RefCountedBytes> data() const { return data_; }
-
- private:
- friend class base::RefCountedThreadSafe<ProxyImageData>;
- ~ProxyImageData() {}
-
- void EncodeOnWorker(const SkBitmap& bitmap) {
- DCHECK_EQ(bitmap.colorType(), kAlpha_8_SkColorType);
- // Encode the A8 bitmap to grayscale PNG treating alpha as color intensity.
- std::vector<unsigned char> data;
- if (gfx::PNGCodec::EncodeA8SkBitmap(bitmap, &data))
- data_ = new base::RefCountedBytes(data);
- }
-
- scoped_refptr<base::RefCountedBytes> data_;
-
- DISALLOW_COPY_AND_ASSIGN(ProxyImageData);
-};
-
-ContentProxy::ContentProxy(views::WebView* web_view)
- : web_view_(web_view),
- content_visible_(true),
- content_loaded_(true),
- content_creation_called_(false),
- proxy_content_to_image_factory_(this) {
- // Note: The content will be hidden once the image got created.
- CreateProxyContent();
-}
-
-ContentProxy::~ContentProxy() {
- // If we still have a connection to the original web contents, we make it
- // visible again.
- ShowOriginalContent();
-}
-
-void ContentProxy::ContentWillUnload() {
- content_loaded_ = false;
-}
-
-gfx::ImageSkia ContentProxy::GetContentImage() {
- // While we compress to PNG, we use the original read back.
- if (!png_data_.get())
- return raw_image_;
-
- // Otherwise we convert the PNG.
- std::vector<gfx::ImagePNGRep> image_reps;
- image_reps.push_back(gfx::ImagePNGRep(png_data_, 1.0f));
- return *(gfx::Image(image_reps).ToImageSkia());
-}
-
-void ContentProxy::EvictContent() {
- raw_image_ = gfx::ImageSkia();
- png_data_->Release();
-}
-
-void ContentProxy::OnPreContentDestroyed() {
- // Since we are breaking now the connection to the old content, we make the
- // content visible again before we continue.
- // Note: Since the owning window is invisible, it does not matter that we
- // make the web content visible if the window gets destroyed shortly after.
- ShowOriginalContent();
-
- web_view_ = nullptr;
-}
-
-void ContentProxy::ShowOriginalContent() {
- if (web_view_ && !content_visible_) {
- // Show the original |web_view_| again.
- web_view_->SetFastResize(false);
- // If the content is loaded, we ask it to relayout itself since the
- // dimensions might have changed. If not, we will reload new content and no
- // layout is required for the old content.
- if (content_loaded_)
- web_view_->Layout();
- web_view_->GetWebContents()->GetNativeView()->Show();
- web_view_->SetVisible(true);
- content_visible_ = true;
- }
-}
-
-void ContentProxy::HideOriginalContent() {
- if (web_view_ && content_visible_) {
- // Hide the |web_view_|.
- // TODO(skuhne): We might consider removing the view from the window while
- // it's hidden - it should work the same way as show/hide and does not have
- // any window re-ordering effect. Furthermore we want possibly to suppress
- // any resizing of content (not only fast resize) here to avoid jank on
- // rotation.
- web_view_->GetWebContents()->GetNativeView()->Hide();
- web_view_->SetVisible(false);
- // Don't allow the content to get resized with window size changes.
- web_view_->SetFastResize(true);
- content_visible_ = false;
- }
-}
-
-void ContentProxy::CreateProxyContent() {
- DCHECK(!content_creation_called_);
- content_creation_called_ = true;
- // Unit tests might not have a |web_view_|.
- if (!web_view_)
- return;
-
- content::RenderViewHost* host =
- web_view_->GetWebContents()->GetRenderViewHost();
- DCHECK(host);
- // A never fully initialized content can come here with no view.
- if (!host->GetView())
- return;
- gfx::Size source = host->GetView()->GetViewBounds().size();
- gfx::Size target = gfx::Size(source.width() / 2, source.height() / 2);
- host->CopyFromBackingStore(
- gfx::Rect(),
- target,
- base::Bind(&ContentProxy::OnContentImageRead,
- proxy_content_to_image_factory_.GetWeakPtr()),
- kAlpha_8_SkColorType);
-}
-
-void ContentProxy::OnContentImageRead(const SkBitmap& bitmap,
- content::ReadbackResponse response) {
- // Now we can hide the content. Note that after hiding we are freeing memory
- // and if something goes wrong we will end up with an empty page.
- HideOriginalContent();
-
- if (response != content::READBACK_SUCCESS || bitmap.empty() ||
- bitmap.isNull())
- return;
-
- // While we are encoding the image, we keep the current image as reference
- // to have something for the overview mode to grab. Once we have the encoded
- // PNG, we will get rid of this.
- raw_image_ = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
-
- scoped_refptr<ProxyImageData> png_image = new ProxyImageData();
- png_image->EncodeImage(
- bitmap,
- base::Bind(&ContentProxy::OnContentImageEncodeComplete,
- proxy_content_to_image_factory_.GetWeakPtr(),
- png_image));
-}
-
-void ContentProxy::OnContentImageEncodeComplete(
- scoped_refptr<ProxyImageData> image) {
- png_data_ = image->data();
-
- // From now on we decode the image as needed to save memory.
- raw_image_ = gfx::ImageSkia();
-}
-
-} // namespace athena
« no previous file with comments | « athena/content/content_proxy.h ('k') | athena/content/media_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698