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.
5 #include "content/renderer/pepper/resource_creation_impl.h"
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"
25 #include "base/command_line.h"
26 #include "base/win/windows_version.h"
27 #include "content/public/common/content_switches.h"
30 using ppapi::InputEventData;
31 using ppapi::PPB_InputEvent_Shared;
32 using ppapi::StringVar;
36 ResourceCreationImpl::ResourceCreationImpl(PepperPluginInstanceImpl* instance) {
39 ResourceCreationImpl::~ResourceCreationImpl() {}
41 PP_Resource ResourceCreationImpl::CreateAudio1_0(
43 PP_Resource config_id,
44 PPB_Audio_Callback_1_0 audio_callback,
46 return 0; // Not supported in-process.
49 PP_Resource ResourceCreationImpl::CreateAudio(PP_Instance instance,
50 PP_Resource config_id,
51 PPB_Audio_Callback audio_callback,
53 return 0; // Not supported in-process.
56 PP_Resource ResourceCreationImpl::CreateAudioConfig(
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);
64 PP_Resource ResourceCreationImpl::CreateAudioTrusted(PP_Instance instance) {
65 return (new PPB_Audio_Impl(instance))->GetReference();
68 PP_Resource ResourceCreationImpl::CreateAudioInput(PP_Instance instance) {
69 return 0; // Not supported in-process.
72 PP_Resource ResourceCreationImpl::CreateCompositor(PP_Instance instance) {
73 return 0; // Not supported in-process.
76 PP_Resource ResourceCreationImpl::CreateBroker(PP_Instance instance) {
77 return (new PPB_Broker_Impl(instance))->GetReference();
80 PP_Resource ResourceCreationImpl::CreateBuffer(PP_Instance instance,
82 return PPB_Buffer_Impl::Create(instance, size);
85 PP_Resource ResourceCreationImpl::CreateFlashDRM(PP_Instance instance) {
86 return 0; // Not supported in-process.
89 PP_Resource ResourceCreationImpl::CreateFlashFontFile(
91 const PP_BrowserFont_Trusted_Description* description,
92 PP_PrivateFontCharset charset) {
93 return 0; // Not supported in-process.
96 PP_Resource ResourceCreationImpl::CreateFlashMenu(
98 const PP_Flash_Menu* menu_data) {
99 return 0; // Not supported in-process.
102 PP_Resource ResourceCreationImpl::CreateFlashMessageLoop(PP_Instance instance) {
103 return PPB_Flash_MessageLoop_Impl::Create(instance);
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);
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);
122 PP_Resource ResourceCreationImpl::CreateHostResolver(PP_Instance instance) {
123 return 0; // Not supported in-process.
126 PP_Resource ResourceCreationImpl::CreateHostResolverPrivate(
127 PP_Instance instance) {
128 return 0; // Not supported in-process.
131 PP_Resource ResourceCreationImpl::CreateImageData(PP_Instance instance,
132 PP_ImageDataFormat format,
134 PP_Bool init_to_zero) {
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
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);
149 return PPB_ImageData_Impl::Create(instance,
150 ppapi::PPB_ImageData_Shared::PLATFORM,
156 PP_Resource ResourceCreationImpl::CreateImageDataSimple(
157 PP_Instance instance,
158 PP_ImageDataFormat format,
160 PP_Bool init_to_zero) {
161 return PPB_ImageData_Impl::Create(instance,
162 ppapi::PPB_ImageData_Shared::SIMPLE,
168 PP_Resource ResourceCreationImpl::CreateIMEInputEvent(
169 PP_Instance instance,
170 PP_InputEvent_Type type,
171 PP_TimeTicks time_stamp,
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,
190 PP_Resource ResourceCreationImpl::CreateKeyboardInputEvent_1_0(
191 PP_Instance instance,
192 PP_InputEvent_Type type,
193 PP_TimeTicks time_stamp,
196 struct PP_Var character_text) {
197 PP_Var code = StringVar::StringToPPVar("");
198 return PPB_InputEvent_Shared::CreateKeyboardInputEvent(ppapi::OBJECT_IS_IMPL,
208 PP_Resource ResourceCreationImpl::CreateKeyboardInputEvent_1_2(
209 PP_Instance instance,
210 PP_InputEvent_Type type,
211 PP_TimeTicks time_stamp,
214 struct PP_Var character_text,
215 struct PP_Var code) {
216 return PPB_InputEvent_Shared::CreateKeyboardInputEvent(ppapi::OBJECT_IS_IMPL,
226 PP_Resource ResourceCreationImpl::CreateMediaStreamVideoTrack(
227 PP_Instance instance) {
228 return 0; // Not supported in-process.
231 PP_Resource ResourceCreationImpl::CreateMouseInputEvent(
232 PP_Instance instance,
233 PP_InputEvent_Type type,
234 PP_TimeTicks time_stamp,
236 PP_InputEvent_MouseButton mouse_button,
237 const PP_Point* mouse_position,
239 const PP_Point* mouse_movement) {
240 return PPB_InputEvent_Shared::CreateMouseInputEvent(ppapi::OBJECT_IS_IMPL,
251 PP_Resource ResourceCreationImpl::CreateNetAddressFromIPv4Address(
252 PP_Instance instance,
253 const PP_NetAddress_IPv4* ipv4_addr) {
254 return 0; // Not supported in-process.
257 PP_Resource ResourceCreationImpl::CreateNetAddressFromIPv6Address(
258 PP_Instance instance,
259 const PP_NetAddress_IPv6* ipv6_addr) {
260 return 0; // Not supported in-process.
263 PP_Resource ResourceCreationImpl::CreateNetAddressFromNetAddressPrivate(
264 PP_Instance instance,
265 const PP_NetAddress_Private& private_addr) {
266 return 0; // Not supported in-process.
269 PP_Resource ResourceCreationImpl::CreateNetworkMonitor(PP_Instance instance) {
270 return 0; // Not supported in-process.
273 PP_Resource ResourceCreationImpl::CreateOutputProtectionPrivate(
274 PP_Instance instance) {
275 return 0; // Not supported in-process.
278 PP_Resource ResourceCreationImpl::CreatePlatformVerificationPrivate(
279 PP_Instance instance) {
280 return 0; // Not supported in-process.
283 PP_Resource ResourceCreationImpl::CreateScrollbar(PP_Instance instance,
285 return PPB_Scrollbar_Impl::Create(instance, PP_ToBool(vertical));
288 PP_Resource ResourceCreationImpl::CreateTalk(PP_Instance /* instance */) {
289 return 0; // Not supported in-process.
292 PP_Resource ResourceCreationImpl::CreateTCPServerSocketPrivate(
293 PP_Instance instance) {
294 return 0; // Not supported in-process.
297 PP_Resource ResourceCreationImpl::CreateTCPSocket1_0(PP_Instance instance) {
298 return 0; // Not supported in-process.
301 PP_Resource ResourceCreationImpl::CreateTCPSocket(PP_Instance instance) {
302 return 0; // Not supported in-process.
305 PP_Resource ResourceCreationImpl::CreateTCPSocketPrivate(PP_Instance instance) {
306 return 0; // Not supported in-process.
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);
317 PP_Resource ResourceCreationImpl::CreateUDPSocket(PP_Instance instance) {
318 return 0; // Not supported in-process.
321 PP_Resource ResourceCreationImpl::CreateUDPSocketPrivate(PP_Instance instance) {
322 return 0; // Not supported in-process.
325 PP_Resource ResourceCreationImpl::CreateVideoCapture(PP_Instance instance) {
326 return 0; // Not supported in-process.
329 PP_Resource ResourceCreationImpl::CreateVideoDecoder(PP_Instance instance) {
330 return 0; // Not supported in-process.
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);
340 PP_Resource ResourceCreationImpl::CreateVideoDestination(PP_Instance instance) {
341 return 0; // Not supported in-process.
344 PP_Resource ResourceCreationImpl::CreateVideoSource(PP_Instance instance) {
345 return 0; // Not supported in-process.
348 PP_Resource ResourceCreationImpl::CreateWheelInputEvent(
349 PP_Instance instance,
350 PP_TimeTicks time_stamp,
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,
364 PP_Resource ResourceCreationImpl::CreateX509CertificatePrivate(
365 PP_Instance instance) {
366 return 0; // Not supported in-process.
369 } // namespace content