Index: ipc/ipc_message_utils.cc |
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc |
index ac188bfb52e736d873a3cfe23b5b4b600bc03278..06408b422c526f4de8d0ed3984c1266f7a68d608 100644 |
--- a/ipc/ipc_message_utils.cc |
+++ b/ipc/ipc_message_utils.cc |
@@ -27,36 +27,38 @@ static void WriteValue(Message* m, const Value* value, int recursion) { |
m->WriteInt(value->GetType()); |
switch (value->GetType()) { |
- case Value::TYPE_NULL: |
+ case Value::TYPE_NULL: |
break; |
- case Value::TYPE_BOOLEAN: { |
+ case Value::TYPE_BOOLEAN: { |
bool val; |
value->GetAsBoolean(&val); |
WriteParam(m, val); |
break; |
} |
- case Value::TYPE_INTEGER: { |
+ case Value::TYPE_INTEGER: { |
int val; |
value->GetAsInteger(&val); |
WriteParam(m, val); |
break; |
} |
- case Value::TYPE_REAL: { |
+ case Value::TYPE_REAL: { |
double val; |
value->GetAsReal(&val); |
WriteParam(m, val); |
break; |
} |
- case Value::TYPE_STRING: { |
+ case Value::TYPE_STRING: { |
std::string val; |
value->GetAsString(&val); |
WriteParam(m, val); |
break; |
} |
- case Value::TYPE_BINARY: { |
- NOTREACHED() << "Don't send BinaryValues over IPC."; |
+ case Value::TYPE_BINARY: { |
+ const BinaryValue* binary = static_cast<const BinaryValue*>(value); |
+ m->WriteData(binary->GetBuffer(), binary->GetSize()); |
+ break; |
} |
- case Value::TYPE_DICTIONARY: { |
+ case Value::TYPE_DICTIONARY: { |
const DictionaryValue* dict = static_cast<const DictionaryValue*>(value); |
WriteParam(m, static_cast<int>(dict->GetSize())); |
@@ -73,7 +75,7 @@ static void WriteValue(Message* m, const Value* value, int recursion) { |
} |
break; |
} |
- case Value::TYPE_LIST: { |
+ case Value::TYPE_LIST: { |
const ListValue* list = static_cast<const ListValue*>(value); |
WriteParam(m, static_cast<int>(list->GetSize())); |
for (size_t i = 0; i < list->GetSize(); ++i) { |
@@ -139,56 +141,60 @@ static bool ReadValue(const Message* m, void** iter, Value** value, |
return false; |
switch (type) { |
- case Value::TYPE_NULL: |
+ case Value::TYPE_NULL: |
*value = Value::CreateNullValue(); |
break; |
- case Value::TYPE_BOOLEAN: { |
+ case Value::TYPE_BOOLEAN: { |
bool val; |
if (!ReadParam(m, iter, &val)) |
return false; |
*value = Value::CreateBooleanValue(val); |
break; |
} |
- case Value::TYPE_INTEGER: { |
+ case Value::TYPE_INTEGER: { |
int val; |
if (!ReadParam(m, iter, &val)) |
return false; |
*value = Value::CreateIntegerValue(val); |
break; |
} |
- case Value::TYPE_REAL: { |
+ case Value::TYPE_REAL: { |
double val; |
if (!ReadParam(m, iter, &val)) |
return false; |
*value = Value::CreateRealValue(val); |
break; |
} |
- case Value::TYPE_STRING: { |
+ case Value::TYPE_STRING: { |
std::string val; |
if (!ReadParam(m, iter, &val)) |
return false; |
*value = Value::CreateStringValue(val); |
break; |
} |
- case Value::TYPE_BINARY: { |
- NOTREACHED() << "Don't send BinaryValues over IPC."; |
+ case Value::TYPE_BINARY: { |
+ const char* data; |
+ int length; |
+ if (!m->ReadData(iter, &data, &length)) |
+ return false; |
+ *value = BinaryValue::CreateWithCopiedBuffer(data, length); |
break; |
} |
- case Value::TYPE_DICTIONARY: { |
+ case Value::TYPE_DICTIONARY: { |
scoped_ptr<DictionaryValue> val(new DictionaryValue()); |
if (!ReadDictionaryValue(m, iter, val.get(), recursion)) |
return false; |
*value = val.release(); |
break; |
} |
- case Value::TYPE_LIST: { |
+ case Value::TYPE_LIST: { |
scoped_ptr<ListValue> val(new ListValue()); |
if (!ReadListValue(m, iter, val.get(), recursion)) |
return false; |
*value = val.release(); |
break; |
} |
- default: |
+ default: |
return false; |
} |