1// Copyright (c) 2006-2009 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 "webkit/glue/npruntime_util.h"
6
7#include "base/pickle.h"
8#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
9
10using WebKit::WebBindings;
11
12namespace webkit_glue {
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(const Pickle& pickle, void** pickle_iter,
30                             NPIdentifier* identifier) {
31  bool is_string;
32  if (!pickle.ReadBool(pickle_iter, &is_string))
33    return false;
34
35  if (is_string) {
36    const char* data;
37    int data_len;
38    if (!pickle.ReadData(pickle_iter, &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.ReadInt(pickle_iter, &number))
45      return false;
46    *identifier = WebBindings::getIntIdentifier(number);
47  }
48  return true;
49}
50
51}  // namespace webkit_glue
52