Upstream version 9.38.204.0
[platform/framework/web/crosswalk.git] / src / xwalk / tizen / browser / media / media_webcontents_observer.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2014 Intel Corporation. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5
6 #include "xwalk/tizen/browser/media/media_webcontents_observer.h"
7
8 #include "content/public/browser/web_contents.h"
9 #include "xwalk/tizen/browser/media/browser_mediaplayer_manager.h"
10 #include "xwalk/tizen/browser/media/murphy_resource_manager.h"
11 #include "xwalk/tizen/common/media/media_player_messages.h"
12
13 namespace tizen {
14
15 MediaWebContentsObserver::MediaWebContentsObserver(
16     content::RenderViewHost* render_view_host)
17     : WebContentsObserver(content::WebContents::FromRenderViewHost(
18           render_view_host)) {
19   resource_manager_.reset(new MurphyResourceManager());
20 }
21
22 MediaWebContentsObserver::~MediaWebContentsObserver() {}
23
24 void MediaWebContentsObserver::RenderFrameDeleted(
25     content::RenderFrameHost* render_frame_host) {
26   uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
27   media_player_managers_.erase(key);
28 }
29
30 bool MediaWebContentsObserver::OnMessageReceived(
31     const IPC::Message& msg,
32     content::RenderFrameHost* render_frame_host) {
33   bool handled = true;
34   IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserver, msg)
35     IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_MediaPlayerInitialize,
36                         GetMediaPlayerManager(render_frame_host),
37                         BrowserMediaPlayerManager::OnInitialize)
38     IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_MediaPlayerStarted,
39                         GetMediaPlayerManager(render_frame_host),
40                         BrowserMediaPlayerManager::OnStart)
41     IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_MediaPlayerPaused,
42                         GetMediaPlayerManager(render_frame_host),
43                         BrowserMediaPlayerManager::OnPause)
44     IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_DestroyMediaPlayer,
45                         GetMediaPlayerManager(render_frame_host),
46                         BrowserMediaPlayerManager::OnDestroyPlayer)
47     IPC_MESSAGE_UNHANDLED(handled = false)
48   IPC_END_MESSAGE_MAP()
49
50   return handled;
51 }
52
53 BrowserMediaPlayerManager* MediaWebContentsObserver::GetMediaPlayerManager(
54     content::RenderFrameHost* render_frame_host) {
55   uintptr_t key = reinterpret_cast<uintptr_t>(render_frame_host);
56   if (!media_player_managers_.contains(key)) {
57     media_player_managers_.set(
58         key,
59         make_scoped_ptr(BrowserMediaPlayerManager::Create(render_frame_host,
60             resource_manager_.get())));
61   }
62
63   return media_player_managers_.get(key);
64 }
65
66 }  // namespace tizen