navigator.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/ref_counted.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/content_export.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class GURL; 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct FrameHostMsg_DidCommitProvisionalLoad_Params; 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct FrameHostMsg_DidFailProvisionalLoadWithError_Params; 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace base { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TimeTicks; 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class NavigationControllerImpl; 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class NavigationEntryImpl; 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class NavigatorDelegate; 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderFrameHostImpl; 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Implementations of this interface are responsible for performing navigations 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// in a node of the FrameTree. Its lifetime is bound to all FrameTreeNode 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// objects that are using it and will be released once all nodes that use it are 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// freed. The Navigator is bound to a single frame tree and cannot be used by 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// multiple instances of FrameTree. 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// TODO(nasko): Move all navigation methods, such as didStartProvisionalLoad 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// from WebContentsImpl to this interface. 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class CONTENT_EXPORT Navigator : public base::RefCounted<Navigator> { 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The RenderFrameHostImpl started a provisional load. 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void DidStartProvisionalLoad(RenderFrameHostImpl* render_frame_host, 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 frame_id, 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 parent_frame_id, 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool main_frame, 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const GURL& url) {}; 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The RenderFrameHostImpl has failed a provisional load. 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void DidFailProvisionalLoadWithError( 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameHostImpl* render_frame_host, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const FrameHostMsg_DidFailProvisionalLoadWithError_Params& params) {}; 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The RenderFrameHostImpl has failed to load the document. 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void DidFailLoadWithError( 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameHostImpl* render_frame_host, 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int64 frame_id, 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& url, 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_main_frame, 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int error_code, 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& error_description) {} 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The RenderFrameHostImpl processed a redirect during a provisional load. 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(creis): Remove this method and have the pre-rendering code listen to 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // WebContentsObserver::DidGetRedirectForResourceRequest instead. 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // See http://crbug.com/78512. 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void DidRedirectProvisionalLoad( 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameHostImpl* render_frame_host, 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int32 page_id, 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& source_url, 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const GURL& target_url) {} 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The RenderFrameHostImpl has committed a navigation. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void DidNavigate( 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameHostImpl* render_frame_host, 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {} 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Causes the Navigator to navigate in the right render frame to |entry|, 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // which must be already part of the entries in the navigation controller. 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This does not change the NavigationController state. 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool NavigateToEntry( 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameHostImpl* render_frame_host, 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const NavigationEntryImpl& entry, 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NavigationController::ReloadType reload_type); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called by the NavigationController to cause the Navigator to navigate 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to the current pending entry. The NavigationController should be called 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // back with RendererDidNavigate on success or DiscardPendingEntry on failure. 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The callbacks can be inside of this function, or at some future time. 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The entry has a PageID of -1 if newly created (corresponding to navigation 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to a new URL). 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If this method returns false, then the navigation is discarded (equivalent 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to calling DiscardPendingEntry on the NavigationController). 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(nasko): Remove this method from the interface, since Navigator and 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // NavigationController know about each other. This will be possible once 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // initialization of Navigator and NavigationController is properly done. 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool NavigateToPendingEntry( 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RenderFrameHostImpl* render_frame_host, 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NavigationController::ReloadType reload_type); 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual base::TimeTicks GetCurrentLoadStart(); 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) protected: 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) friend class base::RefCounted<Navigator>; 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~Navigator() {} 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace content 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // CONTENT_BROWSER_FRAME_HOST_NAVIGATOR_H_ 109