- add sources.
[platform/framework/web/crosswalk.git] / src / content / renderer / pepper / resource_converter.h
1 // Copyright 2013 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_RESOURCE_CONVERTER_H
6 #define CONTENT_RENDERER_PEPPER_RESOURCE_CONVERTER_H
7
8 #include <vector>
9
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/ref_counted.h"
14 #include "content/common/content_export.h"
15 #include "content/renderer/pepper/host_resource_var.h"
16 #include "ppapi/c/pp_instance.h"
17 #include "ppapi/c/pp_var.h"
18 #include "v8/include/v8.h"
19
20 namespace IPC {
21 class Message;
22 }
23
24 namespace ppapi {
25 class ScopedPPVar;
26 }
27
28 namespace content {
29
30 class RendererPpapiHost;
31
32 // This class is responsible for converting V8 vars to Pepper resources.
33 class CONTENT_EXPORT ResourceConverter {
34  public:
35   virtual ~ResourceConverter();
36
37   // Flush() must be called before any vars created by the ResourceConverter
38   // are valid. It handles creating any resource hosts that need to be created.
39   virtual void Flush(const base::Callback<void(bool)>& callback) = 0;
40
41   // Attempts to convert a V8 object to a PP_Var with type PP_VARTYPE_RESOURCE.
42   // On success, writes the resulting var to |result|, sets |was_resource| to
43   // true and returns true. If |val| is not a resource, sets |was_resource| to
44   // false and returns true. If an error occurs, returns false.
45   virtual bool FromV8Value(v8::Handle<v8::Object> val,
46                            v8::Handle<v8::Context> context,
47                            PP_Var* result,
48                            bool* was_resource) = 0;
49 };
50
51 class ResourceConverterImpl : public ResourceConverter {
52  public:
53   ResourceConverterImpl(PP_Instance instance, RendererPpapiHost* host);
54   virtual ~ResourceConverterImpl();
55
56   // ResourceConverter overrides.
57   virtual void Flush(const base::Callback<void(bool)>& callback) OVERRIDE;
58   virtual bool FromV8Value(v8::Handle<v8::Object> val,
59                            v8::Handle<v8::Context> context,
60                            PP_Var* result,
61                            bool* was_resource) OVERRIDE;
62
63  private:
64   // Creates a resource var with the given |pending_renderer_id| and
65   // |create_message| to be sent to the plugin.
66   scoped_refptr<HostResourceVar> CreateResourceVar(
67       int pending_renderer_id,
68       const IPC::Message& create_message);
69   // Creates a resource var with the given |pending_renderer_id| and
70   // |create_message| to be sent to the plugin. Also sends
71   // |browser_host_create_message| to the browser, and asynchronously stores the
72   // resulting browser host ID in the newly created var.
73   scoped_refptr<HostResourceVar> CreateResourceVarWithBrowserHost(
74       int pending_renderer_id,
75       const IPC::Message& create_message,
76       const IPC::Message& browser_host_create_message);
77
78   // The instance this ResourceConverter is associated with.
79   PP_Instance instance_;
80   // The RendererPpapiHost to use to create browser hosts.
81   RendererPpapiHost* host_;
82
83   // A list of the messages to create the browser hosts. This is a parallel
84   // array to |browser_vars|. It is kept as a parallel array so that it can be
85   // conveniently passed to |CreateBrowserResourceHosts|.
86   std::vector<IPC::Message> browser_host_create_messages_;
87   // A list of the resource vars associated with browser hosts.
88   std::vector<scoped_refptr<HostResourceVar> > browser_vars;
89
90   DISALLOW_COPY_AND_ASSIGN(ResourceConverterImpl);
91 };
92
93 }  // namespace content
94 #endif  // CONTENT_RENDERER_PEPPER_RESOURCE_CONVERTER_H