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