summaryrefslogtreecommitdiffstats
path: root/ppapi
diff options
context:
space:
mode:
authorkcwu@chromium.org <kcwu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-04 04:40:36 +0000
committerkcwu@chromium.org <kcwu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-04 04:40:36 +0000
commita34b90dbff77cdb998bf3af9efa23221e9e09801 (patch)
treeee744555729949646794c4deeae95a91bb9a77be /ppapi
parenta5be74d14e4184e920792ddde925b3aa5a6e9992 (diff)
downloadchromium_src-a34b90dbff77cdb998bf3af9efa23221e9e09801.zip
chromium_src-a34b90dbff77cdb998bf3af9efa23221e9e09801.tar.gz
chromium_src-a34b90dbff77cdb998bf3af9efa23221e9e09801.tar.bz2
Pepper API for output protection.
This is only interface part. Implementation will be in another CL. R=binji@chromium.org, dalecurtis@chromium.org, ddorwin@chromium.org, dmichael@chromium.org BUG=256538 Review URL: https://chromiumcodereview.appspot.com/23621019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221149 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r--ppapi/api/private/ppb_output_protection_private.idl137
-rw-r--r--ppapi/c/pp_macros.h4
-rw-r--r--ppapi/c/private/ppb_output_protection_private.h168
-rw-r--r--ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c40
-rw-r--r--ppapi/thunk/ppb_output_protection_private_thunk.cc78
5 files changed, 425 insertions, 2 deletions
diff --git a/ppapi/api/private/ppb_output_protection_private.idl b/ppapi/api/private/ppb_output_protection_private.idl
new file mode 100644
index 0000000..395d253
--- /dev/null
+++ b/ppapi/api/private/ppb_output_protection_private.idl
@@ -0,0 +1,137 @@
+/* Copyright 2013 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.
+ */
+
+/**
+ * This file defines the API for output protection. Currently, it only supports
+ * Chrome OS.
+ */
+
+[generate_thunk]
+
+label Chrome {
+ M31 = 0.1
+};
+
+/**
+ * Content protection methods applied on video output link.
+ */
+[assert_size(4)] enum PP_OutputProtectionMethod_Private {
+ PP_OUTPUT_PROTECTION_METHOD_PRIVATE_NONE = 0,
+ PP_OUTPUT_PROTECTION_METHOD_PRIVATE_HDCP = 1 << 0
+};
+
+/**
+ * Video output link types.
+ */
+[assert_size(4)] enum PP_OutputProtectionLinkType_Private {
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_NONE = 0,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_UNKNOWN = 1 << 0,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_INTERNAL = 1 << 1,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_VGA = 1 << 2,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_HDMI = 1 << 3,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_DVI = 1 << 4,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_DISPLAYPORT = 1 << 5
+};
+
+/**
+ * The <code>PPB_OutputProtection_Private</code> interface allows controlling
+ * output protection.
+ *
+ * <strong>Example:</strong>
+ *
+ * @code
+ * op = output_protection->Create(instance);
+ * output_protection->QueryStatus(op, &link_mask, &protection_mask,
+ * done_callback);
+ * @endcode
+ *
+ * In this example, the plugin wants to enforce HDCP for HDMI link.
+ * @code
+ * if (link_mask & PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_HDMI) {
+ * output_protection->EnableProtection(
+ * op, PP_OUTPUT_PROTECTION_METHOD_PRIVATE_HDCP, done_callback);
+ * }
+ * @endcode
+ *
+ * After EnableProtection() completes, the plugin has to query protection
+ * status periodically to make sure the protection is enabled and remains
+ * enabled.
+ */
+interface PPB_OutputProtection_Private {
+ /**
+ * Create() creates a new <code>PPB_OutputProtection_Private</code> object.
+ *
+ * @pram[in] instance A <code>PP_Instance</code> identifying one instance of
+ * a module.
+ *
+ * @return A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code> if successful, 0 if creation
+ * failed.
+ */
+ PP_Resource Create([in] PP_Instance instance);
+
+ /**
+ * IsOutputProtection() determines if the provided resource is a
+ * <code>PPB_OutputProtection_Private</code>.
+ *
+ * @param[in] resource A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code>.
+ *
+ * @return <code>PP_TRUE</code> if the resource is a
+ * <code>PPB_OutputProtection_Private</code>, <code>PP_FALSE</code> if the
+ * resource is invalid or some type other than
+ * <code>PPB_OutputProtection_Private</code>.
+ */
+ PP_Bool IsOutputProtection([in] PP_Resource resource);
+
+ /**
+ * Query link status and protection status.
+ * Clients have to query status periodically in order to detect changes.
+ *
+ * @param[in] resource A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code>.
+ * @param[out] link_mask The type of connected output links, which is a
+ * bit-mask of the <code>PP_OutputProtectionLinkType_Private</code> values.
+ * @param[out] protection_mask Enabled protection methods, which is a
+ * bit-mask of the <code>PP_OutputProtectionMethod_Private</code> values.
+ * @param[in] callback A <code>PP_CompletionCallback</code> to run on
+ * asynchronous completion of QueryStatus(). This callback will only run if
+ * QueryStatus() returns <code>PP_OK_COMPLETIONPENDING</code>.
+ *
+ * @return An int32_t containing an error code from <code>pp_errors.h</code>.
+ */
+ int32_t QueryStatus(
+ [in] PP_Resource resource,
+ [out] uint32_t link_mask,
+ [out] uint32_t protection_mask,
+ [in] PP_CompletionCallback callback);
+
+ /**
+ * Set desired protection methods.
+ *
+ * When the desired protection method(s) have been applied to all applicable
+ * output links, the relevant bit(s) of the protection_mask returned by
+ * QueryStatus() will be set. Otherwise, the relevant bit(s) of
+ * protection_mask will not be set; there is no separate error code or
+ * callback.
+ *
+ * Protections will be disabled if no longer desired by all instances.
+ *
+ * @param[in] resource A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code>.
+ * @param[in] desired_protection_mask The desired protection methods, which
+ * is a bit-mask of the <code>PP_OutputProtectionMethod_Private</code>
+ * values.
+ * @param[in] callback A <code>PP_CompletionCallback</code> to be called when
+ * the protection request has been made. This may be before the protection
+ * have actually been applied. Call QueryStatus to get protection status.
+ *
+ * @return An int32_t containing an error code from <code>pp_errors.h</code>.
+ */
+ int32_t EnableProtection(
+ [in] PP_Resource resource,
+ [in] uint32_t desired_protection_mask,
+ [in] PP_CompletionCallback callback);
+};
diff --git a/ppapi/c/pp_macros.h b/ppapi/c/pp_macros.h
index 97a4229..a552885 100644
--- a/ppapi/c/pp_macros.h
+++ b/ppapi/c/pp_macros.h
@@ -3,13 +3,13 @@
* found in the LICENSE file.
*/
-/* From pp_macros.idl modified Tue Jul 2 14:15:05 2013. */
+/* From pp_macros.idl modified Wed Apr 10 11:57:14 2013. */
#ifndef PPAPI_C_PP_MACROS_H_
#define PPAPI_C_PP_MACROS_H_
-#define PPAPI_RELEASE 30
+#define PPAPI_RELEASE 31
/**
* @file
diff --git a/ppapi/c/private/ppb_output_protection_private.h b/ppapi/c/private/ppb_output_protection_private.h
new file mode 100644
index 0000000..d0438be
--- /dev/null
+++ b/ppapi/c/private/ppb_output_protection_private.h
@@ -0,0 +1,168 @@
+/* Copyright 2013 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.
+ */
+
+/* From private/ppb_output_protection_private.idl,
+ * modified Sat Aug 31 03:18:39 2013.
+ */
+
+#ifndef PPAPI_C_PRIVATE_PPB_OUTPUT_PROTECTION_PRIVATE_H_
+#define PPAPI_C_PRIVATE_PPB_OUTPUT_PROTECTION_PRIVATE_H_
+
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_instance.h"
+#include "ppapi/c/pp_macros.h"
+#include "ppapi/c/pp_resource.h"
+#include "ppapi/c/pp_stdint.h"
+
+#define PPB_OUTPUTPROTECTION_PRIVATE_INTERFACE_0_1 \
+ "PPB_OutputProtection_Private;0.1"
+#define PPB_OUTPUTPROTECTION_PRIVATE_INTERFACE \
+ PPB_OUTPUTPROTECTION_PRIVATE_INTERFACE_0_1
+
+/**
+ * @file
+ * This file defines the API for output protection. Currently, it only supports
+ * Chrome OS.
+ */
+
+
+/**
+ * @addtogroup Enums
+ * @{
+ */
+/**
+ * Content protection methods applied on video output link.
+ */
+typedef enum {
+ PP_OUTPUT_PROTECTION_METHOD_PRIVATE_NONE = 0,
+ PP_OUTPUT_PROTECTION_METHOD_PRIVATE_HDCP = 1 << 0
+} PP_OutputProtectionMethod_Private;
+PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_OutputProtectionMethod_Private, 4);
+
+/**
+ * Video output link types.
+ */
+typedef enum {
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_NONE = 0,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_UNKNOWN = 1 << 0,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_INTERNAL = 1 << 1,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_VGA = 1 << 2,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_HDMI = 1 << 3,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_DVI = 1 << 4,
+ PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_DISPLAYPORT = 1 << 5
+} PP_OutputProtectionLinkType_Private;
+PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_OutputProtectionLinkType_Private, 4);
+/**
+ * @}
+ */
+
+/**
+ * @addtogroup Interfaces
+ * @{
+ */
+/**
+ * The <code>PPB_OutputProtection_Private</code> interface allows controlling
+ * output protection.
+ *
+ * <strong>Example:</strong>
+ *
+ * @code
+ * op = output_protection->Create(instance);
+ * output_protection->QueryStatus(op, &link_mask, &protection_mask,
+ * done_callback);
+ * @endcode
+ *
+ * In this example, the plugin wants to enforce HDCP for HDMI link.
+ * @code
+ * if (link_mask & PP_OUTPUT_PROTECTION_LINK_TYPE_PRIVATE_HDMI) {
+ * output_protection->EnableProtection(
+ * op, PP_OUTPUT_PROTECTION_METHOD_PRIVATE_HDCP, done_callback);
+ * }
+ * @endcode
+ *
+ * After EnableProtection() completes, the plugin has to query protection
+ * status periodically to make sure the protection is enabled and remains
+ * enabled.
+ */
+struct PPB_OutputProtection_Private_0_1 {
+ /**
+ * Create() creates a new <code>PPB_OutputProtection_Private</code> object.
+ *
+ * @pram[in] instance A <code>PP_Instance</code> identifying one instance of
+ * a module.
+ *
+ * @return A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code> if successful, 0 if creation
+ * failed.
+ */
+ PP_Resource (*Create)(PP_Instance instance);
+ /**
+ * IsOutputProtection() determines if the provided resource is a
+ * <code>PPB_OutputProtection_Private</code>.
+ *
+ * @param[in] resource A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code>.
+ *
+ * @return <code>PP_TRUE</code> if the resource is a
+ * <code>PPB_OutputProtection_Private</code>, <code>PP_FALSE</code> if the
+ * resource is invalid or some type other than
+ * <code>PPB_OutputProtection_Private</code>.
+ */
+ PP_Bool (*IsOutputProtection)(PP_Resource resource);
+ /**
+ * Query link status and protection status.
+ * Clients have to query status periodically in order to detect changes.
+ *
+ * @param[in] resource A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code>.
+ * @param[out] link_mask The type of connected output links, which is a
+ * bit-mask of the <code>PP_OutputProtectionLinkType_Private</code> values.
+ * @param[out] protection_mask Enabled protection methods, which is a
+ * bit-mask of the <code>PP_OutputProtectionMethod_Private</code> values.
+ * @param[in] callback A <code>PP_CompletionCallback</code> to run on
+ * asynchronous completion of QueryStatus(). This callback will only run if
+ * QueryStatus() returns <code>PP_OK_COMPLETIONPENDING</code>.
+ *
+ * @return An int32_t containing an error code from <code>pp_errors.h</code>.
+ */
+ int32_t (*QueryStatus)(PP_Resource resource,
+ uint32_t* link_mask,
+ uint32_t* protection_mask,
+ struct PP_CompletionCallback callback);
+ /**
+ * Set desired protection methods.
+ *
+ * When the desired protection method(s) have been applied to all applicable
+ * output links, the relevant bit(s) of the protection_mask returned by
+ * QueryStatus() will be set. Otherwise, the relevant bit(s) of
+ * protection_mask will not be set; there is no separate error code or
+ * callback.
+ *
+ * Protections will be disabled if no longer desired by all instances.
+ *
+ * @param[in] resource A <code>PP_Resource</code> corresponding to a
+ * <code>PPB_OutputProtection_Private</code>.
+ * @param[in] desired_protection_mask The desired protection methods, which
+ * is a bit-mask of the <code>PP_OutputProtectionMethod_Private</code>
+ * values.
+ * @param[in] callback A <code>PP_CompletionCallback</code> to be called when
+ * the protection request has been made. This may be before the protection
+ * have actually been applied. Call QueryStatus to get protection status.
+ *
+ * @return An int32_t containing an error code from <code>pp_errors.h</code>.
+ */
+ int32_t (*EnableProtection)(PP_Resource resource,
+ uint32_t desired_protection_mask,
+ struct PP_CompletionCallback callback);
+};
+
+typedef struct PPB_OutputProtection_Private_0_1 PPB_OutputProtection_Private;
+/**
+ * @}
+ */
+
+#endif /* PPAPI_C_PRIVATE_PPB_OUTPUT_PROTECTION_PRIVATE_H_ */
+
diff --git a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
index 1578e6c5..50268de 100644
--- a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
+++ b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
@@ -101,6 +101,7 @@
#include "ppapi/c/private/ppb_net_address_private.h"
#include "ppapi/c/private/ppb_network_list_private.h"
#include "ppapi/c/private/ppb_network_monitor_private.h"
+#include "ppapi/c/private/ppb_output_protection_private.h"
#include "ppapi/c/private/ppb_talk_private.h"
#include "ppapi/c/private/ppb_tcp_server_socket_private.h"
#include "ppapi/c/private/ppb_tcp_socket_private.h"
@@ -207,6 +208,7 @@ static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_NetAddress_Private_0_1;
static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_NetAddress_Private_1_0;
static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_NetAddress_Private_1_1;
static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_NetworkList_Private_0_2;
+static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_OutputProtection_Private_0_1;
static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_Talk_Private_1_0;
static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_Talk_Private_2_0;
static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_TCPServerSocket_Private_0_1;
@@ -3056,6 +3058,30 @@ static uint32_t Pnacl_M19_PPB_NetworkList_Private_GetMTU(PP_Resource resource, u
/* Not generating wrapper methods for PPB_NetworkMonitor_Private_0_2 */
+/* Begin wrapper methods for PPB_OutputProtection_Private_0_1 */
+
+static PP_Resource Pnacl_M31_PPB_OutputProtection_Private_Create(PP_Instance instance) {
+ const struct PPB_OutputProtection_Private_0_1 *iface = Pnacl_WrapperInfo_PPB_OutputProtection_Private_0_1.real_iface;
+ return iface->Create(instance);
+}
+
+static PP_Bool Pnacl_M31_PPB_OutputProtection_Private_IsOutputProtection(PP_Resource resource) {
+ const struct PPB_OutputProtection_Private_0_1 *iface = Pnacl_WrapperInfo_PPB_OutputProtection_Private_0_1.real_iface;
+ return iface->IsOutputProtection(resource);
+}
+
+static int32_t Pnacl_M31_PPB_OutputProtection_Private_QueryStatus(PP_Resource resource, uint32_t* link_mask, uint32_t* protection_mask, struct PP_CompletionCallback* callback) {
+ const struct PPB_OutputProtection_Private_0_1 *iface = Pnacl_WrapperInfo_PPB_OutputProtection_Private_0_1.real_iface;
+ return iface->QueryStatus(resource, link_mask, protection_mask, *callback);
+}
+
+static int32_t Pnacl_M31_PPB_OutputProtection_Private_EnableProtection(PP_Resource resource, uint32_t desired_protection_mask, struct PP_CompletionCallback* callback) {
+ const struct PPB_OutputProtection_Private_0_1 *iface = Pnacl_WrapperInfo_PPB_OutputProtection_Private_0_1.real_iface;
+ return iface->EnableProtection(resource, desired_protection_mask, *callback);
+}
+
+/* End wrapper methods for PPB_OutputProtection_Private_0_1 */
+
/* Begin wrapper methods for PPB_Talk_Private_1_0 */
static PP_Resource Pnacl_M19_PPB_Talk_Private_Create(PP_Instance instance) {
@@ -4712,6 +4738,13 @@ struct PPB_NetworkList_Private_0_2 Pnacl_Wrappers_PPB_NetworkList_Private_0_2 =
/* Not generating wrapper interface for PPB_NetworkMonitor_Private_0_2 */
+struct PPB_OutputProtection_Private_0_1 Pnacl_Wrappers_PPB_OutputProtection_Private_0_1 = {
+ .Create = (PP_Resource (*)(PP_Instance instance))&Pnacl_M31_PPB_OutputProtection_Private_Create,
+ .IsOutputProtection = (PP_Bool (*)(PP_Resource resource))&Pnacl_M31_PPB_OutputProtection_Private_IsOutputProtection,
+ .QueryStatus = (int32_t (*)(PP_Resource resource, uint32_t* link_mask, uint32_t* protection_mask, struct PP_CompletionCallback callback))&Pnacl_M31_PPB_OutputProtection_Private_QueryStatus,
+ .EnableProtection = (int32_t (*)(PP_Resource resource, uint32_t desired_protection_mask, struct PP_CompletionCallback callback))&Pnacl_M31_PPB_OutputProtection_Private_EnableProtection
+};
+
struct PPB_Talk_Private_1_0 Pnacl_Wrappers_PPB_Talk_Private_1_0 = {
.Create = (PP_Resource (*)(PP_Instance instance))&Pnacl_M19_PPB_Talk_Private_Create,
.GetPermission = (int32_t (*)(PP_Resource talk_resource, struct PP_CompletionCallback callback))&Pnacl_M19_PPB_Talk_Private_GetPermission
@@ -5367,6 +5400,12 @@ static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_NetworkList_Private_0_2 =
.real_iface = NULL
};
+static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_OutputProtection_Private_0_1 = {
+ .iface_macro = PPB_OUTPUTPROTECTION_PRIVATE_INTERFACE_0_1,
+ .wrapped_iface = (void *) &Pnacl_Wrappers_PPB_OutputProtection_Private_0_1,
+ .real_iface = NULL
+};
+
static struct __PnaclWrapperInfo Pnacl_WrapperInfo_PPB_Talk_Private_1_0 = {
.iface_macro = PPB_TALK_PRIVATE_INTERFACE_1_0,
.wrapped_iface = (void *) &Pnacl_Wrappers_PPB_Talk_Private_1_0,
@@ -5560,6 +5599,7 @@ static struct __PnaclWrapperInfo *s_ppb_wrappers[] = {
&Pnacl_WrapperInfo_PPB_NetAddress_Private_1_0,
&Pnacl_WrapperInfo_PPB_NetAddress_Private_1_1,
&Pnacl_WrapperInfo_PPB_NetworkList_Private_0_2,
+ &Pnacl_WrapperInfo_PPB_OutputProtection_Private_0_1,
&Pnacl_WrapperInfo_PPB_Talk_Private_1_0,
&Pnacl_WrapperInfo_PPB_Talk_Private_2_0,
&Pnacl_WrapperInfo_PPB_TCPServerSocket_Private_0_1,
diff --git a/ppapi/thunk/ppb_output_protection_private_thunk.cc b/ppapi/thunk/ppb_output_protection_private_thunk.cc
new file mode 100644
index 0000000..8708806
--- /dev/null
+++ b/ppapi/thunk/ppb_output_protection_private_thunk.cc
@@ -0,0 +1,78 @@
+// Copyright 2013 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.
+
+// From private/ppb_output_protection_private.idl,
+// modified Thu Aug 29 13:39:04 2013.
+
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/private/ppb_output_protection_private.h"
+#include "ppapi/shared_impl/tracked_callback.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_instance_api.h"
+#include "ppapi/thunk/ppb_output_protection_api.h"
+#include "ppapi/thunk/resource_creation_api.h"
+#include "ppapi/thunk/thunk.h"
+
+namespace ppapi {
+namespace thunk {
+
+namespace {
+
+PP_Resource Create(PP_Instance instance) {
+ VLOG(4) << "PPB_OutputProtection_Private::Create()";
+ EnterResourceCreation enter(instance);
+ if (enter.failed())
+ return 0;
+ return enter.functions()->CreateOutputProtectionPrivate(instance);
+}
+
+PP_Bool IsOutputProtection(PP_Resource resource) {
+ VLOG(4) << "PPB_OutputProtection_Private::IsOutputProtection()";
+ EnterResource<PPB_OutputProtection_API> enter(resource, false);
+ return PP_FromBool(enter.succeeded());
+}
+
+int32_t QueryStatus(PP_Resource resource,
+ uint32_t* link_mask,
+ uint32_t* protection_mask,
+ struct PP_CompletionCallback callback) {
+ VLOG(4) << "PPB_OutputProtection_Private::QueryStatus()";
+ EnterResource<PPB_OutputProtection_API> enter(resource, callback, true);
+ if (enter.failed())
+ return enter.retval();
+ return enter.SetResult(enter.object()->QueryStatus(link_mask,
+ protection_mask,
+ enter.callback()));
+}
+
+int32_t EnableProtection(PP_Resource resource,
+ uint32_t desired_protection_mask,
+ struct PP_CompletionCallback callback) {
+ VLOG(4) << "PPB_OutputProtection_Private::EnableProtection()";
+ EnterResource<PPB_OutputProtection_API> enter(resource, callback, true);
+ if (enter.failed())
+ return enter.retval();
+ return enter.SetResult(enter.object()->EnableProtection(
+ desired_protection_mask,
+ enter.callback()));
+}
+
+const PPB_OutputProtection_Private_0_1
+ g_ppb_outputprotection_private_thunk_0_1 = {
+ &Create,
+ &IsOutputProtection,
+ &QueryStatus,
+ &EnableProtection
+};
+
+} // namespace
+
+const PPB_OutputProtection_Private_0_1*
+ GetPPB_OutputProtection_Private_0_1_Thunk() {
+ return &g_ppb_outputprotection_private_thunk_0_1;
+}
+
+} // namespace thunk
+} // namespace ppapi