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 PPAPI_SHARED_IMPL_RESOURCE_VAR_H_
6#define PPAPI_SHARED_IMPL_RESOURCE_VAR_H_
7
8#include "ppapi/c/pp_resource.h"
9#include "ppapi/c/pp_var.h"
10#include "ppapi/shared_impl/ppapi_shared_export.h"
11#include "ppapi/shared_impl/var.h"
12
13namespace IPC {
14class Message;
15}
16
17namespace ppapi {
18
19// Represents a resource Var.
20class PPAPI_SHARED_EXPORT ResourceVar : public Var {
21 public:
22  // Gets the resource ID associated with this var.
23  // This is 0 if a resource is still pending (only possible on the host side).
24  // NOTE: This can return a PP_Resource with a reference count of 0 on the
25  // plugin side. It should be AddRef'd if the resource is passed to the user.
26  virtual PP_Resource GetPPResource() const = 0;
27
28  // Gets the pending resource host ID in the renderer.
29  virtual int GetPendingRendererHostId() const;
30
31  // Gets the pending resource host ID in the browser.
32  virtual int GetPendingBrowserHostId() const;
33
34  // Gets the message for creating a plugin-side resource. Returns NULL if the
35  // message is empty (which is always true on the plugin side).
36  virtual const IPC::Message* GetCreationMessage() const;
37
38  // Determines whether this is a pending resource.
39  // This is true if, on the host side, the there is a creation_message and no
40  // PP_Resource.
41  virtual bool IsPending() const = 0;
42
43  // Var override.
44  virtual ResourceVar* AsResourceVar() OVERRIDE;
45  virtual PP_VarType GetType() const OVERRIDE;
46
47  // Helper function that converts a PP_Var to a ResourceVar. This will
48  // return NULL if the PP_Var is not of Resource type.
49  static ResourceVar* FromPPVar(PP_Var var);
50
51 protected:
52  ResourceVar();
53
54  virtual ~ResourceVar();
55
56 private:
57  DISALLOW_COPY_AND_ASSIGN(ResourceVar);
58};
59
60}  // namespace ppapi
61
62#endif  // PPAPI_SHARED_IMPL_RESOURCE_VAR_H_
63