1// Copyright (c) 2012 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#ifndef PPAPI_SHARED_IMPL_PRIVATE_PPB_X509_CERTIFICATE_PRIVATE_IMPL_H_ 6#define PPAPI_SHARED_IMPL_PRIVATE_PPB_X509_CERTIFICATE_PRIVATE_IMPL_H_ 7 8#include <vector> 9 10#include "base/memory/scoped_ptr.h" 11#include "base/values.h" 12#include "ppapi/c/private/ppb_x509_certificate_private.h" 13#include "ppapi/shared_impl/resource.h" 14#include "ppapi/thunk/ppb_x509_certificate_private_api.h" 15 16namespace IPC { 17template <class T> 18struct ParamTraits; 19} 20 21namespace ppapi { 22 23class PPAPI_SHARED_EXPORT PPB_X509Certificate_Fields { 24 public: 25 PPB_X509Certificate_Fields(); 26 PPB_X509Certificate_Fields(const PPB_X509Certificate_Fields& fields); 27 28 // Takes ownership of |value|. 29 void SetField(PP_X509Certificate_Private_Field field, base::Value* value); 30 PP_Var GetFieldAsPPVar(PP_X509Certificate_Private_Field field) const; 31 32 private: 33 // Friend so ParamTraits can serialize us. 34 friend struct IPC::ParamTraits<ppapi::PPB_X509Certificate_Fields>; 35 36 base::ListValue values_; 37}; 38 39//------------------------------------------------------------------------------ 40 41class PPAPI_SHARED_EXPORT PPB_X509Certificate_Private_Shared 42 : public thunk::PPB_X509Certificate_Private_API, 43 public Resource { 44 public: 45 PPB_X509Certificate_Private_Shared(ResourceObjectType type, 46 PP_Instance instance); 47 // Used by tcp_socket_shared_impl to construct a certificate resource from a 48 // server certificate. 49 PPB_X509Certificate_Private_Shared(ResourceObjectType type, 50 PP_Instance instance, 51 const PPB_X509Certificate_Fields& fields); 52 virtual ~PPB_X509Certificate_Private_Shared(); 53 54 // Resource overrides. 55 virtual PPB_X509Certificate_Private_API* 56 AsPPB_X509Certificate_Private_API() OVERRIDE; 57 58 // PPB_X509Certificate_Private_API implementation. 59 virtual PP_Bool Initialize(const char* bytes, uint32_t length) OVERRIDE; 60 virtual PP_Var GetField(PP_X509Certificate_Private_Field field) OVERRIDE; 61 62 protected: 63 virtual bool ParseDER(const std::vector<char>& der, 64 PPB_X509Certificate_Fields* result); 65 66 private: 67 scoped_ptr<PPB_X509Certificate_Fields> fields_; 68 69 DISALLOW_COPY_AND_ASSIGN(PPB_X509Certificate_Private_Shared); 70}; 71 72} // namespace ppapi 73 74#endif // PPAPI_SHARED_IMPL_PRIVATE_X509_CERTIFICATE_PRIVATE_IMPL_H_ 75