- add sources.
[platform/framework/web/crosswalk.git] / src / ppapi / thunk / ppb_flash_thunk.cc
1 // Copyright (c) 2012 The Chromium Authors. 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 "base/logging.h"
6 #include "ppapi/c/pp_array_output.h"
7 #include "ppapi/c/pp_errors.h"
8 #include "ppapi/c/private/ppb_flash.h"
9 #include "ppapi/shared_impl/ppapi_globals.h"
10 #include "ppapi/shared_impl/proxy_lock.h"
11 #include "ppapi/shared_impl/var.h"
12 #include "ppapi/thunk/enter.h"
13 #include "ppapi/thunk/ppb_flash_functions_api.h"
14 #include "ppapi/thunk/ppb_instance_api.h"
15 #include "ppapi/thunk/ppb_video_capture_api.h"
16 #include "ppapi/thunk/thunk.h"
17
18 namespace ppapi {
19 namespace thunk {
20
21 namespace {
22
23 void SetInstanceAlwaysOnTop(PP_Instance instance, PP_Bool on_top) {
24   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
25   if (enter.failed())
26     return;
27   enter.functions()->SetInstanceAlwaysOnTop(instance, on_top);
28 }
29
30 PP_Bool DrawGlyphs(PP_Instance instance,
31                    PP_Resource pp_image_data,
32                    const PP_BrowserFont_Trusted_Description* font_desc,
33                    uint32_t color,
34                    const PP_Point* position,
35                    const PP_Rect* clip,
36                    const float transformation[3][3],
37                    PP_Bool allow_subpixel_aa,
38                    uint32_t glyph_count,
39                    const uint16_t glyph_indices[],
40                    const PP_Point glyph_advances[]) {
41   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
42   if (enter.failed())
43     return PP_FALSE;
44   return enter.functions()->DrawGlyphs(
45       instance, pp_image_data, font_desc, color, position, clip, transformation,
46       allow_subpixel_aa, glyph_count, glyph_indices, glyph_advances);
47 }
48
49 PP_Var GetProxyForURL(PP_Instance instance, const char* url) {
50   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
51   if (enter.failed())
52     return PP_MakeUndefined();
53   return enter.functions()->GetProxyForURL(instance, url);
54 }
55
56 int32_t Navigate(PP_Resource request_id,
57                  const char* target,
58                  PP_Bool from_user_action) {
59   // TODO(brettw): this function should take an instance.
60   // To work around this, use the PP_Instance from the resource.
61   PP_Instance instance;
62   {
63     EnterResource<PPB_URLRequestInfo_API> enter(request_id, true);
64     if (enter.failed())
65       return PP_ERROR_BADRESOURCE;
66     instance = enter.resource()->pp_instance();
67   }
68
69   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
70   if (enter.failed())
71     return PP_ERROR_BADARGUMENT;
72   return enter.functions()->Navigate(instance, request_id, target,
73                                      from_user_action);
74 }
75
76 void RunMessageLoop(PP_Instance instance) {
77   // Deprecated.
78   NOTREACHED();
79   return;
80 }
81
82 void QuitMessageLoop(PP_Instance instance) {
83   // Deprecated.
84   NOTREACHED();
85   return;
86 }
87
88 double GetLocalTimeZoneOffset(PP_Instance instance, PP_Time t) {
89   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
90   if (enter.failed())
91     return 0.0;
92   return enter.functions()->GetLocalTimeZoneOffset(instance, t);
93 }
94
95 PP_Var GetCommandLineArgs(PP_Module /* pp_module */) {
96   // There's no instance so we have to reach into the globals without thunking.
97   ProxyAutoLock lock;
98   return StringVar::StringToPPVar(PpapiGlobals::Get()->GetCmdLine());
99 }
100
101 void PreLoadFontWin(const void* logfontw) {
102   // There's no instance so we have to reach into the delegate without
103   // thunking.
104   ProxyAutoLock lock;
105   PpapiGlobals::Get()->PreCacheFontForFlash(logfontw);
106 }
107
108 PP_Bool IsRectTopmost(PP_Instance instance, const PP_Rect* rect) {
109   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
110   if (enter.failed())
111     return PP_FALSE;
112   return enter.functions()->IsRectTopmost(instance, rect);
113 }
114
115 int32_t InvokePrinting(PP_Instance instance) {
116   // This function is no longer supported, use PPB_Flash_Print instead.
117   return PP_ERROR_NOTSUPPORTED;
118 }
119
120 void UpdateActivity(PP_Instance instance) {
121   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
122   if (enter.failed())
123     return;
124   enter.functions()->UpdateActivity(instance);
125 }
126
127 PP_Var GetDeviceID(PP_Instance instance) {
128   // Deprecated.
129   NOTREACHED();
130   return PP_MakeUndefined();
131 }
132
133 int32_t GetSettingInt(PP_Instance instance, PP_FlashSetting setting) {
134   // Deprecated.
135   NOTREACHED();
136   return -1;
137 }
138
139 PP_Var GetSetting(PP_Instance instance, PP_FlashSetting setting) {
140   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
141   if (enter.failed())
142     return PP_MakeUndefined();
143   return enter.functions()->GetSetting(instance, setting);
144 }
145
146 PP_Bool SetCrashData(PP_Instance instance,
147                      PP_FlashCrashKey key,
148                      PP_Var value) {
149   EnterInstanceAPI<PPB_Flash_Functions_API> enter(instance);
150   if (enter.failed())
151     return PP_FALSE;
152   return enter.functions()->SetCrashData(instance, key, value);
153 }
154
155 int32_t EnumerateVideoCaptureDevices(PP_Instance instance,
156                                      PP_Resource video_capture,
157                                      PP_ArrayOutput devices) {
158   EnterResource<PPB_VideoCapture_API> enter(video_capture, true);
159   if (enter.failed())
160     return enter.retval();
161   return enter.object()->EnumerateDevicesSync(devices);
162 }
163
164 const PPB_Flash_12_4 g_ppb_flash_12_4_thunk = {
165   &SetInstanceAlwaysOnTop,
166   &DrawGlyphs,
167   &GetProxyForURL,
168   &Navigate,
169   &RunMessageLoop,
170   &QuitMessageLoop,
171   &GetLocalTimeZoneOffset,
172   &GetCommandLineArgs,
173   &PreLoadFontWin,
174   &IsRectTopmost,
175   &InvokePrinting,
176   &UpdateActivity,
177   &GetDeviceID,
178   &GetSettingInt,
179   &GetSetting
180 };
181
182 const PPB_Flash_12_5 g_ppb_flash_12_5_thunk = {
183   &SetInstanceAlwaysOnTop,
184   &DrawGlyphs,
185   &GetProxyForURL,
186   &Navigate,
187   &RunMessageLoop,
188   &QuitMessageLoop,
189   &GetLocalTimeZoneOffset,
190   &GetCommandLineArgs,
191   &PreLoadFontWin,
192   &IsRectTopmost,
193   &InvokePrinting,
194   &UpdateActivity,
195   &GetDeviceID,
196   &GetSettingInt,
197   &GetSetting,
198   &SetCrashData
199 };
200
201 const PPB_Flash_12_6 g_ppb_flash_12_6_thunk = {
202   &SetInstanceAlwaysOnTop,
203   &DrawGlyphs,
204   &GetProxyForURL,
205   &Navigate,
206   &RunMessageLoop,
207   &QuitMessageLoop,
208   &GetLocalTimeZoneOffset,
209   &GetCommandLineArgs,
210   &PreLoadFontWin,
211   &IsRectTopmost,
212   &InvokePrinting,
213   &UpdateActivity,
214   &GetDeviceID,
215   &GetSettingInt,
216   &GetSetting,
217   &SetCrashData,
218   &EnumerateVideoCaptureDevices
219 };
220
221 const PPB_Flash_13_0 g_ppb_flash_13_0_thunk = {
222   &SetInstanceAlwaysOnTop,
223   &DrawGlyphs,
224   &GetProxyForURL,
225   &Navigate,
226   &GetLocalTimeZoneOffset,
227   &GetCommandLineArgs,
228   &PreLoadFontWin,
229   &IsRectTopmost,
230   &UpdateActivity,
231   &GetSetting,
232   &SetCrashData,
233   &EnumerateVideoCaptureDevices
234 };
235
236 }  // namespace
237
238 const PPB_Flash_12_4* GetPPB_Flash_12_4_Thunk() {
239   return &g_ppb_flash_12_4_thunk;
240 }
241
242 const PPB_Flash_12_5* GetPPB_Flash_12_5_Thunk() {
243   return &g_ppb_flash_12_5_thunk;
244 }
245
246 const PPB_Flash_12_6* GetPPB_Flash_12_6_Thunk() {
247   return &g_ppb_flash_12_6_thunk;
248 }
249
250 const PPB_Flash_13_0* GetPPB_Flash_13_0_Thunk() {
251   return &g_ppb_flash_13_0_thunk;
252 }
253
254 }  // namespace thunk
255 }  // namespace ppapi