Index: webkit/glue/glue_serialize_deprecated.cc |
diff --git a/webkit/glue/glue_serialize_deprecated.cc b/webkit/glue/glue_serialize_deprecated.cc |
deleted file mode 100644 |
index 62d4c8984f289a7ac0670d77d8ccd614b560d87a..0000000000000000000000000000000000000000 |
--- a/webkit/glue/glue_serialize_deprecated.cc |
+++ /dev/null |
@@ -1,670 +0,0 @@ |
-// 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. |
- |
-#include "webkit/glue/glue_serialize_deprecated.h" |
- |
-#include <string> |
- |
-#include "base/pickle.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "googleurl/src/gurl.h" |
-#include "third_party/WebKit/public/platform/WebData.h" |
-#include "third_party/WebKit/public/platform/WebHTTPBody.h" |
-#include "third_party/WebKit/public/platform/WebPoint.h" |
-#include "third_party/WebKit/public/platform/WebString.h" |
-#include "third_party/WebKit/public/platform/WebURL.h" |
-#include "third_party/WebKit/public/platform/WebVector.h" |
-#include "third_party/WebKit/public/web/WebHistoryItem.h" |
-#include "third_party/WebKit/public/web/WebSerializedScriptValue.h" |
-#include "ui/gfx/screen.h" |
-#include "webkit/base/file_path_string_conversions.h" |
- |
-using WebKit::WebData; |
-using WebKit::WebHistoryItem; |
-using WebKit::WebHTTPBody; |
-using WebKit::WebPoint; |
-using WebKit::WebSerializedScriptValue; |
-using WebKit::WebString; |
-using WebKit::WebUChar; |
-using WebKit::WebVector; |
- |
-namespace webkit_glue { |
- |
-namespace { |
- |
-enum IncludeFormData { |
- NEVER_INCLUDE_FORM_DATA, |
- INCLUDE_FORM_DATA_WITHOUT_PASSWORDS, |
- ALWAYS_INCLUDE_FORM_DATA |
-}; |
- |
-struct SerializeObject { |
- SerializeObject() : version(0) {} |
- SerializeObject(const char* data, int len) |
- : 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 PickleIterator iter; |
- mutable int version; |
-}; |
- |
-// TODO(mpcomplete): obsolete versions 1 and 2 after 1/1/2008. |
-// Version ID used in reading/writing history items. |
-// 1: Initial revision. |
-// 2: Added case for NULL string versus "". Version 2 code can read Version 1 |
-// data, but not vice versa. |
-// 3: Version 2 was broken, it stored number of WebUChars, not number of bytes. |
-// This version checks and reads v1 and v2 correctly. |
-// 4: Adds support for storing FormData::identifier(). |
-// 5: Adds support for empty FormData |
-// 6: Adds support for documentSequenceNumbers |
-// 7: Adds support for stateObject |
-// 8: Adds support for file range and modification time |
-// 9: Adds support for itemSequenceNumbers |
-// 10: Adds support for blob |
-// 11: Adds support for pageScaleFactor |
-// 12: Adds support for hasPasswordData in HTTP body |
-// 13: Adds support for URL (FileSystem URL) |
-// 14: Adds list of referenced files, version written only for first item. |
-// Should be const, but unit tests may modify it. |
-// |
-// NOTE: If the version is -1, then the pickle contains only a URL string. |
-// See CreateHistoryStateForURL. |
-// |
-int kVersion = 14; |
- |
-// A bunch of convenience functions to read/write to SerializeObjects. |
-// The serializers assume the input data is in the correct format and so does |
-// no error checking. |
-void WriteData(const void* data, int length, SerializeObject* obj) { |
- obj->pickle.WriteData(static_cast<const char*>(data), length); |
-} |
- |
-void ReadData(const SerializeObject* obj, const void** data, int* length) { |
- const char* tmp; |
- if (obj->pickle.ReadData(&obj->iter, &tmp, length)) { |
- *data = tmp; |
- } else { |
- *data = NULL; |
- *length = 0; |
- } |
-} |
- |
-bool ReadBytes(const SerializeObject* obj, const void** data, int length) { |
- const char *tmp; |
- if (!obj->pickle.ReadBytes(&obj->iter, &tmp, length)) |
- return false; |
- *data = tmp; |
- return true; |
-} |
- |
-void WriteInteger(int data, SerializeObject* obj) { |
- obj->pickle.WriteInt(data); |
-} |
- |
-int ReadInteger(const SerializeObject* obj) { |
- int tmp; |
- if (obj->pickle.ReadInt(&obj->iter, &tmp)) |
- return tmp; |
- return 0; |
-} |
- |
-void ConsumeInteger(const SerializeObject* obj) { |
- int unused ALLOW_UNUSED = ReadInteger(obj); |
-} |
- |
-void WriteInteger64(int64 data, SerializeObject* obj) { |
- obj->pickle.WriteInt64(data); |
-} |
- |
-int64 ReadInteger64(const SerializeObject* obj) { |
- int64 tmp = 0; |
- obj->pickle.ReadInt64(&obj->iter, &tmp); |
- return tmp; |
-} |
- |
-void WriteReal(double data, SerializeObject* obj) { |
- WriteData(&data, sizeof(double), obj); |
-} |
- |
-double ReadReal(const SerializeObject* obj) { |
- const void* tmp = NULL; |
- int length = 0; |
- double value = 0.0; |
- ReadData(obj, &tmp, &length); |
- if (tmp && length >= static_cast<int>(sizeof(double))) { |
- // Use memcpy, as tmp may not be correctly aligned. |
- memcpy(&value, tmp, sizeof(double)); |
- } |
- return value; |
-} |
- |
-void WriteBoolean(bool data, SerializeObject* obj) { |
- obj->pickle.WriteInt(data ? 1 : 0); |
-} |
- |
-bool ReadBoolean(const SerializeObject* obj) { |
- bool tmp; |
- if (obj->pickle.ReadBool(&obj->iter, &tmp)) |
- return tmp; |
- return false; |
-} |
- |
-void WriteGURL(const GURL& url, SerializeObject* obj) { |
- obj->pickle.WriteString(url.possibly_invalid_spec()); |
-} |
- |
-GURL ReadGURL(const SerializeObject* obj) { |
- std::string spec; |
- if (obj->pickle.ReadString(&obj->iter, &spec)) |
- return GURL(spec); |
- return GURL(); |
-} |
- |
-// Read/WriteString pickle the WebString as <int length><WebUChar* data>. |
-// If length == -1, then the WebString itself is NULL (WebString()). |
-// Otherwise the length is the number of WebUChars (not bytes) in the WebString. |
-void WriteString(const WebString& str, SerializeObject* obj) { |
- base::string16 string = str; |
- const char16* data = string.data(); |
- size_t length_in_uchars = string.length(); |
- size_t length_in_bytes = length_in_uchars * sizeof(char16); |
- switch (kVersion) { |
- case 1: |
- // Version 1 writes <length in bytes><string data>. |
- // It saves WebString() and "" as "". |
- obj->pickle.WriteInt(length_in_bytes); |
- obj->pickle.WriteBytes(data, length_in_bytes); |
- break; |
- case 2: |
- // Version 2 writes <length in WebUChar><string data>. |
- // It uses -1 in the length field to mean WebString(). |
- if (str.isNull()) { |
- obj->pickle.WriteInt(-1); |
- } else { |
- obj->pickle.WriteInt(length_in_uchars); |
- obj->pickle.WriteBytes(data, length_in_bytes); |
- } |
- break; |
- default: |
- // Version 3+ writes <length in bytes><string data>. |
- // It uses -1 in the length field to mean WebString(). |
- if (str.isNull()) { |
- obj->pickle.WriteInt(-1); |
- } else { |
- obj->pickle.WriteInt(length_in_bytes); |
- obj->pickle.WriteBytes(data, length_in_bytes); |
- } |
- break; |
- } |
-} |
- |
-// This reads a serialized WebString from obj. If a string can't be read, |
-// WebString() is returned. |
-const WebUChar* ReadStringNoCopy(const SerializeObject* obj, int* num_chars) { |
- int length; |
- |
- // Versions 1, 2, and 3 all start with an integer. |
- if (!obj->pickle.ReadInt(&obj->iter, &length)) |
- return NULL; |
- |
- // Starting with version 2, -1 means WebString(). |
- if (length == -1) |
- return NULL; |
- |
- // In version 2, the length field was the length in WebUChars. |
- // In version 1 and 3 it is the length in bytes. |
- int bytes = length; |
- if (obj->version == 2) |
- bytes *= sizeof(WebUChar); |
- |
- const void* data; |
- if (!ReadBytes(obj, &data, bytes)) |
- return NULL; |
- |
- if (num_chars) |
- *num_chars = bytes / sizeof(WebUChar); |
- return static_cast<const WebUChar*>(data); |
-} |
- |
-WebString ReadString(const SerializeObject* obj) { |
- int num_chars; |
- const WebUChar* chars = ReadStringNoCopy(obj, &num_chars); |
- return chars ? WebString(chars, num_chars) : WebString(); |
-} |
- |
-void ConsumeString(const SerializeObject* obj) { |
- const WebUChar* unused ALLOW_UNUSED = ReadStringNoCopy(obj, NULL); |
-} |
- |
-// Writes a Vector of Strings into a SerializeObject for serialization. |
-void WriteStringVector( |
- const WebVector<WebString>& data, SerializeObject* obj) { |
- WriteInteger(static_cast<int>(data.size()), obj); |
- for (size_t i = 0, c = data.size(); i < c; ++i) { |
- unsigned ui = static_cast<unsigned>(i); // sigh |
- WriteString(data[ui], obj); |
- } |
-} |
- |
-WebVector<WebString> ReadStringVector(const SerializeObject* obj) { |
- int num_elements = ReadInteger(obj); |
- WebVector<WebString> result(static_cast<size_t>(num_elements)); |
- for (int i = 0; i < num_elements; ++i) |
- result[i] = ReadString(obj); |
- return result; |
-} |
- |
-void ConsumeStringVector(const SerializeObject* obj) { |
- int num_elements = ReadInteger(obj); |
- for (int i = 0; i < num_elements; ++i) |
- ConsumeString(obj); |
-} |
- |
-// Writes a FormData object into a SerializeObject for serialization. |
-void WriteFormData(const WebHTTPBody& http_body, SerializeObject* obj) { |
- WriteBoolean(!http_body.isNull(), obj); |
- |
- if (http_body.isNull()) |
- return; |
- |
- WriteInteger(static_cast<int>(http_body.elementCount()), obj); |
- WebHTTPBody::Element element; |
- for (size_t i = 0; http_body.elementAt(i, element); ++i) { |
- WriteInteger(element.type, obj); |
- if (element.type == WebHTTPBody::Element::TypeData) { |
- WriteData(element.data.data(), static_cast<int>(element.data.size()), |
- obj); |
- } else if (element.type == WebHTTPBody::Element::TypeFile) { |
- WriteString(element.filePath, obj); |
- WriteInteger64(element.fileStart, obj); |
- WriteInteger64(element.fileLength, obj); |
- WriteReal(element.modificationTime, obj); |
- } else if (element.type == WebHTTPBody::Element::TypeURL) { |
- WriteGURL(element.url, obj); |
- WriteInteger64(element.fileStart, obj); |
- WriteInteger64(element.fileLength, obj); |
- WriteReal(element.modificationTime, obj); |
- } else { |
- WriteGURL(element.url, obj); |
- } |
- } |
- WriteInteger64(http_body.identifier(), obj); |
- WriteBoolean(http_body.containsPasswordData(), obj); |
-} |
- |
-WebHTTPBody ReadFormData(const SerializeObject* obj) { |
- // In newer versions, an initial boolean indicates if we have form data. |
- if (obj->version >= 5 && !ReadBoolean(obj)) |
- return WebHTTPBody(); |
- |
- // In older versions, 0 elements implied no form data. |
- int num_elements = ReadInteger(obj); |
- if (num_elements == 0 && obj->version < 5) |
- return WebHTTPBody(); |
- |
- WebHTTPBody http_body; |
- http_body.initialize(); |
- |
- for (int i = 0; i < num_elements; ++i) { |
- int type = ReadInteger(obj); |
- if (type == WebHTTPBody::Element::TypeData) { |
- const void* data; |
- int length = -1; |
- ReadData(obj, &data, &length); |
- if (length >= 0) |
- http_body.appendData(WebData(static_cast<const char*>(data), length)); |
- } else if (type == WebHTTPBody::Element::TypeFile) { |
- WebString file_path = ReadString(obj); |
- long long file_start = 0; |
- long long file_length = -1; |
- double modification_time = 0.0; |
- if (obj->version >= 8) { |
- file_start = ReadInteger64(obj); |
- file_length = ReadInteger64(obj); |
- modification_time = ReadReal(obj); |
- } |
- http_body.appendFileRange(file_path, file_start, file_length, |
- modification_time); |
- } else if (type == WebHTTPBody::Element::TypeURL) { |
- GURL url = ReadGURL(obj); |
- long long file_start = 0; |
- long long file_length = -1; |
- double modification_time = 0.0; |
- file_start = ReadInteger64(obj); |
- file_length = ReadInteger64(obj); |
- modification_time = ReadReal(obj); |
- http_body.appendURLRange(url, file_start, file_length, |
- modification_time); |
- } else if (obj->version >= 10) { |
- GURL blob_url = ReadGURL(obj); |
- http_body.appendBlob(blob_url); |
- } |
- } |
- if (obj->version >= 4) |
- http_body.setIdentifier(ReadInteger64(obj)); |
- |
- if (obj->version >= 12) |
- http_body.setContainsPasswordData(ReadBoolean(obj)); |
- |
- return http_body; |
-} |
- |
-// Writes the HistoryItem data into the SerializeObject object for |
-// serialization. |
-void WriteHistoryItem( |
- const WebHistoryItem& item, SerializeObject* obj, bool is_top) { |
- // WARNING: This data may be persisted for later use. As such, care must be |
- // taken when changing the serialized format. If a new field needs to be |
- // written, only adding at the end will make it easier to deal with loading |
- // older versions. Similarly, this should NOT save fields with sensitive |
- // data, such as password fields. |
- |
- if (kVersion >= 14) { |
- if (is_top) { |
- WriteInteger(kVersion, obj); |
- |
- // Insert the list of referenced files, so they can be extracted easily |
- // from the serialized data (avoiding the need to call into Blink again). |
- WriteStringVector(item.getReferencedFilePaths(), obj); |
- } |
- } else { |
- WriteInteger(kVersion, obj); |
- } |
- |
- WriteString(item.urlString(), obj); |
- WriteString(item.originalURLString(), obj); |
- WriteString(item.target(), obj); |
- WriteString(item.parent(), obj); |
- WriteString(item.title(), obj); |
- WriteString(item.alternateTitle(), obj); |
- WriteReal(item.lastVisitedTime(), obj); |
- WriteInteger(item.scrollOffset().x, obj); |
- WriteInteger(item.scrollOffset().y, obj); |
- WriteBoolean(item.isTargetItem(), obj); |
- WriteInteger(item.visitCount(), obj); |
- WriteString(item.referrer(), obj); |
- |
- WriteStringVector(item.documentState(), obj); |
- |
- if (kVersion >= 11) |
- WriteReal(item.pageScaleFactor(), obj); |
- if (kVersion >= 9) |
- WriteInteger64(item.itemSequenceNumber(), obj); |
- if (kVersion >= 6) |
- WriteInteger64(item.documentSequenceNumber(), obj); |
- if (kVersion >= 7) { |
- bool has_state_object = !item.stateObject().isNull(); |
- WriteBoolean(has_state_object, obj); |
- if (has_state_object) |
- WriteString(item.stateObject().toString(), obj); |
- } |
- |
- WriteFormData(item.httpBody(), obj); |
- WriteString(item.httpContentType(), obj); |
- if (kVersion < 14) |
- WriteString(item.referrer(), obj); |
- |
- // Subitems |
- const WebVector<WebHistoryItem>& children = item.children(); |
- WriteInteger(static_cast<int>(children.size()), obj); |
- for (size_t i = 0, c = children.size(); i < c; ++i) |
- WriteHistoryItem(children[i], obj, false); |
-} |
- |
-// Creates a new HistoryItem tree based on the serialized string. |
-// Assumes the data is in the format returned by WriteHistoryItem. |
-WebHistoryItem ReadHistoryItem( |
- const SerializeObject* obj, |
- IncludeFormData include_form_data, |
- bool include_scroll_offset, |
- bool is_top) { |
- if (is_top) { |
- obj->version = ReadInteger(obj); |
- |
- if (obj->version == -1) { |
- GURL url = ReadGURL(obj); |
- WebHistoryItem item; |
- item.initialize(); |
- item.setURLString(WebString::fromUTF8(url.possibly_invalid_spec())); |
- return item; |
- } |
- |
- if (obj->version > kVersion || obj->version < 1) |
- return WebHistoryItem(); |
- |
- if (obj->version >= 14) |
- ConsumeStringVector(obj); // Skip over list of referenced files. |
- } else if (obj->version < 14) { |
- ConsumeInteger(obj); // Skip over redundant version field. |
- } |
- |
- WebHistoryItem item; |
- item.initialize(); |
- |
- item.setURLString(ReadString(obj)); |
- item.setOriginalURLString(ReadString(obj)); |
- item.setTarget(ReadString(obj)); |
- item.setParent(ReadString(obj)); |
- item.setTitle(ReadString(obj)); |
- item.setAlternateTitle(ReadString(obj)); |
- item.setLastVisitedTime(ReadReal(obj)); |
- |
- int x = ReadInteger(obj); |
- int y = ReadInteger(obj); |
- if (include_scroll_offset) |
- item.setScrollOffset(WebPoint(x, y)); |
- |
- item.setIsTargetItem(ReadBoolean(obj)); |
- item.setVisitCount(ReadInteger(obj)); |
- item.setReferrer(ReadString(obj)); |
- |
- item.setDocumentState(ReadStringVector(obj)); |
- |
- if (obj->version >= 11) |
- item.setPageScaleFactor(ReadReal(obj)); |
- if (obj->version >= 9) |
- item.setItemSequenceNumber(ReadInteger64(obj)); |
- if (obj->version >= 6) |
- item.setDocumentSequenceNumber(ReadInteger64(obj)); |
- if (obj->version >= 7) { |
- bool has_state_object = ReadBoolean(obj); |
- if (has_state_object) { |
- item.setStateObject( |
- WebSerializedScriptValue::fromString(ReadString(obj))); |
- } |
- } |
- |
- // The extra referrer string is read for backwards compat. |
- const WebHTTPBody& http_body = ReadFormData(obj); |
- const WebString& http_content_type = ReadString(obj); |
- |
- if (obj->version < 14) |
- ConsumeString(obj); // Skip unused referrer string. |
- |
- if (include_form_data == ALWAYS_INCLUDE_FORM_DATA || |
- (include_form_data == INCLUDE_FORM_DATA_WITHOUT_PASSWORDS && |
- !http_body.isNull() && !http_body.containsPasswordData())) { |
- // Include the full HTTP body. |
- item.setHTTPBody(http_body); |
- item.setHTTPContentType(http_content_type); |
- } else if (!http_body.isNull()) { |
- // Don't include the data in the HTTP body, but include its identifier. This |
- // enables fetching data from the cache. |
- WebHTTPBody empty_http_body; |
- empty_http_body.initialize(); |
- empty_http_body.setIdentifier(http_body.identifier()); |
- item.setHTTPBody(empty_http_body); |
- } |
- |
-#if defined(OS_ANDROID) |
- if (obj->version == 11) { |
- // Now-unused values that shipped in this version of Chrome for Android when |
- // it was on a private branch. |
- ReadReal(obj); |
- ReadBoolean(obj); |
- |
- // In this version, pageScaleFactor included deviceScaleFactor and scroll |
- // offsets were premultiplied by pageScaleFactor. |
- if (item.pageScaleFactor()) { |
- if (include_scroll_offset) |
- item.setScrollOffset( |
- WebPoint(item.scrollOffset().x / item.pageScaleFactor(), |
- item.scrollOffset().y / item.pageScaleFactor())); |
- item.setPageScaleFactor(item.pageScaleFactor() / |
- gfx::Screen::GetNativeScreen()->GetPrimaryDisplay() |
- .device_scale_factor()); |
- } |
- } |
-#endif |
- |
- // Subitems |
- int num_children = ReadInteger(obj); |
- for (int i = 0; i < num_children; ++i) |
- item.appendToChildren(ReadHistoryItem(obj, |
- include_form_data, |
- include_scroll_offset, |
- false)); |
- |
- return item; |
-} |
- |
-// Reconstruct a HistoryItem from a string, using our JSON Value deserializer. |
-// This assumes that the given serialized string has all the required key,value |
-// pairs, and does minimal error checking. The form data of the post is restored |
-// if |include_form_data| is |ALWAYS_INCLUDE_FORM_DATA| or if the data doesn't |
-// contain passwords and |include_form_data| is |
-// |INCLUDE_FORM_DATA_WITHOUT_PASSWORDS|. Otherwise the form data is empty. If |
-// |include_scroll_offset| is true, the scroll offset is restored. |
-WebHistoryItem HistoryItemFromString( |
- const std::string& serialized_item, |
- IncludeFormData include_form_data, |
- bool include_scroll_offset) { |
- if (serialized_item.empty()) |
- return WebHistoryItem(); |
- |
- SerializeObject obj(serialized_item.data(), |
- static_cast<int>(serialized_item.length())); |
- return ReadHistoryItem(&obj, include_form_data, include_scroll_offset, true); |
-} |
- |
-void ToFilePathVector(const WebVector<WebString>& input, |
- std::vector<base::FilePath>* output) { |
- for (size_t i = 0; i < input.size(); ++i) |
- output->push_back(webkit_base::WebStringToFilePath(input[i])); |
-} |
- |
-} // namespace |
- |
-// Serialize a HistoryItem to a string, using our JSON Value serializer. |
-std::string HistoryItemToString(const WebHistoryItem& item) { |
- if (item.isNull()) |
- return std::string(); |
- |
- SerializeObject obj; |
- WriteHistoryItem(item, &obj, true); |
- return obj.GetAsString(); |
-} |
- |
-WebHistoryItem HistoryItemFromString(const std::string& serialized_item) { |
- return HistoryItemFromString(serialized_item, ALWAYS_INCLUDE_FORM_DATA, true); |
-} |
- |
-std::vector<base::FilePath> FilePathsFromHistoryState( |
- const std::string& content_state) { |
- // TODO(darin): We should avoid using the WebKit API here, so that we do not |
- // need to have WebKit initialized before calling this method. |
- |
- std::vector<base::FilePath> result; |
- |
- // In newer versions of the format, the set of referenced files is computed |
- // at serialization time. |
- SerializeObject obj(content_state.data(), |
- static_cast<int>(content_state.length())); |
- obj.version = ReadInteger(&obj); |
- |
- if (obj.version > kVersion || obj.version < 1) |
- return result; |
- |
- if (obj.version >= 14) { |
- ToFilePathVector(ReadStringVector(&obj), &result); |
- } else { |
- // TODO(darin): Delete this code path after we branch for M29. |
- const WebHistoryItem& item = |
- HistoryItemFromString(content_state, ALWAYS_INCLUDE_FORM_DATA, true); |
- if (!item.isNull()) |
- ToFilePathVector(item.getReferencedFilePaths(), &result); |
- } |
- return result; |
-} |
- |
-// For testing purposes only. |
-void HistoryItemToVersionedString(const WebHistoryItem& item, int version, |
- std::string* serialized_item) { |
- if (item.isNull()) { |
- serialized_item->clear(); |
- return; |
- } |
- |
- // Temporarily change the version. |
- int real_version = kVersion; |
- kVersion = version; |
- |
- SerializeObject obj; |
- WriteHistoryItem(item, &obj, true); |
- *serialized_item = obj.GetAsString(); |
- |
- kVersion = real_version; |
-} |
- |
-int HistoryItemCurrentVersion() { |
- return kVersion; |
-} |
- |
-std::string RemovePasswordDataFromHistoryState( |
- const std::string& content_state) { |
- // TODO(darin): We should avoid using the WebKit API here, so that we do not |
- // need to have WebKit initialized before calling this method. |
- const WebHistoryItem& item = |
- HistoryItemFromString( |
- content_state, INCLUDE_FORM_DATA_WITHOUT_PASSWORDS, true); |
- if (item.isNull()) { |
- // Couldn't parse the string, return an empty string. |
- return std::string(); |
- } |
- |
- return HistoryItemToString(item); |
-} |
- |
-std::string RemoveScrollOffsetFromHistoryState( |
- const std::string& content_state) { |
- // TODO(darin): We should avoid using the WebKit API here, so that we do not |
- // need to have WebKit initialized before calling this method. |
- const WebHistoryItem& item = |
- HistoryItemFromString(content_state, ALWAYS_INCLUDE_FORM_DATA, false); |
- if (item.isNull()) { |
- // Couldn't parse the string, return an empty string. |
- return std::string(); |
- } |
- |
- return HistoryItemToString(item); |
-} |
- |
-std::string CreateHistoryStateForURL(const GURL& url) { |
- // We avoid using the WebKit API here, so that we do not need to have WebKit |
- // initialized before calling this method. Instead, we write a simple |
- // serialization of the given URL with a dummy version number of -1. This |
- // will be interpreted by ReadHistoryItem as a request to create a default |
- // WebHistoryItem. |
- SerializeObject obj; |
- WriteInteger(-1, &obj); |
- WriteGURL(url, &obj); |
- return obj.GetAsString(); |
-} |
- |
-} // namespace webkit_glue |