1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/child/npapi/npruntime_util.h"
6
7#include "base/pickle.h"
8#include "third_party/WebKit/public/web/WebBindings.h"
9
10using blink::WebBindings;
11
12namespace content {
13
14bool SerializeNPIdentifier(NPIdentifier identifier, Pickle* pickle) {
15  const NPUTF8* string;
16  int32_t number;
17  bool is_string;
18  WebBindings::extractIdentifierData(identifier, string, number, is_string);
19
20  if (!pickle->WriteBool(is_string))
21    return false;
22  if (is_string) {
23    // Write the null byte for efficiency on the other end.
24    return pickle->WriteData(string, strlen(string) + 1);
25  }
26  return pickle->WriteInt(number);
27}
28
29bool DeserializeNPIdentifier(PickleIterator* pickle_iter,
30                             NPIdentifier* identifier) {
31  bool is_string;
32  if (!pickle_iter->ReadBool(&is_string))
33    return false;
34
35  if (is_string) {
36    const char* data;
37    int data_len;
38    if (!pickle_iter->ReadData(&data, &data_len))
39      return false;
40    DCHECK_EQ((static_cast<size_t>(data_len)), strlen(data) + 1);
41    *identifier = WebBindings::getStringIdentifier(data);
42  } else {
43    int number;
44    if (!pickle_iter->ReadInt(&number))
45      return false;
46    *identifier = WebBindings::getIntIdentifier(number);
47  }
48  return true;
49}
50
51}  // namespace content
52