navigator.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2013 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/content_export.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/navigation_controller.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/window_open_disposition.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GURL; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct FrameHostMsg_BeginNavigation_Params; 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct FrameHostMsg_DidCommitProvisionalLoad_Params; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct FrameHostMsg_DidFailProvisionalLoadWithError_Params; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace base { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TimeTicks; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass NavigationControllerImpl; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass NavigationEntryImpl; 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass NavigatorDelegate; 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass RenderFrameHostImpl; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct NavigationBeforeCommitInfo; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Implementations of this interface are responsible for performing navigations 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// in a node of the FrameTree. Its lifetime is bound to all FrameTreeNode 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// objects that are using it and will be released once all nodes that use it are 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// freed. The Navigator is bound to a single frame tree and cannot be used by 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// multiple instances of FrameTree. 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(nasko): Move all navigation methods, such as didStartProvisionalLoad 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// from WebContentsImpl to this interface. 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass CONTENT_EXPORT Navigator : public base::RefCounted<Navigator> { 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns the NavigationController associated with this Navigator. 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual NavigationController* GetController(); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Notifications coming from the RenderFrameHosts ---------------------------- 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RenderFrameHostImpl started a provisional load. 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidStartProvisionalLoad(RenderFrameHostImpl* render_frame_host, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url, 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_transition_navigation) {}; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RenderFrameHostImpl has failed a provisional load. 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidFailProvisionalLoadWithError( 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RenderFrameHostImpl* render_frame_host, 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const FrameHostMsg_DidFailProvisionalLoadWithError_Params& params) {}; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RenderFrameHostImpl has failed to load the document. 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidFailLoadWithError( 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RenderFrameHostImpl* render_frame_host, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int error_code, 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::string16& error_description) {} 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RenderFrameHostImpl has committed a navigation. 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidNavigate( 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RenderFrameHostImpl* render_frame_host, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {} 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Called by the NavigationController to cause the Navigator to navigate 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // to the current pending entry. The NavigationController should be called 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // back with RendererDidNavigate on success or DiscardPendingEntry on failure. 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The callbacks can be inside of this function, or at some future time. 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The entry has a PageID of -1 if newly created (corresponding to navigation 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // to a new URL). 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If this method returns false, then the navigation is discarded (equivalent 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // to calling DiscardPendingEntry on the NavigationController). 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(nasko): Remove this method from the interface, since Navigator and 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // NavigationController know about each other. This will be possible once 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // initialization of Navigator and NavigationController is properly done. 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool NavigateToPendingEntry( 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RenderFrameHostImpl* render_frame_host, 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NavigationController::ReloadType reload_type); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Navigation requests ------------------------------------------------------- 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual base::TimeTicks GetCurrentLoadStart(); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RenderFrameHostImpl has received a request to open a URL with the 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // specified |disposition|. 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RequestOpenURL(RenderFrameHostImpl* render_frame_host, 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Referrer& referrer, 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WindowOpenDisposition disposition, 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool should_replace_current_entry, 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool user_gesture) {} 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The RenderFrameHostImpl wants to transfer the request to a new renderer. 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |redirect_chain| contains any redirect URLs (excluding |url|) that happened 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // before the transfer. 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RequestTransferURL( 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RenderFrameHostImpl* render_frame_host, 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& url, 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<GURL>& redirect_chain, 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Referrer& referrer, 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition page_transition, 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WindowOpenDisposition disposition, 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GlobalRequestID& transferred_global_request_id, 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool should_replace_current_entry, 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool user_gesture) {} 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // PlzNavigate 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Signal |render_frame_host| that a navigation is ready to commit (the 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // response to the navigation request has been received). 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void CommitNavigation(RenderFrameHostImpl* render_frame_host, 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const NavigationBeforeCommitInfo& info) {}; 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci friend class base::RefCounted<Navigator>; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~Navigator() {} 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace content 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_H_ 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci