a8e6bc951c2140ae7058f4f7369406df31a76983
[framework/web/wrt-plugins-tizen.git] / src / Common / AsyncCallbackManager.h
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 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 /**
19  * @file        AsyncCallbackManager.h
20  * @author      Kisub Song (kisubs.song@samsung.com)
21  * @version     0.1
22  * @brief
23  */
24
25 #ifndef _TIZEN_COMMONS_ASYNC_CALLBACK_MANAGER_H_
26 #define _TIZEN_COMMONS_ASYNC_CALLBACK_MANAGER_H_
27
28 #include <dpl/log/log.h>
29 #include <dpl/shared_ptr.h>
30 #include <dpl/type_list.h>
31 #include <CommonsJavaScript/JSCallbackManager.h>
32
33 namespace DeviceAPI {
34 namespace Common {
35
36 class AsyncCallbackManager
37 {
38 public:
39         typedef std::map<WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr, JSContextRef>  JSCallbackManagerMap;
40         typedef typename JSCallbackManagerMap::iterator                                         JSCallbackManagerMapIter;
41         typedef std::pair<WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr,JSContextRef>  JSCallbackManagerPair;
42
43         AsyncCallbackManager()
44         {
45         };
46
47         virtual ~AsyncCallbackManager()
48         {
49                 m_map.clear();
50         };
51
52         virtual void registerCallbackManager(WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr &cbm, const JSContextRef context)
53         {
54                 LogDebug("Registering an callback manager on context:" << context);
55                 m_map.insert(JSCallbackManagerPair(cbm, context));
56         }
57
58         virtual void unregisterContext(const JSContextRef context)
59         {
60                 LogDebug("Unregistering all callback managers on context:" << context);
61                 for(JSCallbackManagerMapIter i=m_map.begin(); i!=m_map.end(); i++)
62                 {
63                         if(i->second == context)
64                         {
65                                 LogDebug("unregister a callback manager");
66                                 i->first->setOnSuccess(NULL);
67                                 i->first->setOnError(NULL);
68                                 // This function does not remove cbm from multimap.
69                                 // It only prohibit plugin invoke javascript callback.
70                         }
71                 }
72         }
73
74         virtual void unregisterCallbackManager(const WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr &cbm)
75         {
76                 LogDebug("Unregistering an callback manager");
77                 JSCallbackManagerMapIter i = m_map.find(cbm);
78
79                 if(i == m_map.end())
80                 {
81                         LogWarning("nothing to unregister");
82                         // Something wrong
83                         return;
84                 }
85
86                 m_map.erase(i);
87         }
88
89 private:
90         JSCallbackManagerMap m_map;
91 };
92
93 } // Common
94 }// DeviceAPI
95
96 #endif // _TIZEN_COMMONS_ASYNC_CALLBACK_MANAGER_H_