Index: blimp/client/core/contents/blimp_contents_view_impl.cc |
diff --git a/blimp/client/core/contents/blimp_contents_view_impl.cc b/blimp/client/core/contents/blimp_contents_view_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..28b043a26c12e17ccb162d32025423d38d00a144 |
--- /dev/null |
+++ b/blimp/client/core/contents/blimp_contents_view_impl.cc |
@@ -0,0 +1,66 @@ |
+// Copyright 2016 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 "blimp/client/core/contents/blimp_contents_view_impl.h" |
+ |
+#include "base/bind.h" |
+#include "base/callback_helpers.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+#include "blimp/client/core/contents/blimp_contents_impl.h" |
+#include "cc/output/copy_output_request.h" |
+#include "cc/output/copy_output_result.h" |
+#include "ui/gfx/geometry/size.h" |
+ |
+namespace blimp { |
+namespace client { |
+ |
+BlimpContentsViewImpl::BlimpContentsViewImpl( |
+ BlimpContentsImpl* blimp_contents, |
+ scoped_refptr<cc::Layer> contents_layer) |
+ : blimp_contents_(blimp_contents), |
+ contents_layer_(std::move(contents_layer)), |
+ weak_ptr_factory_(this) { |
+ DCHECK(blimp_contents_); |
+ DCHECK(contents_layer_); |
+} |
+ |
+BlimpContentsViewImpl::~BlimpContentsViewImpl() = default; |
+ |
+scoped_refptr<cc::Layer> BlimpContentsViewImpl::GetLayer() { |
+ return contents_layer_; |
+} |
+ |
+void BlimpContentsViewImpl::SetSizeAndScale(const gfx::Size& size, |
+ float device_scale_factor) { |
+ blimp_contents_->SetSizeAndScale(size, device_scale_factor); |
+} |
+ |
+bool BlimpContentsViewImpl::OnTouchEvent(const ui::MotionEvent& motion_event) { |
+ return blimp_contents_->compositor_manager()->OnTouchEvent(motion_event); |
+} |
+ |
+void BlimpContentsViewImpl::CopyFromCompositingSurface( |
+ const ReadbackRequestCallback& callback) { |
+ blimp_contents_->compositor_manager()->NotifyWhenDonePendingCommits( |
+ base::Bind(&BlimpContentsViewImpl::StartReadbackRequest, |
+ weak_ptr_factory_.GetWeakPtr(), callback)); |
+} |
+ |
+void BlimpContentsViewImpl::StartReadbackRequest( |
+ const ReadbackRequestCallback& callback) { |
+ std::unique_ptr<cc::CopyOutputRequest> request = |
+ cc::CopyOutputRequest::CreateBitmapRequest( |
+ base::Bind(&BlimpContentsViewImpl::OnReadbackComplete, |
+ weak_ptr_factory_.GetWeakPtr(), callback)); |
+ contents_layer_->RequestCopyOfOutput(std::move(request)); |
+} |
+ |
+void BlimpContentsViewImpl::OnReadbackComplete( |
+ const ReadbackRequestCallback& callback, |
+ std::unique_ptr<cc::CopyOutputResult> result) { |
+ callback.Run(result->TakeBitmap()); |
+} |
+ |
+} // namespace client |
+} // namespace blimp |