Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / content / renderer / pepper / resource_creation_impl.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 "content/renderer/pepper/resource_creation_impl.h"
6
7 #include "content/renderer/pepper/ppb_audio_impl.h"
8 #include "content/renderer/pepper/ppb_broker_impl.h"
9 #include "content/renderer/pepper/ppb_buffer_impl.h"
10 #include "content/renderer/pepper/ppb_flash_message_loop_impl.h"
11 #include "content/renderer/pepper/ppb_graphics_3d_impl.h"
12 #include "content/renderer/pepper/ppb_image_data_impl.h"
13 #include "content/renderer/pepper/ppb_scrollbar_impl.h"
14 #include "content/renderer/pepper/ppb_video_decoder_impl.h"
15 #include "ppapi/c/pp_bool.h"
16 #include "ppapi/c/pp_size.h"
17 #include "ppapi/c/pp_var.h"
18 #include "ppapi/shared_impl/ppb_audio_config_shared.h"
19 #include "ppapi/shared_impl/ppb_audio_shared.h"
20 #include "ppapi/shared_impl/ppb_image_data_shared.h"
21 #include "ppapi/shared_impl/ppb_input_event_shared.h"
22 #include "ppapi/shared_impl/var.h"
23
24 #if defined(OS_WIN)
25 #include "base/command_line.h"
26 #include "base/win/windows_version.h"
27 #include "content/public/common/content_switches.h"
28 #endif
29
30 using ppapi::InputEventData;
31 using ppapi::PPB_InputEvent_Shared;
32 using ppapi::StringVar;
33
34 namespace content {
35
36 ResourceCreationImpl::ResourceCreationImpl(PepperPluginInstanceImpl* instance) {
37 }
38
39 ResourceCreationImpl::~ResourceCreationImpl() {}
40
41 PP_Resource ResourceCreationImpl::CreateAudio1_0(
42     PP_Instance instance,
43     PP_Resource config_id,
44     PPB_Audio_Callback_1_0 audio_callback,
45     void* user_data) {
46   return 0;  // Not supported in-process.
47 }
48
49 PP_Resource ResourceCreationImpl::CreateAudio(PP_Instance instance,
50                                               PP_Resource config_id,
51                                               PPB_Audio_Callback audio_callback,
52                                               void* user_data) {
53   return 0;  // Not supported in-process.
54 }
55
56 PP_Resource ResourceCreationImpl::CreateAudioConfig(
57     PP_Instance instance,
58     PP_AudioSampleRate sample_rate,
59     uint32_t sample_frame_count) {
60   return ppapi::PPB_AudioConfig_Shared::Create(
61       ppapi::OBJECT_IS_IMPL, instance, sample_rate, sample_frame_count);
62 }
63
64 PP_Resource ResourceCreationImpl::CreateAudioTrusted(PP_Instance instance) {
65   return (new PPB_Audio_Impl(instance))->GetReference();
66 }
67
68 PP_Resource ResourceCreationImpl::CreateAudioInput(PP_Instance instance) {
69   return 0;  // Not supported in-process.
70 }
71
72 PP_Resource ResourceCreationImpl::CreateCompositor(PP_Instance instance) {
73   return 0;  // Not supported in-process.
74 }
75
76 PP_Resource ResourceCreationImpl::CreateBroker(PP_Instance instance) {
77   return (new PPB_Broker_Impl(instance))->GetReference();
78 }
79
80 PP_Resource ResourceCreationImpl::CreateBuffer(PP_Instance instance,
81                                                uint32_t size) {
82   return PPB_Buffer_Impl::Create(instance, size);
83 }
84
85 PP_Resource ResourceCreationImpl::CreateFlashDRM(PP_Instance instance) {
86   return 0;  // Not supported in-process.
87 }
88
89 PP_Resource ResourceCreationImpl::CreateFlashFontFile(
90     PP_Instance instance,
91     const PP_BrowserFont_Trusted_Description* description,
92     PP_PrivateFontCharset charset) {
93   return 0;  // Not supported in-process.
94 }
95
96 PP_Resource ResourceCreationImpl::CreateFlashMenu(
97     PP_Instance instance,
98     const PP_Flash_Menu* menu_data) {
99   return 0;  // Not supported in-process.
100 }
101
102 PP_Resource ResourceCreationImpl::CreateFlashMessageLoop(PP_Instance instance) {
103   return PPB_Flash_MessageLoop_Impl::Create(instance);
104 }
105
106 PP_Resource ResourceCreationImpl::CreateGraphics3D(PP_Instance instance,
107                                                    PP_Resource share_context,
108                                                    const int32_t* attrib_list) {
109   return PPB_Graphics3D_Impl::Create(instance, share_context, attrib_list);
110 }
111
112 PP_Resource ResourceCreationImpl::CreateGraphics3DRaw(
113     PP_Instance instance,
114     PP_Resource share_context,
115     const int32_t* attrib_list,
116     gpu::Capabilities* capabilities,
117     base::SharedMemoryHandle* shared_state) {
118   return PPB_Graphics3D_Impl::CreateRaw(instance, share_context, attrib_list,
119                                         capabilities, shared_state);
120 }
121
122 PP_Resource ResourceCreationImpl::CreateHostResolver(PP_Instance instance) {
123   return 0;  // Not supported in-process.
124 }
125
126 PP_Resource ResourceCreationImpl::CreateHostResolverPrivate(
127     PP_Instance instance) {
128   return 0;  // Not supported in-process.
129 }
130
131 PP_Resource ResourceCreationImpl::CreateImageData(PP_Instance instance,
132                                                   PP_ImageDataFormat format,
133                                                   const PP_Size* size,
134                                                   PP_Bool init_to_zero) {
135 #if defined(OS_WIN)
136   // If Win32K lockdown mitigations are enabled for Windows 8 and beyond,
137   // we use the SIMPLE image data type as the PLATFORM image data type
138   // calls GDI functions to create DIB sections etc which fail in Win32K
139   // lockdown mode.
140   // TODO(ananta)
141   // Look into whether this causes a loss of functionality. From cursory
142   // testing things seem to work well.
143   if (CommandLine::ForCurrentProcess()->HasSwitch(
144           switches::kEnableWin32kRendererLockDown) &&
145       base::win::GetVersion() >= base::win::VERSION_WIN8) {
146     return CreateImageDataSimple(instance, format, size, init_to_zero);
147   }
148 #endif
149   return PPB_ImageData_Impl::Create(instance,
150                                     ppapi::PPB_ImageData_Shared::PLATFORM,
151                                     format,
152                                     *size,
153                                     init_to_zero);
154 }
155
156 PP_Resource ResourceCreationImpl::CreateImageDataSimple(
157     PP_Instance instance,
158     PP_ImageDataFormat format,
159     const PP_Size* size,
160     PP_Bool init_to_zero) {
161   return PPB_ImageData_Impl::Create(instance,
162                                     ppapi::PPB_ImageData_Shared::SIMPLE,
163                                     format,
164                                     *size,
165                                     init_to_zero);
166 }
167
168 PP_Resource ResourceCreationImpl::CreateIMEInputEvent(
169     PP_Instance instance,
170     PP_InputEvent_Type type,
171     PP_TimeTicks time_stamp,
172     struct PP_Var text,
173     uint32_t segment_number,
174     const uint32_t* segment_offsets,
175     int32_t target_segment,
176     uint32_t selection_start,
177     uint32_t selection_end) {
178   return PPB_InputEvent_Shared::CreateIMEInputEvent(ppapi::OBJECT_IS_IMPL,
179                                                     instance,
180                                                     type,
181                                                     time_stamp,
182                                                     text,
183                                                     segment_number,
184                                                     segment_offsets,
185                                                     target_segment,
186                                                     selection_start,
187                                                     selection_end);
188 }
189
190 PP_Resource ResourceCreationImpl::CreateKeyboardInputEvent_1_0(
191     PP_Instance instance,
192     PP_InputEvent_Type type,
193     PP_TimeTicks time_stamp,
194     uint32_t modifiers,
195     uint32_t key_code,
196     struct PP_Var character_text) {
197   PP_Var code = StringVar::StringToPPVar("");
198   return PPB_InputEvent_Shared::CreateKeyboardInputEvent(ppapi::OBJECT_IS_IMPL,
199                                                          instance,
200                                                          type,
201                                                          time_stamp,
202                                                          modifiers,
203                                                          key_code,
204                                                          character_text,
205                                                          code);
206 }
207
208 PP_Resource ResourceCreationImpl::CreateKeyboardInputEvent_1_2(
209     PP_Instance instance,
210     PP_InputEvent_Type type,
211     PP_TimeTicks time_stamp,
212     uint32_t modifiers,
213     uint32_t key_code,
214     struct PP_Var character_text,
215     struct PP_Var code) {
216   return PPB_InputEvent_Shared::CreateKeyboardInputEvent(ppapi::OBJECT_IS_IMPL,
217                                                          instance,
218                                                          type,
219                                                          time_stamp,
220                                                          modifiers,
221                                                          key_code,
222                                                          character_text,
223                                                          code);
224 }
225
226 PP_Resource ResourceCreationImpl::CreateMediaStreamVideoTrack(
227     PP_Instance instance) {
228   return 0;  // Not supported in-process.
229 }
230
231 PP_Resource ResourceCreationImpl::CreateMouseInputEvent(
232     PP_Instance instance,
233     PP_InputEvent_Type type,
234     PP_TimeTicks time_stamp,
235     uint32_t modifiers,
236     PP_InputEvent_MouseButton mouse_button,
237     const PP_Point* mouse_position,
238     int32_t click_count,
239     const PP_Point* mouse_movement) {
240   return PPB_InputEvent_Shared::CreateMouseInputEvent(ppapi::OBJECT_IS_IMPL,
241                                                       instance,
242                                                       type,
243                                                       time_stamp,
244                                                       modifiers,
245                                                       mouse_button,
246                                                       mouse_position,
247                                                       click_count,
248                                                       mouse_movement);
249 }
250
251 PP_Resource ResourceCreationImpl::CreateNetAddressFromIPv4Address(
252     PP_Instance instance,
253     const PP_NetAddress_IPv4* ipv4_addr) {
254   return 0;  // Not supported in-process.
255 }
256
257 PP_Resource ResourceCreationImpl::CreateNetAddressFromIPv6Address(
258     PP_Instance instance,
259     const PP_NetAddress_IPv6* ipv6_addr) {
260   return 0;  // Not supported in-process.
261 }
262
263 PP_Resource ResourceCreationImpl::CreateNetAddressFromNetAddressPrivate(
264     PP_Instance instance,
265     const PP_NetAddress_Private& private_addr) {
266   return 0;  // Not supported in-process.
267 }
268
269 PP_Resource ResourceCreationImpl::CreateNetworkMonitor(PP_Instance instance) {
270   return 0;  // Not supported in-process.
271 }
272
273 PP_Resource ResourceCreationImpl::CreateOutputProtectionPrivate(
274     PP_Instance instance) {
275   return 0;  // Not supported in-process.
276 }
277
278 PP_Resource ResourceCreationImpl::CreatePlatformVerificationPrivate(
279     PP_Instance instance) {
280   return 0;  // Not supported in-process.
281 }
282
283 PP_Resource ResourceCreationImpl::CreateScrollbar(PP_Instance instance,
284                                                   PP_Bool vertical) {
285   return PPB_Scrollbar_Impl::Create(instance, PP_ToBool(vertical));
286 }
287
288 PP_Resource ResourceCreationImpl::CreateTalk(PP_Instance /* instance */) {
289   return 0;  // Not supported in-process.
290 }
291
292 PP_Resource ResourceCreationImpl::CreateTCPServerSocketPrivate(
293     PP_Instance instance) {
294   return 0;  // Not supported in-process.
295 }
296
297 PP_Resource ResourceCreationImpl::CreateTCPSocket1_0(PP_Instance instance) {
298   return 0;  // Not supported in-process.
299 }
300
301 PP_Resource ResourceCreationImpl::CreateTCPSocket(PP_Instance instance) {
302   return 0;  // Not supported in-process.
303 }
304
305 PP_Resource ResourceCreationImpl::CreateTCPSocketPrivate(PP_Instance instance) {
306   return 0;  // Not supported in-process.
307 }
308
309 PP_Resource ResourceCreationImpl::CreateTouchInputEvent(PP_Instance instance,
310                                                         PP_InputEvent_Type type,
311                                                         PP_TimeTicks time_stamp,
312                                                         uint32_t modifiers) {
313   return PPB_InputEvent_Shared::CreateTouchInputEvent(
314       ppapi::OBJECT_IS_IMPL, instance, type, time_stamp, modifiers);
315 }
316
317 PP_Resource ResourceCreationImpl::CreateUDPSocket(PP_Instance instance) {
318   return 0;  // Not supported in-process.
319 }
320
321 PP_Resource ResourceCreationImpl::CreateUDPSocketPrivate(PP_Instance instance) {
322   return 0;  // Not supported in-process.
323 }
324
325 PP_Resource ResourceCreationImpl::CreateVideoCapture(PP_Instance instance) {
326   return 0;  // Not supported in-process.
327 }
328
329 PP_Resource ResourceCreationImpl::CreateVideoDecoder(PP_Instance instance) {
330   return 0;  // Not supported in-process.
331 }
332
333 PP_Resource ResourceCreationImpl::CreateVideoDecoderDev(
334     PP_Instance instance,
335     PP_Resource graphics3d_id,
336     PP_VideoDecoder_Profile profile) {
337   return PPB_VideoDecoder_Impl::Create(instance, graphics3d_id, profile);
338 }
339
340 PP_Resource ResourceCreationImpl::CreateVideoDestination(PP_Instance instance) {
341   return 0;  // Not supported in-process.
342 }
343
344 PP_Resource ResourceCreationImpl::CreateVideoSource(PP_Instance instance) {
345   return 0;  // Not supported in-process.
346 }
347
348 PP_Resource ResourceCreationImpl::CreateWheelInputEvent(
349     PP_Instance instance,
350     PP_TimeTicks time_stamp,
351     uint32_t modifiers,
352     const PP_FloatPoint* wheel_delta,
353     const PP_FloatPoint* wheel_ticks,
354     PP_Bool scroll_by_page) {
355   return PPB_InputEvent_Shared::CreateWheelInputEvent(ppapi::OBJECT_IS_IMPL,
356                                                       instance,
357                                                       time_stamp,
358                                                       modifiers,
359                                                       wheel_delta,
360                                                       wheel_ticks,
361                                                       scroll_by_page);
362 }
363
364 PP_Resource ResourceCreationImpl::CreateX509CertificatePrivate(
365     PP_Instance instance) {
366   return 0;  // Not supported in-process.
367 }
368
369 }  // namespace content