| Index: ipc/ipc_message_utils.h
|
| diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h
|
| index 0e4c68e513efbbc9b6a0651e625a5978dc724739..19622b26885093f74f2cbac284ab129defd12dd0 100644
|
| --- a/ipc/ipc_message_utils.h
|
| +++ b/ipc/ipc_message_utils.h
|
| @@ -12,6 +12,7 @@
|
| #include <vector>
|
|
|
| #include "base/format_macros.h"
|
| +#include "base/memory/scoped_vector.h"
|
| #include "base/platform_file.h"
|
| #include "base/string16.h"
|
| #include "base/stringprintf.h"
|
| @@ -633,6 +634,37 @@ struct ParamTraits< Tuple5<A, B, C, D, E> > {
|
| }
|
| };
|
|
|
| +template<class P>
|
| +struct ParamTraits<ScopedVector<P> > {
|
| + typedef ScopedVector<P> param_type;
|
| + static void Write(Message* m, const param_type& p) {
|
| + WriteParam(m, static_cast<int>(p.size()));
|
| + for (size_t i = 0; i < p.size(); i++)
|
| + WriteParam(m, *p[i]);
|
| + }
|
| + static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
|
| + int size = 0;
|
| + if (!m->ReadLength(iter, &size))
|
| + return false;
|
| + if (INT_MAX/sizeof(P) <= static_cast<size_t>(size))
|
| + return false;
|
| + r->resize(size);
|
| + for (int i = 0; i < size; i++) {
|
| + (*r)[i] = new P();
|
| + if (!ReadParam(m, iter, (*r)[i]))
|
| + return false;
|
| + }
|
| + return true;
|
| + }
|
| + static void Log(const param_type& p, std::string* l) {
|
| + for (size_t i = 0; i < p.size(); ++i) {
|
| + if (i != 0)
|
| + l->append(" ");
|
| + LogParam(*p[i], l);
|
| + }
|
| + }
|
| +};
|
| +
|
| // IPC types ParamTraits -------------------------------------------------------
|
|
|
| // A ChannelHandle is basically a platform-inspecific wrapper around the
|
|
|