--- /dev/null
+Author: Sudarsana Nagineni <sudarsana.nagineni@intel.com>
+
+This patch includes Chromium side changes needed for integrating
+WebMediaPlayer with the Tizen Audio Session Manager.
+
+Also, it has changes that are needed for generating audio-session-manager
+stubs and load the library dynamically in the Browser process.
+
+audio-session-manager is using an _attribute_((constructor)) to initialize
+code and setup signal handlers at startup. So, linking with this library
+is causing a sandbox violation by executing the code in Renderer Process,
+since the Renderer Process and the Browser Process are linked with the
+same libraries.
+
+To prevent the problem, we load the audio-session-manager dynamically in
+the Browser process.
+
+diff --git src/build/linux/system.gyp src/build/linux/system.gyp
+index 4a7e857..f89d256 100644
+--- src/build/linux/system.gyp
++++ src/build/linux/system.gyp
+@@ -874,5 +874,19 @@
+ }],
+ ],
+ },
++ {
++ 'target_name': 'audio_session_manager',
++ 'type': 'none',
++ 'toolsets': ['host', 'target'],
++ 'conditions': [
++ ['tizen_mobile == 1', {
++ 'direct_dependent_settings': {
++ 'cflags': [
++ '<!@(<(pkg-config) --cflags audio-session-mgr)',
++ ],
++ },
++ }],
++ ],
++ },
+ ],
+ }
+diff --git src/content/browser/renderer_host/render_view_host_impl.cc src/content/browser/renderer_host/render_view_host_impl.cc
+index 0912144..adf0a1b 100644
+--- src/content/browser/renderer_host/render_view_host_impl.cc
++++ src/content/browser/renderer_host/render_view_host_impl.cc
+@@ -89,4 +89,6 @@
+ #include "content/browser/media/android/browser_media_player_manager.h"
++#elif defined(OS_TIZEN_MOBILE)
++#include "xwalk/tizen/browser/browser_mediaplayer_manager.h"
+ #elif defined(OS_WIN)
+ #include "base/win/win_util.h"
+ #endif
+
+ using base::TimeDelta;
+@@ -223,6 +225,8 @@ RenderViewHostImpl::RenderViewHostImpl(
+
+ #if defined(OS_ANDROID)
+ media_player_manager_.reset(BrowserMediaPlayerManager::Create(this));
++#elif defined(OS_TIZEN_MOBILE)
++ media_player_manager_.reset(tizen::BrowserMediaPlayerManager::Create(this));
+ #endif
+ }
+
+diff --git src/content/browser/renderer_host/render_view_host_impl.h src/content/browser/renderer_host/render_view_host_impl.h
+index d63bae3..d0602c7 100644
+--- src/content/browser/renderer_host/render_view_host_impl.h
++++ src/content/browser/renderer_host/render_view_host_impl.h
+@@ -42,6 +42,12 @@ struct ViewHostMsg_ShowPopup_Params;
+ struct ViewMsg_Navigate_Params;
+ struct ViewMsg_PostMessage_Params;
+
++#if defined(OS_TIZEN_MOBILE)
++namespace tizen {
++class BrowserMediaPlayerManager;
++}
++#endif
++
+ namespace base {
+ class ListValue;
+ }
+@@ -704,6 +710,8 @@ class CONTENT_EXPORT RenderViewHostImpl
+ #if defined(OS_ANDROID)
+ // Manages all the android mediaplayer objects and handling IPCs for video.
+ scoped_ptr<BrowserMediaPlayerManager> media_player_manager_;
++#elif defined(OS_TIZEN_MOBILE)
++ scoped_ptr<tizen::BrowserMediaPlayerManager> media_player_manager_;
+ #endif
+
+ DISALLOW_COPY_AND_ASSIGN(RenderViewHostImpl);
+diff --git src/content/common/content_message_generator.h src/content/common/content_message_generator.h
+index 78e7c53..a3cda01 100644
+--- src/content/common/content_message_generator.h
++++ src/content/common/content_message_generator.h
+@@ -57,3 +57,6 @@
+ #include "content/common/view_messages.h"
+ #include "content/common/websocket_messages.h"
+ #include "content/common/worker_messages.h"
++#if defined(OS_TIZEN_MOBILE)
++#include "xwalk/tizen/common/media_player_messages.h"
++#endif
+diff --git src/content/content_browser.gypi src/content/content_browser.gypi
+index 6570d15..d47cee2 100644
+--- src/content/content_browser.gypi
++++ src/content/content_browser.gypi
+@@ -1641,5 +1641,69 @@
+ 'browser/geolocation/wifi_data_provider_linux.cc',
+ ],
+ }],
++ ['tizen_mobile == 1', {
++ 'sources': [
++ '<(DEPTH)/xwalk/tizen/browser/audio_session_manager.cc',
++ '<(DEPTH)/xwalk/tizen/browser/audio_session_manager.h',
++ '<(DEPTH)/xwalk/tizen/browser/audio_session_manager_init.cc',
++ '<(DEPTH)/xwalk/tizen/browser/audio_session_manager_init.h',
++ '<(DEPTH)/xwalk/tizen/browser/browser_mediaplayer_manager.cc',
++ '<(DEPTH)/xwalk/tizen/browser/browser_mediaplayer_manager.h',
++ ],
++ 'variables': {
++ 'generate_stubs_script': '../tools/generate_stubs/generate_stubs.py',
++ 'extra_header': '../xwalk/tizen/browser/audio_session_manager_stub_headers.fragment',
++ 'sig_files': ['../xwalk/tizen/browser/audio_session_manager.sigs'],
++ 'outfile_type': 'posix_stubs',
++ 'stubs_filename_root': 'audio_session_manager_stubs',
++ 'project_path': 'xwalk/tizen/browser',
++ 'intermediate_dir': '<(INTERMEDIATE_DIR)',
++ 'output_root': '<(SHARED_INTERMEDIATE_DIR)/audio_session_manager',
++ },
++ 'include_dirs': [
++ '<(output_root)',
++ ],
++ 'actions': [
++ {
++ 'action_name': 'generate_stubs',
++ 'inputs': [
++ '<(generate_stubs_script)',
++ '<(extra_header)',
++ '<@(sig_files)',
++ ],
++ 'outputs': [
++ '<(intermediate_dir)/<(stubs_filename_root).cc',
++ '<(output_root)/<(project_path)/<(stubs_filename_root).h',
++ ],
++ 'action': ['python',
++ '<(generate_stubs_script)',
++ '-i', '<(intermediate_dir)',
++ '-o', '<(output_root)/<(project_path)',
++ '-t', '<(outfile_type)',
++ '-e', '<(extra_header)',
++ '-s', '<(stubs_filename_root)',
++ '-p', '<(project_path)',
++ '<@(_inputs)',
++ ],
++ 'process_outputs_as_sources': 1,
++ 'message': 'Generating audio session manager stubs for dynamic loading',
++ },
++ ],
++ 'conditions': [
++ ['OS=="linux" or OS=="solaris"', {
++ 'link_settings': {
++ 'libraries': [
++ '-ldl',
++ ],
++ },
++ }],
++ ],
++ 'dependencies': [
++ '../build/linux/system.gyp:audio_session_manager',
++ ],
++ 'export_dependent_settings': [
++ '../build/linux/system.gyp:audio_session_manager',
++ ],
++ }],
+ ],
+ }
+diff --git src/content/content_common.gypi src/content/content_common.gypi
+index 1bfcccd..46db168 100644
+--- src/content/content_common.gypi
++++ src/content/content_common.gypi
+@@ -656,5 +656,10 @@
+ }, {
+ 'defines': ['USE_SECCOMP_BPF'],
+ }],
++ ['tizen_mobile == 1', {
++ 'sources': [
++ '<(DEPTH)/xwalk/tizen/common/media_player_messages.h',
++ ],
++ }],
+ ['OS=="win" and directxsdk_exists=="True"', {
+ 'actions': [
+ {
+diff --git src/content/content_renderer.gypi src/content/content_renderer.gypi
+index 1e72a81..3bceb70 100644
+--- src/content/content_renderer.gypi
++++ src/content/content_renderer.gypi
+@@ -752,6 +752,14 @@
+ }],
+ ],
+ }],
++ ['tizen_mobile == 1', {
++ 'sources': [
++ '<(DEPTH)/xwalk/tizen/renderer/mediaplayer_impl.cc',
++ '<(DEPTH)/xwalk/tizen/renderer/mediaplayer_impl.h',
++ '<(DEPTH)/xwalk/tizen/renderer/renderer_mediaplayer_manager.cc',
++ '<(DEPTH)/xwalk/tizen/renderer/renderer_mediaplayer_manager.h',
++ ],
++ }],
+ ],
+ 'target_conditions': [
+ ['OS=="android"', {
+diff --git src/content/renderer/render_view_impl.cc src/content/renderer/render_view_impl.cc
+index c5a7059..cd42b4c 100644
+--- src/content/renderer/render_view_impl.cc
++++ src/content/renderer/render_view_impl.cc
+@@ -245,6 +245,11 @@
+ #include "content/renderer/media/rtc_peer_connection_handler.h"
+ #endif
+
++#if defined(OS_TIZEN_MOBILE)
++#include "xwalk/tizen/renderer/mediaplayer_impl.h"
++#include "xwalk/tizen/renderer/renderer_mediaplayer_manager.h"
++#endif
++
+ using blink::WebAXObject;
+ using blink::WebApplicationCacheHost;
+ using blink::WebApplicationCacheHostClient;
+@@ -844,6 +849,8 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
+ body_background_color_(SK_ColorWHITE),
+ expected_content_intent_id_(0),
+ media_player_manager_(NULL),
++#elif defined(OS_TIZEN_MOBILE)
++ media_player_manager_(NULL),
+ #endif
+ #if defined(OS_WIN)
+ focused_plugin_id_(-1),
+@@ -967,6 +974,8 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) {
+ #if defined(OS_ANDROID)
+ media_player_manager_ = new RendererMediaPlayerManager(this);
+ new JavaBridgeDispatcher(this);
++#elif defined(OS_TIZEN_MOBILE)
++ media_player_manager_ = new tizen::RendererMediaPlayerManager(this);
+ #endif
+
+ // The next group of objects all implement RenderViewObserver, so are deleted
+@@ -3044,6 +3053,13 @@ blink::WebMediaPlayer* RenderViewImpl::CreateMediaPlayer(
+ base::Unretained(GetContentClient()->renderer()),
+ static_cast<RenderFrame*>(render_frame)),
+ sink);
++
++#if defined(OS_TIZEN_MOBILE)
++ tizen::MediaPlayerImpl* media_player = new tizen::MediaPlayerImpl(
++ frame, client, AsWeakPtr(), media_player_manager_, params);
++ return media_player;
++#endif
++
+ return new WebMediaPlayerImpl(frame, client, AsWeakPtr(), params);
+ #endif // defined(OS_ANDROID)
+ }
+diff --git src/content/renderer/render_view_impl.h src/content/renderer/render_view_impl.h
+index ccfd1b5..8949cd0 100644
+--- src/content/renderer/render_view_impl.h
++++ src/content/renderer/render_view_impl.h
+@@ -128,6 +128,12 @@ namespace webkit_glue {
+ class WebURLResponseExtraDataImpl;
+ }
+
++#if defined(OS_TIZEN_MOBILE)
++namespace tizen {
++class RendererMediaPlayerManager;
++}
++#endif
++
+ namespace content {
+ class BrowserPluginManager;
+ class DeviceOrientationDispatcher;
+@@ -1403,6 +1409,10 @@ class CONTENT_EXPORT RenderViewImpl
+
+ // A date/time picker object for date and time related input elements.
+ scoped_ptr<RendererDateTimePicker> date_time_picker_client_;
++#elif defined(OS_TIZEN_MOBILE)
++ // The media player manager for managing all the media players on this view
++ // and for communicating with the audio session manager in browser process.
++ tizen::RendererMediaPlayerManager* media_player_manager_;
+ #endif
+
+ // Plugins -------------------------------------------------------------------