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