1 Author: Sudarsana Nagineni <sudarsana.nagineni@intel.com>
3 This patch includes Chromium side changes needed for integrating
4 WebMediaPlayer with the Tizen Audio Session Manager.
6 Also, it has changes that are needed for generating audio-session-manager
7 stubs and load the library dynamically in the Browser process.
9 audio-session-manager is using an _attribute_((constructor)) to initialize
10 code and setup signal handlers at startup. So, linking with this library
11 is causing a sandbox violation by executing the code in Renderer Process,
12 since the Renderer Process and the Browser Process are linked with the
15 To prevent the problem, we load the audio-session-manager dynamically in
18 diff --git src/build/linux/system.gyp src/build/linux/system.gyp
19 index 4a7e857..f89d256 100644
20 --- src/build/linux/system.gyp
21 +++ src/build/linux/system.gyp
27 + 'target_name': 'audio_session_manager',
29 + 'toolsets': ['host', 'target'],
31 + ['tizen_mobile == 1', {
32 + 'direct_dependent_settings': {
34 + '<!@(<(pkg-config) --cflags audio-session-mgr)',
42 diff --git src/content/browser/renderer_host/render_view_host_impl.cc src/content/browser/renderer_host/render_view_host_impl.cc
43 index 0912144..adf0a1b 100644
44 --- src/content/browser/renderer_host/render_view_host_impl.cc
45 +++ src/content/browser/renderer_host/render_view_host_impl.cc
47 #include "content/browser/media/android/browser_media_player_manager.h"
48 +#elif defined(OS_TIZEN_MOBILE)
49 +#include "xwalk/tizen/browser/browser_mediaplayer_manager.h"
51 #include "base/win/win_util.h"
54 using base::TimeDelta;
55 @@ -223,6 +225,8 @@ RenderViewHostImpl::RenderViewHostImpl(
57 #if defined(OS_ANDROID)
58 media_player_manager_.reset(BrowserMediaPlayerManager::Create(this));
59 +#elif defined(OS_TIZEN_MOBILE)
60 + media_player_manager_.reset(tizen::BrowserMediaPlayerManager::Create(this));
64 diff --git src/content/browser/renderer_host/render_view_host_impl.h src/content/browser/renderer_host/render_view_host_impl.h
65 index d63bae3..d0602c7 100644
66 --- src/content/browser/renderer_host/render_view_host_impl.h
67 +++ src/content/browser/renderer_host/render_view_host_impl.h
68 @@ -42,6 +42,12 @@ struct ViewHostMsg_ShowPopup_Params;
69 struct ViewMsg_Navigate_Params;
70 struct ViewMsg_PostMessage_Params;
72 +#if defined(OS_TIZEN_MOBILE)
74 +class BrowserMediaPlayerManager;
81 @@ -704,6 +710,8 @@ class CONTENT_EXPORT RenderViewHostImpl
82 #if defined(OS_ANDROID)
83 // Manages all the android mediaplayer objects and handling IPCs for video.
84 scoped_ptr<BrowserMediaPlayerManager> media_player_manager_;
85 +#elif defined(OS_TIZEN_MOBILE)
86 + scoped_ptr<tizen::BrowserMediaPlayerManager> media_player_manager_;
89 DISALLOW_COPY_AND_ASSIGN(RenderViewHostImpl);
90 diff --git src/content/common/content_message_generator.h src/content/common/content_message_generator.h
91 index 78e7c53..a3cda01 100644
92 --- src/content/common/content_message_generator.h
93 +++ src/content/common/content_message_generator.h
95 #include "content/common/view_messages.h"
96 #include "content/common/websocket_messages.h"
97 #include "content/common/worker_messages.h"
98 +#if defined(OS_TIZEN_MOBILE)
99 +#include "xwalk/tizen/common/media_player_messages.h"
101 diff --git src/content/content_browser.gypi src/content/content_browser.gypi
102 index 6570d15..d47cee2 100644
103 --- src/content/content_browser.gypi
104 +++ src/content/content_browser.gypi
105 @@ -1641,5 +1641,69 @@
106 'browser/geolocation/wifi_data_provider_linux.cc',
109 + ['tizen_mobile == 1', {
111 + '<(DEPTH)/xwalk/tizen/browser/audio_session_manager.cc',
112 + '<(DEPTH)/xwalk/tizen/browser/audio_session_manager.h',
113 + '<(DEPTH)/xwalk/tizen/browser/audio_session_manager_init.cc',
114 + '<(DEPTH)/xwalk/tizen/browser/audio_session_manager_init.h',
115 + '<(DEPTH)/xwalk/tizen/browser/browser_mediaplayer_manager.cc',
116 + '<(DEPTH)/xwalk/tizen/browser/browser_mediaplayer_manager.h',
119 + 'generate_stubs_script': '../tools/generate_stubs/generate_stubs.py',
120 + 'extra_header': '../xwalk/tizen/browser/audio_session_manager_stub_headers.fragment',
121 + 'sig_files': ['../xwalk/tizen/browser/audio_session_manager.sigs'],
122 + 'outfile_type': 'posix_stubs',
123 + 'stubs_filename_root': 'audio_session_manager_stubs',
124 + 'project_path': 'xwalk/tizen/browser',
125 + 'intermediate_dir': '<(INTERMEDIATE_DIR)',
126 + 'output_root': '<(SHARED_INTERMEDIATE_DIR)/audio_session_manager',
133 + 'action_name': 'generate_stubs',
135 + '<(generate_stubs_script)',
140 + '<(intermediate_dir)/<(stubs_filename_root).cc',
141 + '<(output_root)/<(project_path)/<(stubs_filename_root).h',
143 + 'action': ['python',
144 + '<(generate_stubs_script)',
145 + '-i', '<(intermediate_dir)',
146 + '-o', '<(output_root)/<(project_path)',
147 + '-t', '<(outfile_type)',
148 + '-e', '<(extra_header)',
149 + '-s', '<(stubs_filename_root)',
150 + '-p', '<(project_path)',
153 + 'process_outputs_as_sources': 1,
154 + 'message': 'Generating audio session manager stubs for dynamic loading',
158 + ['OS=="linux" or OS=="solaris"', {
167 + '../build/linux/system.gyp:audio_session_manager',
169 + 'export_dependent_settings': [
170 + '../build/linux/system.gyp:audio_session_manager',
175 diff --git src/content/content_common.gypi src/content/content_common.gypi
176 index 1bfcccd..46db168 100644
177 --- src/content/content_common.gypi
178 +++ src/content/content_common.gypi
181 'defines': ['USE_SECCOMP_BPF'],
183 + ['tizen_mobile == 1', {
185 + '<(DEPTH)/xwalk/tizen/common/media_player_messages.h',
188 ['OS=="win" and directxsdk_exists=="True"', {
191 diff --git src/content/content_renderer.gypi src/content/content_renderer.gypi
192 index 1e72a81..3bceb70 100644
193 --- src/content/content_renderer.gypi
194 +++ src/content/content_renderer.gypi
199 + ['tizen_mobile == 1', {
201 + '<(DEPTH)/xwalk/tizen/renderer/mediaplayer_impl.cc',
202 + '<(DEPTH)/xwalk/tizen/renderer/mediaplayer_impl.h',
203 + '<(DEPTH)/xwalk/tizen/renderer/renderer_mediaplayer_manager.cc',
204 + '<(DEPTH)/xwalk/tizen/renderer/renderer_mediaplayer_manager.h',
208 'target_conditions': [
210 diff --git src/content/renderer/render_view_impl.cc src/content/renderer/render_view_impl.cc
211 index c5a7059..cd42b4c 100644
212 --- src/content/renderer/render_view_impl.cc
213 +++ src/content/renderer/render_view_impl.cc
215 #include "content/renderer/media/rtc_peer_connection_handler.h"
218 +#if defined(OS_TIZEN_MOBILE)
219 +#include "xwalk/tizen/renderer/mediaplayer_impl.h"
220 +#include "xwalk/tizen/renderer/renderer_mediaplayer_manager.h"
223 using blink::WebAXObject;
224 using blink::WebApplicationCacheHost;
225 using blink::WebApplicationCacheHostClient;
226 @@ -844,6 +849,8 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
227 body_background_color_(SK_ColorWHITE),
228 expected_content_intent_id_(0),
229 media_player_manager_(NULL),
230 +#elif defined(OS_TIZEN_MOBILE)
231 + media_player_manager_(NULL),
234 focused_plugin_id_(-1),
235 @@ -967,6 +974,8 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
236 #if defined(OS_ANDROID)
237 media_player_manager_ = new RendererMediaPlayerManager(this);
238 new JavaBridgeDispatcher(this);
239 +#elif defined(OS_TIZEN_MOBILE)
240 + media_player_manager_ = new tizen::RendererMediaPlayerManager(this);
243 // The next group of objects all implement RenderViewObserver, so are deleted
244 @@ -3044,6 +3053,13 @@ blink::WebMediaPlayer* RenderViewImpl::CreateMediaPlayer(
245 base::Unretained(GetContentClient()->renderer()),
246 static_cast<RenderFrame*>(render_frame)),
249 +#if defined(OS_TIZEN_MOBILE)
250 + tizen::MediaPlayerImpl* media_player = new tizen::MediaPlayerImpl(
251 + frame, client, AsWeakPtr(), media_player_manager_, params);
252 + return media_player;
255 return new WebMediaPlayerImpl(frame, client, AsWeakPtr(), params);
256 #endif // defined(OS_ANDROID)
258 diff --git src/content/renderer/render_view_impl.h src/content/renderer/render_view_impl.h
259 index ccfd1b5..8949cd0 100644
260 --- src/content/renderer/render_view_impl.h
261 +++ src/content/renderer/render_view_impl.h
262 @@ -128,6 +128,12 @@ namespace webkit_glue {
263 class WebURLResponseExtraDataImpl;
266 +#if defined(OS_TIZEN_MOBILE)
268 +class RendererMediaPlayerManager;
273 class BrowserPluginManager;
274 class DeviceOrientationDispatcher;
275 @@ -1403,6 +1409,10 @@ class CONTENT_EXPORT RenderViewImpl
277 // A date/time picker object for date and time related input elements.
278 scoped_ptr<RendererDateTimePicker> date_time_picker_client_;
279 +#elif defined(OS_TIZEN_MOBILE)
280 + // The media player manager for managing all the media players on this view
281 + // and for communicating with the audio session manager in browser process.
282 + tizen::RendererMediaPlayerManager* media_player_manager_;
285 // Plugins -------------------------------------------------------------------