summaryrefslogtreecommitdiffstats
path: root/ppapi/nacl_irt/irt_interfaces.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/nacl_irt/irt_interfaces.cc')
-rw-r--r--ppapi/nacl_irt/irt_interfaces.cc70
1 files changed, 70 insertions, 0 deletions
diff --git a/ppapi/nacl_irt/irt_interfaces.cc b/ppapi/nacl_irt/irt_interfaces.cc
new file mode 100644
index 0000000..77ce9d8
--- /dev/null
+++ b/ppapi/nacl_irt/irt_interfaces.cc
@@ -0,0 +1,70 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/nacl_irt/irt_interfaces.h"
+
+#include <unistd.h>
+
+#include "build/build_config.h"
+#include "native_client/src/public/irt_core.h"
+#include "native_client/src/trusted/service_runtime/include/sys/unistd.h"
+#include "native_client/src/untrusted/irt/irt.h"
+#include "ppapi/nacl_irt/irt_manifest.h"
+#include "ppapi/nacl_irt/public/irt_ppapi.h"
+#include "ppapi/native_client/src/untrusted/pnacl_irt_shim/irt_shim_ppapi.h"
+
+#if defined(OS_NACL_SFI)
+static int ppapihook_pnacl_private_filter(void) {
+ int pnacl_mode = sysconf(NACL_ABI__SC_NACL_PNACL_MODE);
+ if (pnacl_mode == -1)
+ return 0;
+ return pnacl_mode;
+}
+#endif
+
+static const nacl_irt_resource_open kIrtResourceOpen = {
+ ppapi::IrtOpenResource,
+};
+
+#if defined(OS_NACL_SFI)
+static int not_pnacl_filter(void) {
+ int pnacl_mode = sysconf(NACL_ABI__SC_NACL_PNACL_MODE);
+ if (pnacl_mode == -1)
+ return 0;
+ return !pnacl_mode;
+}
+#endif
+
+static const struct nacl_irt_interface irt_interfaces[] = {
+ { NACL_IRT_PPAPIHOOK_v0_1, &nacl_irt_ppapihook, sizeof(nacl_irt_ppapihook),
+ NULL },
+#if defined(OS_NACL_SFI)
+ { NACL_IRT_PPAPIHOOK_PNACL_PRIVATE_v0_1,
+ &nacl_irt_ppapihook_pnacl_private, sizeof(nacl_irt_ppapihook_pnacl_private),
+ ppapihook_pnacl_private_filter },
+#endif
+ { NACL_IRT_RESOURCE_OPEN_v0_1, &kIrtResourceOpen,
+ sizeof(kIrtResourceOpen),
+#if defined(OS_NACL_SFI)
+ not_pnacl_filter,
+#else
+ // If we change PNaCl to use Non-SFI Mode on the open web,
+ // we should add a filter here.
+ NULL,
+#endif
+ },
+};
+
+size_t chrome_irt_query(const char* interface_ident,
+ void* table, size_t tablesize) {
+ size_t result = nacl_irt_query_list(interface_ident,
+ table,
+ tablesize,
+ irt_interfaces,
+ sizeof(irt_interfaces));
+ if (result != 0)
+ return result;
+
+ return nacl_irt_query_core(interface_ident, table, tablesize);
+}