| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IOS_WEB_WEB_STATE_WEB_STATE_IMPL_SERIALIZED_DATA_H_ |
| #define IOS_WEB_WEB_STATE_WEB_STATE_IMPL_SERIALIZED_DATA_H_ |
| |
| #import "base/memory/raw_ptr.h" |
| #import "ios/web/public/favicon/favicon_status.h" |
| #import "ios/web/web_state/web_state_impl.h" |
| |
| namespace web { |
| namespace proto { |
| class WebStateMetadataStorage; |
| } // namespace proto |
| |
| // Object storing the information needed to realize a WebState. |
| // |
| // This object is mostly read-only storage, but some information may |
| // be modified during the lifetime of the object (mostly the favicon |
| // information). |
| // |
| // Like RealizedWebState, the WebStateImpl may forward method to this |
| // class. Those methods will not be documented, but instead they will |
| // be annotated with the name of the class that declares them. |
| class WebStateImpl::SerializedData { |
| public: |
| // Creates a SerializedData with a non-null pointer to the owning |
| // WebStateImpl, `browser_state`, unique and stable identifiers, |
| // and data loaded from disk via `metadata`. The `storage_loader` |
| // is used when the WebState will transition to "realized" state. |
| SerializedData(WebStateImpl* owner, |
| BrowserState* browser_state, |
| NSString* stable_identifier, |
| WebStateID unique_identifier, |
| proto::WebStateMetadataStorage metadata, |
| WebStateStorageLoader storage_loader, |
| NativeSessionFetcher session_fetcher); |
| |
| SerializedData(const SerializedData&) = delete; |
| SerializedData& operator=(const SerializedData) = delete; |
| |
| ~SerializedData(); |
| |
| // Tears down the SerializedData. The tear down *must* be called before |
| // the object is destroyed because the WebStateObserver may call methods on |
| // the WebState being destroyed, which will have to be forwarded via `saved_` |
| // pointer (thus it must be non-null). |
| void TearDown(); |
| |
| // Getter and setter for the CRWSessionStorage; only available when the |
| // session serialization optimisation feature is disabled. |
| // TODO(crbug.com/40245950): remove once the feature is fully launched. |
| CRWSessionStorage* GetSessionStorage() const; |
| void SetSessionStorage(CRWSessionStorage* storage); |
| |
| // Serializes the metadata to `storage`. |
| void SerializeMetadataToProto(proto::WebStateMetadataStorage& storage) const; |
| |
| // Returns the callback used to load the complete data from disk. |
| WebStateStorageLoader TakeStorageLoader(); |
| |
| // Returns the callback used to fetch the native session data blob. |
| NativeSessionFetcher TakeNativeSessionFetcher(); |
| |
| // WebState: |
| base::Time GetLastActiveTime() const; |
| base::Time GetCreationTime() const; |
| BrowserState* GetBrowserState() const; |
| NSString* GetStableIdentifier() const; |
| WebStateID GetUniqueIdentifier() const; |
| const std::u16string& GetTitle() const; |
| const FaviconStatus& GetFaviconStatus() const; |
| void SetFaviconStatus(const FaviconStatus& favicon_status); |
| int GetNavigationItemCount() const; |
| const GURL& GetVisibleURL() const; |
| const GURL& GetLastCommittedURL() const; |
| |
| private: |
| // Returns a reference to the owning WebState WebStateObserverList. |
| WebStateObserverList& observers() { return owner_->observers_; } |
| |
| // Returns a reference to the owning WebState WebStatePolicyDeciderList. |
| WebStatePolicyDeciderList& policy_deciders() { |
| return owner_->policy_deciders_; |
| } |
| |
| // Owner. Never null. Owns this object. |
| const raw_ptr<WebStateImpl> owner_; |
| |
| // The owning BrowserState. Indirectly owns this object. |
| const raw_ptr<BrowserState> browser_state_; |
| |
| // The stable and unique identifiers. |
| NSString* const stable_identifier_; |
| const WebStateID unique_identifier_; |
| |
| // Information about this WebState available when the object is not |
| // yet realized. This is limited to the information accessible in |
| // the `storage` instance passed in the constructor. |
| const base::Time creation_time_; |
| const base::Time last_active_time_; |
| const std::u16string page_title_; |
| const GURL page_visible_url_; |
| const int navigation_item_count_; |
| |
| // Favicon status. |
| FaviconStatus favicon_status_; |
| |
| // Callbacks used to load the full data about this WebState. |
| WebStateStorageLoader storage_loader_; |
| NativeSessionFetcher session_fetcher_; |
| |
| // Serialized representation of the session; only available when the |
| // session serialization optimisation feature is disabled. |
| // TODO(crbug.com/40245950): remove once the feature is fully launched. |
| __strong CRWSessionStorage* session_storage_ = nil; |
| }; |
| |
| } // namespace web |
| |
| #endif // IOS_WEB_WEB_STATE_WEB_STATE_IMPL_SERIALIZED_DATA_H_ |