• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/referrer.h"
19 #include "ui/base/page_transition_types.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                 ui::PageTransition transition,
32                 bool is_renderer_initiated);
33   OpenURLParams(const GURL& url,
34                 const Referrer& referrer,
35                 int64 frame_tree_node_id,
36                 WindowOpenDisposition disposition,
37                 ui::PageTransition transition,
38                 bool is_renderer_initiated);
39   ~OpenURLParams();
40 
41   // The URL/referrer to be opened.
42   GURL url;
43   Referrer referrer;
44 
45   // Any redirect URLs that occurred for this navigation before |url|.
46   std::vector<GURL> redirect_chain;
47 
48   // Indicates whether this navigation will be sent using POST.
49   // The POST method is limited support for basic POST data by leveraging
50   // NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST.
51   // It is not for things like file uploads.
52   bool uses_post;
53 
54   // The post data when the navigation uses POST.
55   scoped_refptr<base::RefCountedMemory> browser_initiated_post_data;
56 
57   // Extra headers to add to the request for this page.  Headers are
58   // represented as "<name>: <value>" and separated by \r\n.  The entire string
59   // is terminated by \r\n.  May be empty if no extra headers are needed.
60   std::string extra_headers;
61 
62   // The browser-global FrameTreeNode ID or -1 to indicate the main frame.
63   int64 frame_tree_node_id;
64 
65   // The disposition requested by the navigation source.
66   WindowOpenDisposition disposition;
67 
68   // The transition type of navigation.
69   ui::PageTransition transition;
70 
71   // Whether this navigation is initiated by the renderer process.
72   bool is_renderer_initiated;
73 
74   // Reference to the old request id in case this is a navigation that is being
75   // transferred to a new renderer.
76   GlobalRequestID transferred_global_request_id;
77 
78   // Indicates whether this navigation should replace the current
79   // navigation entry.
80   bool should_replace_current_entry;
81 
82   // Indicates whether this navigation was triggered while processing a user
83   // gesture if the navigation was initiated by the renderer.
84   bool user_gesture;
85 
86  private:
87   OpenURLParams();
88 };
89 
90 class PageNavigator {
91  public:
~PageNavigator()92   virtual ~PageNavigator() {}
93 
94   // Opens a URL with the given disposition.  The transition specifies how this
95   // navigation should be recorded in the history system (for example, typed).
96   // Returns the WebContents the URL is opened in, or NULL if the URL wasn't
97   // opened immediately.
98   virtual WebContents* OpenURL(const OpenURLParams& params) = 0;
99 };
100 
101 }  // namespace content
102 
103 #endif  // CONTENT_PUBLIC_BROWSER_PAGE_NAVIGATOR_H_
104