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