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