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

Side by Side Diff: chrome/browser/media/native_desktop_media_list_unittest.cc

Issue 1828303003: Modify unit tests for NativeDesktopMediaList to cover aura window capture. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 4 years, 8 months 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
« no previous file with comments | « chrome/browser/media/native_desktop_media_list.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/media/native_desktop_media_list.h" 5 #include "chrome/browser/media/native_desktop_media_list.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <string.h> 9 #include <string.h>
10 #include <vector>
10 11
11 #include "base/location.h" 12 #include "base/location.h"
12 #include "base/macros.h" 13 #include "base/macros.h"
13 #include "base/message_loop/message_loop.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/synchronization/lock.h" 16 #include "base/synchronization/lock.h"
17 #include "chrome/browser/media/desktop_media_list_observer.h" 17 #include "chrome/browser/media/desktop_media_list_observer.h"
18 #include "content/public/test/test_browser_thread.h" 18 #include "content/public/test/test_browser_thread.h"
19 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 21 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" 22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" 23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h"
24 #include "ui/aura/window.h"
25 #include "ui/aura/window_tree_host.h"
26 #include "ui/views/test/views_test_base.h"
27 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
28 #include "ui/views/widget/widget.h"
24 29
30 using content::DesktopMediaID;
25 using testing::_; 31 using testing::_;
26 using testing::DoAll; 32 using testing::DoAll;
27 33
28 namespace { 34 namespace {
29 35
36 static const int kDefaultWindowCount = 2;
37 #if defined(USE_AURA)
38 static const int kDefaultAuraCount = 1;
39 #else
40 static const int kDefaultAuraCount = 0;
41 #endif
42
30 class MockObserver : public DesktopMediaListObserver { 43 class MockObserver : public DesktopMediaListObserver {
31 public: 44 public:
32 MOCK_METHOD2(OnSourceAdded, void(DesktopMediaList* list, int index)); 45 MOCK_METHOD2(OnSourceAdded, void(DesktopMediaList* list, int index));
33 MOCK_METHOD2(OnSourceRemoved, void(DesktopMediaList* list, int index)); 46 MOCK_METHOD2(OnSourceRemoved, void(DesktopMediaList* list, int index));
34 MOCK_METHOD3(OnSourceMoved, 47 MOCK_METHOD3(OnSourceMoved,
35 void(DesktopMediaList* list, int old_index, int new_index)); 48 void(DesktopMediaList* list, int old_index, int new_index));
36 MOCK_METHOD2(OnSourceNameChanged, void(DesktopMediaList* list, int index)); 49 MOCK_METHOD2(OnSourceNameChanged, void(DesktopMediaList* list, int index));
37 MOCK_METHOD2(OnSourceThumbnailChanged, 50 MOCK_METHOD2(OnSourceThumbnailChanged,
38 void(DesktopMediaList* list, int index)); 51 void(DesktopMediaList* list, int index));
39 }; 52 };
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 141
129 WindowId selected_window_id_; 142 WindowId selected_window_id_;
130 143
131 // Frames to be captured per window. 144 // Frames to be captured per window.
132 std::map<WindowId, int8_t> frame_values_; 145 std::map<WindowId, int8_t> frame_values_;
133 base::Lock frame_values_lock_; 146 base::Lock frame_values_lock_;
134 147
135 DISALLOW_COPY_AND_ASSIGN(FakeWindowCapturer); 148 DISALLOW_COPY_AND_ASSIGN(FakeWindowCapturer);
136 }; 149 };
137 150
151 } // namespace
152
138 ACTION_P2(CheckListSize, model, expected_list_size) { 153 ACTION_P2(CheckListSize, model, expected_list_size) {
139 EXPECT_EQ(expected_list_size, model->GetSourceCount()); 154 EXPECT_EQ(expected_list_size, model->GetSourceCount());
140 } 155 }
141 156
142 ACTION_P(QuitMessageLoop, message_loop) { 157 ACTION_P(QuitMessageLoop, message_loop) {
143 message_loop->task_runner()->PostTask( 158 message_loop->task_runner()->PostTask(
144 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); 159 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
145 } 160 }
146 161
147 class DesktopMediaListTest : public testing::Test { 162 class NativeDesktopMediaListTest : public views::ViewsTestBase {
148 public: 163 public:
149 DesktopMediaListTest() 164 NativeDesktopMediaListTest()
150 : window_capturer_(NULL), 165 : ui_thread_(content::BrowserThread::UI, message_loop()) {}
151 ui_thread_(content::BrowserThread::UI, 166
152 &message_loop_) { 167 void TearDown() override {
168 for (size_t i = 0; i < desktop_widgets_.size(); i++)
169 desktop_widgets_[i].reset();
170
171 ViewsTestBase::TearDown();
153 } 172 }
154 173
155 void CreateWithDefaultCapturers() { 174 void CreateWithCapturers(bool screen, bool window) {
156 window_capturer_ = new FakeWindowCapturer(); 175 webrtc::ScreenCapturer* screen_capturer = nullptr;
176 if (screen)
177 screen_capturer = new FakeScreenCapturer();
178
179 if (window)
180 window_capturer_ = new FakeWindowCapturer();
181 else
182 window_capturer_ = nullptr;
183
157 model_.reset(new NativeDesktopMediaList( 184 model_.reset(new NativeDesktopMediaList(
158 scoped_ptr<webrtc::ScreenCapturer>(new FakeScreenCapturer()), 185 scoped_ptr<webrtc::ScreenCapturer>(screen_capturer),
159 scoped_ptr<webrtc::WindowCapturer>(window_capturer_))); 186 scoped_ptr<webrtc::WindowCapturer>(window_capturer_)));
160 187
161 // Set update period to reduce the time it takes to run tests. 188 // Set update period to reduce the time it takes to run tests.
162 model_->SetUpdatePeriod(base::TimeDelta::FromMilliseconds(0)); 189 model_->SetUpdatePeriod(base::TimeDelta::FromMilliseconds(5));
163 } 190 }
164 191
165 webrtc::WindowCapturer::WindowList AddWindowsAndVerify( 192 void AddNativeWindow(int id) {
166 size_t count, bool window_only) { 193 webrtc::WindowCapturer::Window window;
167 webrtc::WindowCapturer::WindowList list; 194 window.id = id;
168 for (size_t i = 0; i < count; ++i) { 195 window.title = "Test window";
169 webrtc::WindowCapturer::Window window; 196 window_list_.push_back(window);
170 window.id = i + 1; 197 }
171 window.title = "Test window"; 198
172 list.push_back(window); 199 #if defined(USE_AURA)
200 std::unique_ptr<views::Widget> CreateDesktopWidget() {
201 std::unique_ptr<views::Widget> widget(new views::Widget);
202 views::Widget::InitParams params;
203 params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS;
204 params.accept_events = false;
205 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
206 params.native_widget = new views::DesktopNativeWidgetAura(widget.get());
207 params.bounds = gfx::Rect(0, 0, 20, 20);
208 widget->Init(params);
209 widget->Show();
210 return widget;
211 }
212
213 void AddAuraWindow() {
214 webrtc::WindowCapturer::Window window;
215 window.title = "Test window";
216 // Create a aura native widow through a widget.
217 desktop_widgets_.push_back(CreateDesktopWidget());
218 // Get the native window's id.
219 aura::Window* aura_window = desktop_widgets_.back()->GetNativeWindow();
220 gfx::AcceleratedWidget widget =
221 aura_window->GetHost()->GetAcceleratedWidget();
222 #if defined(OS_WIN)
223 window.id = reinterpret_cast<DesktopMediaID::Id>(widget);
224 #else
225 window.id = widget;
226 #endif
227 // Get the aura window's id.
228 DesktopMediaID aura_id = DesktopMediaID::RegisterAuraWindow(
229 DesktopMediaID::TYPE_WINDOW, aura_window);
230 native_aura_id_map_[window.id] = aura_id.aura_id;
231
232 window_list_.push_back(window);
233 }
234
235 void RemoveAuraWindow(int index) {
236 DCHECK_LT(index, static_cast<int>(desktop_widgets_.size()));
237
238 // Get the native window's id.
239 aura::Window* aura_window = desktop_widgets_[index]->GetNativeWindow();
240 gfx::AcceleratedWidget widget =
241 aura_window->GetHost()->GetAcceleratedWidget();
242 #if defined(OS_WIN)
243 int native_id = reinterpret_cast<DesktopMediaID::Id>(widget);
244 #else
245 int native_id = widget;
246 #endif
247 // Remove the widget and assoicate aura window.
248 desktop_widgets_[index].reset();
Sergey Ulanov 2016/04/07 18:17:31 don't need this. Since it's a vector of scoped_ptr
GeorgeZ 2016/04/08 13:15:23 Done.
249 desktop_widgets_.erase(desktop_widgets_.begin() + index);
250 // Remove the aura window from the window list.
251 size_t i;
252 for (i = 0; i < window_list_.size(); i++) {
253 if (window_list_[i].id == native_id)
254 break;
173 } 255 }
Sergey Ulanov 2016/04/07 18:17:30 check here that i < window_list_.size()
GeorgeZ 2016/04/08 13:15:22 Done.
174 window_capturer_->SetWindowList(list); 256 window_list_.erase(window_list_.begin() + i);
257 native_aura_id_map_.erase(native_id);
258 }
259
260 #endif // defined(USE_AURA)
261
262 void AddWindowsAndVerify(bool screen,
263 size_t window_count,
264 size_t aura_count,
265 bool has_view_dialog) {
266 // Create model_.
267 CreateWithCapturers(screen, window_count > 0);
268
269 #if !defined(USE_AURA)
270 aura_count = 0;
271 #endif
272 if (aura_count >= window_count)
273 aura_count = window_count - 1;
274
275 if (window_count == 0)
276 has_view_dialog = false;
277
278 // Set up widows.
279 size_t aura_window_first_index = window_count - aura_count;
280 for (size_t i = 0; i < window_count; ++i) {
281 if (i < aura_window_first_index) {
282 AddNativeWindow(i + 1);
283 } else {
284 #if defined(USE_AURA)
285 AddAuraWindow();
286 #endif
287 }
288 }
289
290 if (window_capturer_)
291 window_capturer_->SetWindowList(window_list_);
292
293 // Set view dialog window ID as the first window id.
294 if (has_view_dialog) {
295 DesktopMediaID dialog_window_id(DesktopMediaID::TYPE_WINDOW,
296 window_list_[0].id);
297 model_->SetViewDialogWindowId(dialog_window_id);
298 window_count--;
299 aura_window_first_index--;
300 }
175 301
176 { 302 {
177 testing::InSequence dummy; 303 testing::InSequence dummy;
178 size_t source_count = window_only ? count : count + 1; 304 size_t source_count = screen ? window_count + 1 : window_count;
179 for (size_t i = 0; i < source_count; ++i) { 305 for (size_t i = 0; i < source_count; ++i) {
180 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), i)) 306 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), i))
181 .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1))); 307 .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1)));
182 } 308 }
183 for (size_t i = 0; i < source_count - 1; ++i) { 309 for (size_t i = 0; i < source_count - 1; ++i) {
184 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i)); 310 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i));
185 } 311 }
186 EXPECT_CALL(observer_, 312 EXPECT_CALL(observer_,
187 OnSourceThumbnailChanged(model_.get(), source_count - 1)) 313 OnSourceThumbnailChanged(model_.get(), source_count - 1))
188 .WillOnce(QuitMessageLoop(&message_loop_)); 314 .WillOnce(QuitMessageLoop(message_loop()));
189 } 315 }
190 model_->StartUpdating(&observer_); 316 model_->StartUpdating(&observer_);
191 message_loop_.Run(); 317 message_loop()->Run();
192 318
193 for (size_t i = 0; i < count; ++i) { 319 if (screen) {
194 size_t source_index = window_only ? i : i + 1; 320 EXPECT_EQ(model_->GetSource(0).id.type, DesktopMediaID::TYPE_SCREEN);
321 EXPECT_EQ(model_->GetSource(0).id.id, 0);
322 }
323
324 for (size_t i = 0; i < window_count; ++i) {
325 size_t source_index = screen ? i + 1 : i;
195 EXPECT_EQ(model_->GetSource(source_index).id.type, 326 EXPECT_EQ(model_->GetSource(source_index).id.type,
196 content::DesktopMediaID::TYPE_WINDOW); 327 DesktopMediaID::TYPE_WINDOW);
197 EXPECT_EQ(model_->GetSource(source_index).id.id, static_cast<int>(i + 1));
198 EXPECT_EQ(model_->GetSource(source_index).name, 328 EXPECT_EQ(model_->GetSource(source_index).name,
199 base::UTF8ToUTF16("Test window")); 329 base::UTF8ToUTF16("Test window"));
330 int index = has_view_dialog ? i + 1 : i;
331 int native_id = window_list_[index].id;
332 EXPECT_EQ(model_->GetSource(source_index).id.id, native_id);
333 #if defined(USE_AURA)
334 if (i >= aura_window_first_index)
335 EXPECT_EQ(model_->GetSource(source_index).id.aura_id,
336 native_aura_id_map_[native_id]);
337 #endif
200 } 338 }
201 testing::Mock::VerifyAndClearExpectations(&observer_); 339 testing::Mock::VerifyAndClearExpectations(&observer_);
202 return list;
203 } 340 }
204 341
205 protected: 342 protected:
206 // Must be listed before |model_|, so it's destroyed last. 343 // Must be listed before |model_|, so it's destroyed last.
207 MockObserver observer_; 344 MockObserver observer_;
208 345
209 // Owned by |model_|; 346 // Owned by |model_|;
210 FakeWindowCapturer* window_capturer_; 347 FakeWindowCapturer* window_capturer_;
211 348
349 webrtc::WindowCapturer::WindowList window_list_;
350 std::vector<std::unique_ptr<views::Widget>> desktop_widgets_;
351 std::map<DesktopMediaID::Id, DesktopMediaID::Id> native_aura_id_map_;
212 scoped_ptr<NativeDesktopMediaList> model_; 352 scoped_ptr<NativeDesktopMediaList> model_;
213 353
214 base::MessageLoop message_loop_;
215 content::TestBrowserThread ui_thread_; 354 content::TestBrowserThread ui_thread_;
216 355
217 DISALLOW_COPY_AND_ASSIGN(DesktopMediaListTest); 356 DISALLOW_COPY_AND_ASSIGN(NativeDesktopMediaListTest);
218 }; 357 };
219 358
220 TEST_F(DesktopMediaListTest, InitialSourceList) { 359 TEST_F(NativeDesktopMediaListTest, WindowsOnly) {
221 CreateWithDefaultCapturers(); 360 AddWindowsAndVerify(false, kDefaultWindowCount, kDefaultAuraCount, false);
222 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); 361 }
223 362
224 EXPECT_EQ(model_->GetSource(0).id.type, content::DesktopMediaID::TYPE_SCREEN); 363 TEST_F(NativeDesktopMediaListTest, ScreenOnly) {
225 EXPECT_EQ(model_->GetSource(0).id.id, 0); 364 AddWindowsAndVerify(true, 0, 0, false);
226 } 365 }
227 366
228 // Verifies that the window specified with SetViewDialogWindowId() is filtered 367 // Verifies that the window specified with SetViewDialogWindowId() is filtered
229 // from the results. 368 // from the results.
230 TEST_F(DesktopMediaListTest, Filtering) { 369 TEST_F(NativeDesktopMediaListTest, Filtering) {
231 CreateWithDefaultCapturers(); 370 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, true);
232 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false);
233
234 EXPECT_EQ(model_->GetSource(0).id.type, content::DesktopMediaID::TYPE_SCREEN);
235 EXPECT_EQ(model_->GetSource(0).id.id, 0);
236 } 371 }
237 372
238 TEST_F(DesktopMediaListTest, WindowsOnly) { 373 TEST_F(NativeDesktopMediaListTest, AddNativeWindow) {
239 window_capturer_ = new FakeWindowCapturer(); 374 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
240 model_.reset(new NativeDesktopMediaList( 375
241 scoped_ptr<webrtc::ScreenCapturer>(), 376 const int index = kDefaultWindowCount + 1;
242 scoped_ptr<webrtc::WindowCapturer>(window_capturer_))); 377 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), index))
243 AddWindowsAndVerify(1, true); 378 .WillOnce(DoAll(CheckListSize(model_.get(), index + 1),
379 QuitMessageLoop(message_loop())));
380
381 webrtc::WindowCapturer::Window window;
382 AddNativeWindow(index);
383 window_capturer_->SetWindowList(window_list_);
384
385 message_loop()->Run();
386
387 EXPECT_EQ(model_->GetSource(index).id.type, DesktopMediaID::TYPE_WINDOW);
388 EXPECT_EQ(model_->GetSource(index).id.id, index);
244 } 389 }
245 390
246 TEST_F(DesktopMediaListTest, ScreenOnly) { 391 #if defined(USE_AURA)
247 model_.reset(new NativeDesktopMediaList( 392 TEST_F(NativeDesktopMediaListTest, AddAuraWindow) {
248 scoped_ptr<webrtc::ScreenCapturer>(new FakeScreenCapturer), 393 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
249 scoped_ptr<webrtc::WindowCapturer>()));
250 394
251 { 395 const int index = kDefaultWindowCount + 1;
252 testing::InSequence dummy; 396 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), index))
253 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), 0)) 397 .WillOnce(DoAll(CheckListSize(model_.get(), index + 1),
254 .WillOnce(CheckListSize(model_.get(), 1)); 398 QuitMessageLoop(message_loop())));
255 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 0))
256 .WillOnce(QuitMessageLoop(&message_loop_));
257 }
258 model_->StartUpdating(&observer_);
259 399
260 message_loop_.Run(); 400 AddAuraWindow();
401 window_capturer_->SetWindowList(window_list_);
261 402
262 EXPECT_EQ(model_->GetSource(0).id.type, content::DesktopMediaID::TYPE_SCREEN); 403 message_loop()->Run();
404
405 int native_id = window_list_.back().id;
406 EXPECT_EQ(model_->GetSource(index).id.type, DesktopMediaID::TYPE_WINDOW);
407 EXPECT_EQ(model_->GetSource(index).id.id, native_id);
408 EXPECT_EQ(model_->GetSource(index).id.aura_id,
409 native_aura_id_map_[native_id]);
410 }
411 #endif // defined(USE_AURA)
412
413 TEST_F(NativeDesktopMediaListTest, RemoveNativeWindow) {
414 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
415
416 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
417 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount),
418 QuitMessageLoop(message_loop())));
419
420 window_list_.erase(window_list_.begin());
421 window_capturer_->SetWindowList(window_list_);
422
423 message_loop()->Run();
263 } 424 }
264 425
265 TEST_F(DesktopMediaListTest, AddWindow) { 426 #if defined(USE_AURA)
266 CreateWithDefaultCapturers(); 427 TEST_F(NativeDesktopMediaListTest, RemoveAuraWindow) {
267 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); 428 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
268 429
269 EXPECT_CALL(observer_, OnSourceAdded(model_.get(), 2)) 430 int aura_window_start_index = kDefaultWindowCount - kDefaultAuraCount + 1;
270 .WillOnce(DoAll(CheckListSize(model_.get(), 3), 431 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), aura_window_start_index))
271 QuitMessageLoop(&message_loop_))); 432 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount),
433 QuitMessageLoop(message_loop())));
272 434
273 webrtc::WindowCapturer::Window window; 435 RemoveAuraWindow(0);
274 window.id = 10; // id=0 is invalid. 436 window_capturer_->SetWindowList(window_list_);
275 window.title = "Test window 10";
276 list.push_back(window);
277 window_capturer_->SetWindowList(list);
278 437
279 message_loop_.Run(); 438 message_loop()->Run();
439 }
440 #endif // defined(USE_AURA)
280 441
281 EXPECT_EQ(model_->GetSource(2).id.type, content::DesktopMediaID::TYPE_WINDOW); 442 TEST_F(NativeDesktopMediaListTest, RemoveAllWindows) {
282 EXPECT_EQ(model_->GetSource(2).id.id, 10); 443 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
444
445 testing::InSequence seq;
446 for (int i = 0; i < kDefaultWindowCount - 1; i++) {
447 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
448 .WillOnce(CheckListSize(model_.get(), kDefaultWindowCount - i));
449 }
450 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
451 .WillOnce(DoAll(CheckListSize(model_.get(), 1),
452 QuitMessageLoop(message_loop())));
453
454 window_list_.clear();
455 window_capturer_->SetWindowList(window_list_);
456
457 message_loop()->Run();
283 } 458 }
284 459
285 TEST_F(DesktopMediaListTest, RemoveWindow) { 460 TEST_F(NativeDesktopMediaListTest, UpdateTitle) {
286 CreateWithDefaultCapturers(); 461 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
287 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false);
288
289 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 2))
290 .WillOnce(DoAll(CheckListSize(model_.get(), 2),
291 QuitMessageLoop(&message_loop_)));
292
293 list.erase(list.begin() + 1);
294 window_capturer_->SetWindowList(list);
295
296 message_loop_.Run();
297 }
298
299 TEST_F(DesktopMediaListTest, RemoveAllWindows) {
300 CreateWithDefaultCapturers();
301 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false);
302
303 testing::InSequence seq;
304 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
305 .WillOnce(CheckListSize(model_.get(), 2));
306 EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
307 .WillOnce(DoAll(CheckListSize(model_.get(), 1),
308 QuitMessageLoop(&message_loop_)));
309
310 list.erase(list.begin(), list.end());
311 window_capturer_->SetWindowList(list);
312
313 message_loop_.Run();
314 }
315
316 TEST_F(DesktopMediaListTest, UpdateTitle) {
317 CreateWithDefaultCapturers();
318 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false);
319 462
320 EXPECT_CALL(observer_, OnSourceNameChanged(model_.get(), 1)) 463 EXPECT_CALL(observer_, OnSourceNameChanged(model_.get(), 1))
321 .WillOnce(QuitMessageLoop(&message_loop_)); 464 .WillOnce(QuitMessageLoop(message_loop()));
322 465
323 const std::string kTestTitle = "New Title"; 466 const std::string kTestTitle = "New Title";
467 window_list_[0].title = kTestTitle;
468 window_capturer_->SetWindowList(window_list_);
324 469
325 list[0].title = kTestTitle; 470 message_loop()->Run();
326 window_capturer_->SetWindowList(list);
327
328 message_loop_.Run();
329 471
330 EXPECT_EQ(model_->GetSource(1).name, base::UTF8ToUTF16(kTestTitle)); 472 EXPECT_EQ(model_->GetSource(1).name, base::UTF8ToUTF16(kTestTitle));
331 } 473 }
332 474
333 TEST_F(DesktopMediaListTest, UpdateThumbnail) { 475 TEST_F(NativeDesktopMediaListTest, UpdateThumbnail) {
334 CreateWithDefaultCapturers(); 476 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
335 AddWindowsAndVerify(2, false);
336 477
337 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 1)) 478 EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 1))
338 .WillOnce(QuitMessageLoop(&message_loop_)); 479 .WillOnce(QuitMessageLoop(message_loop()));
480
339 // Update frame for the window and verify that we get notification about it. 481 // Update frame for the window and verify that we get notification about it.
340 window_capturer_->SetNextFrameValue(1, 1); 482 window_capturer_->SetNextFrameValue(1, 10);
341 483
342 message_loop_.Run(); 484 message_loop()->Run();
343 } 485 }
344 486
345 TEST_F(DesktopMediaListTest, MoveWindow) { 487 TEST_F(NativeDesktopMediaListTest, MoveWindow) {
346 CreateWithDefaultCapturers(); 488 AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
347 webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false);
348 489
349 EXPECT_CALL(observer_, OnSourceMoved(model_.get(), 2, 1)) 490 EXPECT_CALL(observer_, OnSourceMoved(model_.get(), 2, 1))
350 .WillOnce(DoAll(CheckListSize(model_.get(), 3), 491 .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount + 1),
351 QuitMessageLoop(&message_loop_))); 492 QuitMessageLoop(message_loop())));
352 493
353 // Swap the two windows. 494 // Swap the two windows.
354 webrtc::WindowCapturer::Window temp = list[0]; 495 webrtc::WindowCapturer::Window temp = window_list_[0];
355 list[0] = list[1]; 496 window_list_[0] = window_list_[1];
356 list[1] = temp; 497 window_list_[1] = temp;
357 window_capturer_->SetWindowList(list); 498 window_capturer_->SetWindowList(window_list_);
358 499
359 message_loop_.Run(); 500 message_loop()->Run();
360 } 501 }
361
362 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/media/native_desktop_media_list.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698