| Index: ppapi/proxy/serialized_var.cc
|
| diff --git a/ppapi/proxy/serialized_var.cc b/ppapi/proxy/serialized_var.cc
|
| index 1217a83ba5cf6b645257a02e11f29fa0c7d74e3a..72e7cc8ecbb6a1a1bc4654ed64abf21984e1f0b6 100644
|
| --- a/ppapi/proxy/serialized_var.cc
|
| +++ b/ppapi/proxy/serialized_var.cc
|
| @@ -18,13 +18,20 @@
|
| namespace ppapi {
|
| namespace proxy {
|
|
|
| +namespace {
|
| +void DefaultHandleWriter(IPC::Message* m, const SerializedHandle& handle) {
|
| + IPC::ParamTraits<SerializedHandle>::Write(m, handle);
|
| +}
|
| +} // namespace
|
| +
|
| // SerializedVar::Inner --------------------------------------------------------
|
|
|
| SerializedVar::Inner::Inner()
|
| : serialization_rules_(NULL),
|
| var_(PP_MakeUndefined()),
|
| instance_(0),
|
| - cleanup_mode_(CLEANUP_NONE) {
|
| + cleanup_mode_(CLEANUP_NONE),
|
| + is_valid_var_(true) {
|
| #ifndef NDEBUG
|
| has_been_serialized_ = false;
|
| has_been_deserialized_ = false;
|
| @@ -107,7 +114,24 @@ void SerializedVar::Inner::WriteToMessage(IPC::Message* m) const {
|
| DCHECK(!has_been_serialized_);
|
| has_been_serialized_ = true;
|
| #endif
|
| - RawVarDataGraph::Create(var_, instance_)->Write(m);
|
| + scoped_ptr<RawVarDataGraph> data = RawVarDataGraph::Create(var_, instance_);
|
| + if (data) {
|
| + m->WriteBool(true); // Success.
|
| + data->Write(m, base::Bind(&DefaultHandleWriter));
|
| + } else {
|
| + m->WriteBool(false); // Failure.
|
| + }
|
| +}
|
| +
|
| +void SerializedVar::Inner::WriteDataToMessage(
|
| + IPC::Message* m,
|
| + const HandleWriter& handle_writer) const {
|
| + if (raw_var_data_) {
|
| + m->WriteBool(true); // Success.
|
| + raw_var_data_->Write(m, handle_writer);
|
| + } else {
|
| + m->WriteBool(false); // Failure.
|
| + }
|
| }
|
|
|
| bool SerializedVar::Inner::ReadFromMessage(const IPC::Message* m,
|
| @@ -125,8 +149,15 @@ bool SerializedVar::Inner::ReadFromMessage(const IPC::Message* m,
|
| #endif
|
| // When reading, the dispatcher should be set when we get a Deserialize
|
| // call (which will supply a dispatcher).
|
| - raw_var_data_ = RawVarDataGraph::Read(m, iter);
|
| - return raw_var_data_.get() != NULL;
|
| + if (!m->ReadBool(iter, &is_valid_var_))
|
| + return false;
|
| + if (is_valid_var_) {
|
| + raw_var_data_ = RawVarDataGraph::Read(m, iter);
|
| + if (!raw_var_data_)
|
| + return false;
|
| + }
|
| +
|
| + return true;
|
| }
|
|
|
| void SerializedVar::Inner::SetCleanupModeToEndSendPassRef() {
|
|
|