// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_PUBLIC_RENDERER_NAVIGATION_STATE_H_ #define CONTENT_PUBLIC_RENDERER_NAVIGATION_STATE_H_ #include "content/public/common/page_transition_types.h" namespace content { // NavigationState is the portion of DocumentState that is affected by // in-document navigation. // TODO(simonjam): Move this to HistoryItem's ExtraData. class NavigationState { public: virtual ~NavigationState(); static NavigationState* CreateBrowserInitiated( int32 pending_page_id, int pending_history_list_offset, content::PageTransition transition_type) { return new NavigationState(transition_type, false, pending_page_id, pending_history_list_offset); } static NavigationState* CreateContentInitiated() { return new NavigationState(content::PAGE_TRANSITION_LINK, true, -1, -1); } // Contains the page_id for this navigation or -1 if there is none yet. int32 pending_page_id() const { return pending_page_id_; } // If pending_page_id() is not -1, then this contains the corresponding // offset of the page in the back/forward history list. int pending_history_list_offset() const { return pending_history_list_offset_; } // Contains the transition type that the browser specified when it // initiated the load. content::PageTransition transition_type() const { return transition_type_; } void set_transition_type(content::PageTransition type) { transition_type_ = type; } // True if we have already processed the "DidCommitLoad" event for this // request. Used by session history. bool request_committed() const { return request_committed_; } void set_request_committed(bool value) { request_committed_ = value; } // True if this navigation was not initiated via WebFrame::LoadRequest. bool is_content_initiated() const { return is_content_initiated_; } // True iff the frame's navigation was within the same page. void set_was_within_same_page(bool value) { was_within_same_page_ = value; } bool was_within_same_page() const { return was_within_same_page_; } // transferred_request_child_id and transferred_request_request_id identify // a request that has been created before the navigation is being transferred // to a new renderer. This is used to recycle the old request once the new // renderer tries to pick up the navigation of the old one. void set_transferred_request_child_id(int value) { transferred_request_child_id_ = value; } int transferred_request_child_id() const { return transferred_request_child_id_; } void set_transferred_request_request_id(int value) { transferred_request_request_id_ = value; } int transferred_request_request_id() const { return transferred_request_request_id_; } void set_allow_download(bool value) { allow_download_ = value; } bool allow_download() const { return allow_download_; } private: NavigationState(content::PageTransition transition_type, bool is_content_initiated, int32 pending_page_id, int pending_history_list_offset); content::PageTransition transition_type_; bool request_committed_; bool is_content_initiated_; int32 pending_page_id_; int pending_history_list_offset_; bool was_within_same_page_; int transferred_request_child_id_; int transferred_request_request_id_; bool allow_download_; DISALLOW_COPY_AND_ASSIGN(NavigationState); }; } // namespace content #endif // CONTENT_PUBLIC_RENDERER_NAVIGATION_STATE_H_