pepper_interface.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 LIBRARIES_NACL_IO_PEPPER_INTERFACE_H_
6#define LIBRARIES_NACL_IO_PEPPER_INTERFACE_H_
7
8#include <ppapi/c/pp_completion_callback.h>
9#include <ppapi/c/pp_file_info.h>
10#include <ppapi/c/pp_instance.h>
11#include <ppapi/c/pp_resource.h>
12#include <ppapi/c/pp_var.h>
13#include <ppapi/c/ppb_console.h>
14#include <ppapi/c/ppb_file_io.h>
15#include <ppapi/c/ppb_file_ref.h>
16#include <ppapi/c/ppb_file_system.h>
17#include <ppapi/c/ppb_messaging.h>
18#include <ppapi/c/ppb_messaging.h>
19#include <ppapi/c/ppb_url_loader.h>
20#include <ppapi/c/ppb_url_request_info.h>
21#include <ppapi/c/ppb_url_response_info.h>
22#include <ppapi/c/ppb_var.h>
23
24#include <utils/macros.h>
25
26// Note: To add a new interface:
27//
28// 1. Using one of the other interfaces as a template, add your interface to
29//    all_interfaces.h.
30// 2. Add the necessary pepper header to the top of this file.
31// 3. Compile and cross your fingers!
32
33
34// Forward declare interface classes.
35#include "nacl_io/pepper/undef_macros.h"
36#include "nacl_io/pepper/define_empty_macros.h"
37#undef BEGIN_INTERFACE
38#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \
39    class BaseClass;
40#include "nacl_io/pepper/all_interfaces.h"
41
42int PPErrorToErrno(int32_t err);
43
44class PepperInterface {
45 public:
46  virtual ~PepperInterface() {}
47  virtual PP_Instance GetInstance() = 0;
48  virtual void AddRefResource(PP_Resource) = 0;
49  virtual void ReleaseResource(PP_Resource) = 0;
50  virtual bool IsMainThread() = 0;
51
52// Interface getters.
53#include "nacl_io/pepper/undef_macros.h"
54#include "nacl_io/pepper/define_empty_macros.h"
55#undef BEGIN_INTERFACE
56#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \
57    virtual BaseClass* Get##BaseClass() = 0;
58#include "nacl_io/pepper/all_interfaces.h"
59};
60
61// Interface class definitions.
62#include "nacl_io/pepper/undef_macros.h"
63#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \
64    class BaseClass { \
65     public: \
66      virtual ~BaseClass() {}
67#define END_INTERFACE(BaseClass, PPInterface) \
68    };
69#define METHOD1(Class, ReturnType, MethodName, Type0) \
70    virtual ReturnType MethodName(Type0) = 0;
71#define METHOD2(Class, ReturnType, MethodName, Type0, Type1) \
72    virtual ReturnType MethodName(Type0, Type1) = 0;
73#define METHOD3(Class, ReturnType, MethodName, Type0, Type1, Type2) \
74    virtual ReturnType MethodName(Type0, Type1, Type2) = 0;
75#define METHOD4(Class, ReturnType, MethodName, Type0, Type1, Type2, Type3) \
76    virtual ReturnType MethodName(Type0, Type1, Type2, Type3) = 0;
77#define METHOD5(Class, ReturnType, MethodName, Type0, Type1, Type2, Type3, \
78                Type4) \
79    virtual ReturnType MethodName(Type0, Type1, Type2, Type3, Type4) = 0;
80#include "nacl_io/pepper/all_interfaces.h"
81
82
83class ScopedResource {
84 public:
85  // Does not AddRef by default.
86  ScopedResource(PepperInterface* ppapi, PP_Resource resource);
87  ~ScopedResource();
88
89  PP_Resource pp_resource() { return resource_; }
90
91  // Return the resource without decrementing its refcount.
92  PP_Resource Release();
93
94 private:
95  PepperInterface* ppapi_;
96  PP_Resource resource_;
97
98  DISALLOW_COPY_AND_ASSIGN(ScopedResource);
99};
100
101#endif  // LIBRARIES_NACL_IO_PEPPER_INTERFACE_H_
102