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