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 16 namespace IPC { 17 template <class T> 18 struct ParamTraits; 19 } 20 21 namespace ppapi { 22 23 class 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 41 class 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