1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Copyright (c) 2013 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.
6 #include "xwalk/tizen/browser/media/browser_mediaplayer_manager.h"
8 #include "content/public/browser/render_frame_host.h"
9 #include "content/public/browser/web_contents.h"
10 #include "xwalk/tizen/common/media/media_player_messages.h"
14 BrowserMediaPlayerManager::BrowserMediaPlayerManager(
15 content::RenderFrameHost* render_frame_host,
16 MurphyResourceManager* resource_manager)
17 : render_frame_host_(render_frame_host),
18 resource_manager_(resource_manager) {
21 BrowserMediaPlayerManager::~BrowserMediaPlayerManager() {}
23 BrowserMediaPlayerManager* BrowserMediaPlayerManager::Create(
24 content::RenderFrameHost* render_frame_host,
25 MurphyResourceManager* resource_manager) {
26 return new BrowserMediaPlayerManager(render_frame_host, resource_manager);
29 MurphyResource* BrowserMediaPlayerManager::GetMurphyResource(
30 MediaPlayerID player_id) {
31 for (ScopedVector<MurphyResource>::iterator it =
32 murphy_resources_.begin(); it != murphy_resources_.end();
34 if ((*it)->player_id() == player_id)
41 int BrowserMediaPlayerManager::RoutingID() {
42 return render_frame_host_->GetRoutingID();
45 bool BrowserMediaPlayerManager::Send(IPC::Message* msg) {
46 return render_frame_host_->Send(msg);
49 void BrowserMediaPlayerManager::ResourceNotifyCallback(
50 mrp_res_resource_state_t state,
51 MediaPlayerID player_id) {
53 MurphyResource* resource = GetMurphyResource(player_id);
55 mrp_res_resource_state_t prev_state = resource->GetResourceState();
57 // Received a resource event from Murphy
59 case MRP_RES_RESOURCE_AVAILABLE:
60 if (prev_state == MRP_RES_RESOURCE_ACQUIRED)
61 Send(new MediaPlayerMsg_MediaPlayerPause(RoutingID(), player_id));
62 case MRP_RES_RESOURCE_LOST:
63 if (prev_state == MRP_RES_RESOURCE_ACQUIRED ||
64 prev_state == MRP_RES_RESOURCE_LOST)
65 Send(new MediaPlayerMsg_MediaPlayerPause(RoutingID(), player_id));
67 case MRP_RES_RESOURCE_ACQUIRED:
68 if (prev_state == MRP_RES_RESOURCE_LOST)
69 Send(new MediaPlayerMsg_MediaPlayerPlay(RoutingID(), player_id));
71 case MRP_RES_RESOURCE_PENDING:
79 void BrowserMediaPlayerManager::OnInitialize(
80 MediaPlayerID player_id,
83 // Create murphy resource for the given player id.
84 if (resource_manager_ && resource_manager_->IsConnected()) {
85 MurphyResource* resource = new MurphyResource(this,
86 player_id, resource_manager_);
87 RemoveMurphyResource(player_id);
88 AddMurphyResource(resource);
92 void BrowserMediaPlayerManager::OnDestroyPlayer(MediaPlayerID player_id) {
93 RemoveMurphyResource(player_id);
96 void BrowserMediaPlayerManager::OnPause(MediaPlayerID player_id) {
97 if (MurphyResource* resource = GetMurphyResource(player_id))
98 resource->ReleaseResource();
101 void BrowserMediaPlayerManager::OnStart(MediaPlayerID player_id) {
102 if (MurphyResource* resource = GetMurphyResource(player_id))
103 resource->AcquireResource();
106 void BrowserMediaPlayerManager::AddMurphyResource(
107 MurphyResource* resource) {
108 DCHECK(!GetMurphyResource(resource->player_id()));
109 murphy_resources_.push_back(resource);
112 void BrowserMediaPlayerManager::RemoveMurphyResource(
113 MediaPlayerID player_id) {
114 for (ScopedVector<MurphyResource>::iterator it =
115 murphy_resources_.begin(); it != murphy_resources_.end();
117 if ((*it)->player_id() == player_id) {
118 murphy_resources_.erase(it);