| 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)
 | 
| 
 |