1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2015 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "ipc/ipc_mojo_param_traits.h"
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "ipc/ipc_message_utils.h"
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "ipc/ipc_mojo_message_helper.h"
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace IPC {
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezvoid ParamTraits<mojo::MessagePipeHandle>::GetSize(base::PickleSizer* sizer,
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                                   const param_type& p) {
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  GetParamSize(sizer, p.is_valid());
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if (p.is_valid())
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    sizer->AddAttachment();
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezvoid ParamTraits<mojo::MessagePipeHandle>::Write(base::Pickle* m,
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                                 const param_type& p) {
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  WriteParam(m, p.is_valid());
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if (p.is_valid())
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    MojoMessageHelper::WriteMessagePipeTo(m, mojo::ScopedMessagePipeHandle(p));
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezbool ParamTraits<mojo::MessagePipeHandle>::Read(const base::Pickle* m,
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                                base::PickleIterator* iter,
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                                param_type* r) {
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  bool is_valid;
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if (!ReadParam(m, iter, &is_valid))
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return false;
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if (!is_valid)
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return true;
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  mojo::ScopedMessagePipeHandle handle;
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if (!MojoMessageHelper::ReadMessagePipeFrom(m, iter, &handle))
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return false;
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  DCHECK(handle.is_valid());
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  *r = handle.release();
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return true;
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezvoid ParamTraits<mojo::MessagePipeHandle>::Log(const param_type& p,
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                                               std::string* l) {
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  l->append("mojo::MessagePipeHandle(");
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  LogParam(p.value(), l);
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  l->append(")");
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace IPC
51