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