Home | History | Annotate | Download | only in pepper
      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 
     13 namespace content {
     14 
     15 class 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."
     37 class 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