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