Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Unified Diff: ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.cc

Issue 9405038: Add PPAPI interface for secure sockets in flash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.h ('k') | ppapi/shared_impl/resource.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.cc
diff --git a/ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.cc b/ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.cc
new file mode 100644
index 0000000000000000000000000000000000000000..99f5f59f352a03d1d88c968acec0b291862ebbb5
--- /dev/null
+++ b/ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.cc
@@ -0,0 +1,160 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.h"
+
+#include "ppapi/cpp/var.h"
+#include "ppapi/cpp/var_array_buffer.h"
+#include "ppapi/proxy/dispatcher.h"
+#include "ppapi/proxy/ppapi_param_traits.h"
+#include "ppapi/proxy/serialized_var.h"
+
+namespace ppapi {
+
+PPB_X509Certificate_Fields::PPB_X509Certificate_Fields() :
+ data_(PP_FLASH_X509CERTIFICATE_FIELD_COUNT, pp::Var())
+{
+}
+
+PPB_X509Certificate_Fields::~PPB_X509Certificate_Fields() {
+}
+
+pp::Var& PPB_X509Certificate_Fields::operator[](
+ const PP_Flash_X509Certificate_Field field) {
+ uint32_t index = static_cast<uint32_t>(field);
+ CHECK(index < data_.size());
+ return data_[index];
+}
+
+enum VarType {
+ ARRAY_BUFFER,
+ STRING,
+ UNDEFINED
+};
+
+void PPB_X509Certificate_Fields::WriteToMessage(IPC::Message* m) const {
+ // TODO(raymes): AFAICT there is no mechanism for serializing Vars for
+ // transfer between the browser process and the plugin process, so we do
+ // serialization of the fields here manually. This isn't ideal but it still
+ // saves a ton of boilerplate for handling each field separately.
+ for (size_t i = 0; i < data_.size(); ++i) {
+ if (data_[i].is_array_buffer()) {
+ IPC::ParamTraits<uint16_t>::Write(m, static_cast<uint16_t>(ARRAY_BUFFER));
+ pp::VarArrayBuffer array_buffer(data_[i]);
+ char* bytes = static_cast<char*>(array_buffer.Map());
+ std::vector<char> bytes_vector(bytes, bytes + array_buffer.ByteLength());
+ array_buffer.Unmap();
+ IPC::ParamTraits<std::vector<char> >::Write(m, bytes_vector);
+ } else if(data_[i].is_string()) {
+ IPC::ParamTraits<uint16_t>::Write(m, static_cast<uint16_t>(STRING));
+ IPC::ParamTraits<std::string>::Write(m, data_[i].AsString());
+ }
+ else if(data_[i].is_undefined()) {
+ IPC::ParamTraits<uint16_t>::Write(m, static_cast<uint16_t>(UNDEFINED));
+ }
+ else {
+ // Not expecting any other variable types to be fields.
+ CHECK(false);
+ }
+ }
+}
+
+bool PPB_X509Certificate_Fields::ReadFromMessage(
+ const IPC::Message* m, void** iter) {
+ bool result;
+ for (size_t i = 0; i < data_.size(); ++i) {
+ uint16_t type;
+ result = IPC::ParamTraits<uint16_t>::Read(m, iter, &type);
+ if (!result)
+ return false;
+
+ if (static_cast<VarType>(type) == ARRAY_BUFFER) {
+ std::vector<char> bytes_vector;
+ result = IPC::ParamTraits<std::vector<char> >::Read(m, iter,
+ &bytes_vector);
+ if (!result)
+ return false;
+ pp::VarArrayBuffer array_buffer(bytes_vector.size());
+ if (!bytes_vector.empty()) {
+ char* bytes = static_cast<char*>(array_buffer.Map());
+ memcpy(bytes, &bytes_vector[0], bytes_vector.size());
+ }
+ array_buffer.Unmap();
+ data_[i] = array_buffer;
+ } else if (type == STRING) {
+ std::string string;
+ result = IPC::ParamTraits<std::string>::Read(m, iter, &string);
+ if (!result)
+ return false;
+ data_[i] = pp::Var(string);
+ }
+ else if (type == UNDEFINED) {
+ data_[i] = pp::Var();
+ }
+ else {
+ // Not expecting any other variable types to be fields.
+ CHECK(false);
+ }
+ }
+ return true;
+}
+
+//------------------------------------------------------------------------------
+
+PPB_Flash_X509Certificate_Shared::PPB_Flash_X509Certificate_Shared(
+ ResourceObjectType type,
+ PP_Instance instance) :
+ Resource(type, instance),
+ fields_(NULL) {
+}
+
+PPB_Flash_X509Certificate_Shared::PPB_Flash_X509Certificate_Shared(
+ ResourceObjectType type,
+ PP_Instance instance,
+ const PPB_X509Certificate_Fields& fields) :
+ Resource(type, instance),
+ fields_(new PPB_X509Certificate_Fields(fields))
+ {
+}
+
+PPB_Flash_X509Certificate_Shared::~PPB_Flash_X509Certificate_Shared() {
+}
+
+thunk::PPB_Flash_X509Certificate_API*
+PPB_Flash_X509Certificate_Shared::AsPPB_Flash_X509Certificate_API() {
+ return this;
+}
+
+PP_Bool PPB_Flash_X509Certificate_Shared::Init(const char* bytes,
+ uint32_t length) {
+ if (fields_.get())
+ return PP_FALSE;
+
+ if (!bytes || length == 0)
+ return PP_FALSE;
+
+ std::vector<char> der(bytes, bytes + length);
+ fields_.reset(new PPB_X509Certificate_Fields());
+ return PP_FromBool(ParseDER(der, fields_.get()));
+}
+
+PP_Var PPB_Flash_X509Certificate_Shared::GetField(
+ PP_Flash_X509Certificate_Field field) {
+ if (!fields_.get())
+ return PP_MakeUndefined();
+
+ return (*fields_)[field].pp_var();
+}
+
+bool PPB_Flash_X509Certificate_Shared::ParseDER(
+ const std::vector<char>& der,
+ PPB_X509Certificate_Fields* result) {
+ // A concrete PPB_Flash_X509Certificate_Shared should only ever be constructed
+ // by passing in PPB_X509Certificate_Fields, in which case it is already
+ // initialized.
+ CHECK(false);
+ return false;
+}
+
+} // namespace ppapi
« no previous file with comments | « ppapi/shared_impl/private/ppb_flash_x509_certificate_shared.h ('k') | ppapi/shared_impl/resource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698