summaryrefslogtreecommitdiffstats
path: root/remoting
diff options
context:
space:
mode:
authorsergeyu <sergeyu@chromium.org>2016-03-25 13:27:21 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-25 20:28:56 +0000
commit24ed25b8af345a6004dfc45f52401aebe20ac76e (patch)
treec973836f55de3f214121c53b228e6865ed977496 /remoting
parent97ddb5c86d7d72e450db6618ec2937d751ecceb5 (diff)
downloadchromium_src-24ed25b8af345a6004dfc45f52401aebe20ac76e.zip
chromium_src-24ed25b8af345a6004dfc45f52401aebe20ac76e.tar.gz
chromium_src-24ed25b8af345a6004dfc45f52401aebe20ac76e.tar.bz2
Remove shaped desktop support from remoting host and client.
We no longer need to support shaped desktop, so the corresponding code can be removed. Review URL: https://codereview.chromium.org/1827043004 Cr-Commit-Position: refs/heads/master@{#383340}
Diffstat (limited to 'remoting')
-rw-r--r--remoting/client/plugin/chromoting_instance.cc26
-rw-r--r--remoting/client/plugin/chromoting_instance.h1
-rw-r--r--remoting/client/plugin/pepper_video_renderer.h4
-rw-r--r--remoting/client/plugin/pepper_video_renderer_2d.cc11
-rw-r--r--remoting/client/plugin/pepper_video_renderer_2d.h4
-rw-r--r--remoting/client/plugin/pepper_video_renderer_3d.cc21
-rw-r--r--remoting/client/plugin/pepper_video_renderer_3d.h2
-rw-r--r--remoting/codec/video_decoder_vpx.cc20
-rw-r--r--remoting/codec/video_decoder_vpx.h8
-rw-r--r--remoting/codec/video_encoder_helper.cc13
-rw-r--r--remoting/codec/video_encoder_helper_unittest.cc18
-rw-r--r--remoting/host/BUILD.gn2
-rw-r--r--remoting/host/desktop_shape_tracker.h39
-rw-r--r--remoting/host/desktop_shape_tracker_linux.cc17
-rw-r--r--remoting/host/desktop_shape_tracker_mac.cc17
-rw-r--r--remoting/host/desktop_shape_tracker_unittest.cc33
-rw-r--r--remoting/host/desktop_shape_tracker_win.cc146
-rw-r--r--remoting/host/shaped_desktop_capturer.cc44
-rw-r--r--remoting/host/shaped_desktop_capturer.h45
-rw-r--r--remoting/host/shaped_desktop_capturer_unittest.cc66
-rw-r--r--remoting/proto/video.proto12
-rw-r--r--remoting/remoting_host_srcs.gypi6
-rw-r--r--remoting/remoting_test.gypi2
-rw-r--r--remoting/test/test_video_renderer.cc3
-rw-r--r--remoting/webapp/base/js/client_plugin_host_desktop_impl.js29
-rw-r--r--remoting/webapp/base/js/client_plugin_impl.js2
-rw-r--r--remoting/webapp/base/js/host_desktop.js4
27 files changed, 6 insertions, 589 deletions
diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc
index a7c5601..af4954b 100644
--- a/remoting/client/plugin/chromoting_instance.cc
+++ b/remoting/client/plugin/chromoting_instance.cc
@@ -56,6 +56,7 @@
#include "remoting/protocol/host_stub.h"
#include "remoting/protocol/transport_context.h"
#include "third_party/webrtc/base/helpers.h"
+#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
#include "url/gurl.h"
namespace remoting {
@@ -355,31 +356,6 @@ void ChromotingInstance::OnVideoSize(const webrtc::DesktopSize& size,
PostLegacyJsonMessage("onDesktopSize", std::move(data));
}
-void ChromotingInstance::OnVideoShape(const webrtc::DesktopRegion* shape) {
- if ((shape && desktop_shape_ && shape->Equals(*desktop_shape_)) ||
- (!shape && !desktop_shape_)) {
- return;
- }
-
- scoped_ptr<base::DictionaryValue> shape_message(new base::DictionaryValue());
- if (shape) {
- desktop_shape_ = make_scoped_ptr(new webrtc::DesktopRegion(*shape));
- scoped_ptr<base::ListValue> rects_value(new base::ListValue());
- for (webrtc::DesktopRegion::Iterator i(*shape); !i.IsAtEnd(); i.Advance()) {
- const webrtc::DesktopRect& rect = i.rect();
- scoped_ptr<base::ListValue> rect_value(new base::ListValue());
- rect_value->AppendInteger(rect.left());
- rect_value->AppendInteger(rect.top());
- rect_value->AppendInteger(rect.width());
- rect_value->AppendInteger(rect.height());
- rects_value->Append(rect_value.release());
- }
- shape_message->Set("rects", rects_value.release());
- }
-
- PostLegacyJsonMessage("onDesktopShape", std::move(shape_message));
-}
-
void ChromotingInstance::OnVideoFrameDirtyRegion(
const webrtc::DesktopRegion& dirty_region) {
scoped_ptr<base::ListValue> rects_value(new base::ListValue());
diff --git a/remoting/client/plugin/chromoting_instance.h b/remoting/client/plugin/chromoting_instance.h
index 49c92c4..4ebb19d 100644
--- a/remoting/client/plugin/chromoting_instance.h
+++ b/remoting/client/plugin/chromoting_instance.h
@@ -132,7 +132,6 @@ class ChromotingInstance : public ClientUserInterface,
void OnVideoFirstFrameReceived() override;
void OnVideoSize(const webrtc::DesktopSize& size,
const webrtc::DesktopVector& dpi) override;
- void OnVideoShape(const webrtc::DesktopRegion* shape) override;
void OnVideoFrameDirtyRegion(
const webrtc::DesktopRegion& dirty_region) override;
diff --git a/remoting/client/plugin/pepper_video_renderer.h b/remoting/client/plugin/pepper_video_renderer.h
index a5637bc..32f5360 100644
--- a/remoting/client/plugin/pepper_video_renderer.h
+++ b/remoting/client/plugin/pepper_video_renderer.h
@@ -44,10 +44,6 @@ class PepperVideoRenderer : public protocol::VideoRenderer {
virtual void OnVideoSize(const webrtc::DesktopSize& size,
const webrtc::DesktopVector& dpi) = 0;
- // Called when desktop shape changes. |shape| should be NULL if frames are
- // un-shaped.
- virtual void OnVideoShape(const webrtc::DesktopRegion* shape) = 0;
-
// Called with each frame's updated region, if EnableDebugDirtyRegion(true)
// was called.
virtual void OnVideoFrameDirtyRegion(
diff --git a/remoting/client/plugin/pepper_video_renderer_2d.cc b/remoting/client/plugin/pepper_video_renderer_2d.cc
index 978335b..214d404 100644
--- a/remoting/client/plugin/pepper_video_renderer_2d.cc
+++ b/remoting/client/plugin/pepper_video_renderer_2d.cc
@@ -159,17 +159,6 @@ void PepperVideoRenderer2D::DrawFrame(scoped_ptr<webrtc::DesktopFrame> frame,
event_handler_->OnVideoSize(source_size_, source_dpi_);
}
- const webrtc::DesktopRegion* shape = frame->shape();
- if (shape) {
- if (!source_shape_ || !source_shape_->Equals(*shape)) {
- source_shape_ = make_scoped_ptr(new webrtc::DesktopRegion(*shape));
- event_handler_->OnVideoShape(source_shape_.get());
- }
- } else if (source_shape_) {
- source_shape_ = nullptr;
- event_handler_->OnVideoShape(nullptr);
- }
-
// If Debug dirty region is enabled then emit it.
if (debug_dirty_region_)
event_handler_->OnVideoFrameDirtyRegion(frame->updated_region());
diff --git a/remoting/client/plugin/pepper_video_renderer_2d.h b/remoting/client/plugin/pepper_video_renderer_2d.h
index 014ccec..2c6336f 100644
--- a/remoting/client/plugin/pepper_video_renderer_2d.h
+++ b/remoting/client/plugin/pepper_video_renderer_2d.h
@@ -21,7 +21,6 @@
#include "remoting/client/plugin/pepper_video_renderer.h"
#include "remoting/protocol/frame_consumer.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
namespace base {
class ScopedClosureRunner;
@@ -86,9 +85,6 @@ class PepperVideoRenderer2D : public PepperVideoRenderer,
// Resolution of the most recent source frame dots-per-inch.
webrtc::DesktopVector source_dpi_;
- // Shape of the most recent source frame.
- scoped_ptr<webrtc::DesktopRegion> source_shape_;
-
// Done callbacks for the frames that have been painted but not flushed.
ScopedVector<base::ScopedClosureRunner> pending_frames_done_callbacks_;
diff --git a/remoting/client/plugin/pepper_video_renderer_3d.cc b/remoting/client/plugin/pepper_video_renderer_3d.cc
index 4c22b14..dca14fd 100644
--- a/remoting/client/plugin/pepper_video_renderer_3d.cc
+++ b/remoting/client/plugin/pepper_video_renderer_3d.cc
@@ -19,6 +19,7 @@
#include "remoting/proto/video.pb.h"
#include "remoting/protocol/performance_tracker.h"
#include "remoting/protocol/session_config.h"
+#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
namespace remoting {
@@ -220,26 +221,6 @@ void PepperVideoRenderer3D::ProcessVideoPacket(scoped_ptr<VideoPacket> packet,
if (resolution_changed)
event_handler_->OnVideoSize(frame_size_, frame_dpi_);
- // Process the frame shape, if supplied.
- if (packet->has_use_desktop_shape()) {
- if (packet->use_desktop_shape()) {
- scoped_ptr<webrtc::DesktopRegion> shape(new webrtc::DesktopRegion);
- for (int i = 0; i < packet->desktop_shape_rects_size(); ++i) {
- Rect remoting_rect = packet->desktop_shape_rects(i);
- shape->AddRect(webrtc::DesktopRect::MakeXYWH(
- remoting_rect.x(), remoting_rect.y(), remoting_rect.width(),
- remoting_rect.height()));
- }
- if (!frame_shape_ || !frame_shape_->Equals(*shape)) {
- frame_shape_ = std::move(shape);
- event_handler_->OnVideoShape(frame_shape_.get());
- }
- } else if (frame_shape_) {
- frame_shape_ = nullptr;
- event_handler_->OnVideoShape(nullptr);
- }
- }
-
// Report the dirty region, for debugging, if requested.
if (debug_dirty_region_) {
webrtc::DesktopRegion dirty_region;
diff --git a/remoting/client/plugin/pepper_video_renderer_3d.h b/remoting/client/plugin/pepper_video_renderer_3d.h
index d7df94f..de2346e 100644
--- a/remoting/client/plugin/pepper_video_renderer_3d.h
+++ b/remoting/client/plugin/pepper_video_renderer_3d.h
@@ -20,7 +20,6 @@
#include "remoting/client/plugin/pepper_video_renderer.h"
#include "remoting/protocol/video_stub.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
struct PPB_OpenGLES2;
@@ -99,7 +98,6 @@ class PepperVideoRenderer3D : public PepperVideoRenderer,
webrtc::DesktopSize frame_size_;
webrtc::DesktopVector frame_dpi_;
- scoped_ptr<webrtc::DesktopRegion> frame_shape_;
webrtc::DesktopSize view_size_;
diff --git a/remoting/codec/video_decoder_vpx.cc b/remoting/codec/video_decoder_vpx.cc
index b784a9e..b076128 100644
--- a/remoting/codec/video_decoder_vpx.cc
+++ b/remoting/codec/video_decoder_vpx.cc
@@ -117,26 +117,6 @@ bool VideoDecoderVpx::DecodePacket(const VideoPacket& packet,
RenderRect(image, rect, frame);
}
- // Process the frame shape, if supplied.
- if (packet.has_use_desktop_shape()) {
- if (packet.use_desktop_shape()) {
- if (!desktop_shape_)
- desktop_shape_ = make_scoped_ptr(new webrtc::DesktopRegion);
- desktop_shape_->Clear();
- for (int i = 0; i < packet.desktop_shape_rects_size(); ++i) {
- Rect proto_rect = packet.desktop_shape_rects(i);
- desktop_shape_->AddRect(webrtc::DesktopRect::MakeXYWH(
- proto_rect.x(), proto_rect.y(), proto_rect.width(),
- proto_rect.height()));
- }
- } else {
- desktop_shape_.reset();
- }
- }
-
- if (desktop_shape_)
- frame->set_shape(new webrtc::DesktopRegion(*desktop_shape_));
-
return true;
}
diff --git a/remoting/codec/video_decoder_vpx.h b/remoting/codec/video_decoder_vpx.h
index d002988..a386ca2 100644
--- a/remoting/codec/video_decoder_vpx.h
+++ b/remoting/codec/video_decoder_vpx.h
@@ -14,11 +14,6 @@
typedef const struct vpx_codec_iface vpx_codec_iface_t;
typedef struct vpx_image vpx_image_t;
-namespace webrtc {
-class DesktopRect;
-class DesktopRegion;
-} // namespace webrtc
-
namespace remoting {
class VideoDecoderVpx : public VideoDecoder {
@@ -38,9 +33,6 @@ class VideoDecoderVpx : public VideoDecoder {
ScopedVpxCodec codec_;
- // The shape of the most-recent frame, if any.
- scoped_ptr<webrtc::DesktopRegion> desktop_shape_;
-
DISALLOW_COPY_AND_ASSIGN(VideoDecoderVpx);
};
diff --git a/remoting/codec/video_encoder_helper.cc b/remoting/codec/video_encoder_helper.cc
index b8e8d1e..d079162 100644
--- a/remoting/codec/video_encoder_helper.cc
+++ b/remoting/codec/video_encoder_helper.cc
@@ -44,19 +44,6 @@ VideoEncoderHelper::CreateVideoPacketWithUpdatedRegion(
dirty_rect->set_height(rect.height());
}
- // Record the shape of the frame, if specified.
- if (frame.shape()) {
- packet->set_use_desktop_shape(true);
- for (webrtc::DesktopRegion::Iterator r(*frame.shape());
- !r.IsAtEnd(); r.Advance()) {
- Rect* rect = packet->add_desktop_shape_rects();
- rect->set_x(r.rect().left());
- rect->set_y(r.rect().top());
- rect->set_width(r.rect().width());
- rect->set_height(r.rect().height());
- }
- }
-
// Store frame DPI.
if (!frame.dpi().is_zero()) {
packet->mutable_format()->set_x_dpi(frame.dpi().x());
diff --git a/remoting/codec/video_encoder_helper_unittest.cc b/remoting/codec/video_encoder_helper_unittest.cc
index 569ecac..73035cc 100644
--- a/remoting/codec/video_encoder_helper_unittest.cc
+++ b/remoting/codec/video_encoder_helper_unittest.cc
@@ -22,9 +22,6 @@ TEST(VideoEncoderHelperTest, PropagatesCommonFields) {
frame.set_dpi(DesktopVector(96, 97));
frame.set_capture_time_ms(20);
frame.mutable_updated_region()->SetRect(DesktopRect::MakeLTRB(0, 0, 16, 16));
- scoped_ptr<DesktopRegion> shape(
- new DesktopRegion(DesktopRect::MakeLTRB(16, 0, 32, 16)));
- frame.set_shape(shape.release());
VideoEncoderHelper helper;
scoped_ptr<VideoPacket> packet(helper.CreateVideoPacket(frame));
@@ -37,11 +34,6 @@ TEST(VideoEncoderHelperTest, PropagatesCommonFields) {
EXPECT_TRUE(packet->format().has_y_dpi());
EXPECT_EQ(1, packet->dirty_rects().size());
-
- ASSERT_TRUE(packet->has_use_desktop_shape());
- EXPECT_TRUE(packet->use_desktop_shape());
-
- EXPECT_EQ(1, packet->desktop_shape_rects().size());
}
TEST(VideoEncoderHelperTest, ZeroDpi) {
@@ -59,16 +51,6 @@ TEST(VideoEncoderHelperTest, ZeroDpi) {
EXPECT_FALSE(packet->format().has_y_dpi());
}
-TEST(VideoEncoderHelperTest, NoShape) {
- BasicDesktopFrame frame(DesktopSize(32, 32));
-
- VideoEncoderHelper helper;
- scoped_ptr<VideoPacket> packet(helper.CreateVideoPacket(frame));
-
- EXPECT_FALSE(packet->use_desktop_shape());
- EXPECT_EQ(0, packet->desktop_shape_rects().size());
-}
-
TEST(VideoEncoderHelperTest, NoScreenSizeIfUnchanged) {
BasicDesktopFrame frame(DesktopSize(32, 32));
// Set DPI so that the packet will have a format, with DPI but no size.
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn
index 68d0a8e..cf085af 100644
--- a/remoting/host/BUILD.gn
+++ b/remoting/host/BUILD.gn
@@ -261,7 +261,6 @@ if (is_mac) { # TODO(GYP) Mac build of remoting host.
"config_file_watcher_unittest.cc",
"daemon_process_unittest.cc",
"desktop_process_unittest.cc",
- "desktop_shape_tracker_unittest.cc",
"gcd_rest_client_unittest.cc",
"gcd_state_updater_unittest.cc",
"heartbeat_sender_unittest.cc",
@@ -298,7 +297,6 @@ if (is_mac) { # TODO(GYP) Mac build of remoting host.
"setup/me2me_native_messaging_host_unittest.cc",
"setup/oauth_helper_unittest.cc",
"setup/pin_validator_unittest.cc",
- "shaped_desktop_capturer_unittest.cc",
"third_party_auth_config_unittest.cc",
"token_validator_factory_impl_unittest.cc",
"touch_injector_win_unittest.cc",
diff --git a/remoting/host/desktop_shape_tracker.h b/remoting/host/desktop_shape_tracker.h
deleted file mode 100644
index 3d9b430..0000000
--- a/remoting/host/desktop_shape_tracker.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2013 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 REMOTING_HOST_DESKTOP_SHAPE_TRACKER_H_
-#define REMOTING_HOST_DESKTOP_SHAPE_TRACKER_H_
-
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-
-namespace webrtc {
-class DesktopCaptureOptions;
-class DesktopRegion;
-} // namespace webrtc
-
-namespace remoting {
-
-// Tracks changes in the area of the desktop that is occupied by windows.
-class DesktopShapeTracker {
- public:
- static scoped_ptr<DesktopShapeTracker> Create(
- webrtc::DesktopCaptureOptions options);
-
- DesktopShapeTracker() {}
- virtual ~DesktopShapeTracker() {}
-
- // Recalculates the desktop shape, as returned by desktop_shape();
- virtual void RefreshDesktopShape() = 0;
-
- // Returns a reference to the most recently capture desktop shape.
- virtual const webrtc::DesktopRegion& desktop_shape() = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DesktopShapeTracker);
-};
-
-} // namespace remoting
-
-#endif // REMOTING_HOST_DESKTOP_SHAPE_TRACKER_H_
diff --git a/remoting/host/desktop_shape_tracker_linux.cc b/remoting/host/desktop_shape_tracker_linux.cc
deleted file mode 100644
index 1149ad0..0000000
--- a/remoting/host/desktop_shape_tracker_linux.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2013 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 "remoting/host/desktop_shape_tracker.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
-
-namespace remoting {
-
-scoped_ptr<DesktopShapeTracker> DesktopShapeTracker::Create(
- webrtc::DesktopCaptureOptions options) {
- return nullptr;
-}
-
-} // namespace remoting
diff --git a/remoting/host/desktop_shape_tracker_mac.cc b/remoting/host/desktop_shape_tracker_mac.cc
deleted file mode 100644
index 1149ad0..0000000
--- a/remoting/host/desktop_shape_tracker_mac.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2013 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 "remoting/host/desktop_shape_tracker.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
-
-namespace remoting {
-
-scoped_ptr<DesktopShapeTracker> DesktopShapeTracker::Create(
- webrtc::DesktopCaptureOptions options) {
- return nullptr;
-}
-
-} // namespace remoting
diff --git a/remoting/host/desktop_shape_tracker_unittest.cc b/remoting/host/desktop_shape_tracker_unittest.cc
deleted file mode 100644
index bb1a90d..0000000
--- a/remoting/host/desktop_shape_tracker_unittest.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2013 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.
-
-// DesktopShapeTracker tests assume that there is at least one top-level
-// window on-screen. Currently we assume the presence of the Explorer
-// task bar window.
-
-#include "remoting/host/desktop_shape_tracker.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "build/build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
-
-namespace remoting {
-
-// Verify that the desktop shape tracker returns a non-empty region.
-TEST(DesktopShapeTrackerTest, Basic) {
- scoped_ptr<DesktopShapeTracker> shape_tracker = DesktopShapeTracker::Create(
- webrtc::DesktopCaptureOptions::CreateDefault());
-
- // Shape tracker is not supported on all platforms yet.
-#if defined(OS_WIN)
- shape_tracker->RefreshDesktopShape();
- EXPECT_FALSE(shape_tracker->desktop_shape().is_empty());
-#else
- EXPECT_FALSE(shape_tracker);
-#endif
-}
-
-} // namespace remoting
diff --git a/remoting/host/desktop_shape_tracker_win.cc b/remoting/host/desktop_shape_tracker_win.cc
deleted file mode 100644
index 547d9e3..0000000
--- a/remoting/host/desktop_shape_tracker_win.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2013 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 "remoting/host/desktop_shape_tracker.h"
-
-#include <stddef.h>
-
-#include <vector>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/win/scoped_gdi_object.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
-
-namespace remoting {
-
-namespace {
-
-struct EnumDesktopShapeData {
- EnumDesktopShapeData()
- : window_region(CreateRectRgn(0, 0, 0, 0)),
- desktop_region(CreateRectRgn(0, 0, 0, 0)) {
- }
- base::win::ScopedRegion window_region;
- base::win::ScopedRegion desktop_region;
-};
-
-class DesktopShapeTrackerWin : public DesktopShapeTracker {
- public:
- DesktopShapeTrackerWin();
- ~DesktopShapeTrackerWin() override;
-
- void RefreshDesktopShape() override;
- const webrtc::DesktopRegion& desktop_shape() override;
-
- private:
- // Callback passed to EnumWindows() to enumerate windows.
- static BOOL CALLBACK EnumWindowsCallback(HWND window, LPARAM lparam);
-
- // The most recently calculated desktop region.
- webrtc::DesktopRegion desktop_shape_;
-
- // Stored to compare with newly calculated desktop shapes, to avoid converting
- // to an DesktopRegion unless the shape has actually changed.
- base::win::ScopedRegion old_desktop_region_;
-
- DISALLOW_COPY_AND_ASSIGN(DesktopShapeTrackerWin);
-};
-
-DesktopShapeTrackerWin::DesktopShapeTrackerWin()
- : old_desktop_region_(CreateRectRgn(0, 0, 0, 0)) {
-}
-
-DesktopShapeTrackerWin::~DesktopShapeTrackerWin() {
-}
-
-void DesktopShapeTrackerWin::RefreshDesktopShape() {
- // Accumulate a new desktop shape from current window positions.
- scoped_ptr<EnumDesktopShapeData> shape_data(new EnumDesktopShapeData);
- if (!EnumWindows(EnumWindowsCallback, (LPARAM)shape_data.get())) {
- PLOG(ERROR) << "Failed to enumerate windows";
- desktop_shape_.Clear();
- return;
- }
-
- // If the shape has changed, refresh |desktop_shape_|.
- if (!EqualRgn(shape_data->desktop_region.get(), old_desktop_region_.get())) {
- old_desktop_region_ = std::move(shape_data->desktop_region);
-
- // Determine the size of output buffer required to receive the region.
- DWORD bytes_size = GetRegionData(old_desktop_region_.get(), 0, nullptr);
- CHECK(bytes_size != 0);
-
- // Fetch the Windows RECTs that comprise the region.
- std::vector<char> buffer(bytes_size);
- LPRGNDATA region_data = reinterpret_cast<LPRGNDATA>(buffer.data());
- DWORD result =
- GetRegionData(old_desktop_region_.get(), bytes_size, region_data);
- CHECK(result == bytes_size);
- const LPRECT rects = reinterpret_cast<LPRECT>(&region_data->Buffer[0]);
-
- // Reset |desktop_shape_| and add new rectangles into it.
- desktop_shape_.Clear();
- for (size_t i = 0; i < region_data->rdh.nCount; ++i) {
- desktop_shape_.AddRect(webrtc::DesktopRect::MakeLTRB(
- rects[i].left, rects[i].top, rects[i].right, rects[i].bottom));
- }
- }
-}
-
-const webrtc::DesktopRegion& DesktopShapeTrackerWin::desktop_shape() {
- return desktop_shape_;
-}
-
-// static
-BOOL DesktopShapeTrackerWin::EnumWindowsCallback(HWND window, LPARAM lparam) {
- EnumDesktopShapeData* data = reinterpret_cast<EnumDesktopShapeData*>(lparam);
- HRGN desktop_region = data->desktop_region.get();
- HRGN window_region = data->window_region.get();
-
- // Is the window visible?
- if (!IsWindow(window) || !IsWindowVisible(window) || IsIconic(window))
- return TRUE;
-
- // Find the desktop position of the window (including non-client-area).
- RECT window_rect;
- if (!GetWindowRect(window, &window_rect))
- return TRUE;
-
- // Find the shape of the window, in window coords.
- // GetWindowRgn will overwrite the current contents of |window_region|.
- if (GetWindowRgn(window, window_region) != ERROR) {
- // Translate the window region into desktop coordinates.
- OffsetRgn(window_region, window_rect.left, window_rect.top);
- } else {
- // Window has no shape, or an error occurred, so assume it's rectangular.
- SetRectRgn(window_region, window_rect.left, window_rect.top,
- window_rect.right, window_rect.bottom);
- }
-
- // TODO(wez): If the window is maximized then we should clip it to the
- // display on which it is maximized.
- // if (IsZoomed(window))
- // CombineRgn(window_region, window_region, screen_region, RGN_AND);
-
- // Merge the window region into the accumulated desktop region. Window
- // regions are combined together before converting the result to
- // DesktopRegion. It assumed that this approach is more efficient than
- // converting each window region individually.
- CombineRgn(desktop_region, desktop_region, window_region, RGN_OR);
-
- return TRUE;
-}
-
-} // namespace
-
-// static
-scoped_ptr<DesktopShapeTracker> DesktopShapeTracker::Create(
- webrtc::DesktopCaptureOptions options) {
- return make_scoped_ptr(new DesktopShapeTrackerWin());
-}
-
-} // namespace remoting
diff --git a/remoting/host/shaped_desktop_capturer.cc b/remoting/host/shaped_desktop_capturer.cc
deleted file mode 100644
index 7760c71..0000000
--- a/remoting/host/shaped_desktop_capturer.cc
+++ /dev/null
@@ -1,44 +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 "remoting/host/shaped_desktop_capturer.h"
-
-#include <utility>
-
-#include "base/logging.h"
-#include "remoting/host/desktop_shape_tracker.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
-
-namespace remoting {
-
-ShapedDesktopCapturer::ShapedDesktopCapturer(
- scoped_ptr<webrtc::DesktopCapturer> desktop_capturer,
- scoped_ptr<DesktopShapeTracker> shape_tracker)
- : desktop_capturer_(std::move(desktop_capturer)),
- shape_tracker_(std::move(shape_tracker)),
- callback_(nullptr) {}
-
-ShapedDesktopCapturer::~ShapedDesktopCapturer() {}
-
-void ShapedDesktopCapturer::Start(webrtc::DesktopCapturer::Callback* callback) {
- callback_ = callback;
- desktop_capturer_->Start(this);
-}
-
-void ShapedDesktopCapturer::Capture(const webrtc::DesktopRegion& region) {
- desktop_capturer_->Capture(region);
-}
-
-void ShapedDesktopCapturer::SetSharedMemoryFactory(
- rtc::scoped_ptr<webrtc::SharedMemoryFactory> shared_memory_factory) {
- desktop_capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
-}
-
-void ShapedDesktopCapturer::OnCaptureCompleted(webrtc::DesktopFrame* frame) {
- shape_tracker_->RefreshDesktopShape();
- frame->set_shape(new webrtc::DesktopRegion(shape_tracker_->desktop_shape()));
- callback_->OnCaptureCompleted(frame);
-}
-
-} // namespace remoting
diff --git a/remoting/host/shaped_desktop_capturer.h b/remoting/host/shaped_desktop_capturer.h
deleted file mode 100644
index 5b0ba97..0000000
--- a/remoting/host/shaped_desktop_capturer.h
+++ /dev/null
@@ -1,45 +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.
-
-#ifndef REMOTING_HOST_SHAPED_DESKTOP_CAPTURER_H_
-#define REMOTING_HOST_SHAPED_DESKTOP_CAPTURER_H_
-
-#include <stddef.h>
-
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
-
-namespace remoting {
-
-class DesktopShapeTracker;
-
-// Screen capturer that also captures desktop shape.
-class ShapedDesktopCapturer : public webrtc::DesktopCapturer,
- public webrtc::DesktopCapturer::Callback {
- public:
- ShapedDesktopCapturer(scoped_ptr<webrtc::DesktopCapturer> screen_capturer,
- scoped_ptr<DesktopShapeTracker> shape_tracker);
- ~ShapedDesktopCapturer() override;
-
- // webrtc::DesktopCapturer interface.
- void Start(webrtc::DesktopCapturer::Callback* callback) override;
- void SetSharedMemoryFactory(rtc::scoped_ptr<webrtc::SharedMemoryFactory>
- shared_memory_factory) override;
- void Capture(const webrtc::DesktopRegion& region) override;
-
- private:
- // webrtc::DesktopCapturer::Callback interface.
- void OnCaptureCompleted(webrtc::DesktopFrame* frame) override;
-
- scoped_ptr<webrtc::DesktopCapturer> desktop_capturer_;
- scoped_ptr<DesktopShapeTracker> shape_tracker_;
- webrtc::DesktopCapturer::Callback* callback_;
-
- DISALLOW_COPY_AND_ASSIGN(ShapedDesktopCapturer);
-};
-
-} // namespace remoting
-
-#endif // REMOTING_HOST_SHAPED_DESKTOP_CAPTURER_H_
diff --git a/remoting/host/shaped_desktop_capturer_unittest.cc b/remoting/host/shaped_desktop_capturer_unittest.cc
deleted file mode 100644
index 942f930..0000000
--- a/remoting/host/shaped_desktop_capturer_unittest.cc
+++ /dev/null
@@ -1,66 +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 "remoting/host/shaped_desktop_capturer.h"
-
-#include <stddef.h>
-
-#include "remoting/host/desktop_shape_tracker.h"
-#include "remoting/protocol/fake_desktop_capturer.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
-
-namespace remoting {
-
-class FakeDesktopShapeTracker : public DesktopShapeTracker {
- public:
- FakeDesktopShapeTracker() {}
- ~FakeDesktopShapeTracker() override {}
-
- static webrtc::DesktopRegion CreateShape() {
- webrtc::DesktopRegion result;
- result.AddRect(webrtc::DesktopRect::MakeXYWH(0, 0, 5, 5));
- result.AddRect(webrtc::DesktopRect::MakeXYWH(5, 5, 5, 5));
- return result;
- }
-
- void RefreshDesktopShape() override { shape_ = CreateShape(); }
-
- const webrtc::DesktopRegion& desktop_shape() override {
- // desktop_shape() can't be called before RefreshDesktopShape().
- EXPECT_FALSE(shape_.is_empty());
- return shape_;
- }
-
- private:
- webrtc::DesktopRegion shape_;
-};
-
-class ShapedDesktopCapturerTest : public testing::Test,
- public webrtc::DesktopCapturer::Callback {
- public:
- // webrtc::DesktopCapturer::Callback interface
- void OnCaptureCompleted(webrtc::DesktopFrame* frame) override {
- last_frame_.reset(frame);
- }
-
- scoped_ptr<webrtc::DesktopFrame> last_frame_;
-};
-
-// Verify that captured frame have shape.
-TEST_F(ShapedDesktopCapturerTest, Basic) {
- ShapedDesktopCapturer capturer(
- make_scoped_ptr(new protocol::FakeDesktopCapturer()),
- make_scoped_ptr(new FakeDesktopShapeTracker()));
- capturer.Start(this);
- capturer.Capture(webrtc::DesktopRegion());
- ASSERT_TRUE(last_frame_.get());
- ASSERT_TRUE(last_frame_->shape());
- EXPECT_TRUE(
- FakeDesktopShapeTracker::CreateShape().Equals(*last_frame_->shape()));
-}
-
-} // namespace remoting
diff --git a/remoting/proto/video.proto b/remoting/proto/video.proto
index 66e7ce2..4d00a37 100644
--- a/remoting/proto/video.proto
+++ b/remoting/proto/video.proto
@@ -11,6 +11,8 @@ option optimize_for = LITE_RUNTIME;
package remoting;
message VideoPacketFormat {
+ // Reserved fields IDs used for removed fields: 1 to 4.
+
// Identifies how the image was encoded.
enum Encoding {
ENCODING_INVALID = -1;
@@ -41,6 +43,8 @@ message Rect {
}
message VideoPacket {
+ // Reserved fields IDs used for removed fields: 1 to 3, 10, 11.
+
optional VideoPacketFormat format = 4;
optional bytes data = 5;
@@ -58,14 +62,6 @@ message VideoPacket {
// starting to capture this video frame.
optional int64 latest_event_timestamp = 9;
- // Provides the new shape for this frame, iff |use_desktop_shape| is true.
- repeated Rect desktop_shape_rects = 10;
-
- // True when |desktop_shape_rects| should be used, false to indicate that
- // the frame is un-shaped. If the shape has not changed since the preceding
- // frame then this field should be omitted.
- optional bool use_desktop_shape = 11;
-
// Optional frame timestamp. Used in tests to estimate frame latency.
optional int64 timestamp = 12;
diff --git a/remoting/remoting_host_srcs.gypi b/remoting/remoting_host_srcs.gypi
index d768314..eb5c5b8 100644
--- a/remoting/remoting_host_srcs.gypi
+++ b/remoting/remoting_host_srcs.gypi
@@ -86,10 +86,6 @@
'host/desktop_session_proxy.h',
'host/desktop_session_win.cc',
'host/desktop_session_win.h',
- 'host/desktop_shape_tracker.h',
- 'host/desktop_shape_tracker_linux.cc',
- 'host/desktop_shape_tracker_mac.cc',
- 'host/desktop_shape_tracker_win.cc',
'host/disconnect_window_chromeos.cc',
'host/disconnect_window_linux.cc',
'host/disconnect_window_mac.h',
@@ -234,8 +230,6 @@
'host/server_log_entry_host.h',
'host/service_urls.cc',
'host/service_urls.h',
- 'host/shaped_desktop_capturer.cc',
- 'host/shaped_desktop_capturer.h',
'host/shutdown_watchdog.cc',
'host/shutdown_watchdog.h',
'host/signaling_connector.cc',
diff --git a/remoting/remoting_test.gypi b/remoting/remoting_test.gypi
index 5f193e9..4cd59ff 100644
--- a/remoting/remoting_test.gypi
+++ b/remoting/remoting_test.gypi
@@ -267,7 +267,6 @@
'host/config_file_watcher_unittest.cc',
'host/daemon_process_unittest.cc',
'host/desktop_process_unittest.cc',
- 'host/desktop_shape_tracker_unittest.cc',
'host/gcd_rest_client_unittest.cc',
'host/gcd_state_updater_unittest.cc',
'host/heartbeat_sender_unittest.cc',
@@ -309,7 +308,6 @@
'host/setup/mock_oauth_client.h',
'host/setup/oauth_helper_unittest.cc',
'host/setup/pin_validator_unittest.cc',
- 'host/shaped_desktop_capturer_unittest.cc',
'host/third_party_auth_config_unittest.cc',
'host/token_validator_factory_impl_unittest.cc',
'host/touch_injector_win_unittest.cc',
diff --git a/remoting/test/test_video_renderer.cc b/remoting/test/test_video_renderer.cc
index 42bd96f..00a4bf7 100644
--- a/remoting/test/test_video_renderer.cc
+++ b/remoting/test/test_video_renderer.cc
@@ -177,9 +177,6 @@ void TestVideoRenderer::Core::ProcessVideoPacket(scoped_ptr<VideoPacket> packet,
}
}
- // To make life easier, assume that the desktop shape is a single rectangle.
- packet->clear_use_desktop_shape();
-
// Render the result into a new DesktopFrame instance that shares buffer with
// |frame_|. updated_region() will be updated for |new_frame|, but not for
// |frame_|.
diff --git a/remoting/webapp/base/js/client_plugin_host_desktop_impl.js b/remoting/webapp/base/js/client_plugin_host_desktop_impl.js
index 23213ec..1a8d06f 100644
--- a/remoting/webapp/base/js/client_plugin_host_desktop_impl.js
+++ b/remoting/webapp/base/js/client_plugin_host_desktop_impl.js
@@ -86,33 +86,4 @@ remoting.ClientPlugin.HostDesktopImpl.prototype.onSizeUpdated = function(
this.getDimensions());
};
-/**
- * This function is called by |this.plugin_| when the shape of the host
- * desktop is changed.
- *
- * @param {remoting.ClientPluginMessage} message
- * @return {Array<{left:number, top:number, width:number, height:number}>}
- * rectangles of the desktop shape.
- */
-remoting.ClientPlugin.HostDesktopImpl.prototype.onShapeUpdated =
- function(message) {
- var shapes = base.getArrayAttr(message.data, 'rects');
- var rects = shapes.map(
- /** @param {Array<number>} shape */
- function(shape) {
- if (!Array.isArray(shape) || shape.length != 4) {
- throw 'Received invalid onDesktopShape message';
- }
- var rect = {};
- rect.left = shape[0];
- rect.top = shape[1];
- rect.width = shape[2];
- rect.height = shape[3];
- return rect;
- });
-
- this.raiseEvent(remoting.HostDesktop.Events.shapeChanged, rects);
- return rects;
-};
-
}());
diff --git a/remoting/webapp/base/js/client_plugin_impl.js b/remoting/webapp/base/js/client_plugin_impl.js
index 626c5d9..da327d8 100644
--- a/remoting/webapp/base/js/client_plugin_impl.js
+++ b/remoting/webapp/base/js/client_plugin_impl.js
@@ -264,8 +264,6 @@ remoting.ClientPluginImpl.prototype.handleMessageMethod_ = function(message) {
this.onInitializedDeferred_.resolve();
} else if (message.method == 'onDesktopSize') {
this.hostDesktop_.onSizeUpdated(message);
- } else if (message.method == 'onDesktopShape') {
- this.hostDesktop_.onShapeUpdated(message);
} else if (message.method == 'onPerfStats') {
// Return value is ignored. These calls will throw an error if the value
// is not a number.
diff --git a/remoting/webapp/base/js/host_desktop.js b/remoting/webapp/base/js/host_desktop.js
index 83a4d76..942c085 100644
--- a/remoting/webapp/base/js/host_desktop.js
+++ b/remoting/webapp/base/js/host_desktop.js
@@ -24,10 +24,6 @@ remoting.HostDesktop.Events = {
// Fired when the size of the host desktop changes with the desktop dimensions
// {{width:number, height:number, xDpi:number, yDpi:number}}
sizeChanged: 'sizeChanged',
- // Fired when the shape of the host desktop changes with an array of
- // rectangles of desktop shapes as the event data.
- // Array<{left:number, top:number, width:number, height:number}>
- shapeChanged: 'shapeChanged'
};
/**