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