Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: content/browser/renderer_host/media/web_contents_video_capture_device_unittest.cc

Issue 11339014: Move content\browser\renderer_host\media to content namespace. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/media/web_contents_video_capture_device. h" 5 #include "content/browser/renderer_host/media/web_contents_video_capture_device. h"
6 6
7 #include "base/synchronization/condition_variable.h" 7 #include "base/synchronization/condition_variable.h"
8 #include "content/browser/browser_thread_impl.h" 8 #include "content/browser/browser_thread_impl.h"
9 #include "content/browser/renderer_host/render_widget_host_delegate.h" 9 #include "content/browser/renderer_host/render_widget_host_delegate.h"
10 #include "content/browser/renderer_host/render_widget_host_impl.h" 10 #include "content/browser/renderer_host/render_widget_host_impl.h"
11 #include "content/public/test/mock_render_process_host.h" 11 #include "content/public/test/mock_render_process_host.h"
12 #include "content/public/test/test_browser_context.h" 12 #include "content/public/test/test_browser_context.h"
13 #include "media/video/capture/video_capture_types.h" 13 #include "media/video/capture/video_capture_types.h"
14 #include "skia/ext/platform_canvas.h" 14 #include "skia/ext/platform_canvas.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/skia/include/core/SkColor.h" 16 #include "third_party/skia/include/core/SkColor.h"
17 17
18 namespace content {
18 namespace { 19 namespace {
19 const int kTestWidth = 1280; 20 const int kTestWidth = 1280;
20 const int kTestHeight = 720; 21 const int kTestHeight = 720;
21 const int kBytesPerPixel = 4; 22 const int kBytesPerPixel = 4;
22 const int kTestFramesPerSecond = 8; 23 const int kTestFramesPerSecond = 8;
23 const SkColor kNothingYet = 0xdeadbeef; 24 const SkColor kNothingYet = 0xdeadbeef;
24 const SkColor kNotInterested = ~kNothingYet; 25 const SkColor kNotInterested = ~kNothingYet;
25 } 26 }
26 27
27 // A stub implementation which returns solid-color bitmaps in calls to 28 // A stub implementation which returns solid-color bitmaps in calls to
28 // CopyFromBackingStore(). The unit tests can change the color for successive 29 // CopyFromBackingStore(). The unit tests can change the color for successive
29 // captures. 30 // captures.
30 class StubRenderWidgetHost : public content::RenderWidgetHostImpl { 31 class StubRenderWidgetHost : public RenderWidgetHostImpl {
31 public: 32 public:
32 StubRenderWidgetHost(content::RenderProcessHost* process, 33 StubRenderWidgetHost(RenderProcessHost* process, int routing_id)
33 int routing_id)
34 : RenderWidgetHostImpl(&delegate_, process, routing_id), 34 : RenderWidgetHostImpl(&delegate_, process, routing_id),
35 color_(kNothingYet) {} 35 color_(kNothingYet) {}
36 36
37 void SetSolidColor(SkColor color) { 37 void SetSolidColor(SkColor color) {
38 color_ = color; 38 color_ = color;
39 } 39 }
40 40
41 virtual void CopyFromBackingStore( 41 virtual void CopyFromBackingStore(
42 const gfx::Rect& src_rect, 42 const gfx::Rect& src_rect,
43 const gfx::Size& accelerated_dst_size, 43 const gfx::Size& accelerated_dst_size,
44 const base::Callback<void(bool)>& callback, 44 const base::Callback<void(bool)>& callback,
45 skia::PlatformBitmap* output) OVERRIDE { 45 skia::PlatformBitmap* output) OVERRIDE {
46 DCHECK(output); 46 DCHECK(output);
47 EXPECT_TRUE(output->Allocate(kTestWidth, kTestHeight, true)); 47 EXPECT_TRUE(output->Allocate(kTestWidth, kTestHeight, true));
48 SkBitmap bitmap = output->GetBitmap(); 48 SkBitmap bitmap = output->GetBitmap();
49 { 49 {
50 SkAutoLockPixels locker(bitmap); 50 SkAutoLockPixels locker(bitmap);
51 bitmap.eraseColor(color_); 51 bitmap.eraseColor(color_);
52 } 52 }
53 53
54 callback.Run(true); 54 callback.Run(true);
55 } 55 }
56 56
57 private: 57 private:
58 class StubRenderWidgetHostDelegate 58 class StubRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
59 : public content::RenderWidgetHostDelegate {
60 public: 59 public:
61 StubRenderWidgetHostDelegate() {} 60 StubRenderWidgetHostDelegate() {}
62 virtual ~StubRenderWidgetHostDelegate() {} 61 virtual ~StubRenderWidgetHostDelegate() {}
63 62
64 private: 63 private:
65 DISALLOW_COPY_AND_ASSIGN(StubRenderWidgetHostDelegate); 64 DISALLOW_COPY_AND_ASSIGN(StubRenderWidgetHostDelegate);
66 }; 65 };
67 66
68 StubRenderWidgetHostDelegate delegate_; 67 StubRenderWidgetHostDelegate delegate_;
69 SkColor color_; 68 SkColor color_;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 public: 146 public:
148 WebContentsVideoCaptureDeviceTest() {} 147 WebContentsVideoCaptureDeviceTest() {}
149 148
150 protected: 149 protected:
151 virtual void SetUp() { 150 virtual void SetUp() {
152 // This is a MessageLoop for the current thread. The MockRenderProcessHost 151 // This is a MessageLoop for the current thread. The MockRenderProcessHost
153 // will schedule its destruction in this MessageLoop during TearDown(). 152 // will schedule its destruction in this MessageLoop during TearDown().
154 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); 153 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
155 154
156 // The CopyFromBackingStore and WebContents tracking occur on the UI thread. 155 // The CopyFromBackingStore and WebContents tracking occur on the UI thread.
157 ui_thread_.reset( 156 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI));
158 new content::BrowserThreadImpl(content::BrowserThread::UI));
159 ui_thread_->Start(); 157 ui_thread_->Start();
160 158
161 // And the rest... 159 // And the rest...
162 browser_context_.reset(new content::TestBrowserContext()); 160 browser_context_.reset(new TestBrowserContext());
163 source_.reset(new StubRenderWidgetHost( 161 source_.reset(new StubRenderWidgetHost(
164 new content::MockRenderProcessHost(browser_context_.get()), 162 new MockRenderProcessHost(browser_context_.get()), MSG_ROUTING_NONE));
165 MSG_ROUTING_NONE)); 163 device_.reset(WebContentsVideoCaptureDevice::CreateForTesting(
166 device_.reset(content::WebContentsVideoCaptureDevice::CreateForTesting(
167 source_.get())); 164 source_.get()));
168 consumer_.reset(new StubConsumer); 165 consumer_.reset(new StubConsumer);
169 } 166 }
170 167
171 virtual void TearDown() { 168 virtual void TearDown() {
172 // Tear down in opposite order of set-up. 169 // Tear down in opposite order of set-up.
173 consumer_.reset(); 170 consumer_.reset();
174 device_.reset(); 171 device_.reset();
175 source_.reset(); 172 source_.reset();
176 browser_context_.reset(); 173 browser_context_.reset();
177 ui_thread_->Stop(); 174 ui_thread_->Stop();
178 ui_thread_.reset(); 175 ui_thread_.reset();
179 message_loop_->RunAllPending(); // Deletes MockRenderProcessHost. 176 message_loop_->RunAllPending(); // Deletes MockRenderProcessHost.
180 message_loop_.reset(); 177 message_loop_.reset();
181 } 178 }
182 179
183 // Accessors. 180 // Accessors.
184 StubRenderWidgetHost* source() const { return source_.get(); } 181 StubRenderWidgetHost* source() const { return source_.get(); }
185 media::VideoCaptureDevice* device() const { return device_.get(); } 182 media::VideoCaptureDevice* device() const { return device_.get(); }
186 StubConsumer* consumer() const { return consumer_.get(); } 183 StubConsumer* consumer() const { return consumer_.get(); }
187 184
188 private: 185 private:
189 scoped_ptr<MessageLoop> message_loop_; 186 scoped_ptr<MessageLoop> message_loop_;
190 scoped_ptr<content::BrowserThreadImpl> ui_thread_; 187 scoped_ptr<BrowserThreadImpl> ui_thread_;
191 scoped_ptr<content::TestBrowserContext> browser_context_; 188 scoped_ptr<TestBrowserContext> browser_context_;
192 scoped_ptr<StubRenderWidgetHost> source_; 189 scoped_ptr<StubRenderWidgetHost> source_;
193 scoped_ptr<media::VideoCaptureDevice> device_; 190 scoped_ptr<media::VideoCaptureDevice> device_;
194 scoped_ptr<StubConsumer> consumer_; 191 scoped_ptr<StubConsumer> consumer_;
195 192
196 DISALLOW_COPY_AND_ASSIGN(WebContentsVideoCaptureDeviceTest); 193 DISALLOW_COPY_AND_ASSIGN(WebContentsVideoCaptureDeviceTest);
197 }; 194 };
198 195
199 // The "happy case" test. No scaling is needed, so we should be able to change 196 // The "happy case" test. No scaling is needed, so we should be able to change
200 // the picture emitted from the source and expect to see each delivered to the 197 // the picture emitted from the source and expect to see each delivered to the
201 // consumer. 198 // consumer.
(...skipping 11 matching lines...) Expand all
213 source()->SetSolidColor(SK_ColorBLACK); 210 source()->SetSolidColor(SK_ColorBLACK);
214 EXPECT_TRUE(consumer()->WaitForNextColorOrError(SK_ColorBLACK)); 211 EXPECT_TRUE(consumer()->WaitForNextColorOrError(SK_ColorBLACK));
215 212
216 device()->DeAllocate(); 213 device()->DeAllocate();
217 } 214 }
218 215
219 TEST_F(WebContentsVideoCaptureDeviceTest, RejectsInvalidAllocateParams) { 216 TEST_F(WebContentsVideoCaptureDeviceTest, RejectsInvalidAllocateParams) {
220 device()->Allocate(1280, 720, -2, consumer()); 217 device()->Allocate(1280, 720, -2, consumer());
221 EXPECT_FALSE(consumer()->WaitForNextColorOrError(kNotInterested)); 218 EXPECT_FALSE(consumer()->WaitForNextColorOrError(kNotInterested));
222 } 219 }
220
221 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698