tizen 2.3 release
[framework/web/wearable/wrt-plugins-tizen.git] / src / Common / GlobalContextManager.cpp
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 #include "GlobalContextManager.h"
19 #include "Logger.h"
20
21 using namespace std;
22
23 namespace DeviceAPI {
24 namespace Common {
25
26 GlobalContextManager::GlobalContextManager()
27 {
28 }
29
30 GlobalContextManager* GlobalContextManager::getInstance()
31 {
32     static GlobalContextManager instance;
33     return &instance;
34 }
35
36 JSContextRef GlobalContextManager::getGlobalContext(JSContextRef ctx)
37 {
38     if(!ctx) {
39         LOGE("local context is NULL");
40         return NULL;
41     }
42
43     JSObjectRef global = JSContextGetGlobalObject(ctx);
44     ContextMapT::iterator itr = m_contexts.find(global);
45     if(itr == m_contexts.end()) {
46         LOGE("Can not found global Context");
47         return NULL;
48     }
49     return itr->second;
50 }
51
52 bool GlobalContextManager::isAliveGlobalContext(JSContextRef ctx)
53 {
54     if(!ctx) {
55         return false;
56     }
57
58     const JSContextRef context = getGlobalContext(ctx);
59     return context == ctx;
60 }
61
62 void GlobalContextManager::addGlobalContext(JSContextRef ctx)
63 {
64     JSObjectRef global = JSContextGetGlobalObject(ctx);
65     ContextMapT::iterator itr = m_contexts.find(global);
66     if(itr != m_contexts.end()) {
67         LOGD("already added global context");
68         return;
69     }
70     m_contexts[global] = ctx;
71 }
72
73 void GlobalContextManager::removeGlobalContext(JSContextRef ctx)
74 {
75     JSObjectRef global = JSContextGetGlobalObject(ctx);
76     ContextMapT::iterator itr = m_contexts.find(global);
77     if(itr == m_contexts.end()) {
78         LOGD("does not exist context");
79         return;
80     }
81
82     if(itr->second == ctx) {
83         m_contexts.erase(itr);
84     }
85     else {
86         LOGE("passed context is not global context");
87     }
88 }
89
90 } // Common
91 } // DeviceAPI