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 68e4d36..3ae6ab3 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 68204fb..a3e654b 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/renderer_host/popup_menu_helper_mac.h"
48 #elif defined(OS_ANDROID)
49 #include "content/browser/media/android/browser_media_player_manager.h"
50 +#elif defined(OS_TIZEN_MOBILE)
51 +#include "xwalk/tizen/browser/browser_mediaplayer_manager.h"
54 using base::TimeDelta;
55 @@ -208,6 +210,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 c4bfb78..cc060bb 100644
66 --- src/content/browser/renderer_host/render_view_host_impl.h
67 +++ src/content/browser/renderer_host/render_view_host_impl.h
68 @@ -43,6 +43,12 @@ struct ViewMsg_Navigate_Params;
69 struct ViewMsg_PostMessage_Params;
70 struct ViewMsg_StopFinding_Params;
72 +#if defined(OS_TIZEN_MOBILE)
74 +class BrowserMediaPlayerManager;
81 @@ -715,6 +721,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 b0af11d..54106a2 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 1e3485c..6336e49 100644
103 --- src/content/content_browser.gypi
104 +++ src/content/content_browser.gypi
105 @@ -1558,5 +1558,69 @@
106 '../third_party/speex/speex.gyp:libspeex',
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 8c45574..10b0e2b 100644
177 --- src/content/content_common.gypi
178 +++ src/content/content_common.gypi
183 + ['tizen_mobile == 1', {
185 + '<(DEPTH)/xwalk/tizen/common/media_player_messages.h',
190 diff --git src/content/content_renderer.gypi src/content/content_renderer.gypi
191 index 46b7468..4cab17f 100644
192 --- /src/content/content_renderer.gypi
193 +++ src/content/content_renderer.gypi
198 + ['tizen_mobile == 1', {
200 + '<(DEPTH)/xwalk/tizen/renderer/mediaplayer_impl.cc',
201 + '<(DEPTH)/xwalk/tizen/renderer/mediaplayer_impl.h',
202 + '<(DEPTH)/xwalk/tizen/renderer/renderer_mediaplayer_manager.cc',
203 + '<(DEPTH)/xwalk/tizen/renderer/renderer_mediaplayer_manager.h',
207 'target_conditions': [
209 diff --git src/content/renderer/render_view_impl.cc src/content/renderer/render_view_impl.cc
210 index 6827468..549c8fb 100644
211 --- src/content/renderer/render_view_impl.cc
212 +++ src/content/renderer/render_view_impl.cc
214 #include "content/renderer/media/rtc_peer_connection_handler.h"
217 +#if defined(OS_TIZEN_MOBILE)
218 +#include "xwalk/tizen/renderer/mediaplayer_impl.h"
219 +#include "xwalk/tizen/renderer/renderer_mediaplayer_manager.h"
222 using WebKit::WebAXObject;
223 using WebKit::WebApplicationCacheHost;
224 using WebKit::WebApplicationCacheHostClient;
225 @@ -865,6 +870,8 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
226 body_background_color_(SK_ColorWHITE),
227 expected_content_intent_id_(0),
228 media_player_manager_(NULL),
229 +#elif defined(OS_TIZEN_MOBILE)
230 + media_player_manager_(NULL),
233 focused_plugin_id_(-1),
234 @@ -986,6 +993,8 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
235 #if defined(OS_ANDROID)
236 media_player_manager_ = new RendererMediaPlayerManager(this);
237 new JavaBridgeDispatcher(this);
238 +#elif defined(OS_TIZEN_MOBILE)
239 + media_player_manager_ = new tizen::RendererMediaPlayerManager(this);
242 // The next group of objects all implement RenderViewObserver, so are deleted
243 @@ -3163,6 +3172,13 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
245 RenderThreadImpl::current()->GetGpuFactories(),
246 new RenderMediaLog());
248 +#if defined(OS_TIZEN_MOBILE)
249 + tizen::MediaPlayerImpl* media_player = new tizen::MediaPlayerImpl(
250 + frame, client, AsWeakPtr(), media_player_manager_, params);
251 + return media_player;
254 return new WebMediaPlayerImpl(frame, client, AsWeakPtr(), params);
257 diff --git src/content/renderer/render_view_impl.h src/content/renderer/render_view_impl.h
258 index 2b18b3c..314a1c0 100644
259 --- src/content/renderer/render_view_impl.h
260 +++ src/content/renderer/render_view_impl.h
261 @@ -129,6 +129,12 @@ namespace webkit_glue {
262 class WebURLResponseExtraDataImpl;
265 +#if defined(OS_TIZEN_MOBILE)
267 +class RendererMediaPlayerManager;
272 class BrowserPluginManager;
273 class DeviceOrientationDispatcher;
274 @@ -1431,6 +1437,10 @@ class CONTENT_EXPORT RenderViewImpl
276 // A date/time picker object for date and time related input elements.
277 scoped_ptr<RendererDateTimePicker> date_time_picker_client_;
278 +#elif defined(OS_TIZEN_MOBILE)
279 + // The media player manager for managing all the media players on this view
280 + // and for communicating with the audio session manager in browser process.
281 + tizen::RendererMediaPlayerManager* media_player_manager_;
284 // Plugins -------------------------------------------------------------------