- add sources.
[platform/framework/web/crosswalk.git] / src / content / public / browser / page_navigator.h
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                 WindowOpenDisposition disposition,
37                 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 source frame id or -1 to indicate the main frame.
63   int64 source_frame_id;
64
65   // The disposition requested by the navigation source.
66   WindowOpenDisposition disposition;
67
68   // The transition type of navigation.
69   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:
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_