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.
5 #ifndef COMPONENTS_SESSIONS_SERIALIZED_NAVIGATION_ENTRY_H_
6 #define COMPONENTS_SESSIONS_SERIALIZED_NAVIGATION_ENTRY_H_
12 #include "base/basictypes.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/strings/string16.h"
15 #include "base/time/time.h"
16 #include "components/sessions/sessions_export.h"
17 #include "ui/base/page_transition_types.h"
31 class SerializedNavigationEntryTestHelper
;
33 // The key used to store search terms data in the NavigationEntry.
34 SESSIONS_EXPORT
extern const char kSearchTermsKey
[];
36 // SerializedNavigationEntry is a "freeze-dried" version of NavigationEntry. It
37 // contains the data needed to restore a NavigationEntry during session restore
38 // and tab restore, and it can also be pickled and unpickled. It is also
39 // convertible to a sync protocol buffer for session syncing.
41 // Default copy constructor and assignment operator welcome.
42 class SESSIONS_EXPORT SerializedNavigationEntry
{
50 // Creates an invalid (index < 0) SerializedNavigationEntry.
51 SerializedNavigationEntry();
52 ~SerializedNavigationEntry();
54 // Construct a SerializedNavigationEntry for a particular index from a sync
55 // protocol buffer. Note that the sync protocol buffer doesn't contain all
56 // SerializedNavigationEntry fields. Also, the timestamp of the returned
57 // SerializedNavigationEntry is nulled out, as we assume that the protocol
58 // buffer is from a foreign session.
59 static SerializedNavigationEntry
FromSyncData(
61 const sync_pb::TabNavigation
& sync_data
);
63 // Note that not all SerializedNavigationEntry fields are preserved.
64 // |max_size| is the max number of bytes to write.
65 void WriteToPickle(int max_size
, base::Pickle
* pickle
) const;
66 bool ReadFromPickle(base::PickleIterator
* iterator
);
68 // Convert this navigation into its sync protocol buffer equivalent. Note
69 // that the protocol buffer doesn't contain all SerializedNavigationEntry
71 sync_pb::TabNavigation
ToSyncData() const;
73 // The index in the NavigationController. This SerializedNavigationEntry is
74 // valid only when the index is non-negative.
75 int index() const { return index_
; }
76 void set_index(int index
) { index_
= index
; }
78 // Accessors for some fields taken from NavigationEntry.
79 int unique_id() const { return unique_id_
; }
80 const GURL
& virtual_url() const { return virtual_url_
; }
81 const base::string16
& title() const { return title_
; }
82 const std::string
& encoded_page_state() const { return encoded_page_state_
; }
83 const base::string16
& search_terms() const { return search_terms_
; }
84 const GURL
& favicon_url() const { return favicon_url_
; }
85 int http_status_code() const { return http_status_code_
; }
86 const GURL
& referrer_url() const { return referrer_url_
; }
87 int referrer_policy() const { return referrer_policy_
; }
88 ui::PageTransition
transition_type() const {
89 return transition_type_
;
91 bool has_post_data() const { return has_post_data_
; }
92 int64
post_id() const { return post_id_
; }
93 const GURL
& original_request_url() const { return original_request_url_
; }
94 bool is_overriding_user_agent() const { return is_overriding_user_agent_
; }
95 base::Time
timestamp() const { return timestamp_
; }
97 BlockedState
blocked_state() { return blocked_state_
; }
98 void set_blocked_state(BlockedState blocked_state
) {
99 blocked_state_
= blocked_state
;
101 std::set
<std::string
> content_pack_categories() {
102 return content_pack_categories_
;
104 void set_content_pack_categories(
105 const std::set
<std::string
>& content_pack_categories
) {
106 content_pack_categories_
= content_pack_categories
;
108 const std::vector
<GURL
>& redirect_chain() const { return redirect_chain_
; }
111 friend class ContentSerializedNavigationBuilder
;
112 friend class ContentSerializedNavigationDriver
;
113 friend class SerializedNavigationEntryTestHelper
;
114 friend class IOSSerializedNavigationBuilder
;
115 friend class IOSSerializedNavigationDriver
;
117 // Index in the NavigationController.
120 // Member variables corresponding to NavigationEntry fields.
123 int referrer_policy_
;
125 base::string16 title_
;
126 std::string encoded_page_state_
;
127 ui::PageTransition transition_type_
;
130 GURL original_request_url_
;
131 bool is_overriding_user_agent_
;
132 base::Time timestamp_
;
133 base::string16 search_terms_
;
135 int http_status_code_
;
136 bool is_restored_
; // Not persisted.
137 std::vector
<GURL
> redirect_chain_
; // Not persisted.
139 // Additional information.
140 BlockedState blocked_state_
;
141 std::set
<std::string
> content_pack_categories_
;
144 } // namespace sessions
146 #endif // COMPONENTS_SESSIONS_SERIALIZED_NAVIGATION_ENTRY_H_