1 // Copyright (c) 2012 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 // PageNavigator defines an interface that can be used to express the user's 6 // intention to navigate to a particular URL. The implementing class should 7 // perform the navigation. 8 9 #ifndef CONTENT_PUBLIC_BROWSER_PAGE_NAVIGATOR_H_ 10 #define CONTENT_PUBLIC_BROWSER_PAGE_NAVIGATOR_H_ 11 12 #include <string> 13 14 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted_memory.h" 16 #include "content/common/content_export.h" 17 #include "content/public/browser/global_request_id.h" 18 #include "content/public/common/page_transition_types.h" 19 #include "content/public/common/referrer.h" 20 #include "ui/base/window_open_disposition.h" 21 #include "url/gurl.h" 22 23 namespace content { 24 25 class WebContents; 26 27 struct CONTENT_EXPORT OpenURLParams { 28 OpenURLParams(const GURL& url, 29 const Referrer& referrer, 30 WindowOpenDisposition disposition, 31 PageTransition transition, 32 bool is_renderer_initiated); 33 OpenURLParams(const GURL& url, 34 const Referrer& referrer, 35 int64 source_frame_id, 36 int64 frame_tree_node_id, 37 WindowOpenDisposition disposition, 38 PageTransition transition, 39 bool is_renderer_initiated); 40 ~OpenURLParams(); 41 42 // The URL/referrer to be opened. 43 GURL url; 44 Referrer referrer; 45 46 // Any redirect URLs that occurred for this navigation before |url|. 47 std::vector<GURL> redirect_chain; 48 49 // Indicates whether this navigation will be sent using POST. 50 // The POST method is limited support for basic POST data by leveraging 51 // NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST. 52 // It is not for things like file uploads. 53 bool uses_post; 54 55 // The post data when the navigation uses POST. 56 scoped_refptr<base::RefCountedMemory> browser_initiated_post_data; 57 58 // Extra headers to add to the request for this page. Headers are 59 // represented as "<name>: <value>" and separated by \r\n. The entire string 60 // is terminated by \r\n. May be empty if no extra headers are needed. 61 std::string extra_headers; 62 63 // The renderer-specific source frame id or -1 to indicate the main frame. 64 // TODO(creis): This appears to be dead code and should be removed. 65 int64 source_frame_id; 66 67 // The browser-global FrameTreeNode ID or -1 to indicate the main frame. 68 int64 frame_tree_node_id; 69 70 // The disposition requested by the navigation source. 71 WindowOpenDisposition disposition; 72 73 // The transition type of navigation. 74 PageTransition transition; 75 76 // Whether this navigation is initiated by the renderer process. 77 bool is_renderer_initiated; 78 79 // Reference to the old request id in case this is a navigation that is being 80 // transferred to a new renderer. 81 GlobalRequestID transferred_global_request_id; 82 83 // Indicates whether this navigation should replace the current 84 // navigation entry. 85 bool should_replace_current_entry; 86 87 // Indicates whether this navigation was triggered while processing a user 88 // gesture if the navigation was initiated by the renderer. 89 bool user_gesture; 90 91 private: 92 OpenURLParams(); 93 }; 94 95 class PageNavigator { 96 public: 97 virtual ~PageNavigator() {} 98 99 // Opens a URL with the given disposition. The transition specifies how this 100 // navigation should be recorded in the history system (for example, typed). 101 // Returns the WebContents the URL is opened in, or NULL if the URL wasn't 102 // opened immediately. 103 virtual WebContents* OpenURL(const OpenURLParams& params) = 0; 104 }; 105 106 } // namespace content 107 108 #endif // CONTENT_PUBLIC_BROWSER_PAGE_NAVIGATOR_H_ 109