OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "media/remoting/fake_remoting_controller.h" | 5 #include "media/remoting/fake_remoting_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
11 #include "media/remoting/remoting_controller.h" | 11 #include "media/remoting/remoting_source_impl.h" |
12 #include "media/remoting/rpc/proto_utils.h" | 12 #include "media/remoting/rpc/proto_utils.h" |
13 #include "mojo/public/cpp/bindings/strong_binding.h" | 13 #include "mojo/public/cpp/bindings/strong_binding.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 | 15 |
16 namespace media { | 16 namespace media { |
17 | 17 |
18 FakeRemotingDataStreamSender::FakeRemotingDataStreamSender( | 18 FakeRemotingDataStreamSender::FakeRemotingDataStreamSender( |
19 mojom::RemotingDataStreamSenderRequest request, | 19 mojom::RemotingDataStreamSenderRequest request, |
20 mojo::ScopedDataPipeConsumerHandle consumer_handle) | 20 mojo::ScopedDataPipeConsumerHandle consumer_handle) |
21 : binding_(this, std::move(request)), | 21 : binding_(this, std::move(request)), |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
99 ++send_frame_count_; | 99 ++send_frame_count_; |
100 received_frame_list.push_back(std::move(next_frame_data_)); | 100 received_frame_list.push_back(std::move(next_frame_data_)); |
101 EXPECT_EQ(send_frame_count_, received_frame_list.size()); | 101 EXPECT_EQ(send_frame_count_, received_frame_list.size()); |
102 } | 102 } |
103 | 103 |
104 void FakeRemotingDataStreamSender::CancelInFlightData() { | 104 void FakeRemotingDataStreamSender::CancelInFlightData() { |
105 ++cancel_in_flight_count_; | 105 ++cancel_in_flight_count_; |
106 } | 106 } |
107 | 107 |
108 FakeRemoter::FakeRemoter(mojom::RemotingSourcePtr source, bool start_will_fail) | 108 FakeRemoter::FakeRemoter(mojom::RemotingSourcePtr source, bool start_will_fail) |
109 : source_(std::move(source)), start_will_fail_(start_will_fail) {} | 109 : source_(std::move(source)), |
110 start_will_fail_(start_will_fail), | |
111 weak_factory_(this) {} | |
110 | 112 |
111 FakeRemoter::~FakeRemoter() {} | 113 FakeRemoter::~FakeRemoter() {} |
112 | 114 |
113 void FakeRemoter::Start() { | 115 void FakeRemoter::Start() { |
114 if (start_will_fail_) { | 116 if (start_will_fail_) { |
115 base::ThreadTaskRunnerHandle::Get()->PostTask( | 117 base::ThreadTaskRunnerHandle::Get()->PostTask( |
116 FROM_HERE, | 118 FROM_HERE, |
117 base::Bind(&FakeRemoter::StartFailed, base::Unretained(this))); | 119 base::Bind(&FakeRemoter::StartFailed, weak_factory_.GetWeakPtr())); |
miu
2016/11/05 04:05:15
OOC, why were these changed to use WeakPtr? Can th
xjz
2016/11/07 19:03:54
WeakPtr is needed because when the RemotingSourceI
| |
118 } else { | 120 } else { |
119 base::ThreadTaskRunnerHandle::Get()->PostTask( | 121 base::ThreadTaskRunnerHandle::Get()->PostTask( |
120 FROM_HERE, base::Bind(&FakeRemoter::Started, base::Unretained(this))); | 122 FROM_HERE, |
123 base::Bind(&FakeRemoter::Started, weak_factory_.GetWeakPtr())); | |
121 } | 124 } |
122 } | 125 } |
123 | 126 |
124 void FakeRemoter::StartDataStreams( | 127 void FakeRemoter::StartDataStreams( |
125 mojo::ScopedDataPipeConsumerHandle audio_pipe, | 128 mojo::ScopedDataPipeConsumerHandle audio_pipe, |
126 mojo::ScopedDataPipeConsumerHandle video_pipe, | 129 mojo::ScopedDataPipeConsumerHandle video_pipe, |
127 mojom::RemotingDataStreamSenderRequest audio_sender_request, | 130 mojom::RemotingDataStreamSenderRequest audio_sender_request, |
128 mojom::RemotingDataStreamSenderRequest video_sender_request) { | 131 mojom::RemotingDataStreamSenderRequest video_sender_request) { |
129 if (audio_pipe.is_valid()) { | 132 if (audio_pipe.is_valid()) { |
130 VLOG(2) << "Has audio"; | 133 VLOG(2) << "Has audio"; |
131 audio_stream_sender_.reset(new FakeRemotingDataStreamSender( | 134 audio_stream_sender_.reset(new FakeRemotingDataStreamSender( |
132 std::move(audio_sender_request), std::move(audio_pipe))); | 135 std::move(audio_sender_request), std::move(audio_pipe))); |
133 } | 136 } |
134 | 137 |
135 if (video_pipe.is_valid()) { | 138 if (video_pipe.is_valid()) { |
136 VLOG(2) << "Has video"; | 139 VLOG(2) << "Has video"; |
137 video_stream_sender_.reset(new FakeRemotingDataStreamSender( | 140 video_stream_sender_.reset(new FakeRemotingDataStreamSender( |
138 std::move(video_sender_request), std::move(video_pipe))); | 141 std::move(video_sender_request), std::move(video_pipe))); |
139 } | 142 } |
140 } | 143 } |
141 | 144 |
142 void FakeRemoter::Stop(mojom::RemotingStopReason reason) { | 145 void FakeRemoter::Stop(mojom::RemotingStopReason reason) { |
143 base::ThreadTaskRunnerHandle::Get()->PostTask( | 146 base::ThreadTaskRunnerHandle::Get()->PostTask( |
144 FROM_HERE, | 147 FROM_HERE, |
145 base::Bind(&FakeRemoter::Stopped, base::Unretained(this), reason)); | 148 base::Bind(&FakeRemoter::Stopped, weak_factory_.GetWeakPtr(), reason)); |
146 } | 149 } |
147 | 150 |
148 void FakeRemoter::SendMessageToSink(const std::vector<uint8_t>& message) {} | 151 void FakeRemoter::SendMessageToSink(const std::vector<uint8_t>& message) {} |
149 | 152 |
150 void FakeRemoter::Started() { | 153 void FakeRemoter::Started() { |
151 source_->OnStarted(); | 154 source_->OnStarted(); |
152 } | 155 } |
153 | 156 |
154 void FakeRemoter::StartFailed() { | 157 void FakeRemoter::StartFailed() { |
155 source_->OnStartFailed(mojom::RemotingStartFailReason::ROUTE_TERMINATED); | 158 source_->OnStartFailed(mojom::RemotingStartFailReason::ROUTE_TERMINATED); |
156 } | 159 } |
157 | 160 |
158 void FakeRemoter::Stopped(mojom::RemotingStopReason reason) { | 161 void FakeRemoter::Stopped(mojom::RemotingStopReason reason) { |
159 source_->OnStopped(reason); | 162 source_->OnStopped(reason); |
160 } | 163 } |
161 | 164 |
162 FakeRemoterFactory::FakeRemoterFactory(bool start_will_fail) | 165 FakeRemoterFactory::FakeRemoterFactory(bool start_will_fail) |
163 : start_will_fail_(start_will_fail) {} | 166 : start_will_fail_(start_will_fail) {} |
164 | 167 |
165 FakeRemoterFactory::~FakeRemoterFactory() {} | 168 FakeRemoterFactory::~FakeRemoterFactory() {} |
166 | 169 |
167 void FakeRemoterFactory::Create(mojom::RemotingSourcePtr source, | 170 void FakeRemoterFactory::Create(mojom::RemotingSourcePtr source, |
168 mojom::RemoterRequest request) { | 171 mojom::RemoterRequest request) { |
169 mojo::MakeStrongBinding( | 172 mojo::MakeStrongBinding( |
170 base::MakeUnique<FakeRemoter>(std::move(source), start_will_fail_), | 173 base::MakeUnique<FakeRemoter>(std::move(source), start_will_fail_), |
171 std::move(request)); | 174 std::move(request)); |
172 } | 175 } |
173 | 176 |
174 std::unique_ptr<RemotingController> CreateRemotingController( | 177 scoped_refptr<RemotingSourceImpl> CreateRemotingSourceImpl( |
175 bool start_will_fail) { | 178 bool start_will_fail) { |
176 mojom::RemotingSourcePtr remoting_source; | 179 mojom::RemotingSourcePtr remoting_source; |
177 mojom::RemotingSourceRequest remoting_source_request = | 180 mojom::RemotingSourceRequest remoting_source_request = |
178 mojo::GetProxy(&remoting_source); | 181 mojo::GetProxy(&remoting_source); |
179 mojom::RemoterPtr remoter; | 182 mojom::RemoterPtr remoter; |
180 std::unique_ptr<mojom::RemoterFactory> remoter_factory = | 183 std::unique_ptr<mojom::RemoterFactory> remoter_factory = |
181 base::MakeUnique<FakeRemoterFactory>(start_will_fail); | 184 base::MakeUnique<FakeRemoterFactory>(start_will_fail); |
182 remoter_factory->Create(std::move(remoting_source), mojo::GetProxy(&remoter)); | 185 remoter_factory->Create(std::move(remoting_source), mojo::GetProxy(&remoter)); |
183 std::unique_ptr<RemotingController> remoting_controller = | 186 return new RemotingSourceImpl(std::move(remoting_source_request), |
184 base::MakeUnique<RemotingController>(std::move(remoting_source_request), | 187 std::move(remoter)); |
185 std::move(remoter)); | |
186 return remoting_controller; | |
187 } | 188 } |
188 | 189 |
189 } // namespace media | 190 } // namespace media |
OLD | NEW |