page_navigator.h revision f2477e01787aa58f445919b809d89e252beef54f
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
23namespace content {
24
25class WebContents;
26
27struct 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
95class 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