15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/pepper_in_process_resource_creation.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
1158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/child/browser_font_resource_trusted.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/pepper_in_process_router.h"
1358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/pepper/renderer_ppapi_host_impl.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/render_view_impl.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message_macros.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/host/ppapi_host.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/file_chooser_resource.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/file_io_resource.h"
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/proxy/file_ref_resource.h"
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/file_system_resource.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/graphics_2d_resource.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/printing_resource.h"
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/proxy/url_loader_resource.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/url_request_info_resource.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/url_response_info_resource.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/websocket_resource.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_globals.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_permissions.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/resource_tracker.h"
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/shared_impl/var.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note that the code in the creation functions in this file should generally
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be the same as that in ppapi/proxy/resource_creation_proxy.cc. See
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// pepper_in_process_resource_creation.h for what this file is for.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PepperInProcessResourceCreation --------------------------------------------
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperInProcessResourceCreation::PepperInProcessResourceCreation(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RendererPpapiHostImpl* host_impl,
4558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch    PepperPluginInstanceImpl* instance)
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    : ResourceCreationImpl(instance), host_impl_(host_impl) {}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochPepperInProcessResourceCreation::~PepperInProcessResourceCreation() {}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateBrowserFont(
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_Instance instance,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const PP_BrowserFont_Trusted_Description* description) {
5358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  if (!BrowserFontResource_Trusted::IsPPFontDescriptionValid(*description))
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 0;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ppapi::Preferences prefs(
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      host_impl_->GetRenderViewForInstance(instance)->GetWebkitPreferences());
5758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  return (new BrowserFontResource_Trusted(
58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance,
60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              *description,
61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              prefs))->GetReference();
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileChooser(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_Instance instance,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_FileChooserMode_Dev mode,
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const PP_Var& accept_types) {
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_refptr<ppapi::StringVar> string_var =
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      ppapi::StringVar::FromPPVar(accept_types);
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  std::string str = string_var.get() ? string_var->value() : std::string();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (new ppapi::proxy::FileChooserResource(
72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance,
74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              mode,
75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              str.c_str()))->GetReference();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileIO(
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_Instance instance) {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return (new ppapi::proxy::FileIOResource(
81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance))->GetReference();
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileRef(
86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    PP_Instance instance,
87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    const ppapi::FileRefCreateInfo& create_info) {
88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return ppapi::proxy::FileRefResource::CreateFileRef(
89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      host_impl_->in_process_router()->GetPluginConnection(instance),
90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      instance,
91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      create_info);
92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateFileSystem(
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PP_Instance instance,
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PP_FileSystemType type) {
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return (new ppapi::proxy::FileSystemResource(
98a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance,
100a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              type))->GetReference();
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateGraphics2D(
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_Instance instance,
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const PP_Size* size,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_Bool is_always_opaque) {
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return (new ppapi::proxy::Graphics2DResource(
108a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance,
110a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              *size,
111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              is_always_opaque))->GetReference();
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreatePrinting(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_Instance instance) {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (new ppapi::proxy::PrintingResource(
117a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
118a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance))->GetReference();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateTrueTypeFont(
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PP_Instance instance,
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const PP_TrueTypeFontDesc_Dev* desc) {
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NOTIMPLEMENTED();
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return 0;
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateURLLoader(
12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    PP_Instance instance) {
13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return (new ppapi::proxy::URLLoaderResource(
131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance))->GetReference();
13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateURLRequestInfo(
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    PP_Instance instance) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (new ppapi::proxy::URLRequestInfoResource(
138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance,
140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              ppapi::URLRequestInfoData()))->GetReference();
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource PepperInProcessResourceCreation::CreateWebSocket(
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_Instance instance) {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (new ppapi::proxy::WebSocketResource(
146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              host_impl_->in_process_router()->GetPluginConnection(instance),
147a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch              instance))->GetReference();
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
151