Home | History | Annotate | Download | only in host
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "remoting/host/shaped_desktop_capturer.h"
      6 
      7 #include "remoting/host/desktop_shape_tracker.h"
      8 #include "remoting/host/fake_desktop_capturer.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
     11 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
     12 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
     13 
     14 namespace remoting {
     15 
     16 class FakeDesktopShapeTracker : public DesktopShapeTracker {
     17  public:
     18   FakeDesktopShapeTracker() {}
     19   virtual ~FakeDesktopShapeTracker() {}
     20 
     21   static webrtc::DesktopRegion CreateShape() {
     22     webrtc::DesktopRegion result;
     23     result.AddRect(webrtc::DesktopRect::MakeXYWH(0, 0, 5, 5));
     24     result.AddRect(webrtc::DesktopRect::MakeXYWH(5, 5, 5, 5));
     25     return result;
     26   }
     27 
     28   virtual void RefreshDesktopShape() OVERRIDE {
     29     shape_ = CreateShape();
     30   }
     31 
     32   virtual const webrtc::DesktopRegion& desktop_shape() OVERRIDE {
     33     // desktop_shape() can't be called before RefreshDesktopShape().
     34     EXPECT_FALSE(shape_.is_empty());
     35     return shape_;
     36   }
     37 
     38  private:
     39   webrtc::DesktopRegion shape_;
     40 };
     41 
     42 class ShapedDesktopCapturerTest : public testing::Test,
     43                                  public webrtc::DesktopCapturer::Callback {
     44  public:
     45   // webrtc::DesktopCapturer::Callback interface
     46   virtual webrtc::SharedMemory* CreateSharedMemory(size_t size) OVERRIDE {
     47     return NULL;
     48   }
     49 
     50   virtual void OnCaptureCompleted(webrtc::DesktopFrame* frame) OVERRIDE {
     51     last_frame_.reset(frame);
     52   }
     53 
     54   scoped_ptr<webrtc::DesktopFrame> last_frame_;
     55 };
     56 
     57 // Verify that captured frame have shape.
     58 TEST_F(ShapedDesktopCapturerTest, Basic) {
     59   ShapedDesktopCapturer capturer(
     60       scoped_ptr<webrtc::DesktopCapturer>(new FakeDesktopCapturer()),
     61       scoped_ptr<DesktopShapeTracker>(new FakeDesktopShapeTracker()));
     62   capturer.Start(this);
     63   capturer.Capture(webrtc::DesktopRegion());
     64   ASSERT_TRUE(last_frame_.get());
     65   ASSERT_TRUE(last_frame_->shape());
     66   EXPECT_TRUE(
     67       FakeDesktopShapeTracker::CreateShape().Equals(*last_frame_->shape()));
     68 }
     69 
     70 }  // namespace remoting
     71