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