summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/file_path.cc6
-rw-r--r--base/file_path.h3
-rw-r--r--base/metrics/histogram.cc34
-rw-r--r--base/metrics/histogram.h5
-rw-r--r--base/pickle.cc342
-rw-r--r--base/pickle.h156
-rw-r--r--base/pickle_unittest.cc69
-rw-r--r--chrome/browser/automation/url_request_automation_job.cc2
-rw-r--r--chrome/browser/bookmarks/bookmark_node_data.cc6
-rw-r--r--chrome/browser/bookmarks/bookmark_node_data.h5
-rw-r--r--chrome/browser/extensions/execute_code_in_tab_function.cc2
-rw-r--r--chrome/browser/extensions/extension_browser_actions_api.cc4
-rw-r--r--chrome/browser/extensions/extension_messages_browsertest.cc4
-rw-r--r--chrome/browser/extensions/extension_page_actions_module.cc2
-rw-r--r--chrome/browser/extensions/extension_page_capture_api.cc2
-rw-r--r--chrome/browser/extensions/extension_tabs_module.cc2
-rw-r--r--chrome/browser/importer/profile_import_process_messages.h14
-rw-r--r--chrome/browser/password_manager/native_backend_kwallet_x.cc4
-rw-r--r--chrome/browser/password_manager/native_backend_kwallet_x.h5
-rw-r--r--chrome/browser/sessions/base_session_service.cc6
-rw-r--r--chrome/browser/sessions/compress_data_helper.cc2
-rw-r--r--chrome/browser/sessions/compress_data_helper.h3
-rw-r--r--chrome/browser/sessions/compress_data_helper_unittest.cc6
-rw-r--r--chrome/browser/sessions/session_service.cc4
-rw-r--r--chrome/browser/ui/views/extensions/browser_action_drag_data.cc4
-rw-r--r--chrome/browser/visitedlink/visitedlink_unittest.cc2
-rw-r--r--chrome/common/automation_messages.cc4
-rw-r--r--chrome/common/automation_messages.h4
-rw-r--r--chrome/common/common_param_traits.cc9
-rw-r--r--chrome/common/common_param_traits.h8
-rw-r--r--chrome/common/common_param_traits_unittest.cc24
-rw-r--r--chrome/common/content_settings_pattern.cc2
-rw-r--r--chrome/common/content_settings_pattern.h4
-rw-r--r--chrome/common/extensions/extension_messages.cc12
-rw-r--r--chrome/common/extensions/extension_messages.h8
-rw-r--r--chrome/common/extensions/extension_unpacker.cc4
-rw-r--r--chrome/common/extensions/user_script.cc13
-rw-r--r--chrome/common/extensions/user_script.h13
-rw-r--r--chrome/common/extensions/user_script_unittest.cc4
-rw-r--r--chrome/common/render_messages.cc4
-rw-r--r--chrome/common/render_messages.h4
-rw-r--r--chrome/renderer/extensions/user_script_slave.cc2
-rw-r--r--chrome/test/automation/automation_proxy.cc6
-rw-r--r--chrome/test/automation/automation_proxy_uitest.cc2
-rw-r--r--chrome_frame/cfproxy_support.cc4
-rw-r--r--content/browser/download/base_file.cc4
-rw-r--r--content/browser/renderer_host/render_sandbox_host_linux.cc25
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc2
-rw-r--r--content/browser/renderer_host/resource_dispatcher_host_unittest.cc14
-rw-r--r--content/browser/zygote_host_impl_linux.cc4
-rw-r--r--content/browser/zygote_main_linux.cc20
-rw-r--r--content/common/child_process_sandbox_support_impl_linux.cc6
-rw-r--r--content/common/clipboard_messages.cc4
-rw-r--r--content/common/clipboard_messages.h2
-rw-r--r--content/common/font_config_ipc_linux.cc6
-rw-r--r--content/common/indexed_db/indexed_db_param_traits.cc6
-rw-r--r--content/common/indexed_db/indexed_db_param_traits.h6
-rw-r--r--content/common/mac/attributed_string_coder.h6
-rw-r--r--content/common/mac/attributed_string_coder.mm6
-rw-r--r--content/common/pepper_file_messages.cc4
-rw-r--r--content/common/pepper_file_messages.h4
-rw-r--r--content/common/resource_dispatcher.cc4
-rw-r--r--content/common/ssl_status_serialization.cc2
-rw-r--r--content/ppapi_plugin/ppapi_thread.cc2
-rw-r--r--content/public/common/common_param_traits.cc40
-rw-r--r--content/public/common/common_param_traits.h34
-rw-r--r--content/public/common/webkit_param_traits.cc18
-rw-r--r--content/public/common/webkit_param_traits.h24
-rw-r--r--content/renderer/gpu/input_event_filter.cc4
-rw-r--r--content/renderer/render_widget.cc2
-rw-r--r--content/test/mock_render_thread.cc2
-rw-r--r--crypto/secure_hash.h5
-rw-r--r--crypto/secure_hash_default.cc15
-rw-r--r--crypto/secure_hash_openssl.cc15
-rw-r--r--crypto/secure_hash_unittest.cc6
-rw-r--r--gpu/ipc/gpu_command_buffer_traits.cc4
-rw-r--r--gpu/ipc/gpu_command_buffer_traits.h2
-rw-r--r--ipc/ipc_channel_posix.cc2
-rw-r--r--ipc/ipc_fuzzing_tests.cc14
-rw-r--r--ipc/ipc_logging.cc2
-rw-r--r--ipc/ipc_message.cc4
-rw-r--r--ipc/ipc_message.h3
-rw-r--r--ipc/ipc_message_unittest.cc10
-rw-r--r--ipc/ipc_message_utils.cc36
-rw-r--r--ipc/ipc_message_utils.h129
-rw-r--r--ipc/ipc_message_utils_impl.h8
-rw-r--r--ipc/ipc_send_fds_test.cc4
-rw-r--r--ipc/ipc_sync_message.cc12
-rw-r--r--ipc/ipc_sync_message.h7
-rw-r--r--ipc/ipc_tests.cc2
-rw-r--r--ipc/param_traits_macros.h6
-rw-r--r--ipc/param_traits_read_macros.h6
-rw-r--r--net/base/x509_certificate.cc2
-rw-r--r--net/base/x509_certificate.h5
-rw-r--r--net/base/x509_certificate_mac.cc2
-rw-r--r--net/base/x509_certificate_nss.cc2
-rw-r--r--net/base/x509_certificate_openssl.cc2
-rw-r--r--net/base/x509_certificate_unittest.cc2
-rw-r--r--net/base/x509_certificate_win.cc2
-rw-r--r--net/http/http_response_headers.cc3
-rw-r--r--net/http/http_response_headers.h3
-rw-r--r--net/http/http_response_headers_unittest.cc2
-rw-r--r--net/http/http_response_info.cc2
-rw-r--r--net/http/http_vary_data.cc4
-rw-r--r--net/http/http_vary_data.h5
-rw-r--r--net/socket/ssl_host_info.cc2
-rw-r--r--ppapi/proxy/ppapi_param_traits.cc32
-rw-r--r--ppapi/proxy/ppapi_param_traits.h30
-rw-r--r--ppapi/proxy/serialized_flash_menu.cc13
-rw-r--r--ppapi/proxy/serialized_flash_menu.h6
-rw-r--r--ppapi/proxy/serialized_var.cc3
-rw-r--r--ppapi/proxy/serialized_var.h6
-rw-r--r--ui/base/clipboard/clipboard_unittest.cc6
-rw-r--r--ui/base/clipboard/custom_data_helper.cc18
-rw-r--r--ui/base/dragdrop/gtk_dnd_util.cc2
-rw-r--r--ui/base/dragdrop/os_exchange_data_win_unittest.cc8
-rw-r--r--webkit/fileapi/file_system_directory_database.cc2
-rw-r--r--webkit/fileapi/file_system_usage_cache.cc4
-rw-r--r--webkit/glue/glue_serialize.cc6
-rw-r--r--webkit/glue/npruntime_util.cc10
-rw-r--r--webkit/glue/npruntime_util.h6
-rw-r--r--webkit/glue/webcursor.cc18
-rw-r--r--webkit/glue/webcursor.h5
-rw-r--r--webkit/glue/webcursor_android.cc2
-rw-r--r--webkit/glue/webcursor_aura.cc4
-rw-r--r--webkit/glue/webcursor_gtk.cc2
-rw-r--r--webkit/glue/webcursor_mac.mm2
-rw-r--r--webkit/glue/webcursor_unittest.cc30
-rw-r--r--webkit/glue/webcursor_win.cc6
129 files changed, 862 insertions, 765 deletions
diff --git a/base/file_path.cc b/base/file_path.cc
index c4f1c54..3b1fca4 100644
--- a/base/file_path.cc
+++ b/base/file_path.cc
@@ -586,12 +586,12 @@ void FilePath::WriteToPickle(Pickle* pickle) {
#endif
}
-bool FilePath::ReadFromPickle(Pickle* pickle, void** iter) {
+bool FilePath::ReadFromPickle(PickleIterator* iter) {
#if defined(OS_WIN)
- if (!pickle->ReadString16(iter, &path_))
+ if (!iter->ReadString16(&path_))
return false;
#else
- if (!pickle->ReadString(iter, &path_))
+ if (!iter->ReadString(&path_))
return false;
#endif
diff --git a/base/file_path.h b/base/file_path.h
index bde3cec..4d763eb 100644
--- a/base/file_path.h
+++ b/base/file_path.h
@@ -122,6 +122,7 @@
#endif // OS_WIN
class Pickle;
+class PickleIterator;
// An abstraction to isolate users from the differences between native
// pathnames on different platforms.
@@ -339,7 +340,7 @@ class BASE_EXPORT FilePath {
static FilePath FromUTF8Unsafe(const std::string& utf8);
void WriteToPickle(Pickle* pickle);
- bool ReadFromPickle(Pickle* pickle, void** iter);
+ bool ReadFromPickle(PickleIterator* iter);
// Normalize all path separators to backslash on Windows
// (if FILE_PATH_USES_WIN_SEPARATORS is true), or do nothing on POSIX systems.
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc
index a6f2b27..442b5b3 100644
--- a/base/metrics/histogram.cc
+++ b/base/metrics/histogram.cc
@@ -266,15 +266,15 @@ bool Histogram::DeserializeHistogramInfo(const std::string& histogram_info) {
int pickle_flags;
SampleSet sample;
- void* iter = NULL;
- if (!pickle.ReadString(&iter, &histogram_name) ||
- !pickle.ReadInt(&iter, &declared_min) ||
- !pickle.ReadInt(&iter, &declared_max) ||
- !pickle.ReadSize(&iter, &bucket_count) ||
- !pickle.ReadUInt32(&iter, &range_checksum) ||
- !pickle.ReadInt(&iter, &histogram_type) ||
- !pickle.ReadInt(&iter, &pickle_flags) ||
- !sample.Histogram::SampleSet::Deserialize(&iter, pickle)) {
+ PickleIterator iter(pickle);
+ if (!iter.ReadString(&histogram_name) ||
+ !iter.ReadInt(&declared_min) ||
+ !iter.ReadInt(&declared_max) ||
+ !iter.ReadSize(&bucket_count) ||
+ !iter.ReadUInt32(&range_checksum) ||
+ !iter.ReadInt(&histogram_type) ||
+ !iter.ReadInt(&pickle_flags) ||
+ !sample.Histogram::SampleSet::Deserialize(&iter)) {
DLOG(ERROR) << "Pickle error decoding Histogram: " << histogram_name;
return false;
}
@@ -304,7 +304,7 @@ bool Histogram::DeserializeHistogramInfo(const std::string& histogram_info) {
render_histogram = BooleanHistogram::FactoryGet(histogram_name, flags);
} else if (histogram_type == CUSTOM_HISTOGRAM) {
std::vector<Histogram::Sample> sample_ranges(bucket_count);
- if (!CustomHistogram::DeserializeRanges(&iter, pickle, &sample_ranges)) {
+ if (!CustomHistogram::DeserializeRanges(&iter, &sample_ranges)) {
DLOG(ERROR) << "Pickle error decoding ranges: " << histogram_name;
return false;
}
@@ -772,16 +772,16 @@ bool Histogram::SampleSet::Serialize(Pickle* pickle) const {
return true;
}
-bool Histogram::SampleSet::Deserialize(void** iter, const Pickle& pickle) {
+bool Histogram::SampleSet::Deserialize(PickleIterator* iter) {
DCHECK_EQ(counts_.size(), 0u);
DCHECK_EQ(sum_, 0);
DCHECK_EQ(redundant_count_, 0);
size_t counts_size;
- if (!pickle.ReadInt64(iter, &sum_) ||
- !pickle.ReadInt64(iter, &redundant_count_) ||
- !pickle.ReadSize(iter, &counts_size)) {
+ if (!iter->ReadInt64(&sum_) ||
+ !iter->ReadInt64(&redundant_count_) ||
+ !iter->ReadSize(&counts_size)) {
return false;
}
@@ -791,7 +791,7 @@ bool Histogram::SampleSet::Deserialize(void** iter, const Pickle& pickle) {
int count = 0;
for (size_t index = 0; index < counts_size; ++index) {
int i;
- if (!pickle.ReadInt(iter, &i))
+ if (!iter->ReadInt(&i))
return false;
counts_.push_back(i);
count += i;
@@ -1015,9 +1015,9 @@ bool CustomHistogram::SerializeRanges(Pickle* pickle) const {
// static
bool CustomHistogram::DeserializeRanges(
- void** iter, const Pickle& pickle, std::vector<Histogram::Sample>* ranges) {
+ PickleIterator* iter, std::vector<Histogram::Sample>* ranges) {
for (size_t i = 0; i < ranges->size(); ++i) {
- if (!pickle.ReadInt(iter, &(*ranges)[i]))
+ if (!iter->ReadInt(&(*ranges)[i]))
return false;
}
return true;
diff --git a/base/metrics/histogram.h b/base/metrics/histogram.h
index d203e54..69d9b4c 100644
--- a/base/metrics/histogram.h
+++ b/base/metrics/histogram.h
@@ -54,6 +54,7 @@
#include "base/time.h"
class Pickle;
+class PickleIterator;
namespace base {
@@ -404,7 +405,7 @@ class BASE_EXPORT Histogram {
void Subtract(const SampleSet& other);
bool Serialize(Pickle* pickle) const;
- bool Deserialize(void** iter, const Pickle& pickle);
+ bool Deserialize(PickleIterator* iter);
protected:
// Actual histogram data is stored in buckets, showing the count of values
@@ -757,7 +758,7 @@ class BASE_EXPORT CustomHistogram : public Histogram {
// Helper for deserializing CustomHistograms. |*ranges| should already be
// correctly sized before this call. Return true on success.
- static bool DeserializeRanges(void** iter, const Pickle& pickle,
+ static bool DeserializeRanges(PickleIterator* iter,
std::vector<Histogram::Sample>* ranges);
diff --git a/base/pickle.cc b/base/pickle.cc
index 28b6292..a095e35 100644
--- a/base/pickle.cc
+++ b/base/pickle.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -15,6 +15,143 @@ const int Pickle::kPayloadUnit = 64;
static const size_t kCapacityReadOnly = static_cast<size_t>(-1);
+PickleIterator::PickleIterator(const Pickle& pickle)
+ : read_ptr_(pickle.payload()),
+ read_end_ptr_(pickle.end_of_payload()) {
+}
+
+template <typename Type>
+inline bool PickleIterator::ReadBuiltinType(Type* result) {
+ const char* read_from = GetReadPointerAndAdvance<Type>();
+ if (!read_from)
+ return false;
+ if (sizeof(Type) > sizeof(uint32))
+ memcpy(result, read_from, sizeof(*result));
+ else
+ *result = *reinterpret_cast<const Type*>(read_from);
+ return true;
+}
+
+template<typename Type>
+inline const char* PickleIterator::GetReadPointerAndAdvance() {
+ const char* current_read_ptr = read_ptr_;
+ if (read_ptr_ + sizeof(Type) > read_end_ptr_)
+ return NULL;
+ if (sizeof(Type) < sizeof(uint32))
+ read_ptr_ += AlignInt(sizeof(Type), sizeof(uint32));
+ else
+ read_ptr_ += sizeof(Type);
+ return current_read_ptr;
+}
+
+const char* PickleIterator::GetReadPointerAndAdvance(int num_bytes) {
+ const char* current_read_ptr = read_ptr_;
+ const char* end_data_ptr = read_ptr_ + num_bytes;
+ if (num_bytes < 0)
+ return NULL;
+ // Check for enough space and for wrapping.
+ if (end_data_ptr > read_end_ptr_ || end_data_ptr < current_read_ptr)
+ return NULL;
+ read_ptr_ += AlignInt(num_bytes, sizeof(uint32));
+ return current_read_ptr;
+}
+
+inline const char* PickleIterator::GetReadPointerAndAdvance(int num_elements,
+ size_t size_element) {
+ // Check for int32 overflow.
+ int64 num_bytes = static_cast<int64>(num_elements) * size_element;
+ int num_bytes32 = static_cast<int>(num_bytes);
+ if (num_bytes != static_cast<int64>(num_bytes32))
+ return NULL;
+ return GetReadPointerAndAdvance(num_bytes32);
+}
+
+bool PickleIterator::ReadBool(bool* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadInt(int* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadLong(long* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadSize(size_t* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadUInt16(uint16* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadUInt32(uint32* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadInt64(int64* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadUInt64(uint64* result) {
+ return ReadBuiltinType(result);
+}
+
+bool PickleIterator::ReadString(std::string* result) {
+ int len;
+ if (!ReadInt(&len))
+ return false;
+ const char* read_from = GetReadPointerAndAdvance(len);
+ if (!read_from)
+ return false;
+
+ result->assign(read_from, len);
+ return true;
+}
+
+bool PickleIterator::ReadWString(std::wstring* result) {
+ int len;
+ if (!ReadInt(&len))
+ return false;
+ const char* read_from = GetReadPointerAndAdvance(len, sizeof(wchar_t));
+ if (!read_from)
+ return false;
+
+ result->assign(reinterpret_cast<const wchar_t*>(read_from), len);
+ return true;
+}
+
+bool PickleIterator::ReadString16(string16* result) {
+ int len;
+ if (!ReadInt(&len))
+ return false;
+ const char* read_from = GetReadPointerAndAdvance(len, sizeof(char16));
+ if (!read_from)
+ return false;
+
+ result->assign(reinterpret_cast<const char16*>(read_from), len);
+ return true;
+}
+
+bool PickleIterator::ReadData(const char** data, int* length) {
+ *length = 0;
+ *data = 0;
+
+ if (!ReadInt(length))
+ return false;
+
+ return ReadBytes(data, *length);
+}
+
+bool PickleIterator::ReadBytes(const char** data, int length) {
+ const char* read_from = GetReadPointerAndAdvance(length);
+ if (!read_from)
+ return false;
+ *data = read_from;
+ return true;
+}
+
// Payload is uint32 aligned.
Pickle::Pickle()
@@ -94,209 +231,6 @@ Pickle& Pickle::operator=(const Pickle& other) {
return *this;
}
-bool Pickle::ReadBool(void** iter, bool* result) const {
- DCHECK(iter);
-
- int tmp;
- if (!ReadInt(iter, &tmp))
- return false;
- DCHECK(0 == tmp || 1 == tmp);
- *result = tmp ? true : false;
- return true;
-}
-
-bool Pickle::ReadInt(void** iter, int* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- // TODO(jar): http://crbug.com/13108 Pickle should be cleaned up, and not
- // dependent on alignment.
- // Next line is otherwise the same as: memcpy(result, *iter, sizeof(*result));
- *result = *reinterpret_cast<int*>(*iter);
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool Pickle::ReadLong(void** iter, long* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- // TODO(jar): http://crbug.com/13108 Pickle should be cleaned up, and not
- // dependent on alignment.
- memcpy(result, *iter, sizeof(*result));
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool Pickle::ReadSize(void** iter, size_t* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- // TODO(jar): http://crbug.com/13108 Pickle should be cleaned up, and not
- // dependent on alignment.
- // Next line is otherwise the same as: memcpy(result, *iter, sizeof(*result));
- *result = *reinterpret_cast<size_t*>(*iter);
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool Pickle::ReadUInt16(void** iter, uint16* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- memcpy(result, *iter, sizeof(*result));
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool Pickle::ReadUInt32(void** iter, uint32* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- memcpy(result, *iter, sizeof(*result));
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool Pickle::ReadInt64(void** iter, int64* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- memcpy(result, *iter, sizeof(*result));
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool Pickle::ReadUInt64(void** iter, uint64* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- memcpy(result, *iter, sizeof(*result));
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool Pickle::ReadString(void** iter, std::string* result) const {
- DCHECK(iter);
-
- int len;
- if (!ReadLength(iter, &len))
- return false;
- if (!IteratorHasRoomFor(*iter, len))
- return false;
-
- char* chars = reinterpret_cast<char*>(*iter);
- result->assign(chars, len);
-
- UpdateIter(iter, len);
- return true;
-}
-
-bool Pickle::ReadWString(void** iter, std::wstring* result) const {
- DCHECK(iter);
-
- int len;
- if (!ReadLength(iter, &len))
- return false;
- // Avoid integer overflow.
- if (len > INT_MAX / static_cast<int>(sizeof(wchar_t)))
- return false;
- if (!IteratorHasRoomFor(*iter, len * sizeof(wchar_t)))
- return false;
-
- wchar_t* chars = reinterpret_cast<wchar_t*>(*iter);
- result->assign(chars, len);
-
- UpdateIter(iter, len * sizeof(wchar_t));
- return true;
-}
-
-bool Pickle::ReadString16(void** iter, string16* result) const {
- DCHECK(iter);
-
- int len;
- if (!ReadLength(iter, &len))
- return false;
- if (!IteratorHasRoomFor(*iter, len * sizeof(char16)))
- return false;
-
- char16* chars = reinterpret_cast<char16*>(*iter);
- result->assign(chars, len);
-
- UpdateIter(iter, len * sizeof(char16));
- return true;
-}
-
-bool Pickle::ReadData(void** iter, const char** data, int* length) const {
- DCHECK(iter);
- DCHECK(data);
- DCHECK(length);
- *length = 0;
- *data = 0;
-
- if (!ReadLength(iter, length))
- return false;
-
- return ReadBytes(iter, data, *length);
-}
-
-bool Pickle::ReadBytes(void** iter, const char** data, int length) const {
- DCHECK(iter);
- DCHECK(data);
- *data = 0;
- if (!*iter)
- *iter = const_cast<char*>(payload());
-
- if (!IteratorHasRoomFor(*iter, length))
- return false;
-
- *data = reinterpret_cast<const char*>(*iter);
-
- UpdateIter(iter, length);
- return true;
-}
-
-bool Pickle::ReadLength(void** iter, int* result) const {
- if (!ReadInt(iter, result))
- return false;
- return ((*result) >= 0);
-}
-
bool Pickle::WriteString(const std::string& value) {
if (!WriteInt(static_cast<int>(value.size())))
return false;
diff --git a/base/pickle.h b/base/pickle.h
index 65353de..47e3bf6 100644
--- a/base/pickle.h
+++ b/base/pickle.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -10,10 +10,80 @@
#include "base/base_export.h"
#include "base/basictypes.h"
+#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/logging.h"
#include "base/string16.h"
+class Pickle;
+
+// PickleIterator reads data from a Pickle. The Pickle object must remain valid
+// while the PickleIterator object is in use.
+class BASE_EXPORT PickleIterator {
+ public:
+ PickleIterator() : read_ptr_(NULL), read_end_ptr_(NULL) {}
+ explicit PickleIterator(const Pickle& pickle);
+
+ // Methods for reading the payload of the Pickle. To read from the start of
+ // the Pickle, create a PickleIterator from a Pickle. If successful, these
+ // methods return true. Otherwise, false is returned to indicate that the
+ // result could not be extracted.
+ bool ReadBool(bool* result) WARN_UNUSED_RESULT;
+ bool ReadInt(int* result) WARN_UNUSED_RESULT;
+ bool ReadLong(long* result) WARN_UNUSED_RESULT;
+ bool ReadSize(size_t* result) WARN_UNUSED_RESULT;
+ bool ReadUInt16(uint16* result) WARN_UNUSED_RESULT;
+ bool ReadUInt32(uint32* result) WARN_UNUSED_RESULT;
+ bool ReadInt64(int64* result) WARN_UNUSED_RESULT;
+ bool ReadUInt64(uint64* result) WARN_UNUSED_RESULT;
+ bool ReadString(std::string* result) WARN_UNUSED_RESULT;
+ bool ReadWString(std::wstring* result) WARN_UNUSED_RESULT;
+ bool ReadString16(string16* result) WARN_UNUSED_RESULT;
+ bool ReadData(const char** data, int* length) WARN_UNUSED_RESULT;
+ bool ReadBytes(const char** data, int length) WARN_UNUSED_RESULT;
+
+ // Safer version of ReadInt() checks for the result not being negative.
+ // Use it for reading the object sizes.
+ bool ReadLength(int* result) WARN_UNUSED_RESULT {
+ return ReadInt(result) && *result >= 0;
+ }
+
+ // Skips bytes in the read buffer and returns true if there are at least
+ // num_bytes available. Otherwise, does nothing and returns false.
+ bool SkipBytes(int num_bytes) WARN_UNUSED_RESULT {
+ return !!GetReadPointerAndAdvance(num_bytes);
+ }
+
+ private:
+ // Aligns 'i' by rounding it up to the next multiple of 'alignment'
+ static size_t AlignInt(size_t i, int alignment) {
+ return i + (alignment - (i % alignment)) % alignment;
+ }
+
+ // Read Type from Pickle.
+ template <typename Type>
+ inline bool ReadBuiltinType(Type* result);
+
+ // Get read pointer for Type and advance read pointer.
+ template<typename Type>
+ inline const char* GetReadPointerAndAdvance();
+
+ // Get read pointer for |num_bytes| and advance read pointer. This method
+ // checks num_bytes for negativity and wrapping.
+ const char* GetReadPointerAndAdvance(int num_bytes);
+
+ // Get read pointer for (num_elements * size_element) bytes and advance read
+ // pointer. This method checks for int overflow, negativity and wrapping.
+ inline const char* GetReadPointerAndAdvance(int num_elements,
+ size_t size_element);
+
+ // Pointers to the Pickle data.
+ const char* read_ptr_;
+ const char* read_end_ptr_;
+
+ FRIEND_TEST_ALL_PREFIXES(PickleTest, GetReadPointerAndAdvance);
+};
+
// This class provides facilities for basic binary value packing and unpacking.
//
// The Pickle class supports appending primitive values (ints, strings, etc.)
@@ -66,27 +136,54 @@ class BASE_EXPORT Pickle {
// Returns the data for this Pickle.
const void* data() const { return header_; }
- // Methods for reading the payload of the Pickle. To read from the start of
- // the Pickle, initialize *iter to NULL. If successful, these methods return
- // true. Otherwise, false is returned to indicate that the result could not
- // be extracted.
- bool ReadBool(void** iter, bool* result) const;
- bool ReadInt(void** iter, int* result) const;
- bool ReadLong(void** iter, long* result) const;
- bool ReadSize(void** iter, size_t* result) const;
- bool ReadUInt16(void** iter, uint16* result) const;
- bool ReadUInt32(void** iter, uint32* result) const;
- bool ReadInt64(void** iter, int64* result) const;
- bool ReadUInt64(void** iter, uint64* result) const;
- bool ReadString(void** iter, std::string* result) const;
- bool ReadWString(void** iter, std::wstring* result) const;
- bool ReadString16(void** iter, string16* result) const;
- bool ReadData(void** iter, const char** data, int* length) const;
- bool ReadBytes(void** iter, const char** data, int length) const;
+ // For compatibility, these older style read methods pass through to the
+ // PickleIterator methods.
+ // TODO(jbates) Remove these methods.
+ bool ReadBool(PickleIterator* iter, bool* result) const {
+ return iter->ReadBool(result);
+ }
+ bool ReadInt(PickleIterator* iter, int* result) const {
+ return iter->ReadInt(result);
+ }
+ bool ReadLong(PickleIterator* iter, long* result) const {
+ return iter->ReadLong(result);
+ }
+ bool ReadSize(PickleIterator* iter, size_t* result) const {
+ return iter->ReadSize(result);
+ }
+ bool ReadUInt16(PickleIterator* iter, uint16* result) const {
+ return iter->ReadUInt16(result);
+ }
+ bool ReadUInt32(PickleIterator* iter, uint32* result) const {
+ return iter->ReadUInt32(result);
+ }
+ bool ReadInt64(PickleIterator* iter, int64* result) const {
+ return iter->ReadInt64(result);
+ }
+ bool ReadUInt64(PickleIterator* iter, uint64* result) const {
+ return iter->ReadUInt64(result);
+ }
+ bool ReadString(PickleIterator* iter, std::string* result) const {
+ return iter->ReadString(result);
+ }
+ bool ReadWString(PickleIterator* iter, std::wstring* result) const {
+ return iter->ReadWString(result);
+ }
+ bool ReadString16(PickleIterator* iter, string16* result) const {
+ return iter->ReadString16(result);
+ }
+ bool ReadData(PickleIterator* iter, const char** data, int* length) const {
+ return iter->ReadData(data, length);
+ }
+ bool ReadBytes(PickleIterator* iter, const char** data, int length) const {
+ return iter->ReadBytes(data, length);
+ }
// Safer version of ReadInt() checks for the result not being negative.
// Use it for reading the object sizes.
- bool ReadLength(void** iter, int* result) const;
+ bool ReadLength(PickleIterator* iter, int* result) const {
+ return iter->ReadLength(result);
+ }
// Methods for adding to the payload of the Pickle. These values are
// appended to the end of the Pickle's payload. When reading values from a
@@ -162,17 +259,6 @@ class BASE_EXPORT Pickle {
return static_cast<const T*>(header_);
}
- // Returns true if the given iterator could point to data with the given
- // length. If there is no room for the given data before the end of the
- // payload, returns false.
- bool IteratorHasRoomFor(const void* iter, int len) const {
- if ((len < 0) || (iter < header_) || iter > end_of_payload())
- return false;
- const char* end_of_region = reinterpret_cast<const char*>(iter) + len;
- // Watch out for overflow in pointer calculation, which wraps.
- return (iter <= end_of_region) && (end_of_region <= end_of_payload());
- }
-
protected:
size_t payload_size() const { return header_->payload_size; }
@@ -220,13 +306,6 @@ class BASE_EXPORT Pickle {
return i + (alignment - (i % alignment)) % alignment;
}
- // Moves the iterator by the given number of bytes, making sure it is aligned.
- // Pointer (iterator) is NOT aligned, but the change in the pointer
- // is guaranteed to be a multiple of sizeof(uint32).
- static void UpdateIter(void** iter, int bytes) {
- *iter = static_cast<char*>(*iter) + AlignInt(bytes, sizeof(uint32));
- }
-
// Find the end of the pickled data that starts at range_start. Returns NULL
// if the entire Pickle is not found in the given data range.
static const char* FindNext(size_t header_size,
@@ -237,6 +316,8 @@ class BASE_EXPORT Pickle {
static const int kPayloadUnit;
private:
+ friend class PickleIterator;
+
Header* header_;
size_t header_size_; // Supports extra data between header and payload.
// Allocation size of payload (or -1 if allocation is const).
@@ -246,7 +327,6 @@ class BASE_EXPORT Pickle {
FRIEND_TEST_ALL_PREFIXES(PickleTest, Resize);
FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNext);
FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNextWithIncompleteHeader);
- FRIEND_TEST_ALL_PREFIXES(PickleTest, IteratorHasRoom);
};
#endif // BASE_PICKLE_H__
diff --git a/base/pickle_unittest.cc b/base/pickle_unittest.cc
index 07be5e3..8cb1d2a1 100644
--- a/base/pickle_unittest.cc
+++ b/base/pickle_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -23,7 +23,7 @@ const uint16 testuint16 = 32123;
// checks that the result
void VerifyResult(const Pickle& pickle) {
- void* iter = NULL;
+ PickleIterator iter(pickle);
int outint;
EXPECT_TRUE(pickle.ReadInt(&iter, &outint));
@@ -100,7 +100,7 @@ TEST(PickleTest, SmallBuffer) {
// We should not touch the buffer.
Pickle pickle(buffer.get(), 1);
- void* iter = NULL;
+ PickleIterator iter(pickle);
int data;
EXPECT_FALSE(pickle.ReadInt(&iter, &data));
}
@@ -111,7 +111,7 @@ TEST(PickleTest, BigSize) {
Pickle pickle(reinterpret_cast<char*>(buffer), sizeof(buffer));
- void* iter = NULL;
+ PickleIterator iter(pickle);
int data;
EXPECT_FALSE(pickle.ReadInt(&iter, &data));
}
@@ -121,7 +121,7 @@ TEST(PickleTest, UnalignedSize) {
Pickle pickle(reinterpret_cast<char*>(buffer), sizeof(buffer));
- void* iter = NULL;
+ PickleIterator iter(pickle);
int data;
EXPECT_FALSE(pickle.ReadInt(&iter, &data));
}
@@ -130,7 +130,7 @@ TEST(PickleTest, ZeroLenStr) {
Pickle pickle;
EXPECT_TRUE(pickle.WriteString(""));
- void* iter = NULL;
+ PickleIterator iter(pickle);
std::string outstr;
EXPECT_TRUE(pickle.ReadString(&iter, &outstr));
EXPECT_EQ("", outstr);
@@ -140,7 +140,7 @@ TEST(PickleTest, ZeroLenWStr) {
Pickle pickle;
EXPECT_TRUE(pickle.WriteWString(L""));
- void* iter = NULL;
+ PickleIterator iter(pickle);
std::string outstr;
EXPECT_TRUE(pickle.ReadString(&iter, &outstr));
EXPECT_EQ("", outstr);
@@ -150,7 +150,7 @@ TEST(PickleTest, BadLenStr) {
Pickle pickle;
EXPECT_TRUE(pickle.WriteInt(-2));
- void* iter = NULL;
+ PickleIterator iter(pickle);
std::string outstr;
EXPECT_FALSE(pickle.ReadString(&iter, &outstr));
}
@@ -159,7 +159,7 @@ TEST(PickleTest, BadLenWStr) {
Pickle pickle;
EXPECT_TRUE(pickle.WriteInt(-1));
- void* iter = NULL;
+ PickleIterator iter(pickle);
std::wstring woutstr;
EXPECT_FALSE(pickle.ReadWString(&iter, &woutstr));
}
@@ -188,19 +188,23 @@ TEST(PickleTest, FindNextWithIncompleteHeader) {
EXPECT_TRUE(NULL == Pickle::FindNext(header_size, start, end));
}
-TEST(PickleTest, IteratorHasRoom) {
+TEST(PickleTest, GetReadPointerAndAdvance) {
Pickle pickle;
+
+ PickleIterator iter(pickle);
+ EXPECT_FALSE(iter.GetReadPointerAndAdvance(1));
+
EXPECT_TRUE(pickle.WriteInt(1));
EXPECT_TRUE(pickle.WriteInt(2));
-
- const void* iter = 0;
- EXPECT_FALSE(pickle.IteratorHasRoomFor(iter, 1));
- iter = pickle.payload();
- EXPECT_TRUE(pickle.IteratorHasRoomFor(iter, 0));
- EXPECT_TRUE(pickle.IteratorHasRoomFor(iter, 1));
- EXPECT_FALSE(pickle.IteratorHasRoomFor(iter, -1));
- EXPECT_TRUE(pickle.IteratorHasRoomFor(iter, sizeof(int) * 2));
- EXPECT_FALSE(pickle.IteratorHasRoomFor(iter, (sizeof(int) * 2) + 1));
+ int bytes = sizeof(int) * 2;
+
+ EXPECT_TRUE(PickleIterator(pickle).GetReadPointerAndAdvance(0));
+ EXPECT_TRUE(PickleIterator(pickle).GetReadPointerAndAdvance(1));
+ EXPECT_FALSE(PickleIterator(pickle).GetReadPointerAndAdvance(-1));
+ EXPECT_TRUE(PickleIterator(pickle).GetReadPointerAndAdvance(bytes));
+ EXPECT_FALSE(PickleIterator(pickle).GetReadPointerAndAdvance(bytes + 1));
+ EXPECT_FALSE(PickleIterator(pickle).GetReadPointerAndAdvance(INT_MAX));
+ EXPECT_FALSE(PickleIterator(pickle).GetReadPointerAndAdvance(INT_MIN));
}
TEST(PickleTest, Resize) {
@@ -252,7 +256,7 @@ TEST(PickleTest, HeaderPadding) {
// this should not overwrite the 'int' payload
pickle.headerT<CustomHeader>()->blah = 10;
- void* iter = NULL;
+ PickleIterator iter(pickle);
int result;
ASSERT_TRUE(pickle.ReadInt(&iter, &result));
@@ -273,25 +277,32 @@ TEST(PickleTest, EqualsOperator) {
TEST(PickleTest, EvilLengths) {
Pickle source;
std::string str(100000, 'A');
- source.WriteData(str.c_str(), 100000);
+ EXPECT_TRUE(source.WriteData(str.c_str(), 100000));
// ReadString16 used to have its read buffer length calculation wrong leading
// to out-of-bounds reading.
- void* iter = NULL;
+ PickleIterator iter(source);
string16 str16;
EXPECT_FALSE(source.ReadString16(&iter, &str16));
// And check we didn't break ReadString16.
str16 = (wchar_t) 'A';
Pickle str16_pickle;
- str16_pickle.WriteString16(str16);
- iter = NULL;
+ EXPECT_TRUE(str16_pickle.WriteString16(str16));
+ iter = PickleIterator(str16_pickle);
EXPECT_TRUE(str16_pickle.ReadString16(&iter, &str16));
EXPECT_EQ(1U, str16.length());
+ // Check we don't fail in a length check with invalid String16 size.
+ // (1<<31) * sizeof(char16) == 0, so this is particularly evil.
+ Pickle bad_len;
+ EXPECT_TRUE(bad_len.WriteInt(1 << 31));
+ iter = PickleIterator(bad_len);
+ EXPECT_FALSE(bad_len.ReadString16(&iter, &str16));
+
// Check we don't fail in a length check with large WStrings.
Pickle big_len;
- big_len.WriteInt(1 << 30);
- iter = NULL;
+ EXPECT_TRUE(big_len.WriteInt(1 << 30));
+ iter = PickleIterator(big_len);
std::wstring wstr;
EXPECT_FALSE(big_len.ReadWString(&iter, &wstr));
}
@@ -301,7 +312,7 @@ TEST(PickleTest, ZeroLength) {
Pickle pickle;
EXPECT_TRUE(pickle.WriteData(NULL, 0));
- void* iter = NULL;
+ PickleIterator iter(pickle);
const char* outdata;
int outdatalen;
EXPECT_TRUE(pickle.ReadData(&iter, &outdata, &outdatalen));
@@ -315,8 +326,8 @@ TEST(PickleTest, ReadBytes) {
int data = 0x7abcd;
EXPECT_TRUE(pickle.WriteBytes(&data, sizeof(data)));
- void* iter = NULL;
- const char* outdata_char;
+ PickleIterator iter(pickle);
+ const char* outdata_char = NULL;
EXPECT_TRUE(pickle.ReadBytes(&iter, &outdata_char, sizeof(data)));
int outdata;
diff --git a/chrome/browser/automation/url_request_automation_job.cc b/chrome/browser/automation/url_request_automation_job.cc
index c5b3d70..231a4c5 100644
--- a/chrome/browser/automation/url_request_automation_job.cc
+++ b/chrome/browser/automation/url_request_automation_job.cc
@@ -253,7 +253,7 @@ bool URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message,
case AutomationMsg_RequestStarted::ID:
case AutomationMsg_RequestData::ID:
case AutomationMsg_RequestEnd::ID: {
- void* iter = NULL;
+ PickleIterator iter(message);
if (message.ReadInt(&iter, request_id))
return true;
break;
diff --git a/chrome/browser/bookmarks/bookmark_node_data.cc b/chrome/browser/bookmarks/bookmark_node_data.cc
index 7d1d72f..14c77d3 100644
--- a/chrome/browser/bookmarks/bookmark_node_data.cc
+++ b/chrome/browser/bookmarks/bookmark_node_data.cc
@@ -55,7 +55,7 @@ void BookmarkNodeData::Element::WriteToPickle(Pickle* pickle) const {
}
bool BookmarkNodeData::Element::ReadFromPickle(Pickle* pickle,
- void** iterator) {
+ PickleIterator* iterator) {
std::string url_spec;
if (!pickle->ReadBool(iterator, &is_url) ||
!pickle->ReadString(iterator, &url_spec) ||
@@ -294,9 +294,9 @@ void BookmarkNodeData::WriteToPickle(Profile* profile, Pickle* pickle) const {
}
bool BookmarkNodeData::ReadFromPickle(Pickle* pickle) {
- void* data_iterator = NULL;
+ PickleIterator data_iterator(*pickle);
size_t element_count;
- if (profile_path_.ReadFromPickle(pickle, &data_iterator) &&
+ if (profile_path_.ReadFromPickle(&data_iterator) &&
pickle->ReadSize(&data_iterator, &element_count)) {
std::vector<Element> tmp_elements;
tmp_elements.resize(element_count);
diff --git a/chrome/browser/bookmarks/bookmark_node_data.h b/chrome/browser/bookmarks/bookmark_node_data.h
index 748e78a..5c1f9e6 100644
--- a/chrome/browser/bookmarks/bookmark_node_data.h
+++ b/chrome/browser/bookmarks/bookmark_node_data.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -18,6 +18,7 @@
class BookmarkNode;
class Pickle;
+class PickleIterator;
class Profile;
// BookmarkNodeData is used to represent the following:
@@ -64,7 +65,7 @@ struct BookmarkNodeData {
// For reading/writing this Element.
void WriteToPickle(Pickle* pickle) const;
- bool ReadFromPickle(Pickle* pickle, void** iterator);
+ bool ReadFromPickle(Pickle* pickle, PickleIterator* iterator);
// ID of the node.
int64 id_;
diff --git a/chrome/browser/extensions/execute_code_in_tab_function.cc b/chrome/browser/extensions/execute_code_in_tab_function.cc
index 5e98a8d..d17de24 100644
--- a/chrome/browser/extensions/execute_code_in_tab_function.cc
+++ b/chrome/browser/extensions/execute_code_in_tab_function.cc
@@ -238,7 +238,7 @@ bool ExecuteCodeInTabFunction::OnMessageReceived(const IPC::Message& message) {
return false;
int message_request_id;
- void* iter = NULL;
+ PickleIterator iter(message);
if (!message.ReadInt(&iter, &message_request_id)) {
NOTREACHED() << "malformed extension message";
return true;
diff --git a/chrome/browser/extensions/extension_browser_actions_api.cc b/chrome/browser/extensions/extension_browser_actions_api.cc
index 0a37658..df58bfd 100644
--- a/chrome/browser/extensions/extension_browser_actions_api.cc
+++ b/chrome/browser/extensions/extension_browser_actions_api.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -49,7 +49,7 @@ bool BrowserActionSetIconFunction::RunBrowserAction() {
base::BinaryValue* binary = NULL;
EXTENSION_FUNCTION_VALIDATE(details_->GetBinary("imageData", &binary));
IPC::Message bitmap_pickle(binary->GetBuffer(), binary->GetSize());
- void* iter = NULL;
+ PickleIterator iter(bitmap_pickle);
SkBitmap bitmap;
EXTENSION_FUNCTION_VALIDATE(
IPC::ReadParam(&bitmap_pickle, &iter, &bitmap));
diff --git a/chrome/browser/extensions/extension_messages_browsertest.cc b/chrome/browser/extensions/extension_messages_browsertest.cc
index 6f9feb3..a79f021 100644
--- a/chrome/browser/extensions/extension_messages_browsertest.cc
+++ b/chrome/browser/extensions/extension_messages_browsertest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -65,7 +65,7 @@ TEST_F(ChromeRenderViewTest, ExtensionMessagesOpenChannel) {
render_thread_->sink().GetUniqueMessageMatching(
ExtensionHostMsg_OpenChannelToExtension::ID);
ASSERT_TRUE(open_channel_msg);
- void* iter = IPC::SyncMessage::GetDataIterator(open_channel_msg);
+ PickleIterator iter = IPC::SyncMessage::GetDataIterator(open_channel_msg);
ExtensionHostMsg_OpenChannelToExtension::SendParam open_params;
ASSERT_TRUE(IPC::ReadParam(open_channel_msg, &iter, &open_params));
EXPECT_EQ("testName", open_params.d);
diff --git a/chrome/browser/extensions/extension_page_actions_module.cc b/chrome/browser/extensions/extension_page_actions_module.cc
index 1e97ad7..d154d76 100644
--- a/chrome/browser/extensions/extension_page_actions_module.cc
+++ b/chrome/browser/extensions/extension_page_actions_module.cc
@@ -161,7 +161,7 @@ bool PageActionSetIconFunction::RunImpl() {
int icon_index;
if (args->GetBinary("imageData", &binary)) {
IPC::Message bitmap_pickle(binary->GetBuffer(), binary->GetSize());
- void* iter = NULL;
+ PickleIterator iter(bitmap_pickle);
scoped_ptr<SkBitmap> bitmap(new SkBitmap);
EXTENSION_FUNCTION_VALIDATE(
IPC::ReadParam(&bitmap_pickle, &iter, bitmap.get()));
diff --git a/chrome/browser/extensions/extension_page_capture_api.cc b/chrome/browser/extensions/extension_page_capture_api.cc
index 0f51bb25..3ae91d0 100644
--- a/chrome/browser/extensions/extension_page_capture_api.cc
+++ b/chrome/browser/extensions/extension_page_capture_api.cc
@@ -72,7 +72,7 @@ bool PageCaptureSaveAsMHTMLFunction::OnMessageReceivedFromRenderView(
return false;
int message_request_id;
- void* iter = NULL;
+ PickleIterator iter(message);
if (!message.ReadInt(&iter, &message_request_id)) {
NOTREACHED() << "malformed extension message";
return true;
diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc
index 1f7d530..6ab586a 100644
--- a/chrome/browser/extensions/extension_tabs_module.cc
+++ b/chrome/browser/extensions/extension_tabs_module.cc
@@ -1359,7 +1359,7 @@ bool UpdateTabFunction::OnMessageReceived(const IPC::Message& message) {
return false;
int message_request_id = -1;
- void* iter = NULL;
+ PickleIterator iter(message);
if (!message.ReadInt(&iter, &message_request_id)) {
NOTREACHED() << "malformed extension message";
return true;
diff --git a/chrome/browser/importer/profile_import_process_messages.h b/chrome/browser/importer/profile_import_process_messages.h
index 5487cfe..293bafe 100644
--- a/chrome/browser/importer/profile_import_process_messages.h
+++ b/chrome/browser/importer/profile_import_process_messages.h
@@ -35,7 +35,7 @@ struct ParamTraits<importer::SourceProfile> {
WriteParam(m, p.app_path);
WriteParam(m, static_cast<int>(p.services_supported));
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
if (!ReadParam(m, iter, &p->importer_name))
return false;
@@ -83,7 +83,7 @@ struct ParamTraits<history::URLRow> {
WriteParam(m, p.last_visit());
WriteParam(m, p.hidden());
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
history::URLID id;
GURL url;
string16 title;
@@ -137,7 +137,7 @@ struct ParamTraits<ProfileWriter::BookmarkEntry> {
WriteParam(m, p.title);
WriteParam(m, p.creation_time);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
return
(ReadParam(m, iter, &p->in_toolbar)) &&
(ReadParam(m, iter, &p->is_folder)) &&
@@ -172,7 +172,7 @@ struct ParamTraits<history::ImportedFaviconUsage> {
WriteParam(m, p.png_data);
WriteParam(m, p.urls);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
return
ReadParam(m, iter, &p->favicon_url) &&
ReadParam(m, iter, &p->png_data) &&
@@ -198,7 +198,7 @@ struct ParamTraits<TemplateURLRef> {
WriteParam(m, p.index_offset());
WriteParam(m, p.page_offset());
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
std::string url;
int index_offset;
int page_offset;
@@ -224,7 +224,7 @@ struct ParamTraits<TemplateURL::ImageRef> {
WriteParam(m, p.height);
WriteParam(m, p.url);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
std::string type;
int width;
int height;
@@ -278,7 +278,7 @@ struct ParamTraits<TemplateURL> {
WriteParam(m, p.usage_count());
WriteParam(m, p.prepopulate_id());
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
string16 short_name;
string16 description;
bool includes_suggestions_url;
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc
index 787ed5b..964a70c 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc
@@ -682,7 +682,7 @@ bool NativeBackendKWallet::CheckSerializedValue(const uint8_t* byte_array,
void NativeBackendKWallet::DeserializeValue(const std::string& signon_realm,
const Pickle& pickle,
PasswordFormList* forms) {
- void* iter = NULL;
+ PickleIterator iter(pickle);
int version = -1;
if (!pickle.ReadInt(&iter, &version) || version != kPickleVersion) {
@@ -739,7 +739,7 @@ void NativeBackendKWallet::DeserializeValue(const std::string& signon_realm,
}
}
-bool NativeBackendKWallet::ReadGURL(const Pickle& pickle, void** iter,
+bool NativeBackendKWallet::ReadGURL(const Pickle& pickle, PickleIterator* iter,
GURL* url) {
std::string url_string;
if (!pickle.ReadString(iter, &url_string)) {
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.h b/chrome/browser/password_manager/native_backend_kwallet_x.h
index 23d259b..6774a8e 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x.h
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -15,6 +15,7 @@
#include "chrome/browser/profiles/profile.h"
class Pickle;
+class PickleIterator;
class PrefService;
namespace webkit {
@@ -129,7 +130,7 @@ class NativeBackendKWallet : public PasswordStoreX::NativeBackend {
// Convenience function to read a GURL from a Pickle. Assumes the URL has
// been written as a std::string. Returns true on success.
- static bool ReadGURL(const Pickle& pickle, void** iter, GURL* url);
+ static bool ReadGURL(const Pickle& pickle, PickleIterator* iter, GURL* url);
// In case the fields in the pickle ever change, version them so we can try to
// read old pickles. (Note: do not eat old pickles past the expiration date.)
diff --git a/chrome/browser/sessions/base_session_service.cc b/chrome/browser/sessions/base_session_service.cc
index 9f4d05a..6925d91 100644
--- a/chrome/browser/sessions/base_session_service.cc
+++ b/chrome/browser/sessions/base_session_service.cc
@@ -273,7 +273,7 @@ bool BaseSessionService::RestoreUpdateTabNavigationCommand(
scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
if (!pickle.get())
return false;
- void* iterator = NULL;
+ PickleIterator iterator(*pickle);
std::string url_spec;
if (!pickle->ReadInt(&iterator, tab_id) ||
!pickle->ReadInt(&iterator, &(navigation->index_)) ||
@@ -328,7 +328,7 @@ bool BaseSessionService::RestoreSetTabExtensionAppIDCommand(
if (!pickle.get())
return false;
- void* iterator = NULL;
+ PickleIterator iterator(*pickle);
return pickle->ReadInt(&iterator, tab_id) &&
pickle->ReadString(&iterator, extension_app_id);
}
@@ -341,7 +341,7 @@ bool BaseSessionService::RestoreSetWindowAppNameCommand(
if (!pickle.get())
return false;
- void* iterator = NULL;
+ PickleIterator iterator(*pickle);
return pickle->ReadInt(&iterator, window_id) &&
pickle->ReadString(&iterator, app_name);
}
diff --git a/chrome/browser/sessions/compress_data_helper.cc b/chrome/browser/sessions/compress_data_helper.cc
index 987af6a..d879fe6 100644
--- a/chrome/browser/sessions/compress_data_helper.cc
+++ b/chrome/browser/sessions/compress_data_helper.cc
@@ -83,7 +83,7 @@ void CompressDataHelper::CompressAndWriteStringToPickle(const std::string& str,
// static
bool CompressDataHelper::ReadAndDecompressStringFromPickle(const Pickle& pickle,
- void** iter,
+ PickleIterator* iter,
std::string* str) {
// Read the size of the original data.
int original_size = 0;
diff --git a/chrome/browser/sessions/compress_data_helper.h b/chrome/browser/sessions/compress_data_helper.h
index d7cbbaa..768fc5e 100644
--- a/chrome/browser/sessions/compress_data_helper.h
+++ b/chrome/browser/sessions/compress_data_helper.h
@@ -11,6 +11,7 @@
#include <string>
class Pickle;
+class PickleIterator;
class CompressDataHelper {
public:
@@ -25,7 +26,7 @@ class CompressDataHelper {
// indicates the position of the data. The same iterator is used by
// Pickle::Read* functions.
static bool ReadAndDecompressStringFromPickle(const Pickle& pickle,
- void** iter,
+ PickleIterator* iter,
std::string* str);
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(CompressDataHelper);
diff --git a/chrome/browser/sessions/compress_data_helper_unittest.cc b/chrome/browser/sessions/compress_data_helper_unittest.cc
index 3e1da3f..f993bc5 100644
--- a/chrome/browser/sessions/compress_data_helper_unittest.cc
+++ b/chrome/browser/sessions/compress_data_helper_unittest.cc
@@ -23,7 +23,7 @@ TEST_F(CompressDataHelperTest, CompressAndDecompressData) {
EXPECT_GT(bytes_written, 0);
EXPECT_LT(bytes_written, max_bytes + 1);
- void* it = NULL;
+ PickleIterator it(pickle);
std::string data_out;
ASSERT_TRUE(CompressDataHelper::ReadAndDecompressStringFromPickle(
@@ -45,7 +45,7 @@ TEST_F(CompressDataHelperTest, CompressAndDecompressEmptyData) {
EXPECT_EQ(0, bytes_written);
- void* it = NULL;
+ PickleIterator it(pickle);
std::string data_out;
ASSERT_TRUE(CompressDataHelper::ReadAndDecompressStringFromPickle(
pickle, &it, &data_out));
@@ -65,7 +65,7 @@ TEST_F(CompressDataHelperTest, TooMuchData) {
EXPECT_EQ(0, bytes_written);
// When the data is read, we get an empty string back.
- void* it = NULL;
+ PickleIterator it(pickle);
std::string data_out;
ASSERT_TRUE(CompressDataHelper::ReadAndDecompressStringFromPickle(
pickle, &it, &data_out));
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc
index 2ba33b5..dcd56f0 100644
--- a/chrome/browser/sessions/session_service.cc
+++ b/chrome/browser/sessions/session_service.cc
@@ -1304,8 +1304,8 @@ bool SessionService::ReplacePendingCommand(SessionCommand* command) {
// well.
if (command->id() != kCommandUpdateTabNavigation)
return false;
- void* iterator = NULL;
scoped_ptr<Pickle> command_pickle(command->PayloadAsPickle());
+ PickleIterator iterator(*command_pickle);
SessionID::id_type command_tab_id;
int command_nav_index;
if (!command_pickle->ReadInt(&iterator, &command_tab_id) ||
@@ -1323,7 +1323,7 @@ bool SessionService::ReplacePendingCommand(SessionCommand* command) {
// the command. Make sure we delete the pickle before the command, else
// the pickle references deleted memory.
scoped_ptr<Pickle> existing_pickle(existing_command->PayloadAsPickle());
- iterator = NULL;
+ iterator = PickleIterator(*existing_pickle);
if (!existing_pickle->ReadInt(&iterator, &existing_tab_id) ||
!existing_pickle->ReadInt(&iterator, &existing_nav_index)) {
return false;
diff --git a/chrome/browser/ui/views/extensions/browser_action_drag_data.cc b/chrome/browser/ui/views/extensions/browser_action_drag_data.cc
index 0a5413f..5af5222 100644
--- a/chrome/browser/ui/views/extensions/browser_action_drag_data.cc
+++ b/chrome/browser/ui/views/extensions/browser_action_drag_data.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -71,7 +71,7 @@ void BrowserActionDragData::WriteToPickle(
}
bool BrowserActionDragData::ReadFromPickle(Pickle* pickle) {
- void* data_iterator = NULL;
+ PickleIterator data_iterator(*pickle);
const char* tmp;
if (!pickle->ReadBytes(&data_iterator, &tmp, sizeof(profile_)))
diff --git a/chrome/browser/visitedlink/visitedlink_unittest.cc b/chrome/browser/visitedlink/visitedlink_unittest.cc
index f0b4f7f..39af08e 100644
--- a/chrome/browser/visitedlink/visitedlink_unittest.cc
+++ b/chrome/browser/visitedlink/visitedlink_unittest.cc
@@ -526,7 +526,7 @@ class VisitRelayingRenderProcessHost : public MockRenderProcessHost {
Profile::FromBrowserContext(GetBrowserContext()));
if (msg->type() == ChromeViewMsg_VisitedLink_Add::ID) {
- void* iter = NULL;
+ PickleIterator iter(*msg);
std::vector<uint64> fingerprints;
CHECK(IPC::ReadParam(msg, &iter, &fingerprints));
counting_profile->CountAddEvent(fingerprints.size());
diff --git a/chrome/common/automation_messages.cc b/chrome/common/automation_messages.cc
index 1801fd6..ef3dd47 100644
--- a/chrome/common/automation_messages.cc
+++ b/chrome/common/automation_messages.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -73,7 +73,7 @@ void ParamTraits<ContextMenuModel>::Write(Message* m,
// static
bool ParamTraits<ContextMenuModel>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
size_t item_count = 0;
if (!ReadParam(m, iter, &item_count))
diff --git a/chrome/common/automation_messages.h b/chrome/common/automation_messages.h
index 3d5598e..3d4064f 100644
--- a/chrome/common/automation_messages.h
+++ b/chrome/common/automation_messages.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -192,7 +192,7 @@ template <>
struct ParamTraits<ContextMenuModel> {
typedef ContextMenuModel param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
diff --git a/chrome/common/common_param_traits.cc b/chrome/common/common_param_traits.cc
index 8a14b30..e741e4f 100644
--- a/chrome/common/common_param_traits.cc
+++ b/chrome/common/common_param_traits.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -13,7 +13,7 @@ void ParamTraits<ContentSetting>::Write(Message* m, const param_type& p) {
m->WriteInt(static_cast<int>(p));
}
-bool ParamTraits<ContentSetting>::Read(const Message* m, void** iter,
+bool ParamTraits<ContentSetting>::Read(const Message* m, PickleIterator* iter,
param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
@@ -51,8 +51,9 @@ void ParamTraits<ContentSettingsType>::Write(Message* m, const param_type& p) {
m->WriteInt(static_cast<int>(p));
}
-bool ParamTraits<ContentSettingsType>::Read(const Message* m, void** iter,
- param_type* p) {
+bool ParamTraits<ContentSettingsType>::Read(const Message* m,
+ PickleIterator* iter,
+ param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
diff --git a/chrome/common/common_param_traits.h b/chrome/common/common_param_traits.h
index 08a1853..1b9fa23 100644
--- a/chrome/common/common_param_traits.h
+++ b/chrome/common/common_param_traits.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,6 +11,8 @@
#include "chrome/common/content_settings.h"
#include "ipc/ipc_param_traits.h"
+class PickleIterator;
+
namespace IPC {
class Message;
@@ -19,7 +21,7 @@ template <>
struct ParamTraits<ContentSetting> {
typedef ContentSetting param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -27,7 +29,7 @@ template <>
struct ParamTraits<ContentSettingsType> {
typedef ContentSettingsType param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
diff --git a/chrome/common/common_param_traits_unittest.cc b/chrome/common/common_param_traits_unittest.cc
index 26f7eb6..c956fae 100644
--- a/chrome/common/common_param_traits_unittest.cc
+++ b/chrome/common/common_param_traits_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -32,7 +32,7 @@ TEST(IPCMessageTest, Serialize) {
IPC::ParamTraits<GURL>::Write(&msg, input);
GURL output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ParamTraits<GURL>::Read(&msg, &iter, &output));
// We want to test each component individually to make sure its range was
@@ -53,7 +53,7 @@ TEST(IPCMessageTest, Serialize) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
msg.WriteInt(99);
GURL output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_FALSE(IPC::ParamTraits<GURL>::Read(&msg, &iter, &output));
}
@@ -66,7 +66,7 @@ TEST(IPCMessageTest, Pair) {
IPC::ParamTraits<TestPair>::Write(&msg, input);
TestPair output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ParamTraits<TestPair>::Read(&msg, &iter, &output));
EXPECT_EQ(output.first, "foo");
EXPECT_EQ(output.second, "bar");
@@ -85,7 +85,7 @@ TEST(IPCMessageTest, Bitmap) {
IPC::ParamTraits<SkBitmap>::Write(&msg, bitmap);
SkBitmap output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ParamTraits<SkBitmap>::Read(&msg, &iter, &output));
EXPECT_EQ(bitmap.config(), output.config());
@@ -101,7 +101,7 @@ TEST(IPCMessageTest, Bitmap) {
// Copy the first message block over to |bad_msg|.
const char* fixed_data;
int fixed_data_size;
- iter = NULL;
+ iter = PickleIterator(msg);
msg.ReadData(&iter, &fixed_data, &fixed_data_size);
bad_msg.WriteData(fixed_data, fixed_data_size);
// Add some bogus pixel data.
@@ -111,7 +111,7 @@ TEST(IPCMessageTest, Bitmap) {
bad_msg.WriteData(bogus_pixels.get(), bogus_pixels_size);
// Make sure we don't read out the bitmap!
SkBitmap bad_output;
- iter = NULL;
+ iter = PickleIterator(bad_msg);
EXPECT_FALSE(IPC::ParamTraits<SkBitmap>::Read(&bad_msg, &iter, &bad_output));
}
@@ -125,7 +125,7 @@ TEST(IPCMessageTest, ListValue) {
IPC::WriteParam(&msg, input);
ListValue output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output));
EXPECT_TRUE(input.Equals(&output));
@@ -133,7 +133,7 @@ TEST(IPCMessageTest, ListValue) {
// Also test the corrupt case.
IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
bad_msg.WriteInt(99);
- iter = NULL;
+ iter = PickleIterator(bad_msg);
EXPECT_FALSE(IPC::ReadParam(&bad_msg, &iter, &output));
}
@@ -159,7 +159,7 @@ TEST(IPCMessageTest, DictionaryValue) {
IPC::WriteParam(&msg, input);
DictionaryValue output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output));
EXPECT_TRUE(input.Equals(&output));
@@ -167,7 +167,7 @@ TEST(IPCMessageTest, DictionaryValue) {
// Also test the corrupt case.
IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
bad_msg.WriteInt(99);
- iter = NULL;
+ iter = PickleIterator(bad_msg);
EXPECT_FALSE(IPC::ReadParam(&bad_msg, &iter, &output));
}
@@ -179,7 +179,7 @@ TEST(IPCMessageTest, HostPortPair) {
IPC::ParamTraits<net::HostPortPair>::Write(&msg, input);
net::HostPortPair output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ParamTraits<net::HostPortPair>::Read(&msg, &iter, &output));
EXPECT_EQ(input.host(), output.host());
EXPECT_EQ(input.port(), output.port());
diff --git a/chrome/common/content_settings_pattern.cc b/chrome/common/content_settings_pattern.cc
index 1eb0697..8008cba 100644
--- a/chrome/common/content_settings_pattern.cc
+++ b/chrome/common/content_settings_pattern.cc
@@ -403,7 +403,7 @@ void ContentSettingsPattern::WriteToMessage(IPC::Message* m) const {
}
bool ContentSettingsPattern::ReadFromMessage(const IPC::Message* m,
- void** iter) {
+ PickleIterator* iter) {
return IPC::ReadParam(m, iter, &is_valid_) &&
IPC::ReadParam(m, iter, &parts_);
}
diff --git a/chrome/common/content_settings_pattern.h b/chrome/common/content_settings_pattern.h
index d670b78..858d210 100644
--- a/chrome/common/content_settings_pattern.h
+++ b/chrome/common/content_settings_pattern.h
@@ -16,6 +16,8 @@
#include "base/gtest_prod_util.h"
class GURL;
+class Pickle;
+class PickleIterator;
namespace content_settings {
class PatternParser;
@@ -167,7 +169,7 @@ class ContentSettingsPattern {
// Serializes the pattern to an IPC message or deserializes it.
void WriteToMessage(IPC::Message* m) const;
- bool ReadFromMessage(const IPC::Message* m, void** iter);
+ bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter);
// True if this is a valid pattern.
bool IsValid() const { return is_valid_; }
diff --git a/chrome/common/extensions/extension_messages.cc b/chrome/common/extensions/extension_messages.cc
index fd1fa2b..bda807b 100644
--- a/chrome/common/extensions/extension_messages.cc
+++ b/chrome/common/extensions/extension_messages.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -45,7 +45,7 @@ struct ParamTraits<Extension::Location> {
int val = static_cast<int>(p);
WriteParam(m, val);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
int val = 0;
if (!ReadParam(m, iter, &val) ||
val < Extension::INVALID ||
@@ -64,7 +64,7 @@ void ParamTraits<URLPattern>::Write(Message* m, const param_type& p) {
WriteParam(m, p.GetAsString());
}
-bool ParamTraits<URLPattern>::Read(const Message* m, void** iter,
+bool ParamTraits<URLPattern>::Read(const Message* m, PickleIterator* iter,
param_type* p) {
int valid_schemes;
std::string spec;
@@ -91,7 +91,7 @@ void ParamTraits<URLPatternSet>::Write(Message* m, const param_type& p) {
WriteParam(m, p.patterns());
}
-bool ParamTraits<URLPatternSet>::Read(const Message* m, void** iter,
+bool ParamTraits<URLPatternSet>::Read(const Message* m, PickleIterator* iter,
param_type* p) {
std::set<URLPattern> patterns;
if (!ReadParam(m, iter, &patterns))
@@ -113,7 +113,7 @@ void ParamTraits<ExtensionAPIPermission::ID>::Write(
}
bool ParamTraits<ExtensionAPIPermission::ID>::Read(
- const Message* m, void** iter, param_type* p) {
+ const Message* m, PickleIterator* iter, param_type* p) {
int api_id = -2;
if (!ReadParam(m, iter, &api_id))
return false;
@@ -136,7 +136,7 @@ void ParamTraits<ExtensionMsg_Loaded_Params>::Write(Message* m,
}
bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
p->manifest.reset(new DictionaryValue());
return ReadParam(m, iter, &p->location) &&
diff --git a/chrome/common/extensions/extension_messages.h b/chrome/common/extensions/extension_messages.h
index e45d677..276020e 100644
--- a/chrome/common/extensions/extension_messages.h
+++ b/chrome/common/extensions/extension_messages.h
@@ -128,7 +128,7 @@ template <>
struct ParamTraits<URLPattern> {
typedef URLPattern param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -136,7 +136,7 @@ template <>
struct ParamTraits<URLPatternSet> {
typedef URLPatternSet param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -144,7 +144,7 @@ template <>
struct ParamTraits<ExtensionAPIPermission::ID> {
typedef ExtensionAPIPermission::ID param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -152,7 +152,7 @@ template <>
struct ParamTraits<ExtensionMsg_Loaded_Params> {
typedef ExtensionMsg_Loaded_Params param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
diff --git a/chrome/common/extensions/extension_unpacker.cc b/chrome/common/extensions/extension_unpacker.cc
index aded697..a5a1916 100644
--- a/chrome/common/extensions/extension_unpacker.cc
+++ b/chrome/common/extensions/extension_unpacker.cc
@@ -252,7 +252,7 @@ bool ExtensionUnpacker::ReadImagesFromFile(const FilePath& extension_path,
return false;
IPC::Message pickle(file_str.data(), file_str.size());
- void* iter = NULL;
+ PickleIterator iter(pickle);
return IPC::ReadParam(&pickle, &iter, images);
}
@@ -266,7 +266,7 @@ bool ExtensionUnpacker::ReadMessageCatalogsFromFile(
return false;
IPC::Message pickle(file_str.data(), file_str.size());
- void* iter = NULL;
+ PickleIterator iter(pickle);
return IPC::ReadParam(&pickle, &iter, catalogs);
}
diff --git a/chrome/common/extensions/user_script.cc b/chrome/common/extensions/user_script.cc
index d60b421..8fffaa4 100644
--- a/chrome/common/extensions/user_script.cc
+++ b/chrome/common/extensions/user_script.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -89,7 +89,7 @@ void UserScript::File::Pickle(::Pickle* pickle) const {
// Do not write content. It will be serialized by other means.
}
-void UserScript::File::Unpickle(const ::Pickle& pickle, void** iter) {
+void UserScript::File::Unpickle(const ::Pickle& pickle, PickleIterator* iter) {
// Read the url from the pickle.
std::string url;
CHECK(pickle.ReadString(iter, &url));
@@ -140,7 +140,7 @@ void UserScript::PickleScripts(::Pickle* pickle,
}
}
-void UserScript::Unpickle(const ::Pickle& pickle, void** iter) {
+void UserScript::Unpickle(const ::Pickle& pickle, PickleIterator* iter) {
// Read the run location.
int run_location = 0;
CHECK(pickle.ReadInt(iter, &run_location));
@@ -160,7 +160,7 @@ void UserScript::Unpickle(const ::Pickle& pickle, void** iter) {
UnpickleScripts(pickle, iter, &css_scripts_);
}
-void UserScript::UnpickleGlobs(const ::Pickle& pickle, void** iter,
+void UserScript::UnpickleGlobs(const ::Pickle& pickle, PickleIterator* iter,
std::vector<std::string>* globs) {
size_t num_globs = 0;
CHECK(pickle.ReadSize(iter, &num_globs));
@@ -172,7 +172,8 @@ void UserScript::UnpickleGlobs(const ::Pickle& pickle, void** iter,
}
}
-void UserScript::UnpickleURLPatternSet(const ::Pickle& pickle, void** iter,
+void UserScript::UnpickleURLPatternSet(const ::Pickle& pickle,
+ PickleIterator* iter,
URLPatternSet* pattern_list) {
size_t num_patterns = 0;
CHECK(pickle.ReadSize(iter, &num_patterns));
@@ -199,7 +200,7 @@ void UserScript::UnpickleURLPatternSet(const ::Pickle& pickle, void** iter,
}
}
-void UserScript::UnpickleScripts(const ::Pickle& pickle, void** iter,
+void UserScript::UnpickleScripts(const ::Pickle& pickle, PickleIterator* iter,
FileList* scripts) {
size_t num_files = 0;
CHECK(pickle.ReadSize(iter, &num_files));
diff --git a/chrome/common/extensions/user_script.h b/chrome/common/extensions/user_script.h
index 53147fc..47b0287 100644
--- a/chrome/common/extensions/user_script.h
+++ b/chrome/common/extensions/user_script.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -16,6 +16,7 @@
#include "chrome/common/extensions/url_pattern_set.h"
class Pickle;
+class PickleIterator;
// Represents a user script, either a standalone one, or one that is part of an
// extension.
@@ -82,7 +83,7 @@ class UserScript {
// Serialization support. The content and FilePath members will not be
// serialized!
void Pickle(::Pickle* pickle) const;
- void Unpickle(const ::Pickle& pickle, void** iter);
+ void Unpickle(const ::Pickle& pickle, PickleIterator* iter);
private:
// Where the script file lives on the disk. We keep the path split so that
@@ -187,7 +188,7 @@ class UserScript {
// Deserialize the script from a pickle. Note that this always succeeds
// because presumably we were the one that pickled it, and we did it
// correctly.
- void Unpickle(const ::Pickle& pickle, void** iter);
+ void Unpickle(const ::Pickle& pickle, PickleIterator* iter);
private:
// Pickle helper functions used to pickle the individual types of components.
@@ -198,11 +199,11 @@ class UserScript {
void PickleScripts(::Pickle* pickle, const FileList& scripts) const;
// Unpickle helper functions used to unpickle individual types of components.
- void UnpickleGlobs(const ::Pickle& pickle, void** iter,
+ void UnpickleGlobs(const ::Pickle& pickle, PickleIterator* iter,
std::vector<std::string>* globs);
- void UnpickleURLPatternSet(const ::Pickle& pickle, void** iter,
+ void UnpickleURLPatternSet(const ::Pickle& pickle, PickleIterator* iter,
URLPatternSet* pattern_list);
- void UnpickleScripts(const ::Pickle& pickle, void** iter,
+ void UnpickleScripts(const ::Pickle& pickle, PickleIterator* iter,
FileList* scripts);
// The location to run the script inside the document.
diff --git a/chrome/common/extensions/user_script_unittest.cc b/chrome/common/extensions/user_script_unittest.cc
index 1afe6ab..51e9b31 100644
--- a/chrome/common/extensions/user_script_unittest.cc
+++ b/chrome/common/extensions/user_script_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -189,7 +189,7 @@ TEST(ExtensionUserScriptTest, Pickle) {
Pickle pickle;
script1.Pickle(&pickle);
- void* iter = NULL;
+ PickleIterator iter(pickle);
UserScript script2;
script2.Unpickle(pickle, &iter);
diff --git a/chrome/common/render_messages.cc b/chrome/common/render_messages.cc
index 726f082..ce17fa3 100644
--- a/chrome/common/render_messages.cc
+++ b/chrome/common/render_messages.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -12,7 +12,7 @@ void ParamTraits<ContentSettingsPattern>::Write(
}
bool ParamTraits<ContentSettingsPattern>::Read(
- const Message* m, void** iter, ContentSettingsPattern* pattern) {
+ const Message* m, PickleIterator* iter, ContentSettingsPattern* pattern) {
return pattern->ReadFromMessage(m, iter);
}
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index d6186b7..44933a6 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -85,7 +85,7 @@ struct ParamTraits<gfx::NativeView> {
NOTIMPLEMENTED();
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
NOTIMPLEMENTED();
*p = NULL;
return true;
@@ -102,7 +102,7 @@ template <>
struct ParamTraits<ContentSettingsPattern> {
typedef ContentSettingsPattern param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
diff --git a/chrome/renderer/extensions/user_script_slave.cc b/chrome/renderer/extensions/user_script_slave.cc
index c064197..6aa7171 100644
--- a/chrome/renderer/extensions/user_script_slave.cc
+++ b/chrome/renderer/extensions/user_script_slave.cc
@@ -155,10 +155,10 @@ bool UserScriptSlave::UpdateScripts(base::SharedMemoryHandle shared_memory) {
return false;
// Unpickle scripts.
- void* iter = NULL;
size_t num_scripts = 0;
Pickle pickle(reinterpret_cast<char*>(shared_memory_->memory()),
pickle_size);
+ PickleIterator iter(pickle);
pickle.ReadSize(&iter, &num_scripts);
scripts_.reserve(num_scripts);
diff --git a/chrome/test/automation/automation_proxy.cc b/chrome/test/automation/automation_proxy.cc
index fdfc5eb..3cdad28 100644
--- a/chrome/test/automation/automation_proxy.cc
+++ b/chrome/test/automation/automation_proxy.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -79,7 +79,7 @@ class AutomationMessageFilter : public IPC::ChannelProxy::MessageFilter {
void OnAutomationHello(const IPC::Message& hello_message) {
std::string server_version;
- void* iter = NULL;
+ PickleIterator iter(hello_message);
if (!hello_message.ReadString(&iter, &server_version)) {
// We got an AutomationMsg_Hello from an old automation provider
// that doesn't send version info. Leave server_version as an empty
@@ -462,7 +462,7 @@ bool AutomationProxy::Send(IPC::Message* message, int timeout_ms) {
}
void AutomationProxy::InvalidateHandle(const IPC::Message& message) {
- void* iter = NULL;
+ PickleIterator iter(message);
int handle;
if (message.ReadInt(&iter, &handle)) {
diff --git a/chrome/test/automation/automation_proxy_uitest.cc b/chrome/test/automation/automation_proxy_uitest.cc
index a1768f4..403836b 100644
--- a/chrome/test/automation/automation_proxy_uitest.cc
+++ b/chrome/test/automation/automation_proxy_uitest.cc
@@ -757,7 +757,7 @@ void ExternalTabUITestMockClient::IgnoreFaviconNetworkRequest() {
void ExternalTabUITestMockClient::InvalidateHandle(
const IPC::Message& message) {
- void* iter = NULL;
+ PickleIterator iter(message);
int handle;
ASSERT_TRUE(message.ReadInt(&iter, &handle));
diff --git a/chrome_frame/cfproxy_support.cc b/chrome_frame/cfproxy_support.cc
index 903397d..0e5e966 100644
--- a/chrome_frame/cfproxy_support.cc
+++ b/chrome_frame/cfproxy_support.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -32,7 +32,7 @@ void DispatchReplyFail(uint32 type,
bool DispatchReplyOk(const IPC::Message* reply_msg, uint32 type,
ChromeProxyDelegate* delegate, SyncMessageContext* ctx,
TabsMap* tab2delegate) {
- void* iter = IPC::SyncMessage::GetDataIterator(reply_msg);
+ PickleIterator iter = IPC::SyncMessage::GetDataIterator(reply_msg);
switch (type) {
case AutomationMsg_CreateExternalTab::ID: {
// Tuple4<HWND, HWND, int, int> out;
diff --git a/content/browser/download/base_file.cc b/content/browser/download/base_file.cc
index f7d045d2..4564548 100644
--- a/content/browser/download/base_file.cc
+++ b/content/browser/download/base_file.cc
@@ -455,9 +455,9 @@ bool BaseFile::SetHashState(const std::string& hash_state_bytes) {
return false;
Pickle hash_state(hash_state_bytes.c_str(), hash_state_bytes.size());
- void* data_iterator = NULL;
+ PickleIterator data_iterator(hash_state);
- return secure_hash_->Deserialize(&data_iterator, &hash_state);
+ return secure_hash_->Deserialize(&data_iterator);
}
bool BaseFile::IsEmptyHash(const std::string& hash) {
diff --git a/content/browser/renderer_host/render_sandbox_host_linux.cc b/content/browser/renderer_host/render_sandbox_host_linux.cc
index 9fb2ad3..ea40db2 100644
--- a/content/browser/renderer_host/render_sandbox_host_linux.cc
+++ b/content/browser/renderer_host/render_sandbox_host_linux.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -124,7 +124,7 @@ class SandboxIPCProcess {
return;
Pickle pickle(buf, len);
- void* iter = NULL;
+ PickleIterator iter(pickle);
int kind;
if (!pickle.ReadInt(&iter, &kind))
@@ -155,7 +155,7 @@ class SandboxIPCProcess {
}
}
- void HandleFontMatchRequest(int fd, const Pickle& pickle, void* iter,
+ void HandleFontMatchRequest(int fd, const Pickle& pickle, PickleIterator iter,
std::vector<int>& fds) {
bool filefaceid_valid;
uint32_t filefaceid;
@@ -207,7 +207,7 @@ class SandboxIPCProcess {
SendRendererReply(fds, reply, -1);
}
- void HandleFontOpenRequest(int fd, const Pickle& pickle, void* iter,
+ void HandleFontOpenRequest(int fd, const Pickle& pickle, PickleIterator iter,
std::vector<int>& fds) {
uint32_t filefaceid;
if (!pickle.ReadUInt32(&iter, &filefaceid))
@@ -227,7 +227,8 @@ class SandboxIPCProcess {
close(result_fd);
}
- void HandleGetFontFamilyForChars(int fd, const Pickle& pickle, void* iter,
+ void HandleGetFontFamilyForChars(int fd, const Pickle& pickle,
+ PickleIterator iter,
std::vector<int>& fds) {
// The other side of this call is
// chrome/renderer/renderer_sandbox_support_linux.cc
@@ -278,7 +279,8 @@ class SandboxIPCProcess {
SendRendererReply(fds, reply, -1);
}
- void HandleGetStyleForStrike(int fd, const Pickle& pickle, void* iter,
+ void HandleGetStyleForStrike(int fd, const Pickle& pickle,
+ PickleIterator iter,
std::vector<int>& fds) {
std::string family;
int sizeAndStyle;
@@ -303,7 +305,7 @@ class SandboxIPCProcess {
SendRendererReply(fds, reply, -1);
}
- void HandleLocaltime(int fd, const Pickle& pickle, void* iter,
+ void HandleLocaltime(int fd, const Pickle& pickle, PickleIterator iter,
std::vector<int>& fds) {
// The other side of this call is in zygote_main_linux.cc
@@ -333,7 +335,8 @@ class SandboxIPCProcess {
SendRendererReply(fds, reply, -1);
}
- void HandleGetChildWithInode(int fd, const Pickle& pickle, void* iter,
+ void HandleGetChildWithInode(int fd, const Pickle& pickle,
+ PickleIterator iter,
std::vector<int>& fds) {
// The other side of this call is in zygote_main_linux.cc
if (sandbox_cmd_.empty()) {
@@ -365,7 +368,8 @@ class SandboxIPCProcess {
SendRendererReply(fds, reply, -1);
}
- void HandleMakeSharedMemorySegment(int fd, const Pickle& pickle, void* iter,
+ void HandleMakeSharedMemorySegment(int fd, const Pickle& pickle,
+ PickleIterator iter,
std::vector<int>& fds) {
base::SharedMemoryCreateOptions options;
if (!pickle.ReadUInt32(&iter, &options.size))
@@ -380,7 +384,8 @@ class SandboxIPCProcess {
SendRendererReply(fds, reply, shm_fd);
}
- void HandleMatchWithFallback(int fd, const Pickle& pickle, void* iter,
+ void HandleMatchWithFallback(int fd, const Pickle& pickle,
+ PickleIterator iter,
std::vector<int>& fds) {
// Unlike the other calls, for which we are an indirection in front of
// WebKit or Skia, this call is always made via this sandbox helper
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 5f88047..d47bc65 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -962,7 +962,7 @@ void RenderViewHostImpl::OnMsgRenderViewGone(int status, int exit_code) {
void RenderViewHostImpl::OnMsgNavigate(const IPC::Message& msg) {
// Read the parameters out of the IPC message directly to avoid making another
// copy when we filter the URLs.
- void* iter = NULL;
+ PickleIterator iter(msg);
ViewHostMsg_FrameNavigate_Params validated_params;
if (!IPC::ParamTraits<ViewHostMsg_FrameNavigate_Params>::
Read(&msg, &iter, &validated_params))
diff --git a/content/browser/renderer_host/resource_dispatcher_host_unittest.cc b/content/browser/renderer_host/resource_dispatcher_host_unittest.cc
index 33723d2..65b2f3c 100644
--- a/content/browser/renderer_host/resource_dispatcher_host_unittest.cc
+++ b/content/browser/renderer_host/resource_dispatcher_host_unittest.cc
@@ -55,7 +55,7 @@ void GetResponseHead(const std::vector<IPC::Message>& messages,
// The first messages should be received response.
ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, messages[0].type());
- void* iter = NULL;
+ PickleIterator iter(messages[0]);
int request_id;
ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, &request_id));
ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, response_head));
@@ -539,7 +539,7 @@ void CheckSuccessfulRequest(const std::vector<IPC::Message>& messages,
// should probably test multiple chunks later
ASSERT_EQ(ResourceMsg_DataReceived::ID, messages[1].type());
- void* iter = NULL;
+ PickleIterator iter(messages[1]);
int request_id;
ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &request_id));
base::SharedMemoryHandle shm_handle;
@@ -618,7 +618,7 @@ TEST_F(ResourceDispatcherHostTest, Cancel) {
int request_id;
net::URLRequestStatus status;
- void* iter = NULL;
+ PickleIterator iter(msgs[1][1]);
ASSERT_TRUE(IPC::ReadParam(&msgs[1][1], &iter, &request_id));
ASSERT_TRUE(IPC::ReadParam(&msgs[1][1], &iter, &status));
@@ -695,7 +695,7 @@ TEST_F(ResourceDispatcherHostTest, PausedCancel) {
int request_id;
net::URLRequestStatus status;
- void* iter = NULL;
+ PickleIterator iter(msgs[0][1]);
ASSERT_TRUE(IPC::ReadParam(&msgs[0][1], &iter, &request_id));
ASSERT_TRUE(IPC::ReadParam(&msgs[0][1], &iter, &status));
@@ -1069,7 +1069,7 @@ TEST_F(ResourceDispatcherHostTest, TooManyOutstandingRequests) {
int request_id;
net::URLRequestStatus status;
- void* iter = NULL;
+ PickleIterator iter(msgs[index][0]);
EXPECT_TRUE(IPC::ReadParam(&msgs[index][0], &iter, &request_id));
EXPECT_TRUE(IPC::ReadParam(&msgs[index][0], &iter, &status));
@@ -1233,7 +1233,7 @@ TEST_F(ResourceDispatcherHostTest, ForbiddenDownload) {
int request_id;
net::URLRequestStatus status;
- void* iter = NULL;
+ PickleIterator iter(msgs[0][0]);
EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &request_id));
EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &status));
@@ -1387,7 +1387,7 @@ TEST_F(ResourceDispatcherHostTest, UnknownURLScheme) {
int request_id;
net::URLRequestStatus status;
- void* iter = NULL;
+ PickleIterator iter(msgs[0][0]);
EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &request_id));
EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &status));
diff --git a/content/browser/zygote_host_impl_linux.cc b/content/browser/zygote_host_impl_linux.cc
index 7a1818d..7be97ed 100644
--- a/content/browser/zygote_host_impl_linux.cc
+++ b/content/browser/zygote_host_impl_linux.cc
@@ -278,7 +278,7 @@ pid_t ZygoteHostImpl::ForkRequest(
const ssize_t len = ReadReply(buf, sizeof(buf));
Pickle reply_pickle(buf, len);
- void* iter = NULL;
+ PickleIterator iter(reply_pickle);
if (len <= 0 || !reply_pickle.ReadInt(&iter, &pid))
return base::kNullProcessHandle;
@@ -437,7 +437,7 @@ base::TerminationStatus ZygoteHostImpl::GetTerminationStatus(
Pickle read_pickle(buf, len);
int status, tmp_exit_code;
- void* iter = NULL;
+ PickleIterator iter(read_pickle);
if (!read_pickle.ReadInt(&iter, &status) ||
!read_pickle.ReadInt(&iter, &tmp_exit_code)) {
LOG(WARNING) << "Error parsing GetTerminationStatus response from zygote.";
diff --git a/content/browser/zygote_main_linux.cc b/content/browser/zygote_main_linux.cc
index c073cc7..e1dbf1c 100644
--- a/content/browser/zygote_main_linux.cc
+++ b/content/browser/zygote_main_linux.cc
@@ -169,7 +169,7 @@ class Zygote {
}
Pickle pickle(buf, len);
- void* iter = NULL;
+ PickleIterator iter(pickle);
int kind;
if (pickle.ReadInt(&iter, &kind)) {
@@ -204,7 +204,7 @@ class Zygote {
return false;
}
- void HandleReapRequest(int fd, const Pickle& pickle, void* iter) {
+ void HandleReapRequest(int fd, const Pickle& pickle, PickleIterator iter) {
base::ProcessId child;
base::ProcessId actual_child;
@@ -225,7 +225,9 @@ class Zygote {
base::EnsureProcessTerminated(actual_child);
}
- void HandleGetTerminationStatus(int fd, const Pickle& pickle, void* iter) {
+ void HandleGetTerminationStatus(int fd,
+ const Pickle& pickle,
+ PickleIterator iter) {
base::ProcessHandle child;
if (!pickle.ReadInt(&iter, &child)) {
@@ -347,7 +349,7 @@ class Zygote {
}
Pickle reply(reinterpret_cast<char*>(reply_buf), r);
- void* iter = NULL;
+ PickleIterator iter(reply);
if (!reply.ReadInt(&iter, &real_pid))
goto error;
if (real_pid <= 0) {
@@ -393,7 +395,7 @@ class Zygote {
// Returns -1 on error, otherwise returns twice, returning 0 to the child
// process and the child process ID to the parent process, like fork().
base::ProcessId ReadArgsAndFork(const Pickle& pickle,
- void* iter,
+ PickleIterator iter,
std::vector<int>& fds,
std::string* uma_name,
int* uma_sample,
@@ -486,7 +488,7 @@ class Zygote {
// otherwise writes the child_pid back to the browser via |fd|. Writes a
// child_pid of -1 on error.
bool HandleForkRequest(int fd, const Pickle& pickle,
- void* iter, std::vector<int>& fds) {
+ PickleIterator iter, std::vector<int>& fds) {
std::string uma_name;
int uma_sample;
int uma_boundary_value;
@@ -521,7 +523,9 @@ class Zygote {
return false;
}
- bool HandleGetSandboxStatus(int fd, const Pickle& pickle, void* iter) {
+ bool HandleGetSandboxStatus(int fd,
+ const Pickle& pickle,
+ PickleIterator iter) {
if (HANDLE_EINTR(write(fd, &sandbox_flags_, sizeof(sandbox_flags_)) !=
sizeof(sandbox_flags_))) {
PLOG(ERROR) << "write";
@@ -567,7 +571,7 @@ static void ProxyLocaltimeCallToBrowser(time_t input, struct tm* output,
}
Pickle reply(reinterpret_cast<char*>(reply_buf), r);
- void* iter = NULL;
+ PickleIterator iter(reply);
std::string result, timezone;
if (!reply.ReadString(&iter, &result) ||
!reply.ReadString(&iter, &timezone) ||
diff --git a/content/common/child_process_sandbox_support_impl_linux.cc b/content/common/child_process_sandbox_support_impl_linux.cc
index 9040cd0..bd9a7f2 100644
--- a/content/common/child_process_sandbox_support_impl_linux.cc
+++ b/content/common/child_process_sandbox_support_impl_linux.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -36,7 +36,7 @@ void GetFontFamilyForCharacters(const uint16_t* utf16,
bool isItalic = false;
if (n != -1) {
Pickle reply(reinterpret_cast<char*>(buf), n);
- void* pickle_iter = NULL;
+ PickleIterator pickle_iter(reply);
if (reply.ReadString(&pickle_iter, &family_name) &&
reply.ReadBool(&pickle_iter, &isBold) &&
reply.ReadBool(&pickle_iter, &isItalic)) {
@@ -64,7 +64,7 @@ void GetRenderStyleForStrike(const char* family, int sizeAndStyle,
}
Pickle reply(reinterpret_cast<char*>(buf), n);
- void* pickle_iter = NULL;
+ PickleIterator pickle_iter(reply);
int useBitmaps, useAutoHint, useHinting, hintStyle, useAntiAlias, useSubpixel;
if (reply.ReadInt(&pickle_iter, &useBitmaps) &&
reply.ReadInt(&pickle_iter, &useAutoHint) &&
diff --git a/content/common/clipboard_messages.cc b/content/common/clipboard_messages.cc
index 866a1c1..cae2f46 100644
--- a/content/common/clipboard_messages.cc
+++ b/content/common/clipboard_messages.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -14,7 +14,7 @@ void ParamTraits<ui::Clipboard::FormatType>::Write(
}
bool ParamTraits<ui::Clipboard::FormatType>::Read(
- const Message* m, void** iter, param_type* r) {
+ const Message* m, PickleIterator* iter, param_type* r) {
std::string serialization;
if (!ReadParam(m, iter, &serialization))
return false;
diff --git a/content/common/clipboard_messages.h b/content/common/clipboard_messages.h
index 91d1ad6..6a4cf6c5 100644
--- a/content/common/clipboard_messages.h
+++ b/content/common/clipboard_messages.h
@@ -24,7 +24,7 @@ template<>
struct ParamTraits<ui::Clipboard::FormatType> {
typedef ui::Clipboard::FormatType param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
diff --git a/content/common/font_config_ipc_linux.cc b/content/common/font_config_ipc_linux.cc
index c7c6073..13ea2296 100644
--- a/content/common/font_config_ipc_linux.cc
+++ b/content/common/font_config_ipc_linux.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -53,7 +53,7 @@ bool FontConfigIPC::Match(std::string* result_family,
return false;
Pickle reply(reinterpret_cast<char*>(reply_buf), r);
- void* iter = NULL;
+ PickleIterator iter(reply);
bool result;
if (!reply.ReadBool(&iter, &result))
return false;
@@ -98,7 +98,7 @@ int FontConfigIPC::Open(unsigned filefaceid) {
Pickle reply(reinterpret_cast<char*>(reply_buf), r);
bool result;
- void* iter = NULL;
+ PickleIterator iter(reply);
if (!reply.ReadBool(&iter, &result) ||
!result) {
if (result_fd)
diff --git a/content/common/indexed_db/indexed_db_param_traits.cc b/content/common/indexed_db/indexed_db_param_traits.cc
index c580cd1..57fca9a 100644
--- a/content/common/indexed_db/indexed_db_param_traits.cc
+++ b/content/common/indexed_db/indexed_db_param_traits.cc
@@ -19,7 +19,7 @@ void ParamTraits<content::SerializedScriptValue>::Write(Message* m,
}
bool ParamTraits<content::SerializedScriptValue>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
bool is_null;
bool is_invalid;
@@ -70,7 +70,7 @@ void ParamTraits<IndexedDBKey>::Write(Message* m, const param_type& p) {
}
bool ParamTraits<IndexedDBKey>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
int type;
if (!ReadParam(m, iter, &type))
@@ -149,7 +149,7 @@ void ParamTraits<IndexedDBKeyRange>::Write(Message* m, const param_type& p) {
}
bool ParamTraits<IndexedDBKeyRange>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
IndexedDBKey lower;
diff --git a/content/common/indexed_db/indexed_db_param_traits.h b/content/common/indexed_db/indexed_db_param_traits.h
index 930ed0b..3dfd5b8 100644
--- a/content/common/indexed_db/indexed_db_param_traits.h
+++ b/content/common/indexed_db/indexed_db_param_traits.h
@@ -27,7 +27,7 @@ template <>
struct ParamTraits<content::SerializedScriptValue> {
typedef content::SerializedScriptValue param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -35,7 +35,7 @@ template <>
struct ParamTraits<IndexedDBKey> {
typedef IndexedDBKey param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -43,7 +43,7 @@ template <>
struct ParamTraits<IndexedDBKeyRange> {
typedef IndexedDBKeyRange param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
diff --git a/content/common/mac/attributed_string_coder.h b/content/common/mac/attributed_string_coder.h
index 054cb45..0da8a9b 100644
--- a/content/common/mac/attributed_string_coder.h
+++ b/content/common/mac/attributed_string_coder.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -102,7 +102,7 @@ template <>
struct ParamTraits<mac::AttributedStringCoder::EncodedString> {
typedef mac::AttributedStringCoder::EncodedString param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -110,7 +110,7 @@ template <>
struct ParamTraits<mac::AttributedStringCoder::FontAttribute> {
typedef mac::AttributedStringCoder::FontAttribute param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
diff --git a/content/common/mac/attributed_string_coder.mm b/content/common/mac/attributed_string_coder.mm
index 706368d..78a1efb 100644
--- a/content/common/mac/attributed_string_coder.mm
+++ b/content/common/mac/attributed_string_coder.mm
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -126,7 +126,7 @@ void ParamTraits<AttributedStringCoder::EncodedString>::Write(
}
bool ParamTraits<AttributedStringCoder::EncodedString>::Read(
- const Message* m, void** iter, param_type* p) {
+ const Message* m, PickleIterator* iter, param_type* p) {
bool success = true;
string16 result;
@@ -149,7 +149,7 @@ void ParamTraits<AttributedStringCoder::FontAttribute>::Write(
}
bool ParamTraits<AttributedStringCoder::FontAttribute>::Read(
- const Message* m, void** iter, param_type* p) {
+ const Message* m, PickleIterator* iter, param_type* p) {
bool success = true;
FontDescriptor font;
diff --git a/content/common/pepper_file_messages.cc b/content/common/pepper_file_messages.cc
index 7986c62..313c2b7 100644
--- a/content/common/pepper_file_messages.cc
+++ b/content/common/pepper_file_messages.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -13,7 +13,7 @@ void ParamTraits<webkit::ppapi::PepperFilePath>::Write(Message* m,
}
bool ParamTraits<webkit::ppapi::PepperFilePath>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
unsigned domain;
FilePath path;
diff --git a/content/common/pepper_file_messages.h b/content/common/pepper_file_messages.h
index 941824d..d202d53 100644
--- a/content/common/pepper_file_messages.h
+++ b/content/common/pepper_file_messages.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -20,7 +20,7 @@ template <>
struct ParamTraits<webkit::ppapi::PepperFilePath> {
typedef webkit::ppapi::PepperFilePath param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
diff --git a/content/common/resource_dispatcher.cc b/content/common/resource_dispatcher.cc
index e824c6f..69937ef 100644
--- a/content/common/resource_dispatcher.cc
+++ b/content/common/resource_dispatcher.cc
@@ -293,7 +293,7 @@ bool ResourceDispatcher::OnMessageReceived(const IPC::Message& message) {
int request_id;
- void* iter = NULL;
+ PickleIterator iter(message);
if (!message.ReadInt(&iter, &request_id)) {
NOTREACHED() << "malformed resource message";
return true;
@@ -677,7 +677,7 @@ bool ResourceDispatcher::IsResourceDispatcherMessage(
// static
void ResourceDispatcher::ReleaseResourcesInDataMessage(
const IPC::Message& message) {
- void* iter = NULL;
+ PickleIterator iter(message);
int request_id;
if (!message.ReadInt(&iter, &request_id)) {
NOTREACHED() << "malformed resource message";
diff --git a/content/common/ssl_status_serialization.cc b/content/common/ssl_status_serialization.cc
index fdd6406..87593a5 100644
--- a/content/common/ssl_status_serialization.cc
+++ b/content/common/ssl_status_serialization.cc
@@ -38,7 +38,7 @@ bool DeserializeSecurityInfo(const std::string& state,
}
Pickle pickle(state.data(), static_cast<int>(state.size()));
- void * iter = NULL;
+ PickleIterator iter(pickle);
return pickle.ReadInt(&iter, cert_id) &&
pickle.ReadUInt32(&iter, cert_status) &&
pickle.ReadInt(&iter, security_bits) &&
diff --git a/content/ppapi_plugin/ppapi_thread.cc b/content/ppapi_plugin/ppapi_thread.cc
index 8ef6d6b..6450cf8 100644
--- a/content/ppapi_plugin/ppapi_thread.cc
+++ b/content/ppapi_plugin/ppapi_thread.cc
@@ -256,7 +256,7 @@ void PpapiThread::OnMsgSetNetworkState(bool online) {
void PpapiThread::OnPluginDispatcherMessageReceived(const IPC::Message& msg) {
// The first parameter should be a plugin dispatcher ID.
- void* iter = NULL;
+ PickleIterator iter(msg);
uint32 id = 0;
if (!msg.ReadUInt32(&iter, &id)) {
NOTREACHED();
diff --git a/content/public/common/common_param_traits.cc b/content/public/common/common_param_traits.cc
index 22bb7a9..0477833 100644
--- a/content/public/common/common_param_traits.cc
+++ b/content/public/common/common_param_traits.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -55,7 +55,7 @@ void ParamTraits<GURL>::Write(Message* m, const GURL& p) {
// TODO(brettw) bug 684583: Add encoding for query params.
}
-bool ParamTraits<GURL>::Read(const Message* m, void** iter, GURL* p) {
+bool ParamTraits<GURL>::Read(const Message* m, PickleIterator* iter, GURL* p) {
std::string s;
if (!m->ReadString(iter, &s) || s.length() > content::kMaxURLChars) {
*p = GURL();
@@ -74,7 +74,7 @@ void ParamTraits<ResourceType::Type>::Write(Message* m, const param_type& p) {
}
bool ParamTraits<ResourceType::Type>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
int type;
if (!m->ReadInt(iter, &type) || !ResourceType::ValidType(type))
@@ -145,7 +145,8 @@ void ParamTraits<net::URLRequestStatus>::Write(Message* m,
WriteParam(m, p.error());
}
-bool ParamTraits<net::URLRequestStatus>::Read(const Message* m, void** iter,
+bool ParamTraits<net::URLRequestStatus>::Read(const Message* m,
+ PickleIterator* iter,
param_type* r) {
int status, error;
if (!ReadParam(m, iter, &status) || !ReadParam(m, iter, &error))
@@ -237,7 +238,7 @@ struct ParamTraits<net::UploadData::Element> {
}
}
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
int type;
if (!ReadParam(m, iter, &type))
return false;
@@ -308,7 +309,7 @@ void ParamTraits<scoped_refptr<net::UploadData> >::Write(Message* m,
}
bool ParamTraits<scoped_refptr<net::UploadData> >::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
bool has_object;
if (!ReadParam(m, iter, &has_object))
@@ -341,7 +342,8 @@ void ParamTraits<net::HostPortPair>::Write(Message* m, const param_type& p) {
WriteParam(m, p.port());
}
-bool ParamTraits<net::HostPortPair>::Read(const Message* m, void** iter,
+bool ParamTraits<net::HostPortPair>::Read(const Message* m,
+ PickleIterator* iter,
param_type* r) {
std::string host;
uint16 port;
@@ -367,7 +369,7 @@ void ParamTraits<scoped_refptr<net::HttpResponseHeaders> >::Write(
}
bool ParamTraits<scoped_refptr<net::HttpResponseHeaders> >::Read(
- const Message* m, void** iter, param_type* r) {
+ const Message* m, PickleIterator* iter, param_type* r) {
bool has_object;
if (!ReadParam(m, iter, &has_object))
return false;
@@ -386,7 +388,7 @@ void ParamTraits<net::IPEndPoint>::Write(Message* m, const param_type& p) {
WriteParam(m, p.port());
}
-bool ParamTraits<net::IPEndPoint>::Read(const Message* m, void** iter,
+bool ParamTraits<net::IPEndPoint>::Read(const Message* m, PickleIterator* iter,
param_type* p) {
net::IPAddressNumber address;
int port;
@@ -410,7 +412,7 @@ void ParamTraits<base::PlatformFileInfo>::Write(
}
bool ParamTraits<base::PlatformFileInfo>::Read(
- const Message* m, void** iter, param_type* p) {
+ const Message* m, PickleIterator* iter, param_type* p) {
double last_modified;
double last_accessed;
double creation_time;
@@ -448,7 +450,7 @@ void ParamTraits<gfx::Point>::Write(Message* m, const gfx::Point& p) {
m->WriteInt(p.y());
}
-bool ParamTraits<gfx::Point>::Read(const Message* m, void** iter,
+bool ParamTraits<gfx::Point>::Read(const Message* m, PickleIterator* iter,
gfx::Point* r) {
int x, y;
if (!m->ReadInt(iter, &x) ||
@@ -468,7 +470,9 @@ void ParamTraits<gfx::Size>::Write(Message* m, const gfx::Size& p) {
m->WriteInt(p.height());
}
-bool ParamTraits<gfx::Size>::Read(const Message* m, void** iter, gfx::Size* r) {
+bool ParamTraits<gfx::Size>::Read(const Message* m,
+ PickleIterator* iter,
+ gfx::Size* r) {
int w, h;
if (!m->ReadInt(iter, &w) ||
!m->ReadInt(iter, &h))
@@ -489,7 +493,9 @@ void ParamTraits<gfx::Rect>::Write(Message* m, const gfx::Rect& p) {
m->WriteInt(p.height());
}
-bool ParamTraits<gfx::Rect>::Read(const Message* m, void** iter, gfx::Rect* r) {
+bool ParamTraits<gfx::Rect>::Read(const Message* m,
+ PickleIterator* iter,
+ gfx::Rect* r) {
int x, y, w, h;
if (!m->ReadInt(iter, &x) ||
!m->ReadInt(iter, &y) ||
@@ -513,7 +519,9 @@ void ParamTraits<ui::Range>::Write(Message* m, const ui::Range& r) {
m->WriteSize(r.end());
}
-bool ParamTraits<ui::Range>::Read(const Message* m, void** iter, ui::Range* r) {
+bool ParamTraits<ui::Range>::Read(const Message* m,
+ PickleIterator* iter,
+ ui::Range* r) {
size_t start, end;
if (!m->ReadSize(iter, &start) || !m->ReadSize(iter, &end))
return false;
@@ -538,7 +546,9 @@ void ParamTraits<SkBitmap>::Write(Message* m, const SkBitmap& p) {
static_cast<int>(pixel_size));
}
-bool ParamTraits<SkBitmap>::Read(const Message* m, void** iter, SkBitmap* r) {
+bool ParamTraits<SkBitmap>::Read(const Message* m,
+ PickleIterator* iter,
+ SkBitmap* r) {
const char* fixed_data;
int fixed_data_size = 0;
if (!m->ReadData(iter, &fixed_data, &fixed_data_size) ||
diff --git a/content/public/common/common_param_traits.h b/content/public/common/common_param_traits.h
index c768e3d..6afb2fd 100644
--- a/content/public/common/common_param_traits.h
+++ b/content/public/common/common_param_traits.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -51,7 +51,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<GURL> {
typedef GURL param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -59,7 +59,7 @@ template <>
struct ParamTraits<ResourceType::Type> {
typedef ResourceType::Type param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -67,7 +67,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<net::URLRequestStatus> {
typedef net::URLRequestStatus param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -75,7 +75,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<scoped_refptr<net::UploadData> > {
typedef scoped_refptr<net::UploadData> param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -83,7 +83,7 @@ template<>
struct CONTENT_EXPORT ParamTraits<net::HostPortPair> {
typedef net::HostPortPair param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -91,7 +91,7 @@ template <>
struct ParamTraits<scoped_refptr<net::HttpResponseHeaders> > {
typedef scoped_refptr<net::HttpResponseHeaders> param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -99,7 +99,7 @@ template <>
struct ParamTraits<net::IPEndPoint> {
typedef net::IPEndPoint param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -107,7 +107,7 @@ template <>
struct ParamTraits<base::PlatformFileInfo> {
typedef base::PlatformFileInfo param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -115,7 +115,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<gfx::Point> {
typedef gfx::Point param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -123,7 +123,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<gfx::Size> {
typedef gfx::Size param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -131,7 +131,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<gfx::Rect> {
typedef gfx::Rect param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -146,7 +146,7 @@ struct ParamTraits<gfx::NativeWindow> {
m->WriteData(reinterpret_cast<const char*>(&p), sizeof(p));
#endif
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
#if defined(OS_WIN)
return m->ReadUInt32(iter, reinterpret_cast<uint32*>(r));
#else
@@ -171,7 +171,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<ui::Range> {
typedef ui::Range param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -183,7 +183,7 @@ struct ParamTraits<TransportDIB::Id> {
WriteParam(m, p.handle);
WriteParam(m, p.sequence_num);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return (ReadParam(m, iter, &r->handle) &&
ReadParam(m, iter, &r->sequence_num));
}
@@ -204,7 +204,7 @@ struct ParamTraits<TransportDIB::Id> {
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.shmkey);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return ReadParam(m, iter, &r->shmkey);
}
static void Log(const param_type& p, std::string* l) {
@@ -222,7 +222,7 @@ struct CONTENT_EXPORT ParamTraits<SkBitmap> {
// Note: This function expects parameter |r| to be of type &SkBitmap since
// r->SetConfig() and r->SetPixels() are called.
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
diff --git a/content/public/common/webkit_param_traits.cc b/content/public/common/webkit_param_traits.cc
index 5d4e059..5d586d8 100644
--- a/content/public/common/webkit_param_traits.cc
+++ b/content/public/common/webkit_param_traits.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -57,7 +57,7 @@ void ParamTraits<webkit_glue::ResourceLoadTimingInfo>::Write(
}
bool ParamTraits<webkit_glue::ResourceLoadTimingInfo>::Read(
- const Message* m, void** iter, param_type* r) {
+ const Message* m, PickleIterator* iter, param_type* r) {
bool is_null;
if (!ReadParam(m, iter, &is_null))
return false;
@@ -128,7 +128,7 @@ void ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> >::Write(
}
bool ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> >::Read(
- const Message* m, void** iter, param_type* r) {
+ const Message* m, PickleIterator* iter, param_type* r) {
bool has_object;
if (!ReadParam(m, iter, &has_object))
return false;
@@ -177,7 +177,7 @@ void ParamTraits<NPVariant_Param>::Write(Message* m, const param_type& p) {
}
bool ParamTraits<NPVariant_Param>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
int type;
if (!ReadParam(m, iter, &type))
@@ -230,9 +230,9 @@ void ParamTraits<NPIdentifier_Param>::Write(Message* m, const param_type& p) {
}
bool ParamTraits<NPIdentifier_Param>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
- return webkit_glue::DeserializeNPIdentifier(*m, iter, &r->identifier);
+ return webkit_glue::DeserializeNPIdentifier(iter, &r->identifier);
}
void ParamTraits<NPIdentifier_Param>::Log(const param_type& p, std::string* l) {
@@ -256,7 +256,7 @@ void ParamTraits<webkit::WebPluginMimeType>::Write(Message* m,
}
bool ParamTraits<webkit::WebPluginMimeType>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
return
ReadParam(m, iter, &p->mime_type) &&
@@ -288,7 +288,7 @@ void ParamTraits<webkit::WebPluginInfo>::Write(Message* m,
}
bool ParamTraits<webkit::WebPluginInfo>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
return
ReadParam(m, iter, &p->name) &&
@@ -328,7 +328,7 @@ void ParamTraits<webkit::forms::PasswordForm>::Write(Message* m,
}
bool ParamTraits<webkit::forms::PasswordForm>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
return
ReadParam(m, iter, &p->signon_realm) &&
diff --git a/content/public/common/webkit_param_traits.h b/content/public/common/webkit_param_traits.h
index 786b8ec..a1e0002 100644
--- a/content/public/common/webkit_param_traits.h
+++ b/content/public/common/webkit_param_traits.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -82,7 +82,7 @@ template <>
struct ParamTraits<webkit_glue::ResourceLoadTimingInfo> {
typedef webkit_glue::ResourceLoadTimingInfo param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -90,7 +90,7 @@ template <>
struct ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> > {
typedef scoped_refptr<webkit_glue::ResourceDevToolsInfo> param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -98,7 +98,7 @@ template <>
struct ParamTraits<NPVariant_Param> {
typedef NPVariant_Param param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -106,7 +106,7 @@ template <>
struct ParamTraits<NPIdentifier_Param> {
typedef NPIdentifier_Param param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -114,7 +114,7 @@ template <>
struct ParamTraits<webkit::WebPluginMimeType> {
typedef webkit::WebPluginMimeType param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -122,7 +122,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<webkit::WebPluginInfo> {
typedef webkit::WebPluginInfo param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -132,8 +132,8 @@ struct ParamTraits<WebCursor> {
static void Write(Message* m, const param_type& p) {
p.Serialize(m);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
- return r->Deserialize(m, iter);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
+ return r->Deserialize(iter);
}
static void Log(const param_type& p, std::string* l) {
l->append("<WebCursor>");
@@ -146,7 +146,7 @@ struct ParamTraits<WebKit::WebInputEvent::Type> {
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
int type;
if (!m->ReadInt(iter, &type))
return false;
@@ -199,7 +199,7 @@ struct ParamTraits<WebInputEventPointer> {
m->WriteData(reinterpret_cast<const char*>(p), p->size);
}
// Note: upon read, the event has the lifetime of the message.
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
const char* data;
int data_length;
if (!m->ReadData(iter, &data, &data_length)) {
@@ -245,7 +245,7 @@ template <>
struct CONTENT_EXPORT ParamTraits<webkit::forms::PasswordForm> {
typedef webkit::forms::PasswordForm param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
diff --git a/content/renderer/gpu/input_event_filter.cc b/content/renderer/gpu/input_event_filter.cc
index a0129ea..81d07ac 100644
--- a/content/renderer/gpu/input_event_filter.cc
+++ b/content/renderer/gpu/input_event_filter.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -93,7 +93,7 @@ const WebInputEvent* InputEventFilter::CrackMessage(
const IPC::Message& message) {
DCHECK(message.type() == ViewMsg_HandleInputEvent::ID);
- void* iter = NULL;
+ PickleIterator iter(message);
const char* data;
int data_length;
if (!message.ReadData(&iter, &data, &data_length))
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index c5c16dc..549331a 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -507,7 +507,7 @@ void RenderWidget::OnSwapBuffersComplete() {
void RenderWidget::OnHandleInputEvent(const IPC::Message& message) {
TRACE_EVENT0("renderer", "RenderWidget::OnHandleInputEvent");
- void* iter = NULL;
+ PickleIterator iter(message);
const char* data;
int data_length;
diff --git a/content/test/mock_render_thread.cc b/content/test/mock_render_thread.cc
index 1663531..ce74409 100644
--- a/content/test/mock_render_thread.cc
+++ b/content/test/mock_render_thread.cc
@@ -24,7 +24,7 @@ void MockRenderThread::VerifyRunJavaScriptMessageSend(
const IPC::Message* alert_msg =
sink_.GetUniqueMessageMatching(ViewHostMsg_RunJavaScriptMessage::ID);
ASSERT_TRUE(alert_msg);
- void* iter = IPC::SyncMessage::GetDataIterator(alert_msg);
+ PickleIterator iter = IPC::SyncMessage::GetDataIterator(alert_msg);
ViewHostMsg_RunJavaScriptMessage::SendParam alert_param;
ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param));
EXPECT_EQ(expected_alert_message, alert_param.a);
diff --git a/crypto/secure_hash.h b/crypto/secure_hash.h
index 4a49380..28b78c1 100644
--- a/crypto/secure_hash.h
+++ b/crypto/secure_hash.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -10,6 +10,7 @@
#include "crypto/crypto_export.h"
class Pickle;
+class PickleIterator;
namespace crypto {
@@ -36,7 +37,7 @@ class CRYPTO_EXPORT SecureHash {
// |data_iterator| allows this to be used as part of a larger pickle.
// |pickle| holds the saved data.
// Returns success or failure.
- virtual bool Deserialize(void** data_iterator, Pickle* pickle) = 0;
+ virtual bool Deserialize(PickleIterator* data_iterator) = 0;
protected:
SecureHash() {}
diff --git a/crypto/secure_hash_default.cc b/crypto/secure_hash_default.cc
index 6607dfe..834a276 100644
--- a/crypto/secure_hash_default.cc
+++ b/crypto/secure_hash_default.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -36,7 +36,7 @@ class SecureHashSHA256NSS : public SecureHash {
}
virtual bool Serialize(Pickle* pickle);
- virtual bool Deserialize(void** data_iterator, Pickle* pickle);
+ virtual bool Deserialize(PickleIterator* data_iterator);
private:
SHA256Context ctx_;
@@ -55,26 +55,23 @@ bool SecureHashSHA256NSS::Serialize(Pickle* pickle) {
return true;
}
-bool SecureHashSHA256NSS::Deserialize(void** data_iterator, Pickle* pickle) {
- if (!pickle)
- return false;
-
+bool SecureHashSHA256NSS::Deserialize(PickleIterator* data_iterator) {
int version;
- if (!pickle->ReadInt(data_iterator, &version))
+ if (!data_iterator->ReadInt(&version))
return false;
if (version > kSecureHashVersion)
return false; // We don't know how to deal with this.
std::string type;
- if (!pickle->ReadString(data_iterator, &type))
+ if (!data_iterator->ReadString(&type))
return false;
if (type != kSHA256Descriptor)
return false; // It's the wrong kind.
const char* data = NULL;
- if (!pickle->ReadBytes(data_iterator, &data, sizeof(ctx_)))
+ if (!data_iterator->ReadBytes(&data, sizeof(ctx_)))
return false;
memcpy(&ctx_, data, sizeof(ctx_));
diff --git a/crypto/secure_hash_openssl.cc b/crypto/secure_hash_openssl.cc
index 098bf27..a542e22 100644
--- a/crypto/secure_hash_openssl.cc
+++ b/crypto/secure_hash_openssl.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -40,7 +40,7 @@ class SecureHashSHA256OpenSSL : public SecureHash {
}
virtual bool Serialize(Pickle* pickle);
- virtual bool Deserialize(void** data_iterator, Pickle* pickle);
+ virtual bool Deserialize(PickleIterator* data_iterator);
private:
SHA256_CTX ctx_;
@@ -59,27 +59,26 @@ bool SecureHashSHA256OpenSSL::Serialize(Pickle* pickle) {
return true;
}
-bool SecureHashSHA256OpenSSL::Deserialize(void** data_iterator,
- Pickle* pickle) {
- if (!pickle)
+bool SecureHashSHA256OpenSSL::Deserialize(PickleIterator* data_iterator) {
+ if (!data_iterator)
return false;
int version;
- if (!pickle->ReadInt(data_iterator, &version))
+ if (!data_iterator->ReadInt(&version))
return false;
if (version > kSecureHashVersion)
return false; // We don't know how to deal with this.
std::string type;
- if (!pickle->ReadString(data_iterator, &type))
+ if (!data_iterator->ReadString(&type))
return false;
if (type != kSHA256Descriptor)
return false; // It's the wrong kind.
const char* data = NULL;
- if (!pickle->ReadBytes(data_iterator, &data, sizeof(ctx_)))
+ if (!data_iterator->ReadBytes(&data, sizeof(ctx_)))
return false;
memcpy(&ctx_, data, sizeof(ctx_));
diff --git a/crypto/secure_hash_unittest.cc b/crypto/secure_hash_unittest.cc
index 2adddfb..42b9ade3 100644
--- a/crypto/secure_hash_unittest.cc
+++ b/crypto/secure_hash_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -62,8 +62,8 @@ TEST(SecureHashTest, TestSerialization) {
ctx1->Finish(output1, sizeof(output1));
- void* data_iterator = NULL;
- EXPECT_TRUE(ctx2->Deserialize(&data_iterator, &pickle));
+ PickleIterator data_iterator(pickle);
+ EXPECT_TRUE(ctx2->Deserialize(&data_iterator));
ctx2->Update(input4.data(), input4.size());
ctx2->Update(input5.data(), input5.size());
diff --git a/gpu/ipc/gpu_command_buffer_traits.cc b/gpu/ipc/gpu_command_buffer_traits.cc
index 66d4189..b502b0fd 100644
--- a/gpu/ipc/gpu_command_buffer_traits.cc
+++ b/gpu/ipc/gpu_command_buffer_traits.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -17,7 +17,7 @@ void ParamTraits<gpu::CommandBuffer::State> ::Write(Message* m,
}
bool ParamTraits<gpu::CommandBuffer::State> ::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
int32 temp;
if (ReadParam(m, iter, &p->num_entries) &&
diff --git a/gpu/ipc/gpu_command_buffer_traits.h b/gpu/ipc/gpu_command_buffer_traits.h
index 12f1306..ac267db 100644
--- a/gpu/ipc/gpu_command_buffer_traits.h
+++ b/gpu/ipc/gpu_command_buffer_traits.h
@@ -15,7 +15,7 @@ template <>
struct GPU_EXPORT ParamTraits<gpu::CommandBuffer::State> {
typedef gpu::CommandBuffer::State param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
diff --git a/ipc/ipc_channel_posix.cc b/ipc/ipc_channel_posix.cc
index 1960cb0..4d6b8a02 100644
--- a/ipc/ipc_channel_posix.cc
+++ b/ipc/ipc_channel_posix.cc
@@ -1126,7 +1126,7 @@ void Channel::ChannelImpl::ClearInputFDs() {
void Channel::ChannelImpl::HandleHelloMessage(const Message& msg) {
// The Hello message contains only the process id.
- void *iter = NULL;
+ PickleIterator iter(msg);
int pid;
if (!msg.ReadInt(&iter, &pid))
NOTREACHED();
diff --git a/ipc/ipc_fuzzing_tests.cc b/ipc/ipc_fuzzing_tests.cc
index 05d177b..aa1fa5f 100644
--- a/ipc/ipc_fuzzing_tests.cc
+++ b/ipc/ipc_fuzzing_tests.cc
@@ -44,7 +44,7 @@ TEST(IPCMessageIntegrity, ReadBeyondBufferStr) {
EXPECT_TRUE(m.WriteInt(v1));
EXPECT_TRUE(m.WriteInt(v2));
- void* iter = NULL;
+ PickleIterator iter(m);
std::string vs;
EXPECT_FALSE(m.ReadString(&iter, &vs));
}
@@ -57,7 +57,7 @@ TEST(IPCMessageIntegrity, ReadBeyondBufferWStr) {
EXPECT_TRUE(m.WriteInt(v1));
EXPECT_TRUE(m.WriteInt(v2));
- void* iter = NULL;
+ PickleIterator iter(m);
std::wstring vs;
EXPECT_FALSE(m.ReadWString(&iter, &vs));
}
@@ -68,7 +68,7 @@ TEST(IPCMessageIntegrity, ReadBytesBadIterator) {
EXPECT_TRUE(m.WriteInt(1));
EXPECT_TRUE(m.WriteInt(2));
- void* iter = NULL;
+ PickleIterator iter(m);
const char* data = NULL;
EXPECT_TRUE(m.ReadBytes(&iter, &data, sizeof(int)));
}
@@ -84,7 +84,7 @@ TEST(IPCMessageIntegrity, ReadVectorNegativeSize) {
EXPECT_TRUE(m.WriteInt(3));
std::vector<double> vec;
- void* iter = 0;
+ PickleIterator iter(m);
EXPECT_FALSE(ReadParam(&m, &iter, &vec));
}
@@ -97,7 +97,7 @@ TEST(IPCMessageIntegrity, ReadVectorTooLarge1) {
EXPECT_TRUE(m.WriteInt64(2));
std::vector<int64> vec;
- void* iter = 0;
+ PickleIterator iter(m);
EXPECT_FALSE(ReadParam(&m, &iter, &vec));
}
@@ -111,7 +111,7 @@ TEST(IPCMessageIntegrity, ReadVectorTooLarge2) {
EXPECT_TRUE(m.WriteInt64(2));
std::vector<int64> vec;
- void* iter = 0;
+ PickleIterator iter(m);
EXPECT_FALSE(ReadParam(&m, &iter, &vec));
}
@@ -212,7 +212,7 @@ class FuzzerClientListener : public SimpleListener {
return false;
int msg_value1 = 0;
int msg_value2 = 0;
- void* iter = NULL;
+ PickleIterator iter(*last_msg_);
if (!last_msg_->ReadInt(&iter, &msg_value1))
return false;
if (!last_msg_->ReadInt(&iter, &msg_value2))
diff --git a/ipc/ipc_logging.cc b/ipc/ipc_logging.cc
index d50766c..b9ca828 100644
--- a/ipc/ipc_logging.cc
+++ b/ipc/ipc_logging.cc
@@ -109,7 +109,7 @@ void Logging::SetIPCSender(IPC::Message::Sender* sender) {
void Logging::OnReceivedLoggingMessage(const Message& message) {
std::vector<LogData> data;
- void* iter = NULL;
+ PickleIterator iter(message);
if (!ReadParam(&message, &iter, &data))
return;
diff --git a/ipc/ipc_message.cc b/ipc/ipc_message.cc
index 703588d0..feec91a 100644
--- a/ipc/ipc_message.cc
+++ b/ipc/ipc_message.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -100,7 +100,7 @@ bool Message::WriteFileDescriptor(const base::FileDescriptor& descriptor) {
}
}
-bool Message::ReadFileDescriptor(void** iter,
+bool Message::ReadFileDescriptor(PickleIterator* iter,
base::FileDescriptor* descriptor) const {
int descriptor_index;
if (!ReadInt(iter, &descriptor_index))
diff --git a/ipc/ipc_message.h b/ipc/ipc_message.h
index b630432..2598c8c 100644
--- a/ipc/ipc_message.h
+++ b/ipc/ipc_message.h
@@ -180,7 +180,8 @@ class IPC_EXPORT Message : public Pickle {
bool WriteFileDescriptor(const base::FileDescriptor& descriptor);
// Get a file descriptor from the message. Returns false on error.
// iter: a Pickle iterator to the current location in the message.
- bool ReadFileDescriptor(void** iter, base::FileDescriptor* descriptor) const;
+ bool ReadFileDescriptor(PickleIterator* iter,
+ base::FileDescriptor* descriptor) const;
#endif
#ifdef IPC_MESSAGE_LOG_ENABLED
diff --git a/ipc/ipc_message_unittest.cc b/ipc/ipc_message_unittest.cc
index 7339e30..2f50ee3 100644
--- a/ipc/ipc_message_unittest.cc
+++ b/ipc/ipc_message_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -21,7 +21,7 @@ TEST(IPCMessageTest, ListValue) {
IPC::WriteParam(&msg, input);
ListValue output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output));
EXPECT_TRUE(input.Equals(&output));
@@ -29,7 +29,7 @@ TEST(IPCMessageTest, ListValue) {
// Also test the corrupt case.
IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
bad_msg.WriteInt(99);
- iter = NULL;
+ iter = PickleIterator(bad_msg);
EXPECT_FALSE(IPC::ReadParam(&bad_msg, &iter, &output));
}
@@ -56,7 +56,7 @@ TEST(IPCMessageTest, DictionaryValue) {
IPC::WriteParam(&msg, input);
DictionaryValue output;
- void* iter = NULL;
+ PickleIterator iter(msg);
EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output));
EXPECT_TRUE(input.Equals(&output));
@@ -64,6 +64,6 @@ TEST(IPCMessageTest, DictionaryValue) {
// Also test the corrupt case.
IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
bad_msg.WriteInt(99);
- iter = NULL;
+ iter = PickleIterator(bad_msg);
EXPECT_FALSE(IPC::ReadParam(&bad_msg, &iter, &output));
}
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
index 03d326b..72437a9 100644
--- a/ipc/ipc_message_utils.cc
+++ b/ipc/ipc_message_utils.cc
@@ -23,7 +23,7 @@ const int kMaxRecursionDepth = 100;
// Value serialization
-static bool ReadValue(const Message* m, void** iter, Value** value,
+static bool ReadValue(const Message* m, PickleIterator* iter, Value** value,
int recursion);
static void WriteValue(Message* m, const Value* value, int recursion) {
@@ -102,7 +102,7 @@ static void WriteValue(Message* m, const Value* value, int recursion) {
// Helper for ReadValue that reads a DictionaryValue into a pre-allocated
// object.
-static bool ReadDictionaryValue(const Message* m, void** iter,
+static bool ReadDictionaryValue(const Message* m, PickleIterator* iter,
DictionaryValue* value, int recursion) {
int size;
if (!ReadParam(m, iter, &size))
@@ -122,7 +122,7 @@ static bool ReadDictionaryValue(const Message* m, void** iter,
// Helper for ReadValue that reads a ReadListValue into a pre-allocated
// object.
-static bool ReadListValue(const Message* m, void** iter,
+static bool ReadListValue(const Message* m, PickleIterator* iter,
ListValue* value, int recursion) {
int size;
if (!ReadParam(m, iter, &size))
@@ -138,7 +138,7 @@ static bool ReadListValue(const Message* m, void** iter,
return true;
}
-static bool ReadValue(const Message* m, void** iter, Value** value,
+static bool ReadValue(const Message* m, PickleIterator* iter, Value** value,
int recursion) {
if (recursion > kMaxRecursionDepth) {
LOG(WARNING) << "Max recursion depth hit in ReadValue.";
@@ -238,7 +238,7 @@ void ParamTraits<unsigned short>::Write(Message* m, const param_type& p) {
m->WriteBytes(&p, sizeof(param_type));
}
-bool ParamTraits<unsigned short>::Read(const Message* m, void** iter,
+bool ParamTraits<unsigned short>::Read(const Message* m, PickleIterator* iter,
param_type* r) {
const char* data;
if (!m->ReadBytes(iter, &data, sizeof(param_type)))
@@ -255,7 +255,7 @@ void ParamTraits<base::Time>::Write(Message* m, const param_type& p) {
ParamTraits<int64>::Write(m, p.ToInternalValue());
}
-bool ParamTraits<base::Time>::Read(const Message* m, void** iter,
+bool ParamTraits<base::Time>::Read(const Message* m, PickleIterator* iter,
param_type* r) {
int64 value;
if (!ParamTraits<int64>::Read(m, iter, &value))
@@ -273,7 +273,7 @@ void ParamTraits<base::TimeDelta> ::Write(Message* m, const param_type& p) {
}
bool ParamTraits<base::TimeDelta> ::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
int64 value;
bool ret = ParamTraits<int64> ::Read(m, iter, &value);
@@ -292,7 +292,7 @@ void ParamTraits<base::TimeTicks> ::Write(Message* m, const param_type& p) {
}
bool ParamTraits<base::TimeTicks> ::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
int64 value;
bool ret = ParamTraits<int64> ::Read(m, iter, &value);
@@ -311,7 +311,7 @@ void ParamTraits<DictionaryValue>::Write(Message* m, const param_type& p) {
}
bool ParamTraits<DictionaryValue>::Read(
- const Message* m, void** iter, param_type* r) {
+ const Message* m, PickleIterator* iter, param_type* r) {
int type;
if (!ReadParam(m, iter, &type) || type != Value::TYPE_DICTIONARY)
return false;
@@ -330,7 +330,7 @@ void ParamTraits<ListValue>::Write(Message* m, const param_type& p) {
}
bool ParamTraits<ListValue>::Read(
- const Message* m, void** iter, param_type* r) {
+ const Message* m, PickleIterator* iter, param_type* r) {
int type;
if (!ReadParam(m, iter, &type) || type != Value::TYPE_LIST)
return false;
@@ -353,7 +353,7 @@ void ParamTraits<NullableString16>::Write(Message* m, const param_type& p) {
WriteParam(m, p.is_null());
}
-bool ParamTraits<NullableString16>::Read(const Message* m, void** iter,
+bool ParamTraits<NullableString16>::Read(const Message* m, PickleIterator* iter,
param_type* r) {
string16 string;
if (!ReadParam(m, iter, &string))
@@ -384,7 +384,9 @@ void ParamTraits<FilePath>::Write(Message* m, const param_type& p) {
ParamTraits<FilePath::StringType>::Write(m, p.value());
}
-bool ParamTraits<FilePath>::Read(const Message* m, void** iter, param_type* r) {
+bool ParamTraits<FilePath>::Read(const Message* m,
+ PickleIterator* iter,
+ param_type* r) {
FilePath::StringType value;
if (!ParamTraits<FilePath::StringType>::Read(m, iter, &value))
return false;
@@ -407,7 +409,8 @@ void ParamTraits<base::FileDescriptor>::Write(Message* m, const param_type& p) {
}
}
-bool ParamTraits<base::FileDescriptor>::Read(const Message* m, void** iter,
+bool ParamTraits<base::FileDescriptor>::Read(const Message* m,
+ PickleIterator* iter,
param_type* r) {
bool valid;
if (!ReadParam(m, iter, &valid))
@@ -443,7 +446,8 @@ void ParamTraits<IPC::ChannelHandle>::Write(Message* m, const param_type& p) {
#endif
}
-bool ParamTraits<IPC::ChannelHandle>::Read(const Message* m, void** iter,
+bool ParamTraits<IPC::ChannelHandle>::Read(const Message* m,
+ PickleIterator* iter,
param_type* r) {
return ReadParam(m, iter, &r->name)
#if defined(OS_POSIX)
@@ -484,7 +488,9 @@ void ParamTraits<LogData>::Write(Message* m, const param_type& p) {
WriteParam(m, p.params);
}
-bool ParamTraits<LogData>::Read(const Message* m, void** iter, param_type* r) {
+bool ParamTraits<LogData>::Read(const Message* m,
+ PickleIterator* iter,
+ param_type* r) {
return
ReadParam(m, iter, &r->channel) &&
ReadParam(m, iter, &r->routing_id) &&
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h
index 1a7555b..3908b12 100644
--- a/ipc/ipc_message_utils.h
+++ b/ipc/ipc_message_utils.h
@@ -124,34 +124,33 @@ struct ChannelHandle;
class MessageIterator {
public:
- explicit MessageIterator(const Message& m) : msg_(m), iter_(NULL) {
+ explicit MessageIterator(const Message& m) : iter_(m) {
}
int NextInt() const {
int val = -1;
- if (!msg_.ReadInt(&iter_, &val))
+ if (!iter_.ReadInt(&val))
NOTREACHED();
return val;
}
const std::string NextString() const {
std::string val;
- if (!msg_.ReadString(&iter_, &val))
+ if (!iter_.ReadString(&val))
NOTREACHED();
return val;
}
const std::wstring NextWString() const {
std::wstring val;
- if (!msg_.ReadWString(&iter_, &val))
+ if (!iter_.ReadWString(&val))
NOTREACHED();
return val;
}
void NextData(const char** data, int* length) const {
- if (!msg_.ReadData(&iter_, data, length)) {
+ if (!iter_.ReadData(data, length)) {
NOTREACHED();
}
}
private:
- const Message& msg_;
- mutable void* iter_;
+ mutable PickleIterator iter_;
};
//-----------------------------------------------------------------------------
@@ -170,7 +169,8 @@ static inline void WriteParam(Message* m, const P& p) {
}
template <class P>
-static inline bool WARN_UNUSED_RESULT ReadParam(const Message* m, void** iter,
+static inline bool WARN_UNUSED_RESULT ReadParam(const Message* m,
+ PickleIterator* iter,
P* p) {
typedef typename SimilarTypeTraits<P>::Type Type;
return ParamTraits<Type>::Read(m, iter, reinterpret_cast<Type* >(p));
@@ -188,7 +188,8 @@ struct ParamTraits<bool> {
static void Write(Message* m, const param_type& p) {
m->WriteBool(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadBool(iter, r);
}
static void Log(const param_type& p, std::string* l) {
@@ -202,7 +203,8 @@ struct ParamTraits<int> {
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadInt(iter, r);
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -214,7 +216,8 @@ struct ParamTraits<unsigned int> {
static void Write(Message* m, const param_type& p) {
m->WriteInt(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadInt(iter, reinterpret_cast<int*>(r));
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -226,7 +229,8 @@ struct ParamTraits<long> {
static void Write(Message* m, const param_type& p) {
m->WriteLong(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadLong(iter, r);
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -238,7 +242,8 @@ struct ParamTraits<unsigned long> {
static void Write(Message* m, const param_type& p) {
m->WriteLong(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadLong(iter, reinterpret_cast<long*>(r));
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -250,7 +255,8 @@ struct ParamTraits<long long> {
static void Write(Message* m, const param_type& p) {
m->WriteInt64(static_cast<int64>(p));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadInt64(iter, reinterpret_cast<int64*>(r));
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -262,7 +268,8 @@ struct ParamTraits<unsigned long long> {
static void Write(Message* m, const param_type& p) {
m->WriteInt64(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadInt64(iter, reinterpret_cast<int64*>(r));
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -272,7 +279,7 @@ template <>
struct IPC_EXPORT ParamTraits<unsigned short> {
typedef unsigned short param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -285,7 +292,8 @@ struct ParamTraits<float> {
static void Write(Message* m, const param_type& p) {
m->WriteData(reinterpret_cast<const char*>(&p), sizeof(param_type));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
const char *data;
int data_size;
if (!m->ReadData(iter, &data, &data_size) ||
@@ -307,7 +315,8 @@ struct ParamTraits<double> {
static void Write(Message* m, const param_type& p) {
m->WriteData(reinterpret_cast<const char*>(&p), sizeof(param_type));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
const char *data;
int data_size;
if (!m->ReadData(iter, &data, &data_size) ||
@@ -327,7 +336,7 @@ template <>
struct IPC_EXPORT ParamTraits<base::Time> {
typedef base::Time param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -335,7 +344,7 @@ template <>
struct IPC_EXPORT ParamTraits<base::TimeDelta> {
typedef base::TimeDelta param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -343,7 +352,7 @@ template <>
struct IPC_EXPORT ParamTraits<base::TimeTicks> {
typedef base::TimeTicks param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -354,7 +363,8 @@ struct ParamTraits<LOGFONT> {
static void Write(Message* m, const param_type& p) {
m->WriteData(reinterpret_cast<const char*>(&p), sizeof(LOGFONT));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
const char *data;
int data_size = 0;
bool result = m->ReadData(iter, &data, &data_size);
@@ -378,7 +388,8 @@ struct ParamTraits<MSG> {
static void Write(Message* m, const param_type& p) {
m->WriteData(reinterpret_cast<const char*>(&p), sizeof(MSG));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
const char *data;
int data_size = 0;
bool result = m->ReadData(iter, &data, &data_size);
@@ -401,7 +412,7 @@ template <>
struct IPC_EXPORT ParamTraits<base::DictionaryValue> {
typedef base::DictionaryValue param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -409,7 +420,7 @@ template <>
struct IPC_EXPORT ParamTraits<base::ListValue> {
typedef base::ListValue param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -419,7 +430,8 @@ struct ParamTraits<std::string> {
static void Write(Message* m, const param_type& p) {
m->WriteString(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadString(iter, r);
}
static void Log(const param_type& p, std::string* l) {
@@ -461,7 +473,8 @@ struct ParamTraits<std::vector<unsigned char> > {
static_cast<int>(p.size()));
}
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
const char *data;
int data_size = 0;
if (!m->ReadData(iter, &data, &data_size) || data_size < 0)
@@ -486,7 +499,8 @@ struct ParamTraits<std::vector<char> > {
m->WriteData(&p.front(), static_cast<int>(p.size()));
}
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
const char *data;
int data_size = 0;
if (!m->ReadData(iter, &data, &data_size) || data_size < 0)
@@ -509,7 +523,8 @@ struct ParamTraits<std::vector<bool> > {
for (size_t i = 0; i < p.size(); i++)
WriteParam(m, p[i]);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
int size;
// ReadLength() checks for < 0 itself.
if (!m->ReadLength(iter, &size))
@@ -540,7 +555,8 @@ struct ParamTraits<std::vector<P> > {
for (size_t i = 0; i < p.size(); i++)
WriteParam(m, p[i]);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
int size;
// ReadLength() checks for < 0 itself.
if (!m->ReadLength(iter, &size))
@@ -573,7 +589,8 @@ struct ParamTraits<std::set<P> > {
for (iter = p.begin(); iter != p.end(); ++iter)
WriteParam(m, *iter);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
int size;
if (!m->ReadLength(iter, &size))
return false;
@@ -602,7 +619,8 @@ struct ParamTraits<std::map<K, V> > {
WriteParam(m, iter->second);
}
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
int size;
if (!ReadParam(m, iter, &size) || size < 0)
return false;
@@ -628,7 +646,8 @@ struct ParamTraits<std::wstring> {
static void Write(Message* m, const param_type& p) {
m->WriteWString(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadWString(iter, r);
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -641,7 +660,8 @@ struct ParamTraits<std::pair<A, B> > {
WriteParam(m, p.first);
WriteParam(m, p.second);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return ReadParam(m, iter, &r->first) && ReadParam(m, iter, &r->second);
}
static void Log(const param_type& p, std::string* l) {
@@ -657,7 +677,8 @@ template <>
struct IPC_EXPORT ParamTraits<NullableString16> {
typedef NullableString16 param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -670,7 +691,8 @@ struct ParamTraits<string16> {
static void Write(Message* m, const param_type& p) {
m->WriteString16(p);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
return m->ReadString16(iter, r);
}
IPC_EXPORT static void Log(const param_type& p, std::string* l);
@@ -687,7 +709,8 @@ struct ParamTraits<HANDLE> {
// bit systems.
m->WriteUInt32(reinterpret_cast<uint32>(p));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter,
+ param_type* r) {
DCHECK_EQ(sizeof(param_type), sizeof(uint32));
return m->ReadUInt32(iter, reinterpret_cast<uint32*>(r));
}
@@ -702,7 +725,7 @@ struct ParamTraits<HCURSOR> {
static void Write(Message* m, const param_type& p) {
m->WriteUInt32(reinterpret_cast<uint32>(p));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
DCHECK_EQ(sizeof(param_type), sizeof(uint32));
return m->ReadUInt32(iter, reinterpret_cast<uint32*>(r));
}
@@ -717,7 +740,7 @@ struct ParamTraits<HACCEL> {
static void Write(Message* m, const param_type& p) {
m->WriteUInt32(reinterpret_cast<uint32>(p));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
DCHECK_EQ(sizeof(param_type), sizeof(uint32));
return m->ReadUInt32(iter, reinterpret_cast<uint32*>(r));
}
@@ -730,7 +753,7 @@ struct ParamTraits<POINT> {
m->WriteInt(p.x);
m->WriteInt(p.y);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
int x, y;
if (!m->ReadInt(iter, &x) || !m->ReadInt(iter, &y))
return false;
@@ -748,7 +771,7 @@ template <>
struct IPC_EXPORT ParamTraits<FilePath> {
typedef FilePath param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -772,7 +795,7 @@ template<>
struct IPC_EXPORT ParamTraits<base::FileDescriptor> {
typedef base::FileDescriptor param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
#endif // defined(OS_POSIX)
@@ -784,7 +807,7 @@ template<>
struct IPC_EXPORT ParamTraits<IPC::ChannelHandle> {
typedef ChannelHandle param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -795,7 +818,7 @@ struct ParamTraits<XFORM> {
static void Write(Message* m, const param_type& p) {
m->WriteData(reinterpret_cast<const char*>(&p), sizeof(XFORM));
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
const char *data;
int data_size = 0;
bool result = m->ReadData(iter, &data, &data_size);
@@ -835,7 +858,7 @@ template <>
struct IPC_EXPORT ParamTraits<LogData> {
typedef LogData param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l) {
// Doesn't make sense to implement this!
}
@@ -849,7 +872,7 @@ struct ParamTraits<Message> {
m->WriteInt(message_size);
m->WriteData(reinterpret_cast<const char*>(p.data()), message_size);
}
- static bool Read(const Message* m, void** iter, Message* r) {
+ static bool Read(const Message* m, PickleIterator* iter, Message* r) {
int size;
if (!m->ReadInt(iter, &size))
return false;
@@ -869,7 +892,7 @@ struct ParamTraits<Tuple0> {
typedef Tuple0 param_type;
static void Write(Message* m, const param_type& p) {
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return true;
}
static void Log(const param_type& p, std::string* l) {
@@ -882,7 +905,7 @@ struct ParamTraits< Tuple1<A> > {
static void Write(Message* m, const param_type& p) {
WriteParam(m, p.a);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return ReadParam(m, iter, &r->a);
}
static void Log(const param_type& p, std::string* l) {
@@ -897,7 +920,7 @@ struct ParamTraits< Tuple2<A, B> > {
WriteParam(m, p.a);
WriteParam(m, p.b);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return (ReadParam(m, iter, &r->a) &&
ReadParam(m, iter, &r->b));
}
@@ -916,7 +939,7 @@ struct ParamTraits< Tuple3<A, B, C> > {
WriteParam(m, p.b);
WriteParam(m, p.c);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return (ReadParam(m, iter, &r->a) &&
ReadParam(m, iter, &r->b) &&
ReadParam(m, iter, &r->c));
@@ -939,7 +962,7 @@ struct ParamTraits< Tuple4<A, B, C, D> > {
WriteParam(m, p.c);
WriteParam(m, p.d);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return (ReadParam(m, iter, &r->a) &&
ReadParam(m, iter, &r->b) &&
ReadParam(m, iter, &r->c) &&
@@ -966,7 +989,7 @@ struct ParamTraits< Tuple5<A, B, C, D, E> > {
WriteParam(m, p.d);
WriteParam(m, p.e);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
return (ReadParam(m, iter, &r->a) &&
ReadParam(m, iter, &r->b) &&
ReadParam(m, iter, &r->c) &&
@@ -1054,7 +1077,7 @@ class ParamDeserializer : public MessageReplyDeserializer {
public:
explicit ParamDeserializer(const RefTuple& out) : out_(out) { }
- bool SerializeOutputParameters(const IPC::Message& msg, void* iter) {
+ bool SerializeOutputParameters(const IPC::Message& msg, PickleIterator iter) {
return ReadParam(&msg, &iter, &out_);
}
diff --git a/ipc/ipc_message_utils_impl.h b/ipc/ipc_message_utils_impl.h
index f078b2a..0931e30 100644
--- a/ipc/ipc_message_utils_impl.h
+++ b/ipc/ipc_message_utils_impl.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -18,7 +18,7 @@ void MessageSchema<ParamType>::Write(Message* msg, const RefParam& p) {
template <class ParamType>
bool MessageSchema<ParamType>::Read(const Message* msg, Param* p) {
- void* iter = NULL;
+ PickleIterator iter(*msg);
if (ReadParam(msg, &iter, p))
return true;
NOTREACHED() << "Error deserializing message " << msg->type();
@@ -35,14 +35,14 @@ void SyncMessageSchema<SendParamType, ReplyParamType>::Write(
template <class SendParamType, class ReplyParamType>
bool SyncMessageSchema<SendParamType, ReplyParamType>::ReadSendParam(
const Message* msg, SendParam* p) {
- void* iter = SyncMessage::GetDataIterator(msg);
+ PickleIterator iter = SyncMessage::GetDataIterator(msg);
return ReadParam(msg, &iter, p);
}
template <class SendParamType, class ReplyParamType>
bool SyncMessageSchema<SendParamType, ReplyParamType>::ReadReplyParam(
const Message* msg, typename TupleTypes<ReplyParam>::ValueTuple* p) {
- void* iter = SyncMessage::GetDataIterator(msg);
+ PickleIterator iter = SyncMessage::GetDataIterator(msg);
return ReadParam(msg, &iter, p);
}
diff --git a/ipc/ipc_send_fds_test.cc b/ipc/ipc_send_fds_test.cc
index 3b845f8..124a3dc 100644
--- a/ipc/ipc_send_fds_test.cc
+++ b/ipc/ipc_send_fds_test.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -52,7 +52,7 @@ class MyChannelDescriptorListener : public IPC::Channel::Listener {
num_fds_received_(0) {}
virtual bool OnMessageReceived(const IPC::Message& message) {
- void* iter = NULL;
+ PickleIterator iter(message);
++num_fds_received_;
base::FileDescriptor descriptor;
diff --git a/ipc/ipc_sync_message.cc b/ipc/ipc_sync_message.cc
index 875f97b..eb0a917 100644
--- a/ipc/ipc_sync_message.cc
+++ b/ipc/ipc_sync_message.cc
@@ -74,10 +74,12 @@ bool SyncMessage::IsMessageReplyTo(const Message& msg, int request_id) {
return GetMessageId(msg) == request_id;
}
-void* SyncMessage::GetDataIterator(const Message* msg) {
- void* iter = const_cast<char*>(msg->payload());
- UpdateIter(&iter, kSyncMessageHeaderSize);
- return iter;
+PickleIterator SyncMessage::GetDataIterator(const Message* msg) {
+ PickleIterator iter(*msg);
+ if (!iter.SkipBytes(kSyncMessageHeaderSize))
+ return PickleIterator();
+ else
+ return iter;
}
int SyncMessage::GetMessageId(const Message& msg) {
@@ -110,7 +112,7 @@ Message* SyncMessage::GenerateReply(const Message* msg) {
bool SyncMessage::ReadSyncHeader(const Message& msg, SyncHeader* header) {
DCHECK(msg.is_sync() || msg.is_reply());
- void* iter = NULL;
+ PickleIterator iter(msg);
bool result = msg.ReadInt(&iter, &header->message_id);
if (!result) {
NOTREACHED();
diff --git a/ipc/ipc_sync_message.h b/ipc/ipc_sync_message.h
index 087df0d..17a7324 100644
--- a/ipc/ipc_sync_message.h
+++ b/ipc/ipc_sync_message.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -61,7 +61,7 @@ class IPC_EXPORT SyncMessage : public Message {
// Given a reply message, returns an iterator to the beginning of the data
// (i.e. skips over the synchronous specific data).
- static void* GetDataIterator(const Message* msg);
+ static PickleIterator GetDataIterator(const Message* msg);
// Given a synchronous message (or its reply), returns its id.
static int GetMessageId(const Message& msg);
@@ -90,7 +90,8 @@ class IPC_EXPORT MessageReplyDeserializer {
private:
// Derived classes need to implement this, using the given iterator (which
// is skipped past the header for synchronous messages).
- virtual bool SerializeOutputParameters(const Message& msg, void* iter) = 0;
+ virtual bool SerializeOutputParameters(const Message& msg,
+ PickleIterator iter) = 0;
};
// When sending a synchronous message, this structure contains an object
diff --git a/ipc/ipc_tests.cc b/ipc/ipc_tests.cc
index 8b22fc3..14259fa 100644
--- a/ipc/ipc_tests.cc
+++ b/ipc/ipc_tests.cc
@@ -140,7 +140,7 @@ TEST_F(IPCChannelTest, BasicMessageTest) {
EXPECT_TRUE(m.WriteString(v2));
EXPECT_TRUE(m.WriteWString(v3));
- void* iter = NULL;
+ PickleIterator iter(m);
int vi;
std::string vs;
diff --git a/ipc/param_traits_macros.h b/ipc/param_traits_macros.h
index 05ce403..58e74f6 100644
--- a/ipc/param_traits_macros.h
+++ b/ipc/param_traits_macros.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -14,7 +14,7 @@
struct IPC_MESSAGE_EXPORT ParamTraits<struct_name> { \
typedef struct_name param_type; \
static void Write(Message* m, const param_type& p); \
- static bool Read(const Message* m, void** iter, param_type* p); \
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p); \
static void Log(const param_type& p, std::string* l); \
}; \
}
@@ -30,7 +30,7 @@
struct IPC_MESSAGE_EXPORT ParamTraits<enum_name> { \
typedef enum_name param_type; \
static void Write(Message* m, const param_type& p); \
- static bool Read(const Message* m, void** iter, param_type* p); \
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p); \
static void Log(const param_type& p, std::string* l); \
}; \
}
diff --git a/ipc/param_traits_read_macros.h b/ipc/param_traits_read_macros.h
index a78c880..9d89a92 100644
--- a/ipc/param_traits_read_macros.h
+++ b/ipc/param_traits_read_macros.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -27,7 +27,7 @@
#undef IPC_STRUCT_TRAITS_END
#define IPC_STRUCT_TRAITS_BEGIN(struct_name) \
bool ParamTraits<struct_name>:: \
- Read(const Message* m, void** iter, param_type* p) { \
+ Read(const Message* m, PickleIterator* iter, param_type* p) { \
return
#define IPC_STRUCT_TRAITS_MEMBER(name) ReadParam(m, iter, &p->name) &&
#define IPC_STRUCT_TRAITS_PARENT(type) ParamTraits<type>::Read(m, iter, p) &&
@@ -36,7 +36,7 @@
#undef IPC_ENUM_TRAITS
#define IPC_ENUM_TRAITS(enum_name) \
bool ParamTraits<enum_name>:: \
- Read(const Message* m, void** iter, param_type* p) { \
+ Read(const Message* m, PickleIterator* iter, param_type* p) { \
int type; \
if (!m->ReadInt(iter, &type)) \
return false; \
diff --git a/net/base/x509_certificate.cc b/net/base/x509_certificate.cc
index 0a301e0..cb9b798 100644
--- a/net/base/x509_certificate.cc
+++ b/net/base/x509_certificate.cc
@@ -324,7 +324,7 @@ X509Certificate* X509Certificate::CreateFromBytes(const char* data,
// static
X509Certificate* X509Certificate::CreateFromPickle(const Pickle& pickle,
- void** pickle_iter,
+ PickleIterator* pickle_iter,
PickleType type) {
OSCertHandle cert_handle = ReadOSCertHandleFromPickle(pickle, pickle_iter);
if (!cert_handle)
diff --git a/net/base/x509_certificate.h b/net/base/x509_certificate.h
index 0a603b1..9e00e71 100644
--- a/net/base/x509_certificate.h
+++ b/net/base/x509_certificate.h
@@ -37,6 +37,7 @@ struct CERTCertificateStr;
#endif
class Pickle;
+class PickleIterator;
namespace crypto {
class RSAPrivateKey;
@@ -181,7 +182,7 @@ class NET_EXPORT X509Certificate
//
// The returned pointer must be stored in a scoped_refptr<X509Certificate>.
static X509Certificate* CreateFromPickle(const Pickle& pickle,
- void** pickle_iter,
+ PickleIterator* pickle_iter,
PickleType type);
// Parses all of the certificates possible from |data|. |format| is a
@@ -554,7 +555,7 @@ class NET_EXPORT X509Certificate
// libraries, nor acceptable to CreateFromBytes(). Returns an invalid
// handle, NULL, on failure.
static OSCertHandle ReadOSCertHandleFromPickle(const Pickle& pickle,
- void** pickle_iter);
+ PickleIterator* pickle_iter);
// Writes a single certificate to |pickle|. Returns false on failure.
static bool WriteOSCertHandleToPickle(OSCertHandle handle, Pickle* pickle);
diff --git a/net/base/x509_certificate_mac.cc b/net/base/x509_certificate_mac.cc
index 8541973..afd622f 100644
--- a/net/base/x509_certificate_mac.cc
+++ b/net/base/x509_certificate_mac.cc
@@ -1565,7 +1565,7 @@ CFArrayRef X509Certificate::CreateOSCertChainForCert() const {
// static
X509Certificate::OSCertHandle
X509Certificate::ReadOSCertHandleFromPickle(const Pickle& pickle,
- void** pickle_iter) {
+ PickleIterator* pickle_iter) {
const char* data;
int length;
if (!pickle.ReadData(pickle_iter, &data, &length))
diff --git a/net/base/x509_certificate_nss.cc b/net/base/x509_certificate_nss.cc
index bc72304..edded15 100644
--- a/net/base/x509_certificate_nss.cc
+++ b/net/base/x509_certificate_nss.cc
@@ -1146,7 +1146,7 @@ SHA1Fingerprint X509Certificate::CalculateCAFingerprint(
// static
X509Certificate::OSCertHandle
X509Certificate::ReadOSCertHandleFromPickle(const Pickle& pickle,
- void** pickle_iter) {
+ PickleIterator* pickle_iter) {
const char* data;
int length;
if (!pickle.ReadData(pickle_iter, &data, &length))
diff --git a/net/base/x509_certificate_openssl.cc b/net/base/x509_certificate_openssl.cc
index 3efb989..6eef06e 100644
--- a/net/base/x509_certificate_openssl.cc
+++ b/net/base/x509_certificate_openssl.cc
@@ -650,7 +650,7 @@ bool X509Certificate::IsSameOSCert(X509Certificate::OSCertHandle a,
// static
X509Certificate::OSCertHandle
X509Certificate::ReadOSCertHandleFromPickle(const Pickle& pickle,
- void** pickle_iter) {
+ PickleIterator* pickle_iter) {
const char* data;
int length;
if (!pickle.ReadData(pickle_iter, &data, &length))
diff --git a/net/base/x509_certificate_unittest.cc b/net/base/x509_certificate_unittest.cc
index 7e25cbb..a69df0a 100644
--- a/net/base/x509_certificate_unittest.cc
+++ b/net/base/x509_certificate_unittest.cc
@@ -1026,7 +1026,7 @@ TEST(X509CertificateTest, Pickle) {
Pickle pickle;
cert->Persist(&pickle);
- void* iter = NULL;
+ PickleIterator iter(pickle);
scoped_refptr<X509Certificate> cert_from_pickle =
X509Certificate::CreateFromPickle(
pickle, &iter, X509Certificate::PICKLETYPE_CERTIFICATE_CHAIN);
diff --git a/net/base/x509_certificate_win.cc b/net/base/x509_certificate_win.cc
index 3c80457..a6b186e 100644
--- a/net/base/x509_certificate_win.cc
+++ b/net/base/x509_certificate_win.cc
@@ -1061,7 +1061,7 @@ SHA1Fingerprint X509Certificate::CalculateCAFingerprint(
// static
X509Certificate::OSCertHandle
X509Certificate::ReadOSCertHandleFromPickle(const Pickle& pickle,
- void** pickle_iter) {
+ PickleIterator* pickle_iter) {
const char* data;
int length;
if (!pickle.ReadData(pickle_iter, &data, &length))
diff --git a/net/http/http_response_headers.cc b/net/http/http_response_headers.cc
index 4916498..33d78da 100644
--- a/net/http/http_response_headers.cc
+++ b/net/http/http_response_headers.cc
@@ -169,7 +169,8 @@ HttpResponseHeaders::HttpResponseHeaders(const std::string& raw_input)
GetAllHttpResponseCodes());
}
-HttpResponseHeaders::HttpResponseHeaders(const Pickle& pickle, void** iter)
+HttpResponseHeaders::HttpResponseHeaders(const Pickle& pickle,
+ PickleIterator* iter)
: response_code_(-1) {
std::string raw_input;
if (pickle.ReadString(iter, &raw_input))
diff --git a/net/http/http_response_headers.h b/net/http/http_response_headers.h
index 0ab162e..6fbc0bb 100644
--- a/net/http/http_response_headers.h
+++ b/net/http/http_response_headers.h
@@ -16,6 +16,7 @@
#include "net/http/http_version.h"
class Pickle;
+class PickleIterator;
namespace base {
class Time;
@@ -52,7 +53,7 @@ class NET_EXPORT HttpResponseHeaders
// Initializes from the representation stored in the given pickle. The data
// for this object is found relative to the given pickle_iter, which should
// be passed to the pickle's various Read* methods.
- HttpResponseHeaders(const Pickle& pickle, void** pickle_iter);
+ HttpResponseHeaders(const Pickle& pickle, PickleIterator* pickle_iter);
// Appends a representation of this object to the given pickle.
// The options argument can be a combination of PersistOptions.
diff --git a/net/http/http_response_headers_unittest.cc b/net/http/http_response_headers_unittest.cc
index 775946c..f7c5e6f5 100644
--- a/net/http/http_response_headers_unittest.cc
+++ b/net/http/http_response_headers_unittest.cc
@@ -475,7 +475,7 @@ TEST(HttpResponseHeadersTest, Persist) {
Pickle pickle;
parsed1->Persist(&pickle, tests[i].options);
- void* iter = NULL;
+ PickleIterator iter(pickle);
scoped_refptr<net::HttpResponseHeaders> parsed2(
new net::HttpResponseHeaders(pickle, &iter));
diff --git a/net/http/http_response_info.cc b/net/http/http_response_info.cc
index 951e2b6..542bdb0 100644
--- a/net/http/http_response_info.cc
+++ b/net/http/http_response_info.cc
@@ -116,7 +116,7 @@ HttpResponseInfo& HttpResponseInfo::operator=(const HttpResponseInfo& rhs) {
bool HttpResponseInfo::InitFromPickle(const Pickle& pickle,
bool* response_truncated) {
- void* iter = NULL;
+ PickleIterator iter(pickle);
// read flags and verify version
int flags;
diff --git a/net/http/http_vary_data.cc b/net/http/http_vary_data.cc
index 882dc78..c716ca0 100644
--- a/net/http/http_vary_data.cc
+++ b/net/http/http_vary_data.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -64,7 +64,7 @@ bool HttpVaryData::Init(const HttpRequestInfo& request_info,
return is_valid_ = true;
}
-bool HttpVaryData::InitFromPickle(const Pickle& pickle, void** iter) {
+bool HttpVaryData::InitFromPickle(const Pickle& pickle, PickleIterator* iter) {
is_valid_ = false;
const char* data;
if (pickle.ReadBytes(iter, &data, sizeof(request_digest_))) {
diff --git a/net/http/http_vary_data.h b/net/http/http_vary_data.h
index baa4d88..4e7a542 100644
--- a/net/http/http_vary_data.h
+++ b/net/http/http_vary_data.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -10,6 +10,7 @@
#include "net/base/net_export.h"
class Pickle;
+class PickleIterator;
namespace net {
@@ -52,7 +53,7 @@ class NET_EXPORT_PRIVATE HttpVaryData {
// is_valid() will return true. Otherwise, false is returned to indicate
// that this object is marked as invalid.
//
- bool InitFromPickle(const Pickle& pickle, void** pickle_iter);
+ bool InitFromPickle(const Pickle& pickle, PickleIterator* pickle_iter);
// Call this method to persist the vary data. Illegal to call this on an
// invalid object.
diff --git a/net/socket/ssl_host_info.cc b/net/socket/ssl_host_info.cc
index bc4a43e..f4edcc6 100644
--- a/net/socket/ssl_host_info.cc
+++ b/net/socket/ssl_host_info.cc
@@ -64,7 +64,7 @@ bool SSLHostInfo::ParseInner(const std::string& data) {
State* state = mutable_state();
Pickle p(data.data(), data.size());
- void* iter = NULL;
+ PickleIterator iter(p);
int num_der_certs;
if (!p.ReadInt(&iter, &num_der_certs) ||
diff --git a/ppapi/proxy/ppapi_param_traits.cc b/ppapi/proxy/ppapi_param_traits.cc
index 484cb9b..7c13710 100644
--- a/ppapi/proxy/ppapi_param_traits.cc
+++ b/ppapi/proxy/ppapi_param_traits.cc
@@ -39,7 +39,7 @@ namespace {
// add it to the vector one at a time.
template<typename T>
bool ReadVectorWithoutCopy(const Message* m,
- void** iter,
+ PickleIterator* iter,
std::vector<T>* output) {
// This part is just a copy of the the default ParamTraits vector Read().
int size;
@@ -81,7 +81,9 @@ void ParamTraits<PP_Bool>::Write(Message* m, const param_type& p) {
}
// static
-bool ParamTraits<PP_Bool>::Read(const Message* m, void** iter, param_type* r) {
+bool ParamTraits<PP_Bool>::Read(const Message* m,
+ PickleIterator* iter,
+ param_type* r) {
// We specifically want to be strict here about what types of input we accept,
// which ParamTraits<bool> does for us. We don't want to deserialize "2" into
// a PP_Bool, for example.
@@ -109,7 +111,7 @@ void ParamTraits<PP_FileInfo>::Write(Message* m, const param_type& p) {
}
// static
-bool ParamTraits<PP_FileInfo>::Read(const Message* m, void** iter,
+bool ParamTraits<PP_FileInfo>::Read(const Message* m, PickleIterator* iter,
param_type* r) {
int type, system_type;
if (!ParamTraits<int64_t>::Read(m, iter, &r->size) ||
@@ -148,7 +150,7 @@ void ParamTraits<PP_NetAddress_Private>::Write(Message* m,
// static
bool ParamTraits<PP_NetAddress_Private>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* p) {
uint16 size;
if (!ReadParam(m, iter, &size))
@@ -181,7 +183,7 @@ void ParamTraits<PP_ObjectProperty>::Write(Message* m, const param_type& p) {
// static
bool ParamTraits<PP_ObjectProperty>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
// FIXME(brettw);
return true;
@@ -220,7 +222,7 @@ void ParamTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params>::Write(
// static
bool ParamTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params>::Read(
const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return
ParamTraits<PP_Instance>::Read(m, iter, &r->instance) &&
@@ -265,7 +267,7 @@ void ParamTraits<ppapi::PPB_FileRef_CreateInfo>::Write(Message* m,
// static
bool ParamTraits<ppapi::PPB_FileRef_CreateInfo>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return
ParamTraits<ppapi::HostResource>::Read(m, iter, &r->resource) &&
@@ -296,7 +298,7 @@ void ParamTraits<ppapi::proxy::PPBURLLoader_UpdateProgress_Params>::Write(
// static
bool ParamTraits<ppapi::proxy::PPBURLLoader_UpdateProgress_Params>::Read(
const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return
ParamTraits<PP_Instance>::Read(m, iter, &r->instance) &&
@@ -324,7 +326,7 @@ void ParamTraits<ppapi::proxy::SerializedDirEntry>::Write(Message* m,
// static
bool ParamTraits<ppapi::proxy::SerializedDirEntry>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return ParamTraits<std::string>::Read(m, iter, &r->name) &&
ParamTraits<bool>::Read(m, iter, &r->is_dir);
@@ -354,7 +356,7 @@ void ParamTraits<ppapi::proxy::SerializedFontDescription>::Write(
// static
bool ParamTraits<ppapi::proxy::SerializedFontDescription>::Read(
const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return
ParamTraits<ppapi::proxy::SerializedVar>::Read(m, iter, &r->face) &&
@@ -384,7 +386,7 @@ void ParamTraits<ppapi::HostResource>::Write(Message* m,
// static
bool ParamTraits<ppapi::HostResource>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
PP_Instance instance;
PP_Resource resource;
@@ -410,7 +412,7 @@ void ParamTraits<ppapi::proxy::SerializedVar>::Write(Message* m,
// static
bool ParamTraits<ppapi::proxy::SerializedVar>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return r->ReadFromMessage(m, iter);
}
@@ -431,7 +433,7 @@ void ParamTraits< std::vector<ppapi::proxy::SerializedVar> >::Write(
// static
bool ParamTraits< std::vector<ppapi::proxy::SerializedVar> >::Read(
const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return ReadVectorWithoutCopy(m, iter, r);
}
@@ -453,7 +455,7 @@ void ParamTraits< std::vector<ppapi::PPB_FileRef_CreateInfo> >::Write(
// static
bool ParamTraits< std::vector<ppapi::PPB_FileRef_CreateInfo> >::Read(
const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return ReadVectorWithoutCopy(m, iter, r);
}
@@ -475,7 +477,7 @@ void ParamTraits<ppapi::proxy::SerializedFlashMenu>::Write(
// static
bool ParamTraits<ppapi::proxy::SerializedFlashMenu>::Read(const Message* m,
- void** iter,
+ PickleIterator* iter,
param_type* r) {
return r->ReadFromMessage(m, iter);
}
diff --git a/ppapi/proxy/ppapi_param_traits.h b/ppapi/proxy/ppapi_param_traits.h
index 63121f0..40e4e5b 100644
--- a/ppapi/proxy/ppapi_param_traits.h
+++ b/ppapi/proxy/ppapi_param_traits.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -42,7 +42,7 @@ template<>
struct ParamTraits<PP_Bool> {
typedef PP_Bool param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -50,7 +50,7 @@ template<>
struct ParamTraits<PP_FileInfo> {
typedef PP_FileInfo param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -58,7 +58,7 @@ template <>
struct PPAPI_PROXY_EXPORT ParamTraits<PP_NetAddress_Private> {
typedef PP_NetAddress_Private param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* p);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p);
static void Log(const param_type& p, std::string* l);
};
@@ -66,7 +66,7 @@ template<>
struct ParamTraits<PP_ObjectProperty> {
typedef PP_ObjectProperty param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -74,7 +74,7 @@ template<>
struct ParamTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params> {
typedef ppapi::proxy::PPBFlash_DrawGlyphs_Params param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -82,7 +82,7 @@ template<>
struct ParamTraits<ppapi::PPB_FileRef_CreateInfo> {
typedef ppapi::PPB_FileRef_CreateInfo param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -90,7 +90,7 @@ template<>
struct ParamTraits<ppapi::proxy::PPBURLLoader_UpdateProgress_Params> {
typedef ppapi::proxy::PPBURLLoader_UpdateProgress_Params param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -98,7 +98,7 @@ template<>
struct ParamTraits<ppapi::proxy::SerializedDirEntry> {
typedef ppapi::proxy::SerializedDirEntry param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -106,7 +106,7 @@ template<>
struct ParamTraits<ppapi::proxy::SerializedFontDescription> {
typedef ppapi::proxy::SerializedFontDescription param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -114,7 +114,7 @@ template<>
struct ParamTraits<ppapi::HostResource> {
typedef ppapi::HostResource param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -122,7 +122,7 @@ template<>
struct ParamTraits<ppapi::proxy::SerializedVar> {
typedef ppapi::proxy::SerializedVar param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -130,7 +130,7 @@ template<>
struct ParamTraits< std::vector<ppapi::proxy::SerializedVar> > {
typedef std::vector<ppapi::proxy::SerializedVar> param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -138,7 +138,7 @@ template<>
struct ParamTraits< std::vector<ppapi::PPB_FileRef_CreateInfo> > {
typedef std::vector<ppapi::PPB_FileRef_CreateInfo> param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
@@ -146,7 +146,7 @@ template<>
struct ParamTraits<ppapi::proxy::SerializedFlashMenu> {
typedef ppapi::proxy::SerializedFlashMenu param_type;
static void Write(Message* m, const param_type& p);
- static bool Read(const Message* m, void** iter, param_type* r);
+ static bool Read(const Message* m, PickleIterator* iter, param_type* r);
static void Log(const param_type& p, std::string* l);
};
diff --git a/ppapi/proxy/serialized_flash_menu.cc b/ppapi/proxy/serialized_flash_menu.cc
index c29f9c1..2784485 100644
--- a/ppapi/proxy/serialized_flash_menu.cc
+++ b/ppapi/proxy/serialized_flash_menu.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -19,7 +19,7 @@ const int kMaxMenuDepth = 2;
bool CheckMenu(int depth, const PP_Flash_Menu* menu);
void FreeMenu(const PP_Flash_Menu* menu);
void WriteMenu(IPC::Message* m, const PP_Flash_Menu* menu);
-PP_Flash_Menu* ReadMenu(int depth, const IPC::Message* m, void** iter);
+PP_Flash_Menu* ReadMenu(int depth, const IPC::Message* m, PickleIterator* iter);
bool CheckMenuItem(int depth, const PP_Flash_MenuItem* item) {
if (item->type == PP_FLASH_MENUITEM_TYPE_SUBMENU)
@@ -77,7 +77,7 @@ void FreeMenu(const PP_Flash_Menu* menu) {
bool ReadMenuItem(int depth,
const IPC::Message* m,
- void** iter,
+ PickleIterator* iter,
PP_Flash_MenuItem* menu_item) {
uint32_t type;
if (!m->ReadUInt32(iter, &type))
@@ -105,7 +105,9 @@ bool ReadMenuItem(int depth,
return true;
}
-PP_Flash_Menu* ReadMenu(int depth, const IPC::Message* m, void** iter) {
+PP_Flash_Menu* ReadMenu(int depth,
+ const IPC::Message* m,
+ PickleIterator* iter) {
if (depth > kMaxMenuDepth)
return NULL;
++depth;
@@ -158,7 +160,8 @@ void SerializedFlashMenu::WriteToMessage(IPC::Message* m) const {
WriteMenu(m, pp_menu_);
}
-bool SerializedFlashMenu::ReadFromMessage(const IPC::Message* m, void** iter) {
+bool SerializedFlashMenu::ReadFromMessage(const IPC::Message* m,
+ PickleIterator* iter) {
DCHECK(!pp_menu_);
pp_menu_ = ReadMenu(0, m, iter);
if (!pp_menu_)
diff --git a/ppapi/proxy/serialized_flash_menu.h b/ppapi/proxy/serialized_flash_menu.h
index 4be22bf..f7ad6b6 100644
--- a/ppapi/proxy/serialized_flash_menu.h
+++ b/ppapi/proxy/serialized_flash_menu.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -12,6 +12,8 @@
#include "base/memory/scoped_ptr.h"
#include "ppapi/proxy/ppapi_proxy_export.h"
+class PickleIterator;
+
struct PP_Flash_Menu;
namespace IPC {
@@ -31,7 +33,7 @@ class PPAPI_PROXY_EXPORT SerializedFlashMenu {
const PP_Flash_Menu* pp_menu() const { return pp_menu_; }
void WriteToMessage(IPC::Message* m) const;
- bool ReadFromMessage(const IPC::Message* m, void** iter);
+ bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter);
private:
const PP_Flash_Menu* pp_menu_;
diff --git a/ppapi/proxy/serialized_var.cc b/ppapi/proxy/serialized_var.cc
index eb20333..7b2a8e3 100644
--- a/ppapi/proxy/serialized_var.cc
+++ b/ppapi/proxy/serialized_var.cc
@@ -147,7 +147,8 @@ void SerializedVar::Inner::WriteToMessage(IPC::Message* m) const {
}
}
-bool SerializedVar::Inner::ReadFromMessage(const IPC::Message* m, void** iter) {
+bool SerializedVar::Inner::ReadFromMessage(const IPC::Message* m,
+ PickleIterator* iter) {
#ifndef NDEBUG
// We should only deserialize something once or will end up with leaked
// references.
diff --git a/ppapi/proxy/serialized_var.h b/ppapi/proxy/serialized_var.h
index 28b7c8b..ffcf0da 100644
--- a/ppapi/proxy/serialized_var.h
+++ b/ppapi/proxy/serialized_var.h
@@ -14,6 +14,8 @@
#include "ppapi/c/pp_var.h"
#include "ppapi/proxy/ppapi_proxy_export.h"
+class PickleIterator;
+
namespace IPC {
class Message;
}
@@ -72,7 +74,7 @@ class PPAPI_PROXY_EXPORT SerializedVar {
void WriteToMessage(IPC::Message* m) const {
inner_->WriteToMessage(m);
}
- bool ReadFromMessage(const IPC::Message* m, void** iter) {
+ bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter) {
return inner_->ReadFromMessage(m, iter);
}
@@ -106,7 +108,7 @@ class PPAPI_PROXY_EXPORT SerializedVar {
void ForceSetVarValueForTest(PP_Var value);
void WriteToMessage(IPC::Message* m) const;
- bool ReadFromMessage(const IPC::Message* m, void** iter);
+ bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter);
// Sets the cleanup mode. See the CleanupMode enum below. These functions
// are not just a simple setter in order to require that the appropriate
diff --git a/ui/base/clipboard/clipboard_unittest.cc b/ui/base/clipboard/clipboard_unittest.cc
index f00d4fd..c586d51 100644
--- a/ui/base/clipboard/clipboard_unittest.cc
+++ b/ui/base/clipboard/clipboard_unittest.cc
@@ -445,7 +445,7 @@ TEST_F(ClipboardTest, DataTest) {
ASSERT_FALSE(output.empty());
Pickle read_pickle(output.data(), output.size());
- void* iter = NULL;
+ PickleIterator iter(read_pickle);
std::string unpickled_string;
ASSERT_TRUE(read_pickle.ReadString(&iter, &unpickled_string));
EXPECT_EQ(payload, unpickled_string);
@@ -482,7 +482,7 @@ TEST_F(ClipboardTest, MultipleDataTest) {
ASSERT_FALSE(output2.empty());
Pickle read_pickle2(output2.data(), output2.size());
- void* iter2 = NULL;
+ PickleIterator iter2(read_pickle2);
std::string unpickled_string2;
ASSERT_TRUE(read_pickle2.ReadString(&iter2, &unpickled_string2));
EXPECT_EQ(payload2, unpickled_string2);
@@ -504,7 +504,7 @@ TEST_F(ClipboardTest, MultipleDataTest) {
ASSERT_FALSE(output1.empty());
Pickle read_pickle1(output1.data(), output1.size());
- void* iter1 = NULL;
+ PickleIterator iter1(read_pickle1);
std::string unpickled_string1;
ASSERT_TRUE(read_pickle1.ReadString(&iter1, &unpickled_string1));
EXPECT_EQ(payload1, unpickled_string1);
diff --git a/ui/base/clipboard/custom_data_helper.cc b/ui/base/clipboard/custom_data_helper.cc
index 88abf0f..5200de8 100644
--- a/ui/base/clipboard/custom_data_helper.cc
+++ b/ui/base/clipboard/custom_data_helper.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -19,24 +19,20 @@ namespace {
class SkippablePickle : public Pickle {
public:
SkippablePickle(const void* data, size_t data_len);
- bool SkipString16(void** iter);
+ bool SkipString16(PickleIterator* iter);
};
SkippablePickle::SkippablePickle(const void* data, size_t data_len)
: Pickle(reinterpret_cast<const char*>(data), data_len) {
}
-bool SkippablePickle::SkipString16(void** iter) {
+bool SkippablePickle::SkipString16(PickleIterator* iter) {
DCHECK(iter);
int len;
if (!ReadLength(iter, &len))
return false;
- if (!IteratorHasRoomFor(*iter, len * sizeof(char16)))
- return false;
-
- UpdateIter(iter, len * sizeof(char16));
- return true;
+ return iter->SkipBytes(len * sizeof(char16));
}
} // namespace
@@ -45,7 +41,7 @@ void ReadCustomDataTypes(const void* data,
size_t data_length,
std::vector<string16>* types) {
SkippablePickle pickle(data, data_length);
- void* iter = NULL;
+ PickleIterator iter(pickle);
size_t size = 0;
if (!pickle.ReadSize(&iter, &size))
@@ -71,7 +67,7 @@ void ReadCustomDataForType(const void* data,
const string16& type,
string16* result) {
SkippablePickle pickle(data, data_length);
- void* iter = NULL;
+ PickleIterator iter(pickle);
size_t size = 0;
if (!pickle.ReadSize(&iter, &size))
@@ -94,7 +90,7 @@ void ReadCustomDataIntoMap(const void* data,
size_t data_length,
std::map<string16, string16>* result) {
Pickle pickle(reinterpret_cast<const char*>(data), data_length);
- void* iter = NULL;
+ PickleIterator iter(pickle);
size_t size = 0;
if (!pickle.ReadSize(&iter, &size))
diff --git a/ui/base/dragdrop/gtk_dnd_util.cc b/ui/base/dragdrop/gtk_dnd_util.cc
index d70aac8..71d6923 100644
--- a/ui/base/dragdrop/gtk_dnd_util.cc
+++ b/ui/base/dragdrop/gtk_dnd_util.cc
@@ -216,7 +216,7 @@ bool ExtractNamedURL(GtkSelectionData* selection_data,
reinterpret_cast<const char*>(
gtk_selection_data_get_data(selection_data)),
gtk_selection_data_get_length(selection_data));
- void* iter = NULL;
+ PickleIterator iter(data);
std::string title_utf8, url_utf8;
if (!data.ReadString(&iter, &title_utf8) ||
!data.ReadString(&iter, &url_utf8)) {
diff --git a/ui/base/dragdrop/os_exchange_data_win_unittest.cc b/ui/base/dragdrop/os_exchange_data_win_unittest.cc
index 42b5daf..abc67c7 100644
--- a/ui/base/dragdrop/os_exchange_data_win_unittest.cc
+++ b/ui/base/dragdrop/os_exchange_data_win_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -350,11 +350,11 @@ TEST(OSExchangeDataTest, TestPickledData) {
Pickle restored_pickle;
EXPECT_TRUE(copy.GetPickledData(test_cf, &restored_pickle));
- void* p_iterator = NULL;
+ PickleIterator iterator(restored_pickle);
int value;
- EXPECT_TRUE(restored_pickle.ReadInt(&p_iterator, &value));
+ EXPECT_TRUE(restored_pickle.ReadInt(&iterator, &value));
EXPECT_EQ(1, value);
- EXPECT_TRUE(restored_pickle.ReadInt(&p_iterator, &value));
+ EXPECT_TRUE(restored_pickle.ReadInt(&iterator, &value));
EXPECT_EQ(2, value);
}
diff --git a/webkit/fileapi/file_system_directory_database.cc b/webkit/fileapi/file_system_directory_database.cc
index 88152e2..217b98f 100644
--- a/webkit/fileapi/file_system_directory_database.cc
+++ b/webkit/fileapi/file_system_directory_database.cc
@@ -47,7 +47,7 @@ bool PickleFromFileInfo(
bool FileInfoFromPickle(
const Pickle& pickle,
fileapi::FileSystemDirectoryDatabase::FileInfo* info) {
- void* iter = NULL;
+ PickleIterator iter(pickle);
std::string data_path;
std::string name;
int64 internal_time;
diff --git a/webkit/fileapi/file_system_usage_cache.cc b/webkit/fileapi/file_system_usage_cache.cc
index 46bbdff..18d13c7 100644
--- a/webkit/fileapi/file_system_usage_cache.cc
+++ b/webkit/fileapi/file_system_usage_cache.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -131,7 +131,7 @@ int64 FileSystemUsageCache::Read(const FilePath& usage_file_path,
file_util::ReadFile(usage_file_path, buffer, kUsageFileSize))
return -1;
Pickle read_pickle(buffer, kUsageFileSize);
- void* iter = NULL;
+ PickleIterator iter(read_pickle);
int64 fs_usage;
if (!read_pickle.ReadBytes(&iter, &header, kUsageFileHeaderSize) ||
diff --git a/webkit/glue/glue_serialize.cc b/webkit/glue/glue_serialize.cc
index 04a4ac4..606ff61 100644
--- a/webkit/glue/glue_serialize.cc
+++ b/webkit/glue/glue_serialize.cc
@@ -32,16 +32,16 @@ namespace webkit_glue {
namespace {
struct SerializeObject {
- SerializeObject() : iter(NULL), version(0) {}
+ SerializeObject() : version(0) {}
SerializeObject(const char* data, int len)
- : pickle(data, len), iter(NULL), version(0) {}
+ : pickle(data, len), version(0) { iter = PickleIterator(pickle); }
std::string GetAsString() {
return std::string(static_cast<const char*>(pickle.data()), pickle.size());
}
Pickle pickle;
- mutable void* iter;
+ mutable PickleIterator iter;
mutable int version;
};
diff --git a/webkit/glue/npruntime_util.cc b/webkit/glue/npruntime_util.cc
index a408770e..4c448ae 100644
--- a/webkit/glue/npruntime_util.cc
+++ b/webkit/glue/npruntime_util.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -26,22 +26,22 @@ bool SerializeNPIdentifier(NPIdentifier identifier, Pickle* pickle) {
return pickle->WriteInt(number);
}
-bool DeserializeNPIdentifier(const Pickle& pickle, void** pickle_iter,
+bool DeserializeNPIdentifier(PickleIterator* pickle_iter,
NPIdentifier* identifier) {
bool is_string;
- if (!pickle.ReadBool(pickle_iter, &is_string))
+ if (!pickle_iter->ReadBool(&is_string))
return false;
if (is_string) {
const char* data;
int data_len;
- if (!pickle.ReadData(pickle_iter, &data, &data_len))
+ if (!pickle_iter->ReadData(&data, &data_len))
return false;
DCHECK_EQ((static_cast<size_t>(data_len)), strlen(data) + 1);
*identifier = WebBindings::getStringIdentifier(data);
} else {
int number;
- if (!pickle.ReadInt(pickle_iter, &number))
+ if (!pickle_iter->ReadInt(&number))
return false;
*identifier = WebBindings::getIntIdentifier(number);
}
diff --git a/webkit/glue/npruntime_util.h b/webkit/glue/npruntime_util.h
index 586aab1..401f771 100644
--- a/webkit/glue/npruntime_util.h
+++ b/webkit/glue/npruntime_util.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -9,14 +9,14 @@
#include "webkit/glue/webkit_glue_export.h"
class Pickle;
+class PickleIterator;
namespace webkit_glue {
// Efficiently serialize/deserialize a NPIdentifier
WEBKIT_GLUE_EXPORT bool SerializeNPIdentifier(NPIdentifier identifier,
Pickle* pickle);
-WEBKIT_GLUE_EXPORT bool DeserializeNPIdentifier(const Pickle& pickle,
- void** pickle_iter,
+WEBKIT_GLUE_EXPORT bool DeserializeNPIdentifier(PickleIterator* pickle_iter,
NPIdentifier* identifier);
} // namespace webkit_glue
diff --git a/webkit/glue/webcursor.cc b/webkit/glue/webcursor.cc
index 292ca0d..94c2781 100644
--- a/webkit/glue/webcursor.cc
+++ b/webkit/glue/webcursor.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -70,18 +70,18 @@ void WebCursor::GetCursorInfo(WebCursorInfo* cursor_info) const {
#endif
}
-bool WebCursor::Deserialize(const Pickle* pickle, void** iter) {
+bool WebCursor::Deserialize(PickleIterator* iter) {
int type, hotspot_x, hotspot_y, size_x, size_y, data_len;
const char* data;
// Leave |this| unmodified unless we are going to return success.
- if (!pickle->ReadInt(iter, &type) ||
- !pickle->ReadInt(iter, &hotspot_x) ||
- !pickle->ReadInt(iter, &hotspot_y) ||
- !pickle->ReadLength(iter, &size_x) ||
- !pickle->ReadLength(iter, &size_y) ||
- !pickle->ReadData(iter, &data, &data_len))
+ if (!iter->ReadInt(&type) ||
+ !iter->ReadInt(&hotspot_x) ||
+ !iter->ReadInt(&hotspot_y) ||
+ !iter->ReadLength(&size_x) ||
+ !iter->ReadLength(&size_y) ||
+ !iter->ReadData(&data, &data_len))
return false;
// Ensure the size is sane, and there is enough data.
@@ -111,7 +111,7 @@ bool WebCursor::Deserialize(const Pickle* pickle, void** iter) {
}
}
}
- return DeserializePlatformData(pickle, iter);
+ return DeserializePlatformData(iter);
}
bool WebCursor::Serialize(Pickle* pickle) const {
diff --git a/webkit/glue/webcursor.h b/webkit/glue/webcursor.h
index 0461a3c..0dfddcf 100644
--- a/webkit/glue/webcursor.h
+++ b/webkit/glue/webcursor.h
@@ -30,6 +30,7 @@ struct Cursor;
#endif
class Pickle;
+class PickleIterator;
namespace WebKit {
class WebImage;
@@ -55,7 +56,7 @@ class WEBKIT_GLUE_EXPORT WebCursor {
void GetCursorInfo(WebKit::WebCursorInfo* cursor_info) const;
// Serialization / De-serialization
- bool Deserialize(const Pickle* pickle, void** iter);
+ bool Deserialize(PickleIterator* iter);
bool Serialize(Pickle* pickle) const;
// Returns true if GetCustomCursor should be used to allocate a platform
@@ -114,7 +115,7 @@ class WEBKIT_GLUE_EXPORT WebCursor {
// Platform specific Serialization / De-serialization
bool SerializePlatformData(Pickle* pickle) const;
- bool DeserializePlatformData(const Pickle* pickle, void** iter);
+ bool DeserializePlatformData(PickleIterator* iter);
// Returns true if the platform data in the current cursor object
// matches that of the cursor passed in.
diff --git a/webkit/glue/webcursor_android.cc b/webkit/glue/webcursor_android.cc
index 774133b..54a8a1d 100644
--- a/webkit/glue/webcursor_android.cc
+++ b/webkit/glue/webcursor_android.cc
@@ -14,7 +14,7 @@ bool WebCursor::SerializePlatformData(Pickle* pickle) const {
return true;
}
-bool WebCursor::DeserializePlatformData(const Pickle* pickle, void** iter) {
+bool WebCursor::DeserializePlatformData(PickleIterator* iter) {
return true;
}
diff --git a/webkit/glue/webcursor_aura.cc b/webkit/glue/webcursor_aura.cc
index 7610aff..08719c1 100644
--- a/webkit/glue/webcursor_aura.cc
+++ b/webkit/glue/webcursor_aura.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -113,7 +113,7 @@ bool WebCursor::SerializePlatformData(Pickle* pickle) const {
return true;
}
-bool WebCursor::DeserializePlatformData(const Pickle* pickle, void** iter) {
+bool WebCursor::DeserializePlatformData(PickleIterator* iter) {
return true;
}
diff --git a/webkit/glue/webcursor_gtk.cc b/webkit/glue/webcursor_gtk.cc
index d46d6e2..e9b4a12 100644
--- a/webkit/glue/webcursor_gtk.cc
+++ b/webkit/glue/webcursor_gtk.cc
@@ -199,7 +199,7 @@ bool WebCursor::SerializePlatformData(Pickle* pickle) const {
return true;
}
-bool WebCursor::DeserializePlatformData(const Pickle* pickle, void** iter) {
+bool WebCursor::DeserializePlatformData(PickleIterator* iter) {
return true;
}
diff --git a/webkit/glue/webcursor_mac.mm b/webkit/glue/webcursor_mac.mm
index fe65480..1e72e0b 100644
--- a/webkit/glue/webcursor_mac.mm
+++ b/webkit/glue/webcursor_mac.mm
@@ -493,7 +493,7 @@ bool WebCursor::SerializePlatformData(Pickle* pickle) const {
return true;
}
-bool WebCursor::DeserializePlatformData(const Pickle* pickle, void** iter) {
+bool WebCursor::DeserializePlatformData(PickleIterator* iter) {
return true;
}
diff --git a/webkit/glue/webcursor_unittest.cc b/webkit/glue/webcursor_unittest.cc
index 00f2760..830905b 100644
--- a/webkit/glue/webcursor_unittest.cc
+++ b/webkit/glue/webcursor_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -26,8 +26,8 @@ TEST(WebCursorTest, OKCursorSerialization) {
ok_custom_pickle.WriteUInt32(0);
// Custom Windows message.
ok_custom_pickle.WriteUInt32(0);
- void* iter = NULL;
- EXPECT_TRUE(custom_cursor.Deserialize(&ok_custom_pickle, &iter));
+ PickleIterator iter(ok_custom_pickle);
+ EXPECT_TRUE(custom_cursor.Deserialize(&iter));
#if defined(TOOLKIT_USES_GTK)
// On GTK+ using platforms, we should get a real native GdkCursor object back
@@ -51,8 +51,8 @@ TEST(WebCursorTest, BrokenCursorSerialization) {
// Data len not including enough data for a 1x1 image.
short_custom_pickle.WriteInt(3);
short_custom_pickle.WriteUInt32(0);
- void* iter = NULL;
- EXPECT_FALSE(custom_cursor.Deserialize(&short_custom_pickle, &iter));
+ PickleIterator iter(short_custom_pickle);
+ EXPECT_FALSE(custom_cursor.Deserialize(&iter));
// This custom cursor has enough data but is too big.
Pickle large_custom_pickle;
@@ -68,8 +68,8 @@ TEST(WebCursorTest, BrokenCursorSerialization) {
large_custom_pickle.WriteInt(kTooBigSize * 4);
for (int i = 0; i < kTooBigSize; ++i)
large_custom_pickle.WriteUInt32(0);
- iter = NULL;
- EXPECT_FALSE(custom_cursor.Deserialize(&large_custom_pickle, &iter));
+ iter = PickleIterator(large_custom_pickle);
+ EXPECT_FALSE(custom_cursor.Deserialize(&iter));
// This custom cursor uses negative lengths.
Pickle neg_custom_pickle;
@@ -85,8 +85,8 @@ TEST(WebCursorTest, BrokenCursorSerialization) {
neg_custom_pickle.WriteUInt32(0);
// Custom Windows message.
neg_custom_pickle.WriteUInt32(0);
- iter = NULL;
- EXPECT_FALSE(custom_cursor.Deserialize(&neg_custom_pickle, &iter));
+ iter = PickleIterator(neg_custom_pickle);
+ EXPECT_FALSE(custom_cursor.Deserialize(&iter));
}
#if defined(OS_WIN)
@@ -97,8 +97,8 @@ TEST(WebCursorTest, WindowsCursorConversion) {
win32_custom_cursor.InitFromExternalCursor(
reinterpret_cast<HCURSOR>(1000));
EXPECT_TRUE(win32_custom_cursor.Serialize(&win32_custom_pickle));
- void* iter = NULL;
- EXPECT_TRUE(custom_cursor.Deserialize(&win32_custom_pickle, &iter));
+ PickleIterator iter(win32_custom_pickle);
+ EXPECT_TRUE(custom_cursor.Deserialize(&iter));
EXPECT_EQ(reinterpret_cast<HCURSOR>(1000), custom_cursor.GetCursor(NULL));
}
#endif // OS_WIN
@@ -121,8 +121,8 @@ TEST(WebCursorTest, ClampHotspot) {
ok_custom_pickle.WriteUInt32(0);
// Custom Windows message.
ok_custom_pickle.WriteUInt32(0);
- void* iter = NULL;
- ASSERT_TRUE(custom_cursor.Deserialize(&ok_custom_pickle, &iter));
+ PickleIterator iter(ok_custom_pickle);
+ ASSERT_TRUE(custom_cursor.Deserialize(&iter));
// Convert to WebCursorInfo, make sure the hotspot got clamped.
WebCursorInfo info;
@@ -154,8 +154,8 @@ TEST(WebCursorTest, EmptyImage) {
// Make sure we can read this on all platforms; it is technicaally a valid
// cursor.
- void* iter = NULL;
- ASSERT_TRUE(custom_cursor.Deserialize(&broken_cursor_pickle, &iter));
+ PickleIterator iter(broken_cursor_pickle);
+ ASSERT_TRUE(custom_cursor.Deserialize(&iter));
#if defined(TOOLKIT_USES_GTK)
// On GTK+ using platforms, we make sure that we get NULL back from this
diff --git a/webkit/glue/webcursor_win.cc b/webkit/glue/webcursor_win.cc
index 4d8e520..9b334a8 100644
--- a/webkit/glue/webcursor_win.cc
+++ b/webkit/glue/webcursor_win.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -216,8 +216,8 @@ bool WebCursor::SerializePlatformData(Pickle* pickle) const {
return pickle->WriteUInt32(reinterpret_cast<uint32>(external_cursor_));
}
-bool WebCursor::DeserializePlatformData(const Pickle* pickle, void** iter) {
- return pickle->ReadUInt32(iter, reinterpret_cast<uint32*>(&external_cursor_));
+bool WebCursor::DeserializePlatformData(PickleIterator* iter) {
+ return iter->ReadUInt32(reinterpret_cast<uint32*>(&external_cursor_));
}
bool WebCursor::IsPlatformDataEqual(const WebCursor& other) const {