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. 4 5 #ifndef CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_IMPL_H_ 6 #define CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_IMPL_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "content/browser/frame_host/navigation_controller_impl.h" 10 #include "content/browser/frame_host/navigator.h" 11 #include "content/common/content_export.h" 12 13 namespace content { 14 15 class NavigationControllerImpl; 16 class NavigatorDelegate; 17 struct LoadCommittedDetails; 18 19 // This class is an implementation of Navigator, responsible for managing 20 // navigations in regular browser tabs. 21 class CONTENT_EXPORT NavigatorImpl : public Navigator { 22 public: 23 NavigatorImpl(NavigationControllerImpl* navigation_controller, 24 NavigatorDelegate* delegate); 25 26 // Navigator implementation. 27 virtual NavigationController* GetController() OVERRIDE; 28 virtual void DidStartProvisionalLoad(RenderFrameHostImpl* render_frame_host, 29 int parent_routing_id, 30 const GURL& url) OVERRIDE; 31 virtual void DidFailProvisionalLoadWithError( 32 RenderFrameHostImpl* render_frame_host, 33 const FrameHostMsg_DidFailProvisionalLoadWithError_Params& params) 34 OVERRIDE; 35 virtual void DidFailLoadWithError( 36 RenderFrameHostImpl* render_frame_host, 37 const GURL& url, 38 int error_code, 39 const base::string16& error_description) OVERRIDE; 40 virtual void DidRedirectProvisionalLoad( 41 RenderFrameHostImpl* render_frame_host, 42 int32 page_id, 43 const GURL& source_url, 44 const GURL& target_url) OVERRIDE; 45 virtual void DidNavigate( 46 RenderFrameHostImpl* render_frame_host, 47 const FrameHostMsg_DidCommitProvisionalLoad_Params& 48 input_params) OVERRIDE; 49 virtual bool NavigateToPendingEntry( 50 RenderFrameHostImpl* render_frame_host, 51 NavigationController::ReloadType reload_type) OVERRIDE; 52 virtual base::TimeTicks GetCurrentLoadStart() OVERRIDE; 53 virtual void RequestOpenURL(RenderFrameHostImpl* render_frame_host, 54 const GURL& url, 55 const Referrer& referrer, 56 WindowOpenDisposition disposition, 57 bool should_replace_current_entry, 58 bool user_gesture) OVERRIDE; 59 virtual void RequestTransferURL( 60 RenderFrameHostImpl* render_frame_host, 61 const GURL& url, 62 const std::vector<GURL>& redirect_chain, 63 const Referrer& referrer, 64 PageTransition page_transition, 65 WindowOpenDisposition disposition, 66 const GlobalRequestID& transferred_global_request_id, 67 bool should_replace_current_entry, 68 bool user_gesture) OVERRIDE; 69 70 private: 71 virtual ~NavigatorImpl() {} 72 73 // Navigates to the given entry, which must be the pending entry. Private 74 // because all callers should use NavigateToPendingEntry. 75 bool NavigateToEntry( 76 RenderFrameHostImpl* render_frame_host, 77 const NavigationEntryImpl& entry, 78 NavigationController::ReloadType reload_type); 79 80 bool ShouldAssignSiteForURL(const GURL& url); 81 82 // The NavigationController that will keep track of session history for all 83 // RenderFrameHost objects using this NavigatorImpl. 84 // TODO(nasko): Move ownership of the NavigationController from 85 // WebContentsImpl to this class. 86 NavigationControllerImpl* controller_; 87 88 // Used to notify the object embedding this Navigator about navigation 89 // events. Can be NULL in tests. 90 NavigatorDelegate* delegate_; 91 92 // System time at which the current load was started. 93 base::TimeTicks current_load_start_; 94 95 DISALLOW_COPY_AND_ASSIGN(NavigatorImpl); 96 }; 97 98 } // namespace content 99 100 #endif // CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_IMPL_H_ 101