• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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(
48       PP_Instance instance,
49       PP_FileChooserMode_Dev mode,
50       const PP_Var& accept_types) OVERRIDE;
51   virtual PP_Resource CreateFileIO(PP_Instance instance) OVERRIDE;
52   virtual PP_Resource CreateFileRef(
53       PP_Instance instance,
54       const ppapi::FileRefCreateInfo& create_info) OVERRIDE;
55   virtual PP_Resource CreateFileSystem(PP_Instance instance,
56                                        PP_FileSystemType type) OVERRIDE;
57   virtual PP_Resource CreateGraphics2D(
58       PP_Instance pp_instance,
59       const PP_Size* size,
60       PP_Bool is_always_opaque) OVERRIDE;
61   virtual PP_Resource CreatePrinting(
62       PP_Instance instance) OVERRIDE;
63   virtual PP_Resource CreateTrueTypeFont(
64       PP_Instance instance,
65       const struct PP_TrueTypeFontDesc_Dev* desc) OVERRIDE;
66   virtual PP_Resource CreateURLLoader(
67       PP_Instance instance) OVERRIDE;
68   virtual PP_Resource CreateURLRequestInfo(
69       PP_Instance instance) OVERRIDE;
70   virtual PP_Resource CreateWebSocket(
71       PP_Instance instance) OVERRIDE;
72 
73  private:
74   // Non-owning pointer to the host for the current plugin.
75   RendererPpapiHostImpl* host_impl_;
76 
77   DISALLOW_COPY_AND_ASSIGN(PepperInProcessResourceCreation);
78 };
79 
80 }  // namespace content
81 
82 #endif  // CONTENT_RENDERER_PEPPER_PEPPER_IN_PROCESS_RESOURCE_CREATION_H_
83