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