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

Side by Side Diff: media/mojo/services/mojo_renderer_service.cc

Issue 2539703002: media: Add |bad_message_cb_| to MojoRendererService (Closed)
Patch Set: add TODO and ref to bug Created 4 years 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 | « media/mojo/services/mojo_renderer_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/mojo/services/mojo_renderer_service.h" 5 #include "media/mojo/services/mojo_renderer_service.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/optional.h" 10 #include "base/optional.h"
11 #include "media/base/audio_renderer_sink.h" 11 #include "media/base/audio_renderer_sink.h"
12 #include "media/base/media_keys.h" 12 #include "media/base/media_keys.h"
13 #include "media/base/media_url_demuxer.h" 13 #include "media/base/media_url_demuxer.h"
14 #include "media/base/renderer.h" 14 #include "media/base/renderer.h"
15 #include "media/base/video_renderer_sink.h" 15 #include "media/base/video_renderer_sink.h"
16 #include "media/mojo/services/demuxer_stream_provider_shim.h" 16 #include "media/mojo/services/demuxer_stream_provider_shim.h"
17 #include "media/mojo/services/mojo_cdm_service_context.h" 17 #include "media/mojo/services/mojo_cdm_service_context.h"
18 18
19 namespace media { 19 namespace media {
20 20
21 namespace {
22
23 void CloseBindingOnBadMessage(mojo::StrongBindingPtr<mojom::Renderer> binding) {
24 LOG(ERROR) << __func__;
25 DCHECK(binding);
26 binding->Close();
27 }
28
29 } // namespace
30
21 // Time interval to update media time. 31 // Time interval to update media time.
22 const int kTimeUpdateIntervalMs = 50; 32 const int kTimeUpdateIntervalMs = 50;
23 33
24 // static 34 // static
25 mojo::StrongBindingPtr<mojom::Renderer> MojoRendererService::Create( 35 mojo::StrongBindingPtr<mojom::Renderer> MojoRendererService::Create(
26 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, 36 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context,
27 scoped_refptr<AudioRendererSink> audio_sink, 37 scoped_refptr<AudioRendererSink> audio_sink,
28 std::unique_ptr<VideoRendererSink> video_sink, 38 std::unique_ptr<VideoRendererSink> video_sink,
29 std::unique_ptr<media::Renderer> renderer, 39 std::unique_ptr<media::Renderer> renderer,
30 InitiateSurfaceRequestCB initiate_surface_request_cb, 40 InitiateSurfaceRequestCB initiate_surface_request_cb,
31 mojo::InterfaceRequest<mojom::Renderer> request) { 41 mojo::InterfaceRequest<mojom::Renderer> request) {
32 MojoRendererService* service = new MojoRendererService( 42 MojoRendererService* service = new MojoRendererService(
33 mojo_cdm_service_context, std::move(audio_sink), std::move(video_sink), 43 mojo_cdm_service_context, std::move(audio_sink), std::move(video_sink),
34 std::move(renderer), initiate_surface_request_cb); 44 std::move(renderer), initiate_surface_request_cb);
35 45
36 mojo::StrongBindingPtr<mojom::Renderer> binding = 46 mojo::StrongBindingPtr<mojom::Renderer> binding =
37 mojo::MakeStrongBinding<mojom::Renderer>(base::WrapUnique(service), 47 mojo::MakeStrongBinding<mojom::Renderer>(base::WrapUnique(service),
38 std::move(request)); 48 std::move(request));
39 49
40 service->binding_ = binding; 50 service->set_bad_message_cb(base::Bind(&CloseBindingOnBadMessage, binding));
41 51
42 return binding; 52 return binding;
43 } 53 }
44 54
45 MojoRendererService::MojoRendererService( 55 MojoRendererService::MojoRendererService(
46 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, 56 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context,
47 scoped_refptr<AudioRendererSink> audio_sink, 57 scoped_refptr<AudioRendererSink> audio_sink,
48 std::unique_ptr<VideoRendererSink> video_sink, 58 std::unique_ptr<VideoRendererSink> video_sink,
49 std::unique_ptr<media::Renderer> renderer, 59 std::unique_ptr<media::Renderer> renderer,
50 InitiateSurfaceRequestCB initiate_surface_request_cb) 60 InitiateSurfaceRequestCB initiate_surface_request_cb)
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 274
265 callback.Run(success); 275 callback.Run(success);
266 } 276 }
267 277
268 void MojoRendererService::InitiateScopedSurfaceRequest( 278 void MojoRendererService::InitiateScopedSurfaceRequest(
269 const InitiateScopedSurfaceRequestCallback& callback) { 279 const InitiateScopedSurfaceRequestCallback& callback) {
270 if (initiate_surface_request_cb_.is_null()) { 280 if (initiate_surface_request_cb_.is_null()) {
271 // |renderer_| is likely not of type MediaPlayerRenderer. 281 // |renderer_| is likely not of type MediaPlayerRenderer.
272 // This is an unexpected call, and the connection should be closed. 282 // This is an unexpected call, and the connection should be closed.
273 mojo::ReportBadMessage("Unexpected call to InitiateScopedSurfaceRequest."); 283 mojo::ReportBadMessage("Unexpected call to InitiateScopedSurfaceRequest.");
274 binding_->Close(); 284
285 // This may cause |this| to be destructed.
286 DCHECK(!bad_message_cb_.is_null());
287 bad_message_cb_.Run();
275 return; 288 return;
276 } 289 }
277 290
278 callback.Run(initiate_surface_request_cb_.Run()); 291 callback.Run(initiate_surface_request_cb_.Run());
279 } 292 }
280 } // namespace media 293 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/services/mojo_renderer_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698