Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / xwalk / tizen / browser / media / murphy_resource.cc
1 // Copyright (c) 2014 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "xwalk/tizen/browser/media/murphy_resource.h"
6
7 #include "xwalk/tizen/browser/media/browser_mediaplayer_manager.h"
8
9 namespace {
10
11 const char kMediaStreamName[] = "audio_playback";
12
13 static void NotifyCallback(mrp_res_context_t* context,
14     const mrp_res_resource_set_t* resource_set,
15     void* callback_data) {
16   tizen::MurphyResource* resource =
17     static_cast<tizen::MurphyResource*> (callback_data);
18   tizen::BrowserMediaPlayerManager* manager = resource->media_player_manager();
19   if (!manager)
20     return;
21
22   manager->ResourceNotifyCallback(resource_set->state, resource->player_id());
23   resource->SetResourceState(resource_set->state);
24 }
25
26 }  // namespace
27
28 namespace tizen {
29
30 MurphyResource::MurphyResource(
31     BrowserMediaPlayerManager* manager,
32     MediaPlayerID player_id,
33     const std::string& app_id,
34     const std::string& app_class,
35     MurphyResourceManager* resource_manager)
36     : manager_(manager),
37       player_id_(player_id),
38       resource_manager_(resource_manager),
39       resource_state_(MRP_RES_RESOURCE_PENDING) {
40   mrp_res_context_t* context = resource_manager_->GetContext();
41   if (!context)
42     return;
43
44   resource_set_ = mrp_res_create_resource_set(context,
45       app_class.c_str(), NotifyCallback, this);
46   if (!resource_set_)
47     return;
48
49   mrp_res_resource_t* resource = mrp_res_create_resource(
50       resource_set_, kMediaStreamName, true, true);
51
52   mrp_res_attribute_t* attr = mrp_res_get_attribute_by_name(resource, "role");
53   if (attr)
54     mrp_res_set_attribute_string(attr, app_class.c_str());
55
56   attr = mrp_res_get_attribute_by_name(resource, "name");
57   if (attr)
58     mrp_res_set_attribute_string(attr, app_id.c_str());
59
60   mrp_res_release_resource_set(resource_set_);
61 }
62
63 void MurphyResource::AcquireResource() {
64   if (!resource_manager_ || !resource_set_)
65     return;
66
67   // Call acquire
68   mrp_res_acquire_resource_set(resource_set_);
69 }
70
71 void MurphyResource::ReleaseResource() {
72   if (!resource_manager_ || !resource_set_)
73     return;
74
75   // Call release
76   mrp_res_release_resource_set(resource_set_);
77 }
78
79 MurphyResource::~MurphyResource() {
80   ReleaseResource();
81
82   if (!resource_manager_ || !resource_set_)
83     return;
84
85   // Delete resource set (and the resource inside it)
86   mrp_res_delete_resource_set(resource_set_);
87 }
88
89 }  // namespace tizen