13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)/* Copyright (c) 2013 The Chromium Authors. All rights reserved. 23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) * found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) */ 53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#ifndef LIBRARIES_NACL_IO_PEPPER_INTERFACE_DELEGATE_H_ 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define LIBRARIES_NACL_IO_PEPPER_INTERFACE_DELEGATE_H_ 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper_interface.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// This class allows you to delegate Interface requests to different 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// PepperInterface-derived classes. 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// For example: 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// class FooPepperInterface : public PepperInterface { 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// CoreInterface* GetCoreInterface() { ... }; 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// }; 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// class BarPepperInterface : public PepperInterface { 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// VarInterface* GetVarInterface() { ... }; 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// }; 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// void SomeFunction() { 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// FooPepperInterface foo; 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// BarPepperInterface bar; 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// PepperInterfaceDelegate delegate(pp_instance); 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// delegate.SetCoreInterface(foo.GetCoreInterface()); 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// delegate.SetVarInterface(bar.GetVarInterface()); 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// } 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace nacl_io { 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class PepperInterfaceDelegate : public PepperInterface { 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) explicit PepperInterfaceDelegate(PP_Instance instance); 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~PepperInterfaceDelegate(); 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual PP_Instance GetInstance(); 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Interface getters. 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// These declarations look like: 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// CoreInterface* GetCoreInterface(); 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/undef_macros.h" 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/define_empty_macros.h" 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#undef BEGIN_INTERFACE 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \ 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual BaseClass* Get##BaseClass(); 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/all_interfaces.h" 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Interface delegate setters. 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// These declarations look like: 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// void SetCoreInterface(CoreInterface* delegate); 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/undef_macros.h" 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/define_empty_macros.h" 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#undef BEGIN_INTERFACE 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \ 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void Set##BaseClass##Delegate(BaseClass* delegate); 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/all_interfaces.h" 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PP_Instance instance_; 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Interface delegate pointers. 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/undef_macros.h" 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/define_empty_macros.h" 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#undef BEGIN_INTERFACE 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define BEGIN_INTERFACE(BaseClass, PPInterface, InterfaceString) \ 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BaseClass* BaseClass##delegate_; 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/pepper/all_interfaces.h" 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace nacl_io 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // LIBRARIES_NACL_IO_PEPPER_INTERFACE_DELEGATE_H_ 83