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" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebReferrerPolicy.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/point.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/point_f.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedHttpBodyElement { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebHTTPBody::Element::Type type; 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string data; 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 file_path; 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL filesystem_url; 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 file_start; 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 file_length; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch double file_modification_time; 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string blob_uuid; 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedHttpBodyElement(); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedHttpBodyElement(); 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedHttpBody { 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 http_content_type; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<ExplodedHttpBodyElement> elements; 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 identifier; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool contains_passwords; 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_null; 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedHttpBody(); 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedHttpBody(); 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedFrameState { 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 url_string; 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 referrer; 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 target; 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::NullableString16 state_object; 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<base::NullableString16> document_state; 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::PointF pinch_viewport_scroll_offset; 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Point scroll_offset; 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 item_sequence_number; 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 document_sequence_number; 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int64 frame_sequence_number; 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch double page_scale_factor; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebReferrerPolicy referrer_policy; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedHttpBody http_body; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<ExplodedFrameState> children; 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedFrameState(); 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExplodedFrameState(const ExplodedFrameState& other); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedFrameState(); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void operator=(const ExplodedFrameState& other); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)private: 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void assign(const ExplodedFrameState& other); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct CONTENT_EXPORT ExplodedPageState { 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<base::NullableString16> referenced_files; 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedFrameState top; 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedPageState(); 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ExplodedPageState(); 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochCONTENT_EXPORT bool DecodePageState(const std::string& encoded, 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedPageState* exploded); 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochCONTENT_EXPORT bool EncodePageState(const ExplodedPageState& exploded, 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string* encoded); 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_ANDROID) 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochCONTENT_EXPORT bool DecodePageStateWithDeviceScaleFactorForTesting( 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& encoded, 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float device_scale_factor, 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExplodedPageState* exploded); 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CONTENT_COMMON_PAGE_STATE_SERIALIZATION_H_ 93