15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/shared/platform/nacl_check.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/ppb_font_dev.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/ppb_memory_dev.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/ppb_var_deprecated.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_audio.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_audio_config.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_core.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_file_io.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_file_ref.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_file_system.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_fullscreen.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_graphics_2d.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_graphics_3d.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_image_data.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_input_event.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_instance.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_messaging.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_mouse_cursor.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_opengles2.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_url_loader.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_url_request_info.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_url_response_info.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_var.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_view.h" 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ppapi/c/private/ppb_testing_private.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "ppapi/native_client/tests/ppapi_test_lib/get_browser_interface.h" 339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "ppapi/native_client/tests/ppapi_test_lib/internal_utils.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use for dev interfaces that might not be present. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const void* GetBrowserInterface(const char* interface_name) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (*ppb_get_interface())(interface_name); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use for stable interfaces that must always be present. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const void* GetBrowserInterfaceSafe(const char* interface_name) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void* ppb_interface = (*ppb_get_interface())(interface_name); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(ppb_interface != NULL); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ppb_interface; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Stable interfaces. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Audio* PPBAudio() { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Audio*>( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_AUDIO_INTERFACE)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_AudioConfig* PPBAudioConfig() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_AudioConfig*>( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_AUDIO_CONFIG_INTERFACE)); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Core* PPBCore() { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Core*>( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_CORE_INTERFACE)); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_FileIO* PPBFileIO() { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_FileIO*>( 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_FILEIO_INTERFACE)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_FileRef* PPBFileRef() { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_FileRef*>( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_FILEREF_INTERFACE)); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_FileSystem* PPBFileSystem() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_FileSystem*>( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_FILESYSTEM_INTERFACE)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Fullscreen* PPBFullscreen() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Fullscreen*>( 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_FULLSCREEN_INTERFACE)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Graphics2D* PPBGraphics2D() { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Graphics2D*>( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_GRAPHICS_2D_INTERFACE)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Graphics3D* PPBGraphics3D() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Graphics3D*>( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_GRAPHICS_3D_INTERFACE)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_ImageData* PPBImageData() { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_ImageData*>( 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_IMAGEDATA_INTERFACE)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_InputEvent* PPBInputEvent() { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_InputEvent*>( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_INPUT_EVENT_INTERFACE)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Instance* PPBInstance() { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Instance*>( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_INSTANCE_INTERFACE)); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_KeyboardInputEvent* PPBKeyboardInputEvent() { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_KeyboardInputEvent*>( 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_KEYBOARD_INPUT_EVENT_INTERFACE)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Messaging* PPBMessaging() { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Messaging*>( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_MESSAGING_INTERFACE)); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseCursor_1_0* PPBMouseCursor() { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_MouseCursor_1_0*>( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_MOUSECURSOR_INTERFACE_1_0)); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_MouseInputEvent* PPBMouseInputEvent() { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_MouseInputEvent*>( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_MOUSE_INPUT_EVENT_INTERFACE)); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_OpenGLES2* PPBOpenGLES2() { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_OpenGLES2*>( 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_OPENGLES2_INTERFACE)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_URLLoader* PPBURLLoader() { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_URLLoader*>( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_URLLOADER_INTERFACE)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_URLRequestInfo* PPBURLRequestInfo() { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_URLRequestInfo*>( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_URLREQUESTINFO_INTERFACE)); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_URLResponseInfo* PPBURLResponseInfo() { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_URLResponseInfo*>( 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_URLRESPONSEINFO_INTERFACE)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Var* PPBVar() { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Var*>( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_VAR_INTERFACE)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_WheelInputEvent* PPBWheelInputEvent() { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_WheelInputEvent*>( 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterfaceSafe(PPB_WHEEL_INPUT_EVENT_INTERFACE)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dev interfaces. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Font_Dev* PPBFontDev() { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Font_Dev*>( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change to GetBrowserInterfaceSafe when moving out of dev. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterface(PPB_FONT_DEV_INTERFACE)); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Memory_Dev* PPBMemoryDev() { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_Memory_Dev*>( 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change to GetBrowserInterfaceSafe when moving out of dev. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterface(PPB_MEMORY_DEV_INTERFACE)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const PPB_Testing_Private* PPBTestingPrivate() { 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return reinterpret_cast<const PPB_Testing_Private*>( 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetBrowserInterface(PPB_TESTING_PRIVATE_INTERFACE)); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_View* PPBView() { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<const PPB_View*>( 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInterface(PPB_VIEW_INTERFACE)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 183