| Index: components/sessions/core/serialized_navigation_entry.cc
|
| diff --git a/components/sessions/core/serialized_navigation_entry.cc b/components/sessions/core/serialized_navigation_entry.cc
|
| index 4f4124c598a5e7c50be2ed812a71946ec0aa6b33..02139965c445f9757dadd9b1bae718f0597034b3 100644
|
| --- a/components/sessions/core/serialized_navigation_entry.cc
|
| +++ b/components/sessions/core/serialized_navigation_entry.cc
|
| @@ -182,6 +182,17 @@ void WriteString16ToPickle(base::Pickle* pickle,
|
| }
|
| }
|
|
|
| +void WriteStringMapToPickle(base::Pickle* pickle,
|
| + int* bytes_written,
|
| + int max_bytes,
|
| + const std::map<std::string, std::string>& map) {
|
| + pickle->WriteInt(map.size());
|
| + for (const auto entry : map) {
|
| + WriteStringToPickle(pickle, bytes_written, max_bytes, entry.first);
|
| + WriteStringToPickle(pickle, bytes_written, max_bytes, entry.second);
|
| + }
|
| +}
|
| +
|
| // A mask used for arbitrary boolean values needed to represent a
|
| // NavigationEntry. Currently only contains HAS_POST_DATA.
|
| //
|
| @@ -213,6 +224,7 @@ enum TypeMask {
|
| // search_terms_
|
| // http_status_code_
|
| // referrer_policy_
|
| +// extended_info_map_
|
|
|
| void SerializedNavigationEntry::WriteToPickle(int max_size,
|
| base::Pickle* pickle) const {
|
| @@ -257,6 +269,8 @@ void SerializedNavigationEntry::WriteToPickle(int max_size,
|
| pickle->WriteInt(http_status_code_);
|
|
|
| pickle->WriteInt(referrer_policy_);
|
| +
|
| + WriteStringMapToPickle(pickle, &bytes_written, max_size, extended_info_map_);
|
| }
|
|
|
| bool SerializedNavigationEntry::ReadFromPickle(base::PickleIterator* iterator) {
|
| @@ -335,6 +349,19 @@ bool SerializedNavigationEntry::ReadFromPickle(base::PickleIterator* iterator) {
|
| SerializedNavigationDriver::Get()->StripReferrerFromPageState(
|
| encoded_page_state_);
|
| }
|
| +
|
| + int extended_info_map_size = 0;
|
| + if (iterator->ReadInt(&extended_info_map_size) &&
|
| + extended_info_map_size >= 0) {
|
| + for (int i = 0; i < extended_info_map_size; ++i) {
|
| + std::string key;
|
| + std::string value;
|
| + if (iterator->ReadString(&key) && iterator->ReadString(&value))
|
| + extended_info_map_[key] = value;
|
| + }
|
| + } else {
|
| + extended_info_map_.clear();
|
| + }
|
| }
|
|
|
| SerializedNavigationDriver::Get()->Sanitize(this);
|
|
|