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
40namespace content {
41
42// PepperInProcessResourceCreation --------------------------------------------
43
44PepperInProcessResourceCreation::PepperInProcessResourceCreation(
45    RendererPpapiHostImpl* host_impl,
46    PepperPluginInstanceImpl* instance)
47    : ResourceCreationImpl(instance), host_impl_(host_impl) {}
48
49PepperInProcessResourceCreation::~PepperInProcessResourceCreation() {}
50
51PP_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
65PP_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
79PP_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
86PP_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
95PP_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
104PP_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
115PP_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
122PP_Resource PepperInProcessResourceCreation::CreateTrueTypeFont(
123    PP_Instance instance,
124    const PP_TrueTypeFontDesc_Dev* desc) {
125  NOTIMPLEMENTED();
126  return 0;
127}
128
129PP_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
136PP_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
144PP_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
152