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