page_navigator.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageNavigator defines an interface that can be used to express the user's
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// intention to navigate to a particular URL.  The implementing class should
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// perform the navigation.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_BROWSER_PAGE_NAVIGATOR_H_
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_PAGE_NAVIGATOR_H_
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/global_request_id.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/referrer.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "googleurl/src/gurl.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/window_open_disposition.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CONTENT_EXPORT OpenURLParams {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLParams(const GURL& url,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const Referrer& referrer,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                WindowOpenDisposition disposition,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                PageTransition transition,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                bool is_renderer_initiated);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLParams(const GURL& url,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const Referrer& referrer,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                int64 source_frame_id,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                WindowOpenDisposition disposition,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                PageTransition transition,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                bool is_renderer_initiated);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~OpenURLParams();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The URL/referrer to be opened.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Referrer referrer;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Extra headers to add to the request for this page.  Headers are
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // represented as "<name>: <value>" and separated by \r\n.  The entire string
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is terminated by \r\n.  May be empty if no extra headers are needed.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string extra_headers;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The source frame id or -1 to indicate the main frame.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 source_frame_id;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The disposition requested by the navigation source.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WindowOpenDisposition disposition;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The transition type of navigation.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PageTransition transition;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether this navigation is initiated by the renderer process.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_renderer_initiated;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The override encoding of the URL contents to be opened.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string override_encoding;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reference to the old request id in case this is a navigation that is being
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // transferred to a new renderer.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GlobalRequestID transferred_global_request_id;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLParams();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PageNavigator {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PageNavigator() {}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Opens a URL with the given disposition.  The transition specifies how this
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // navigation should be recorded in the history system (for example, typed).
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the WebContents the URL is opened in, or NULL if the URL wasn't
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // opened immediately.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebContents* OpenURL(const OpenURLParams& params) = 0;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PUBLIC_BROWSER_PAGE_NAVIGATOR_H_
85