1 // Copyright 2018 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 "chrome/browser/media/webrtc/fake_desktop_media_picker_factory.h"
6
7 #include <utility>
8
9 #include "base/bind.h"
10 #include "base/memory/weak_ptr.h"
11 #include "base/threading/thread_task_runner_handle.h"
12 #include "chrome/browser/media/webrtc/fake_desktop_media_list.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
FakeDesktopMediaPicker(FakeDesktopMediaPickerFactory::TestFlags * expectation)15 FakeDesktopMediaPicker::FakeDesktopMediaPicker(
16 FakeDesktopMediaPickerFactory::TestFlags* expectation)
17 : expectation_(expectation) {
18 expectation_->picker_created = true;
19 }
~FakeDesktopMediaPicker()20 FakeDesktopMediaPicker::~FakeDesktopMediaPicker() {
21 expectation_->picker_deleted = true;
22 }
23
24 // DesktopMediaPicker interface.
Show(const DesktopMediaPicker::Params & params,std::vector<std::unique_ptr<DesktopMediaList>> source_lists,DoneCallback done_callback)25 void FakeDesktopMediaPicker::Show(
26 const DesktopMediaPicker::Params& params,
27 std::vector<std::unique_ptr<DesktopMediaList>> source_lists,
28 DoneCallback done_callback) {
29 bool show_screens = false;
30 bool show_windows = false;
31 bool show_tabs = false;
32 picker_params_ = params;
33
34 for (auto& source_list : source_lists) {
35 switch (source_list->GetMediaListType()) {
36 case content::DesktopMediaID::TYPE_NONE:
37 break;
38 case content::DesktopMediaID::TYPE_SCREEN:
39 show_screens = true;
40 break;
41 case content::DesktopMediaID::TYPE_WINDOW:
42 show_windows = true;
43 break;
44 case content::DesktopMediaID::TYPE_WEB_CONTENTS:
45 show_tabs = true;
46 break;
47 }
48 }
49 EXPECT_EQ(expectation_->expect_screens, show_screens);
50 EXPECT_EQ(expectation_->expect_windows, show_windows);
51 EXPECT_EQ(expectation_->expect_tabs, show_tabs);
52 EXPECT_EQ(expectation_->expect_audio, params.request_audio);
53 EXPECT_EQ(params.modality, ui::ModalType::MODAL_TYPE_CHILD);
54
55 if (!expectation_->cancelled) {
56 // Post a task to call the callback asynchronously.
57 base::ThreadTaskRunnerHandle::Get()->PostTask(
58 FROM_HERE,
59 base::BindOnce(&FakeDesktopMediaPicker::CallCallback,
60 weak_factory_.GetWeakPtr(), std::move(done_callback)));
61 } else {
62 // If we expect the dialog to be cancelled then store the callback to
63 // retain reference to the callback handler.
64 done_callback_ = std::move(done_callback);
65 }
66 }
67
GetParams()68 DesktopMediaPicker::Params FakeDesktopMediaPicker::GetParams() {
69 return picker_params_;
70 }
71
CallCallback(DoneCallback done_callback)72 void FakeDesktopMediaPicker::CallCallback(DoneCallback done_callback) {
73 std::move(done_callback).Run(expectation_->selected_source);
74 }
75
76 FakeDesktopMediaPickerFactory::FakeDesktopMediaPickerFactory() = default;
77
78 FakeDesktopMediaPickerFactory::~FakeDesktopMediaPickerFactory() = default;
79
SetTestFlags(TestFlags * test_flags,int tests_count)80 void FakeDesktopMediaPickerFactory::SetTestFlags(TestFlags* test_flags,
81 int tests_count) {
82 test_flags_ = test_flags;
83 tests_count_ = tests_count;
84 current_test_ = 0;
85 }
86
87 std::unique_ptr<DesktopMediaPicker>
CreatePicker()88 FakeDesktopMediaPickerFactory::CreatePicker() {
89 EXPECT_LE(current_test_, tests_count_);
90 if (current_test_ >= tests_count_)
91 return std::unique_ptr<DesktopMediaPicker>();
92 ++current_test_;
93 picker_ = new FakeDesktopMediaPicker(test_flags_ + current_test_ - 1);
94 return std::unique_ptr<DesktopMediaPicker>(picker_);
95 }
96
97 std::vector<std::unique_ptr<DesktopMediaList>>
CreateMediaList(const std::vector<content::DesktopMediaID::Type> & types)98 FakeDesktopMediaPickerFactory::CreateMediaList(
99 const std::vector<content::DesktopMediaID::Type>& types) {
100 EXPECT_LE(current_test_, tests_count_);
101 std::vector<std::unique_ptr<DesktopMediaList>> media_lists;
102 for (auto source_type : types)
103 media_lists.emplace_back(new FakeDesktopMediaList(source_type));
104 return media_lists;
105 }
106