Index: media/video/capture/screen/screen_capturer_unittest.cc |
diff --git a/media/video/capture/screen/screen_capturer_unittest.cc b/media/video/capture/screen/screen_capturer_unittest.cc |
index 4ed45d9648cc45be2b262f56a0ae42a9fac5393c..7be07dbc4bd9c38d05dd964d02f5116fa22dd8d4 100644 |
--- a/media/video/capture/screen/screen_capturer_unittest.cc |
+++ b/media/video/capture/screen/screen_capturer_unittest.cc |
@@ -8,79 +8,111 @@ |
#if defined(OS_MACOSX) |
#include "base/mac/mac_util.h" |
#endif // defined(OS_MACOSX) |
-#include "media/video/capture/screen/screen_capture_data.h" |
#include "media/video/capture/screen/screen_capturer_mock_objects.h" |
#include "testing/gmock/include/gmock/gmock.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_region.h" |
using ::testing::_; |
using ::testing::AnyNumber; |
using ::testing::Return; |
+using ::testing::SaveArg; |
-namespace media { |
+const int kTestSharedMemoryId = 123; |
-MATCHER(DirtyRegionIsNonEmptyRect, "") { |
- const SkRegion& dirty_region = arg->dirty_region(); |
- const SkIRect& dirty_region_bounds = dirty_region.getBounds(); |
- if (dirty_region_bounds.isEmpty()) { |
- return false; |
- } |
- return dirty_region == SkRegion(dirty_region_bounds); |
-} |
+namespace media { |
class ScreenCapturerTest : public testing::Test { |
public: |
- scoped_refptr<SharedBuffer> CreateSharedBuffer(uint32 size); |
+ webrtc::SharedMemory* CreateSharedMemory(size_t size); |
protected: |
scoped_ptr<ScreenCapturer> capturer_; |
- MockScreenCapturerDelegate delegate_; |
+ MockMouseShapeObserver mouse_observer_; |
+ MockScreenCapturerCallback callback_; |
+}; |
+ |
+class FakeSharedMemory : public webrtc::SharedMemory { |
+ public: |
+ FakeSharedMemory(char* buffer, size_t size) |
+ : SharedMemory(buffer, size, 0, kTestSharedMemoryId), |
+ buffer_(buffer) { |
+ } |
+ virtual ~FakeSharedMemory() { |
+ delete[] buffer_; |
+ } |
+ private: |
+ char* buffer_; |
+ DISALLOW_COPY_AND_ASSIGN(FakeSharedMemory); |
}; |
-scoped_refptr<SharedBuffer> ScreenCapturerTest::CreateSharedBuffer( |
- uint32 size) { |
- return scoped_refptr<SharedBuffer>(new SharedBuffer(size)); |
+webrtc::SharedMemory* ScreenCapturerTest::CreateSharedMemory(size_t size) { |
+ return new FakeSharedMemory(new char[size], size); |
} |
TEST_F(ScreenCapturerTest, StartCapturer) { |
capturer_ = ScreenCapturer::Create(); |
- capturer_->Start(&delegate_); |
+ capturer_->SetMouseShapeObserver(&mouse_observer_); |
+ capturer_->Start(&callback_); |
} |
TEST_F(ScreenCapturerTest, Capture) { |
// Assume that Start() treats the screen as invalid initially. |
- EXPECT_CALL(delegate_, |
- OnCaptureCompleted(DirtyRegionIsNonEmptyRect())); |
- EXPECT_CALL(delegate_, OnCursorShapeChangedPtr(_)) |
+ webrtc::DesktopFrame* frame = NULL; |
+ EXPECT_CALL(callback_, OnCaptureCompleted(_)) |
+ .WillOnce(SaveArg<0>(&frame)); |
+ EXPECT_CALL(mouse_observer_, OnCursorShapeChangedPtr(_)) |
.Times(AnyNumber()); |
- EXPECT_CALL(delegate_, CreateSharedBuffer(_)) |
+ EXPECT_CALL(callback_, CreateSharedMemory(_)) |
.Times(AnyNumber()) |
- .WillRepeatedly(Return(scoped_refptr<SharedBuffer>())); |
+ .WillRepeatedly(Return(static_cast<webrtc::SharedMemory*>(NULL))); |
capturer_ = ScreenCapturer::Create(); |
- capturer_->Start(&delegate_); |
- capturer_->CaptureFrame(); |
+ capturer_->Start(&callback_); |
+ capturer_->Capture(webrtc::DesktopRegion()); |
+ |
+ ASSERT_TRUE(frame); |
+ EXPECT_GT(frame->size().width(), 0); |
+ EXPECT_GT(frame->size().height(), 0); |
+ EXPECT_GE(frame->stride(), |
+ frame->size().width() * webrtc::DesktopFrame::kBytesPerPixel); |
+ EXPECT_TRUE(frame->shared_memory() == NULL); |
+ |
+ // Verify that the region contains whole screen. |
+ EXPECT_FALSE(frame->updated_region().is_empty()); |
+ webrtc::DesktopRegion::Iterator it(frame->updated_region()); |
+ ASSERT_TRUE(!it.IsAtEnd()); |
+ EXPECT_TRUE(it.rect().equals(webrtc::DesktopRect::MakeSize(frame->size()))); |
+ it.Advance(); |
+ EXPECT_TRUE(it.IsAtEnd()); |
+ |
+ delete frame; |
} |
#if defined(OS_WIN) |
TEST_F(ScreenCapturerTest, UseSharedBuffers) { |
- EXPECT_CALL(delegate_, |
- OnCaptureCompleted(DirtyRegionIsNonEmptyRect())); |
- EXPECT_CALL(delegate_, OnCursorShapeChangedPtr(_)) |
+ webrtc::DesktopFrame* frame = NULL; |
+ EXPECT_CALL(callback_, OnCaptureCompleted(_)) |
+ .WillOnce(SaveArg<0>(&frame)); |
+ EXPECT_CALL(mouse_observer_, OnCursorShapeChangedPtr(_)) |
.Times(AnyNumber()); |
- EXPECT_CALL(delegate_, CreateSharedBuffer(_)) |
+ EXPECT_CALL(callback_, CreateSharedMemory(_)) |
.Times(AnyNumber()) |
- .WillRepeatedly(Invoke(this, &ScreenCapturerTest::CreateSharedBuffer)); |
- EXPECT_CALL(delegate_, ReleaseSharedBuffer(_)) |
- .Times(AnyNumber()); |
+ .WillRepeatedly(Invoke(this, &ScreenCapturerTest::CreateSharedMemory)); |
capturer_ = ScreenCapturer::Create(); |
- capturer_->Start(&delegate_); |
- capturer_->CaptureFrame(); |
- capturer_.reset(); |
+ capturer_->Start(&callback_); |
+ capturer_->Capture(webrtc::DesktopRegion()); |
+ |
+ ASSERT_TRUE(frame); |
+ ASSERT_TRUE(frame->shared_memory()); |
+ EXPECT_EQ(frame->shared_memory()->id(), kTestSharedMemoryId); |
+ |
+ delete frame; |
} |
#endif // defined(OS_WIN) |