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/pepper_in_process_resource_creation.h"
6
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "base/memory/weak_ptr.h"
10 #include "base/message_loop/message_loop.h"
11 #include "content/child/browser_font_resource_trusted.h"
12 #include "content/renderer/pepper/pepper_in_process_router.h"
13 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
14 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
15 #include "content/renderer/render_view_impl.h"
16 #include "ipc/ipc_message.h"
17 #include "ipc/ipc_message_macros.h"
18 #include "ppapi/host/ppapi_host.h"
19 #include "ppapi/proxy/file_chooser_resource.h"
20 #include "ppapi/proxy/file_io_resource.h"
21 #include "ppapi/proxy/file_ref_resource.h"
22 #include "ppapi/proxy/file_system_resource.h"
23 #include "ppapi/proxy/graphics_2d_resource.h"
24 #include "ppapi/proxy/ppapi_messages.h"
25 #include "ppapi/proxy/printing_resource.h"
26 #include "ppapi/proxy/url_loader_resource.h"
27 #include "ppapi/proxy/url_request_info_resource.h"
28 #include "ppapi/proxy/url_response_info_resource.h"
29 #include "ppapi/proxy/websocket_resource.h"
30 #include "ppapi/shared_impl/ppapi_globals.h"
31 #include "ppapi/shared_impl/ppapi_permissions.h"
32 #include "ppapi/shared_impl/resource_tracker.h"
33 #include "ppapi/shared_impl/var.h"
34
35 // Note that the code in the creation functions in this file should generally
36 // be the same as that in ppapi/proxy/resource_creation_proxy.cc. See
37 // pepper_in_process_resource_creation.h for what this file is for.
38
39 namespace content {
40
41 // PepperInProcessResourceCreation --------------------------------------------
42
PepperInProcessResourceCreation(RendererPpapiHostImpl * host_impl,PepperPluginInstanceImpl * instance)43 PepperInProcessResourceCreation::PepperInProcessResourceCreation(
44 RendererPpapiHostImpl* host_impl,
45 PepperPluginInstanceImpl* instance)
46 : ResourceCreationImpl(instance), host_impl_(host_impl) {}
47
~PepperInProcessResourceCreation()48 PepperInProcessResourceCreation::~PepperInProcessResourceCreation() {}
49
CreateBrowserFont(PP_Instance instance,const PP_BrowserFont_Trusted_Description * description)50 PP_Resource PepperInProcessResourceCreation::CreateBrowserFont(
51 PP_Instance instance,
52 const PP_BrowserFont_Trusted_Description* description) {
53 if (!BrowserFontResource_Trusted::IsPPFontDescriptionValid(*description))
54 return 0;
55 ppapi::Preferences prefs(
56 host_impl_->GetRenderViewForInstance(instance)->GetWebkitPreferences());
57 return (new BrowserFontResource_Trusted(
58 host_impl_->in_process_router()->GetPluginConnection(instance),
59 instance,
60 *description,
61 prefs))->GetReference();
62 }
63
CreateFileChooser(PP_Instance instance,PP_FileChooserMode_Dev mode,const PP_Var & accept_types)64 PP_Resource PepperInProcessResourceCreation::CreateFileChooser(
65 PP_Instance instance,
66 PP_FileChooserMode_Dev mode,
67 const PP_Var& accept_types) {
68 scoped_refptr<ppapi::StringVar> string_var =
69 ppapi::StringVar::FromPPVar(accept_types);
70 std::string str = string_var.get() ? string_var->value() : std::string();
71 return (new ppapi::proxy::FileChooserResource(
72 host_impl_->in_process_router()->GetPluginConnection(instance),
73 instance,
74 mode,
75 str.c_str()))->GetReference();
76 }
77
CreateFileIO(PP_Instance instance)78 PP_Resource PepperInProcessResourceCreation::CreateFileIO(
79 PP_Instance instance) {
80 return (new ppapi::proxy::FileIOResource(
81 host_impl_->in_process_router()->GetPluginConnection(instance),
82 instance))->GetReference();
83 }
84
CreateFileRef(PP_Instance instance,const ppapi::FileRefCreateInfo & create_info)85 PP_Resource PepperInProcessResourceCreation::CreateFileRef(
86 PP_Instance instance,
87 const ppapi::FileRefCreateInfo& create_info) {
88 return ppapi::proxy::FileRefResource::CreateFileRef(
89 host_impl_->in_process_router()->GetPluginConnection(instance),
90 instance,
91 create_info);
92 }
93
CreateFileSystem(PP_Instance instance,PP_FileSystemType type)94 PP_Resource PepperInProcessResourceCreation::CreateFileSystem(
95 PP_Instance instance,
96 PP_FileSystemType type) {
97 return (new ppapi::proxy::FileSystemResource(
98 host_impl_->in_process_router()->GetPluginConnection(instance),
99 instance,
100 type))->GetReference();
101 }
102
CreateGraphics2D(PP_Instance instance,const PP_Size * size,PP_Bool is_always_opaque)103 PP_Resource PepperInProcessResourceCreation::CreateGraphics2D(
104 PP_Instance instance,
105 const PP_Size* size,
106 PP_Bool is_always_opaque) {
107 return (new ppapi::proxy::Graphics2DResource(
108 host_impl_->in_process_router()->GetPluginConnection(instance),
109 instance,
110 *size,
111 is_always_opaque))->GetReference();
112 }
113
CreatePrinting(PP_Instance instance)114 PP_Resource PepperInProcessResourceCreation::CreatePrinting(
115 PP_Instance instance) {
116 return (new ppapi::proxy::PrintingResource(
117 host_impl_->in_process_router()->GetPluginConnection(instance),
118 instance))->GetReference();
119 }
120
CreateTrueTypeFont(PP_Instance instance,const PP_TrueTypeFontDesc_Dev * desc)121 PP_Resource PepperInProcessResourceCreation::CreateTrueTypeFont(
122 PP_Instance instance,
123 const PP_TrueTypeFontDesc_Dev* desc) {
124 NOTIMPLEMENTED();
125 return 0;
126 }
127
CreateURLLoader(PP_Instance instance)128 PP_Resource PepperInProcessResourceCreation::CreateURLLoader(
129 PP_Instance instance) {
130 return (new ppapi::proxy::URLLoaderResource(
131 host_impl_->in_process_router()->GetPluginConnection(instance),
132 instance))->GetReference();
133 }
134
CreateURLRequestInfo(PP_Instance instance)135 PP_Resource PepperInProcessResourceCreation::CreateURLRequestInfo(
136 PP_Instance instance) {
137 return (new ppapi::proxy::URLRequestInfoResource(
138 host_impl_->in_process_router()->GetPluginConnection(instance),
139 instance,
140 ppapi::URLRequestInfoData()))->GetReference();
141 }
142
CreateWebSocket(PP_Instance instance)143 PP_Resource PepperInProcessResourceCreation::CreateWebSocket(
144 PP_Instance instance) {
145 return (new ppapi::proxy::WebSocketResource(
146 host_impl_->in_process_router()->GetPluginConnection(instance),
147 instance))->GetReference();
148 }
149
150 } // namespace content
151