| Index: content/public/common/page_state.cc
|
| diff --git a/content/public/common/page_state.cc b/content/public/common/page_state.cc
|
| index 7daaaac6546e046ac83bbd7968413e0bbba4b6ae..34771a680c247713ac17700fda24c71279dd3863 100644
|
| --- a/content/public/common/page_state.cc
|
| +++ b/content/public/common/page_state.cc
|
| @@ -4,13 +4,81 @@
|
|
|
| #include "content/public/common/page_state.h"
|
|
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "content/common/page_state_serialization.h"
|
| +
|
| namespace content {
|
| +namespace {
|
| +
|
| +PageState ToPageState(const ExplodedPageState& exploded) {
|
| + std::string encoded_data;
|
| + if (!EncodePageState(exploded, &encoded_data))
|
| + return PageState();
|
| +
|
| + return PageState::CreateFromEncodedData(encoded_data);
|
| +}
|
| +
|
| +void RecursivelyRemovePasswordData(ExplodedFrameState* frame_state) {
|
| + if (frame_state->http_body.contains_passwords)
|
| + frame_state->http_body = ExplodedHttpBody();
|
| +}
|
| +
|
| +void RecursivelyRemoveScrollOffset(ExplodedFrameState* frame_state) {
|
| + frame_state->scroll_offset = gfx::Point();
|
| +}
|
| +
|
| +} // namespace
|
|
|
| // static
|
| PageState PageState::CreateFromEncodedData(const std::string& data) {
|
| return PageState(data);
|
| }
|
|
|
| +// static
|
| +PageState PageState::CreateFromURL(const GURL& url) {
|
| + ExplodedPageState exploded_page_state;
|
| +
|
| + exploded_page_state.top.url_string =
|
| + exploded_page_state.top.original_url_string =
|
| + NullableString16(UTF8ToUTF16(url.possibly_invalid_spec()), false);
|
| +
|
| + return ToPageState(exploded_page_state);
|
| +}
|
| +
|
| +// static
|
| +PageState PageState::CreateForTesting(
|
| + const GURL& url,
|
| + bool body_contains_password_data,
|
| + const char* optional_body_data,
|
| + const base::FilePath* optional_body_file_path) {
|
| + ExplodedPageState exploded_page_state;
|
| +
|
| + exploded_page_state.top.url_string =
|
| + exploded_page_state.top.original_url_string =
|
| + NullableString16(UTF8ToUTF16(url.possibly_invalid_spec()), false);
|
| +
|
| + if (optional_body_data || optional_body_file_path) {
|
| + exploded_page_state.top.http_body.is_null = false;
|
| + if (optional_body_data) {
|
| + ExplodedHttpBodyElement element;
|
| + element.type = WebKit::WebHTTPBody::Element::TypeData;
|
| + element.data = optional_body_data;
|
| + exploded_page_state.top.http_body.elements.push_back(element);
|
| + }
|
| + if (optional_body_file_path) {
|
| + ExplodedHttpBodyElement element;
|
| + element.type = WebKit::WebHTTPBody::Element::TypeFile;
|
| + element.file_path = *optional_body_file_path;
|
| + exploded_page_state.top.http_body.elements.push_back(element);
|
| + exploded_page_state.referenced_files.push_back(*optional_body_file_path);
|
| + }
|
| + exploded_page_state.top.http_body.contains_passwords =
|
| + body_contains_password_data;
|
| + }
|
| +
|
| + return ToPageState(exploded_page_state);
|
| +}
|
| +
|
| PageState::PageState() {
|
| }
|
|
|
| @@ -26,6 +94,34 @@ const std::string& PageState::ToEncodedData() const {
|
| return data_;
|
| }
|
|
|
| +std::vector<base::FilePath> PageState::GetReferencedFiles() const {
|
| + ExplodedPageState exploded_page_state;
|
| + if (!DecodePageState(data_, &exploded_page_state))
|
| + return std::vector<base::FilePath>();
|
| +
|
| + return exploded_page_state.referenced_files;
|
| +}
|
| +
|
| +PageState PageState::RemovePasswordData() const {
|
| + ExplodedPageState exploded_page_state;
|
| + if (!DecodePageState(data_, &exploded_page_state))
|
| + return PageState(); // Oops!
|
| +
|
| + RecursivelyRemovePasswordData(&exploded_page_state.top);
|
| +
|
| + return ToPageState(exploded_page_state);
|
| +}
|
| +
|
| +PageState PageState::RemoveScrollOffset() const {
|
| + ExplodedPageState exploded_page_state;
|
| + if (!DecodePageState(data_, &exploded_page_state))
|
| + return PageState(); // Oops!
|
| +
|
| + RecursivelyRemoveScrollOffset(&exploded_page_state.top);
|
| +
|
| + return ToPageState(exploded_page_state);
|
| +}
|
| +
|
| PageState::PageState(const std::string& data)
|
| : data_(data) {
|
| // TODO(darin): Enable this DCHECK once tests have been fixed up to not pass
|
|
|