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

Side by Side Diff: content/renderer/media/render_media_helper.h

Issue 2905613003: Extract media code from RenderFrameImpl (Closed)
Patch Set: Created 3 years, 6 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
OLDNEW
(Empty)
1 // Copyright 2017 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 #ifndef CONTENT_RENDERER_MEDIA_RENDER_MEDIA_HELPER_H_
6 #define CONTENT_RENDERER_MEDIA_RENDER_MEDIA_HELPER_H_
7
8 #include <memory>
9
10 #include "base/memory/linked_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "build/buildflag.h"
13 #include "media/base/renderer_factory_selector.h"
14 #include "media/base/routing_token_callback.h"
15 #include "media/blink/url_index.h"
16 #include "media/media_features.h"
17 #include "media/mojo/interfaces/remoting.mojom.h"
18 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h"
19 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
20 #include "third_party/WebKit/public/platform/WebSetSinkIdCallbacks.h"
21 #include "third_party/WebKit/public/platform/WebString.h"
22 #include "url/gurl.h"
23
24 using media::RequestRoutingTokenCallback;
25
26 namespace blink {
27 class WebContentDecryptionModule;
28 class WebEncryptedMediaClient;
29 class WebLocalFrame;
30 class WebMediaPlayer;
31 class WebMediaPlayerClient;
32 class WebMediaPlayerEncryptedMediaClient;
33 }
34
35 namespace media {
36 class CdmFactory;
37 class DecoderFactory;
38 class MediaLog;
39 class MediaObserver;
40 class MediaPermission;
41 class RendererWebMediaPlayerDelegate;
42 class SurfaceManager;
43 class WebEncryptedMediaClientImpl;
44 #if defined(OS_ANDROID)
45 class RendererMediaPlayerManager;
46 #endif
47 namespace remoting {
48 class SinkAvailabilityObserver;
49 }
50 }
51
52 namespace service_manager {
53 class InterfaceProvider;
54 namespace mojom {
55 class InterfaceProvider;
56 }
57 }
58
59 namespace content {
60
61 class RenderFrameImpl;
62 class MediaInterfaceProvider;
63 class MediaPermissionDispatcher;
64 class MediaStreamRendererFactory;
65
66 #if defined(OS_ANDROID)
67 class RendererMediaPlayerManager;
68 #endif
69
70 // Helper to RenderFrameImpl for all things media.
71 class RenderMediaHelper {
xhwang 2017/05/24 23:41:28 naming bikeshedding: We are already in content/ren
chcunningham 2017/05/25 01:18:50 Done.
72 public:
73 // Create a RenderMediaHelper to assist the |render_frame| with media tasks.
74 // |request_routing_token_cb| bound to |render_frame| IPC functions for
75 // obtaining overlay tokens.
76 RenderMediaHelper(RenderFrameImpl* render_frame,
77 const RequestRoutingTokenCallback request_routing_token_cb);
78 ~RenderMediaHelper();
79
80 // See blink::WebFrameClient.
81 blink::WebMediaPlayer* CreateMediaPlayer(
82 const blink::WebMediaPlayerSource& source,
83 blink::WebMediaPlayerClient* client,
84 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
85 blink::WebContentDecryptionModule* initial_cdm,
86 const blink::WebString& sink_id);
87 blink::WebEncryptedMediaClient* EncryptedMediaClient();
88 void CheckIfAudioSinkExistsAndIsAuthorized(
89 const blink::WebString& sink_id,
90 const blink::WebSecurityOrigin& security_origin,
91 blink::WebSetSinkIdCallbacks* web_callbacks);
92
93 // Object to handle media related permission checks and requests.
94 media::MediaPermission* GetMediaPermission();
95
96 private:
97 std::unique_ptr<media::RendererFactorySelector> CreateRendererFactorySelector(
98 media::MediaLog* media_log,
99 bool use_media_player,
100 media::DecoderFactory* decoder_factory,
101 base::WeakPtr<media::MediaObserver>* out_media_observer);
102
103 blink::WebMediaPlayer* CreateWebMediaPlayerForMediaStream(
104 blink::WebMediaPlayerClient* client,
105 const blink::WebString& sink_id,
106 const blink::WebSecurityOrigin& security_origin,
107 blink::WebLocalFrame* frame);
108
109 // Returns the media delegate for WebMediaPlayer usage. If
110 // |media_player_delegate_| is NULL, one is created.
111 media::RendererWebMediaPlayerDelegate* GetWebMediaPlayerDelegate();
112
113 // Creates a MediaStreamRendererFactory used for creating audio and video
114 // renderers for WebMediaPlayerMS.
115 std::unique_ptr<MediaStreamRendererFactory>
116 CreateMediaStreamRendererFactory();
117
118 media::DecoderFactory* GetDecoderFactory();
119
120 #if defined(OS_ANDROID)
121 RendererMediaPlayerManager* GetMediaPlayerManager();
122 #endif
123
124 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
125 media::mojom::RemoterFactory* GetRemoterFactory();
126 #endif
127
128 bool AreSecureCodecsSupported();
129
130 media::CdmFactory* GetCdmFactory();
131
132 #if defined(ENABLE_MOJO_MEDIA)
xhwang 2017/05/24 23:41:28 nit: you need rebase :)
chcunningham 2017/05/25 01:18:50 Done.
133 service_manager::mojom::InterfaceProvider* GetMediaInterfaceProvider();
134
135 // The media interface provider attached to this frame, lazily initialized.
136 std::unique_ptr<MediaInterfaceProvider> media_interface_provider_;
137 #endif
138
139 // The render frame we're helping. RenderFrameImpl creates and destroys this
140 // RenderMediaHelper, so the pointer will always be valid.
141 RenderFrameImpl* render_frame_;
142
143 // Injected callback for requesting overlay routing tokens.
144 RequestRoutingTokenCallback request_routing_token_cb_;
145
146 // Handy pointer to render_frame_->GetRemoteInterfaces();
147 service_manager::InterfaceProvider* remote_interfaces_;
148
149 #if defined(OS_ANDROID)
150 // Manages all media players and sessions in this render frame for
151 // communicating with the real media player and sessions in the
152 // browser process. It's okay to use raw pointers since they're both
153 // RenderFrameObservers.
154 RendererMediaPlayerManager* media_player_manager_;
155 #endif
156
157 media::SurfaceManager* media_surface_manager_;
158
159 // Manages play, pause notifications for WebMediaPlayer implementations; its
160 // lifetime is tied to the RenderFrame via the RenderFrameObserver interface.
161 media::RendererWebMediaPlayerDelegate* media_player_delegate_;
162
163 // The CDM and decoder factory attached to this frame, lazily initialized.
164 std::unique_ptr<media::DecoderFactory> decoder_factory_;
165 std::unique_ptr<media::CdmFactory> cdm_factory_;
166
167 // Media resource cache, lazily initialized.
168 linked_ptr<media::UrlIndex> url_index_;
169
170 // EncryptedMediaClient attached to this frame; lazily initialized.
171 std::unique_ptr<media::WebEncryptedMediaClientImpl>
172 web_encrypted_media_client_;
173
174 // The media permission dispatcher attached to this frame.
175 std::unique_ptr<MediaPermissionDispatcher> media_permission_dispatcher_;
176
177 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
178 // Lazy-bound pointer to the RemoterFactory service in the browser
179 // process. Always use the GetRemoterFactory() accessor instead of this.
180 media::mojom::RemoterFactoryPtr remoter_factory_;
181
182 // An observer for the remoting sink availability that is used by
183 // media::RemotingCdmFactory to initialize media::RemotingSourceImpl. Created
184 // in the constructor of RenderFrameImpl to make sure
185 // media::RemotingSourceImpl be intialized with correct availability info.
186 // Own by media::RemotingCdmFactory after it is created.
187 std::unique_ptr<media::remoting::SinkAvailabilityObserver>
188 remoting_sink_observer_;
189 #endif
190 };
191
192 } // namespace media
193
194 #endif // CONTENT_RENDERER_MEDIA_RENDER_MEDIA_HELPER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698