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#ifndef CONTENT_RENDERER_PEPPER_PEPPER_IN_PROCESS_RESOURCE_CREATION_H_ 6#define CONTENT_RENDERER_PEPPER_PEPPER_IN_PROCESS_RESOURCE_CREATION_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_ptr.h" 10#include "content/renderer/pepper/resource_creation_impl.h" 11#include "ppapi/proxy/connection.h" 12 13namespace content { 14 15class RendererPpapiHostImpl; 16 17// This class provides creation functions for the new resources with IPC 18// backends that live in content/renderer/pepper. 19// 20// (See pepper_in_process_router.h for more information.) 21// 22// This is a bit confusing. The "old-style" resources live in 23// content/renderer/pepper and are created by the ResourceCreationImpl in that 24// directory. The "new-style" IPC-only resources are in ppapi/proxy and are 25// created by the RessourceCreationProxy in that directory. 26// 27// This class allows us to run new-style IPC-only resources in-process. We use 28// the PepperInProcessRouter to run it in process. But then we have a problem 29// with allocating the resources since src/webkit can't depend on IPC or see 30// our IPC backend in content. This class overrides the normal in-process 31// resource creation and adds in the resources that we implement in 32// ppapi/proxy. 33// 34// When we convert all resources to use the new-style, we can just use the 35// ResourceCreationProxy for all resources. This class is just glue to manage 36// the temporary "two different cases." 37class PepperInProcessResourceCreation : public ResourceCreationImpl { 38 public: 39 PepperInProcessResourceCreation(RendererPpapiHostImpl* host_impl, 40 PepperPluginInstanceImpl* instance); 41 virtual ~PepperInProcessResourceCreation(); 42 43 // ResourceCreation_API implementation. 44 virtual PP_Resource CreateBrowserFont( 45 PP_Instance instance, 46 const PP_BrowserFont_Trusted_Description* description) OVERRIDE; 47 virtual PP_Resource CreateFileChooser(PP_Instance instance, 48 PP_FileChooserMode_Dev mode, 49 const PP_Var& accept_types) OVERRIDE; 50 virtual PP_Resource CreateFileIO(PP_Instance instance) OVERRIDE; 51 virtual PP_Resource CreateFileRef(PP_Instance instance, 52 const ppapi::FileRefCreateInfo& create_info) 53 OVERRIDE; 54 virtual PP_Resource CreateFileSystem(PP_Instance instance, 55 PP_FileSystemType type) OVERRIDE; 56 virtual PP_Resource CreateGraphics2D(PP_Instance pp_instance, 57 const PP_Size* size, 58 PP_Bool is_always_opaque) OVERRIDE; 59 virtual PP_Resource CreatePrinting(PP_Instance instance) OVERRIDE; 60 virtual PP_Resource CreateTrueTypeFont( 61 PP_Instance instance, 62 const struct PP_TrueTypeFontDesc_Dev* desc) OVERRIDE; 63 virtual PP_Resource CreateURLLoader(PP_Instance instance) OVERRIDE; 64 virtual PP_Resource CreateURLRequestInfo(PP_Instance instance) OVERRIDE; 65 virtual PP_Resource CreateWebSocket(PP_Instance instance) OVERRIDE; 66 67 private: 68 // Non-owning pointer to the host for the current plugin. 69 RendererPpapiHostImpl* host_impl_; 70 71 DISALLOW_COPY_AND_ASSIGN(PepperInProcessResourceCreation); 72}; 73 74} // namespace content 75 76#endif // CONTENT_RENDERER_PEPPER_PEPPER_IN_PROCESS_RESOURCE_CREATION_H_ 77