1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ppapi/cpp/private/platform_verification.h"
6
7#include "ppapi/c/pp_bool.h"
8#include "ppapi/c/pp_errors.h"
9#include "ppapi/c/private/ppb_platform_verification_private.h"
10#include "ppapi/cpp/instance_handle.h"
11#include "ppapi/cpp/module_impl.h"
12#include "ppapi/cpp/var.h"
13
14namespace pp {
15
16namespace {
17
18template <> const char* interface_name<PPB_PlatformVerification_Private_0_2>() {
19  return PPB_PLATFORMVERIFICATION_PRIVATE_INTERFACE_0_2;
20}
21
22inline bool HasInterface() {
23  return has_interface<PPB_PlatformVerification_Private_0_2>();
24}
25
26inline const PPB_PlatformVerification_Private_0_2* GetInterface() {
27  return get_interface<PPB_PlatformVerification_Private_0_2>();
28}
29
30}  // namespace
31
32PlatformVerification::PlatformVerification(const InstanceHandle& instance) {
33  if (HasInterface())
34    PassRefFromConstructor(GetInterface()->Create(instance.pp_instance()));
35}
36
37PlatformVerification::~PlatformVerification() {}
38
39int32_t PlatformVerification::ChallengePlatform(
40    const Var& service_id,
41    const Var& challenge,
42    Var* signed_data,
43    Var* signed_data_signature,
44    Var* platform_key_certificate,
45    const CompletionCallback& callback) {
46  if (!HasInterface())
47    return callback.MayForce(PP_ERROR_NOINTERFACE);
48
49  return GetInterface()->ChallengePlatform(
50      pp_resource(), service_id.pp_var(), challenge.pp_var(),
51      const_cast<PP_Var*>(&signed_data->pp_var()),
52      const_cast<PP_Var*>(&signed_data_signature->pp_var()),
53      const_cast<PP_Var*>(&platform_key_certificate->pp_var()),
54      callback.pp_completion_callback());
55}
56
57}  // namespace pp
58