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