1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CONTENT_COMMON_PAGE_STATE_SERIALIZATION_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CONTENT_COMMON_PAGE_STATE_SERIALIZATION_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector> 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/nullable_string16.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/common/content_export.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/platform/WebHTTPBody.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/point.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedHttpBodyElement { 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebKit::WebHTTPBody::Element::Type type; 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string data; 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 file_path; 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL url; 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 file_start; 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 file_length; 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch double file_modification_time; 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedHttpBodyElement(); 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedHttpBodyElement(); 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedHttpBody { 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 http_content_type; 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<ExplodedHttpBodyElement> elements; 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 identifier; 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool contains_passwords; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_null; 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedHttpBody(); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedHttpBody(); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedFrameState { 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 url_string; 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 original_url_string; 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 referrer; 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 target; 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 parent; 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 title; 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 alternate_title; 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 state_object; 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<base::NullableString16> document_state; 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Point scroll_offset; 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 item_sequence_number; 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 document_sequence_number; 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int visit_count; 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch double visited_time; 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch double page_scale_factor; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_target_item; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedHttpBody http_body; 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<ExplodedFrameState> children; 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedFrameState(); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedFrameState(); 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedPageState { 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<base::NullableString16> referenced_files; 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedFrameState top; 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedPageState(); 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedPageState(); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochCONTENT_EXPORT bool DecodePageState(const std::string& encoded, 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedPageState* exploded); 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochCONTENT_EXPORT bool EncodePageState(const ExplodedPageState& exploded, 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string* encoded); 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID) 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochCONTENT_EXPORT bool DecodePageStateWithDeviceScaleFactorForTesting( 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& encoded, 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float device_scale_factor, 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedPageState* exploded); 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CONTENT_COMMON_PAGE_STATE_SERIALIZATION_H_ 89