15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_RENDERER_NAVIGATION_STATE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_RENDERER_NAVIGATION_STATE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/content_export.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/page_transition_types.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NavigationState is the portion of DocumentState that is affected by 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in-document navigation. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(simonjam): Move this to HistoryItem's ExtraData. 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CONTENT_EXPORT NavigationState { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NavigationState(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static NavigationState* CreateBrowserInitiated( 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 pending_page_id, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pending_history_list_offset, 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool history_list_was_cleared, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition_type) { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new NavigationState(transition_type, 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pending_page_id, 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pending_history_list_offset, 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history_list_was_cleared); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static NavigationState* CreateContentInitiated() { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new NavigationState( 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK, true, -1, -1, false); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Contains the page_id for this navigation or -1 if there is none yet. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 pending_page_id() const { return pending_page_id_; } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If pending_page_id() is not -1, then this contains the corresponding 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // offset of the page in the back/forward history list. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pending_history_list_offset() const { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pending_history_list_offset_; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If pending_page_id() is not -1, then this returns true if the session 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // history was cleared during this navigation. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool history_list_was_cleared() const { 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return history_list_was_cleared_; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // If is_content_initiated() is false, whether this navigation should replace 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the current entry in the back/forward history list. Otherwise, use 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // replacesCurrentHistoryItem() on the WebDataSource. 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(davidben): It would be good to unify these and have only one source 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // for the two cases. We can plumb this through WebFrame::loadRequest to set 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // lockBackForwardList on the FrameLoadRequest. However, this breaks process 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // swaps because FrameLoader::loadWithNavigationAction treats loads before a 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // FrameLoader has committedFirstRealDocumentLoad as a replacement. (Added for 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // http://crbug.com/178380). 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool should_replace_current_entry() const { 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return should_replace_current_entry_; 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void set_should_replace_current_entry(bool value) { 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) should_replace_current_entry_ = value; 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Contains the transition type that the browser specified when it 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initiated the load. 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition_type() const { return transition_type_; } 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void set_transition_type(ui::PageTransition type) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) transition_type_ = type; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if we have already processed the "DidCommitLoad" event for this 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. Used by session history. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool request_committed() const { return request_committed_; } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_request_committed(bool value) { request_committed_ = value; } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if this navigation was not initiated via WebFrame::LoadRequest. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_content_initiated() const { return is_content_initiated_; } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True iff the frame's navigation was within the same page. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_was_within_same_page(bool value) { was_within_same_page_ = value; } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_within_same_page() const { return was_within_same_page_; } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // transferred_request_child_id and transferred_request_request_id identify 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a request that has been created before the navigation is being transferred 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to a new renderer. This is used to recycle the old request once the new 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer tries to pick up the navigation of the old one. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_transferred_request_child_id(int value) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) transferred_request_child_id_ = value; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int transferred_request_child_id() const { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return transferred_request_child_id_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_transferred_request_request_id(int value) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) transferred_request_request_id_ = value; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int transferred_request_request_id() const { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return transferred_request_request_id_; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_allow_download(bool value) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_download_ = value; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_download() const { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return allow_download_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_extra_headers(const std::string& extra_headers) { 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extra_headers_ = extra_headers; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extra_headers() { return extra_headers_; } 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NavigationState(ui::PageTransition transition_type, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_content_initiated, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 pending_page_id, 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int pending_history_list_offset, 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool history_list_was_cleared); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition_type_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool request_committed_; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_content_initiated_; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 pending_page_id_; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pending_history_list_offset_; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool history_list_was_cleared_; 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool should_replace_current_entry_; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_within_same_page_; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int transferred_request_child_id_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int transferred_request_request_id_; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_download_; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string extra_headers_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NavigationState); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_RENDERER_NAVIGATION_STATE_H_ 145