566969443e0f3e2b00d5c7aa4f8ea899da14d9ad
[platform/framework/web/crosswalk.git] / src / xwalk / packaging / crosswalk-tizen-audio-session-manager.patch
1 Author: Sudarsana Nagineni <sudarsana.nagineni@intel.com>
2
3 This patch includes Chromium side changes needed for integrating
4 WebMediaPlayer with the Tizen Audio Session Manager.
5
6 Also, it has changes that are needed for generating audio-session-manager
7 stubs and load the library dynamically in the Browser process.
8
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
13 same libraries.
14
15 To prevent the problem, we load the audio-session-manager dynamically in
16 the Browser process.
17
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
22 @@ -874,5 +874,19 @@
23          }],
24        ],
25      },
26 +    {
27 +      'target_name': 'audio_session_manager',
28 +      'type': 'none',
29 +      'toolsets': ['host', 'target'],
30 +      'conditions': [
31 +        ['tizen_mobile == 1', {
32 +          'direct_dependent_settings': {
33 +            'cflags': [
34 +              '<!@(<(pkg-config) --cflags audio-session-mgr)',
35 +            ],
36 +          },
37 +        }],
38 +      ],
39 +    },
40    ],
41  }
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
46 @@ -89,4 +89,6 @@
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"
50  #elif defined(OS_WIN)
51  #include "base/win/win_util.h"
52  #endif
53
54  using base::TimeDelta;
55 @@ -223,6 +225,8 @@ RenderViewHostImpl::RenderViewHostImpl(
56
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));
61  #endif
62  }
63
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;
71
72 +#if defined(OS_TIZEN_MOBILE)
73 +namespace tizen {
74 +class BrowserMediaPlayerManager;
75 +}
76 +#endif
77 +
78  namespace base {
79  class ListValue;
80  }
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_;
87  #endif
88
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
94 @@ -57,3 +57,6 @@
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"
100 +#endif
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',
107        ],
108      }],
109 +    ['tizen_mobile == 1', {
110 +      'sources': [
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',
117 +      ],
118 +      'variables': {
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',
127 +      },
128 +      'include_dirs': [
129 +        '<(output_root)',
130 +      ],
131 +      'actions': [
132 +        {
133 +          'action_name': 'generate_stubs',
134 +          'inputs': [
135 +          '<(generate_stubs_script)',
136 +          '<(extra_header)',
137 +          '<@(sig_files)',
138 +          ],
139 +          'outputs': [
140 +            '<(intermediate_dir)/<(stubs_filename_root).cc',
141 +            '<(output_root)/<(project_path)/<(stubs_filename_root).h',
142 +          ],
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)',
151 +            '<@(_inputs)',
152 +          ],
153 +          'process_outputs_as_sources': 1,
154 +          'message': 'Generating audio session manager stubs for dynamic loading',
155 +        },
156 +      ],
157 +      'conditions': [
158 +        ['OS=="linux" or OS=="solaris"', {
159 +          'link_settings': {
160 +            'libraries': [
161 +            '-ldl',
162 +            ],
163 +          },
164 +        }],
165 +      ],
166 +      'dependencies': [
167 +        '../build/linux/system.gyp:audio_session_manager',
168 +      ],
169 +      'export_dependent_settings': [
170 +        '../build/linux/system.gyp:audio_session_manager',
171 +      ],
172 +    }],
173    ],
174  }
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
179 @@ -656,5 +656,10 @@
180      }, {
181        'defines': ['USE_SECCOMP_BPF'],
182      }],
183 +    ['tizen_mobile == 1', {
184 +      'sources': [
185 +        '<(DEPTH)/xwalk/tizen/common/media_player_messages.h',
186 +      ],
187 +    }],
188      ['OS=="win" and directxsdk_exists=="True"', {
189        'actions': [
190        {
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
195 @@ -752,6 +752,14 @@
196          }],
197        ],
198      }],
199 +    ['tizen_mobile == 1', {
200 +      'sources': [
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',
205 +      ],
206 +    }],
207    ],
208    'target_conditions': [
209      ['OS=="android"', {
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
214 @@ -245,6 +245,11 @@
215  #include "content/renderer/media/rtc_peer_connection_handler.h"
216  #endif
217
218 +#if defined(OS_TIZEN_MOBILE)
219 +#include "xwalk/tizen/renderer/mediaplayer_impl.h"
220 +#include "xwalk/tizen/renderer/renderer_mediaplayer_manager.h"
221 +#endif
222 +
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),
232  #endif
233  #if defined(OS_WIN)
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);
241  #endif
242
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)),
247        sink);
248 +
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;
253 +#endif
254 +
255    return new WebMediaPlayerImpl(frame, client, AsWeakPtr(), params);
256  #endif  // defined(OS_ANDROID)
257  }
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;
264  }
265
266 +#if defined(OS_TIZEN_MOBILE)
267 +namespace tizen {
268 +class RendererMediaPlayerManager;
269 +}
270 +#endif
271 +
272  namespace content {
273  class BrowserPluginManager;
274  class DeviceOrientationDispatcher;
275 @@ -1403,6 +1409,10 @@ class CONTENT_EXPORT RenderViewImpl
276
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_;
283  #endif
284
285    // Plugins -------------------------------------------------------------------