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

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

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

Powered by Google App Engine
This is Rietveld 408576698