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)#ifndef CHROME_BROWSER_UI_BROWSER_NAVIGATOR_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_BROWSER_NAVIGATOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/memory/ref_counted.h"
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/memory/ref_counted_memory.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/host_desktop.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/global_request_id.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/page_navigator.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/referrer.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/page_transition_types.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/window_open_disposition.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebContents;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Parameters that tell Navigate() what to do.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Some basic examples:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Simple Navigate to URL in current tab:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome::NavigateParams params(browser, GURL("http://www.google.com/"),
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//                               ui::PAGE_TRANSITION_LINK);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome::Navigate(&params);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Open bookmark in new background tab:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome::NavigateParams params(browser, url,
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//                               ui::PAGE_TRANSITION_AUTO_BOOKMARK);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// params.disposition = NEW_BACKGROUND_TAB;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome::Navigate(&params);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Opens a popup WebContents:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome::NavigateParams params(browser, popup_contents);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// params.source_contents = source_contents;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// chrome::Navigate(&params);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See browser_navigator_browsertest.cc for more examples.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NavigateParams {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigateParams(Browser* browser,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const GURL& a_url,
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 ui::PageTransition a_transition);
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NavigateParams(Browser* browser,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 content::WebContents* a_target_contents);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigateParams(Profile* profile,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const GURL& a_url,
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 ui::PageTransition a_transition);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~NavigateParams();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The URL/referrer to be loaded. Ignored if |target_contents| is non-NULL.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::Referrer referrer;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // The browser-global ID of the frame to navigate, or -1 for the main frame.
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  int64 frame_tree_node_id;
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Any redirect URLs that occurred for this navigation before |url|.
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Usually empty.
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  std::vector<GURL> redirect_chain;
741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
75a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Indicates whether this navigation will be sent using POST.
76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // The POST method is limited support for basic POST data by leveraging
77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST.
78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // It is not for things like file uploads.
79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  bool uses_post;
80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
81a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // The post data when the navigation uses POST.
82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  scoped_refptr<base::RefCountedMemory> browser_initiated_post_data;
83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Extra headers to add to the request for this page.  Headers are
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // represented as "<name>: <value>" and separated by \r\n.  The entire string
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is terminated by \r\n.  May be empty if no extra headers are needed.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string extra_headers;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // [in]  A WebContents to be navigated or inserted into the target
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       Browser's tabstrip. If NULL, |url| or the homepage will be used
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       instead. When non-NULL, Navigate() assumes it has already been
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       navigated to its intended destination and will not load any URL in it
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       (i.e. |url| is ignored).
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       Default is NULL.
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // [out] The WebContents in which the navigation occurred or that was
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       inserted. Guaranteed non-NULL except for note below:
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note: If this field is set to NULL by the caller and Navigate() creates
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //       a new WebContents, this field will remain NULL and the
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //       WebContents deleted if the WebContents it created is
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       not added to a TabStripModel before Navigate() returns.
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebContents* target_contents;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // [in]  The WebContents that initiated the Navigate() request if such
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       context is necessary. Default is NULL, i.e. no context.
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // [out] If NULL, this value will be set to the selected WebContents in
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       the originating browser prior to the operation performed by
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       Navigate(). However, if the originating page is from a different
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       profile (e.g. an OFF_THE_RECORD page originating from a non-OTR
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       window), then |source_contents| is reset to NULL.
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebContents* source_contents;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The disposition requested by the navigation source. Default is
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CURRENT_TAB. What follows is a set of coercions that happen to this value
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when other factors are at play:
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // [in]:                Condition:                        [out]:
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NEW_BACKGROUND_TAB   target browser tabstrip is empty  NEW_FOREGROUND_TAB
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CURRENT_TAB          "     "     "                     NEW_FOREGROUND_TAB
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OFF_THE_RECORD       target browser profile is incog.  NEW_FOREGROUND_TAB
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If disposition is NEW_BACKGROUND_TAB, TabStripModel::ADD_ACTIVE is
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // removed from |tabstrip_add_types| automatically.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If disposition is one of NEW_WINDOW, NEW_POPUP, NEW_FOREGROUND_TAB or
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SINGLETON_TAB, then TabStripModel::ADD_ACTIVE is automatically added to
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |tabstrip_add_types|.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WindowOpenDisposition disposition;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Sets browser->is_trusted_source. Default is false.
129a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  bool trusted_source;
130a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The transition type of the navigation. Default is
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ui::PAGE_TRANSITION_LINK when target_contents is specified in the
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // constructor.
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ui::PageTransition transition;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether this navigation was initiated by the renderer process. Default is
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // false.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_renderer_initiated;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The index the caller would like the tab to be positioned at in the
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TabStrip. The actual index will be determined by the TabHandler in
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // accordance with |add_types|. Defaults to -1 (allows the TabHandler to
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // decide).
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int tabstrip_index;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A bitmask of values defined in TabStripModel::AddTabTypes. Helps
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // determine where to insert a new tab and whether or not it should be
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // selected, among other properties. Default is ADD_ACTIVE.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int tabstrip_add_types;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If non-empty, the new tab is an app tab.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string extension_app_id;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If non-empty, specifies the desired initial position and size of the
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window if |disposition| == NEW_POPUP.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(beng): Figure out if this can be used to create Browser windows
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //             for other callsites that use set_override_bounds, or
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //             remove this comment.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect window_bounds;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Determines if and how the target window should be made visible at the end
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of the call to Navigate().
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum WindowAction {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Do not show or activate the browser window after navigating.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NO_ACTION,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Show and activate the browser window after navigating.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SHOW_WINDOW,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Show the browser window after navigating but do not activate.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SHOW_WINDOW_INACTIVE
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Default is NO_ACTION (don't show or activate the window).
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If disposition is NEW_WINDOW or NEW_POPUP, and |window_action| is set to
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NO_ACTION, |window_action| will be set to SHOW_WINDOW.
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WindowAction window_action;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If false then the navigation was not initiated by a user gesture.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Default is true.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool user_gesture;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // What to do with the path component of the URL for singleton navigations.
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum PathBehavior {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Two URLs with differing paths are different.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RESPECT,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Ignore path when finding existing tab, navigate to new URL.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IGNORE_AND_NAVIGATE,
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Ignore path when finding existing tab, don't navigate tab.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IGNORE_AND_STAY_PUT,
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Default is RESPECT.
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PathBehavior path_behavior;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // What to do with the ref component of the URL for singleton navigations.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum RefBehavior {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Two URLs with differing refs are same.
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IGNORE_REF,
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Two URLs with differing refs are different.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RESPECT_REF,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Default is IGNORE.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RefBehavior ref_behavior;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // [in]  Specifies a Browser object where the navigation could occur or the
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       tab could be added. Navigate() is not obliged to use this Browser if
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       it is not compatible with the operation being performed. This can be
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       NULL, in which case |initiating_profile| must be provided.
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // [out] Specifies the Browser object where the navigation occurred or the
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       tab was added. Guaranteed non-NULL unless the disposition did not
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       require a navigation, in which case this is set to NULL
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       (SUPPRESS_OPEN, SAVE_TO_DISK, IGNORE_ACTION).
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note: If |show_window| is set to false and a new Browser is created by
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       Navigate(), the caller is responsible for showing it so that its
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       window can assume responsibility for the Browser's lifetime (Browser
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //       objects are deleted when the user closes a visible browser window).
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* browser;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile that is initiating the navigation. If there is a non-NULL
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // browser passed in via |browser|, it's profile will be used instead.
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* initiating_profile;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Refers to a navigation that was parked in the browser in order to be
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // transferred to another RVH. Only used in case of a redirection of a request
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to a different site that created a new RVH.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::GlobalRequestID transferred_global_request_id;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Refers to which desktop this navigation should occur on. May be passed
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // explicitly or inferred from an existing Browser instance.
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::HostDesktopType host_desktop_type;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
229ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Indicates whether this navigation  should replace the current
230ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // navigation entry.
231ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool should_replace_current_entry;
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
233a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Indicates whether |source_contents| should be set as opener when creating
234a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // |target_contents|.
235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  bool should_set_opener;
236a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigateParams();
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copies fields from |params| struct to |nav_params| struct.
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void FillNavigateParamsFromOpenURLParams(chrome::NavigateParams* nav_params,
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         const content::OpenURLParams& params);
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Navigates according to the configuration specified in |params|.
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Navigate(NavigateParams* params);
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if the url is allowed to open in incognito window.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsURLAllowedInIncognito(const GURL& url,
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             content::BrowserContext* browser_context);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_BROWSER_NAVIGATOR_H_
255