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 "ui/gfx/point.h"
14#include "url/gurl.h"
15
16namespace content {
17
18struct CONTENT_EXPORT ExplodedHttpBodyElement {
19  blink::WebHTTPBody::Element::Type type;
20  std::string data;
21  base::NullableString16 file_path;
22  GURL filesystem_url;
23  int64 file_start;
24  int64 file_length;
25  double file_modification_time;
26  std::string blob_uuid;
27
28  ExplodedHttpBodyElement();
29  ~ExplodedHttpBodyElement();
30};
31
32struct CONTENT_EXPORT ExplodedHttpBody {
33  base::NullableString16 http_content_type;
34  std::vector<ExplodedHttpBodyElement> elements;
35  int64 identifier;
36  bool contains_passwords;
37  bool is_null;
38
39  ExplodedHttpBody();
40  ~ExplodedHttpBody();
41};
42
43struct CONTENT_EXPORT ExplodedFrameState {
44  base::NullableString16 url_string;
45  base::NullableString16 original_url_string;
46  base::NullableString16 referrer;
47  base::NullableString16 target;
48  base::NullableString16 state_object;
49  std::vector<base::NullableString16> document_state;
50  gfx::Point scroll_offset;
51  int64 item_sequence_number;
52  int64 document_sequence_number;
53  int64 target_frame_id;
54  double page_scale_factor;
55  ExplodedHttpBody http_body;
56  std::vector<ExplodedFrameState> children;
57
58  ExplodedFrameState();
59  ~ExplodedFrameState();
60};
61
62struct CONTENT_EXPORT ExplodedPageState {
63  std::vector<base::NullableString16> referenced_files;
64  ExplodedFrameState top;
65
66  ExplodedPageState();
67  ~ExplodedPageState();
68};
69
70CONTENT_EXPORT bool DecodePageState(const std::string& encoded,
71                                    ExplodedPageState* exploded);
72CONTENT_EXPORT bool EncodePageState(const ExplodedPageState& exploded,
73                                    std::string* encoded);
74
75#if defined(OS_ANDROID)
76CONTENT_EXPORT bool DecodePageStateWithDeviceScaleFactorForTesting(
77    const std::string& encoded,
78    float device_scale_factor,
79    ExplodedPageState* exploded);
80#endif
81
82}  // namespace content
83
84#endif  // CONTENT_COMMON_PAGE_STATE_SERIALIZATION_H_
85