Home | History | Annotate | Download | only in frame_host
      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