1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_UI_BROWSER_NAVIGATOR_H_ 6 #define CHROME_BROWSER_UI_BROWSER_NAVIGATOR_H_ 7 #pragma once 8 9 #include <string> 10 11 #include "content/common/page_transition_types.h" 12 #include "googleurl/src/gurl.h" 13 #include "ui/gfx/rect.h" 14 #include "webkit/glue/window_open_disposition.h" 15 16 class Browser; 17 class Profile; 18 class TabContentsWrapper; 19 20 namespace browser { 21 22 // Parameters that tell Navigate() what to do. 23 // 24 // Some basic examples: 25 // 26 // Simple Navigate to URL in current tab: 27 // browser::NavigateParams params(browser, GURL("http://www.google.com/"), 28 // PageTransition::LINK); 29 // browser::Navigate(¶ms); 30 // 31 // Open bookmark in new background tab: 32 // browser::NavigateParams params(browser, url, PageTransition::AUTO_BOOKMARK); 33 // params.disposition = NEW_BACKGROUND_TAB; 34 // browser::Navigate(¶ms); 35 // 36 // Opens a popup TabContents: 37 // browser::NavigateParams params(browser, popup_contents); 38 // params.source_contents = source_contents; 39 // browser::Navigate(¶ms); 40 // 41 // See browser_navigator_browsertest.cc for more examples. 42 // 43 struct NavigateParams { 44 NavigateParams(Browser* browser, 45 const GURL& a_url, 46 PageTransition::Type a_transition); 47 NavigateParams(Browser* browser, TabContentsWrapper* a_target_contents); 48 ~NavigateParams(); 49 50 // The URL/referrer to be loaded. Ignored if |target_contents| is non-NULL. 51 GURL url; 52 GURL referrer; 53 54 // [in] A TabContents to be navigated or inserted into the target Browser's 55 // tabstrip. If NULL, |url| or the homepage will be used instead. When 56 // non-NULL, Navigate() assumes it has already been navigated to its 57 // intended destination and will not load any URL in it (i.e. |url| is 58 // ignored). 59 // Default is NULL. 60 // [out] The TabContents in which the navigation occurred or that was 61 // inserted. Guaranteed non-NULL except for note below: 62 // Note: If this field is set to NULL by the caller and Navigate() creates 63 // a new TabContents, this field will remain NULL and the TabContents 64 // deleted if the TabContents it created is not added to a TabStripModel 65 // before Navigate() returns. 66 TabContentsWrapper* target_contents; 67 68 // [in] The TabContents that initiated the Navigate() request if such context 69 // is necessary. Default is NULL, i.e. no context. 70 // [out] If NULL, this value will be set to the selected TabContents in the 71 // originating browser prior to the operation performed by Navigate(). 72 // However, if the originating page is from a different profile (e.g. an 73 // OFF_THE_RECORD page originating from a non-OTR window), then 74 // |source_contents| is reset to NULL. 75 TabContentsWrapper* source_contents; 76 77 // The disposition requested by the navigation source. Default is 78 // CURRENT_TAB. What follows is a set of coercions that happen to this value 79 // when other factors are at play: 80 // 81 // [in]: Condition: [out]: 82 // NEW_BACKGROUND_TAB target browser tabstrip is empty NEW_FOREGROUND_TAB 83 // CURRENT_TAB " " " NEW_FOREGROUND_TAB 84 // OFF_THE_RECORD target browser profile is incog. NEW_FOREGROUND_TAB 85 // 86 // If disposition is NEW_BACKGROUND_TAB, TabStripModel::ADD_ACTIVE is 87 // removed from |tabstrip_add_types| automatically. 88 // If disposition is one of NEW_WINDOW, NEW_POPUP, NEW_FOREGROUND_TAB or 89 // SINGLETON_TAB, then TabStripModel::ADD_ACTIVE is automatically added to 90 // |tabstrip_add_types|. 91 WindowOpenDisposition disposition; 92 93 // The transition type of the navigation. Default is PageTransition::LINK 94 // when target_contents is specified in the constructor. 95 PageTransition::Type transition; 96 97 // The index the caller would like the tab to be positioned at in the 98 // TabStrip. The actual index will be determined by the TabHandler in 99 // accordance with |add_types|. Defaults to -1 (allows the TabHandler to 100 // decide). 101 int tabstrip_index; 102 103 // A bitmask of values defined in TabStripModel::AddTabTypes. Helps 104 // determine where to insert a new tab and whether or not it should be 105 // selected, among other properties. Default is ADD_ACTIVE. 106 int tabstrip_add_types; 107 108 // If non-empty, the new tab is an app tab. 109 std::string extension_app_id; 110 111 // If non-empty, specifies the desired initial position and size of the 112 // window if |disposition| == NEW_POPUP. 113 // TODO(beng): Figure out if this can be used to create Browser windows 114 // for other callsites that use set_override_bounds, or 115 // remove this comment. 116 gfx::Rect window_bounds; 117 118 // Determines if and how the target window should be made visible at the end 119 // of the call to Navigate(). 120 enum WindowAction { 121 // Do not show or activate the browser window after navigating. 122 NO_ACTION, 123 // Show and activate the browser window after navigating. 124 SHOW_WINDOW, 125 // Show the browser window after navigating but do not activate. 126 SHOW_WINDOW_INACTIVE 127 }; 128 // Default is NO_ACTION (don't show or activate the window). 129 // If disposition is NEW_WINDOW or NEW_POPUP, and |window_action| is set to 130 // NO_ACTION, |window_action| will be set to SHOW_WINDOW. 131 WindowAction window_action; 132 133 // What to do with the path component of the URL for singleton navigations. 134 enum PathBehavior { 135 // Two URLs with differing paths are different. 136 RESPECT, 137 // Ignore path when finding existing tab, navigate to new URL. 138 IGNORE_AND_NAVIGATE, 139 // Ignore path when finding existing tab, don't navigate tab. 140 IGNORE_AND_STAY_PUT, 141 }; 142 // Default is RESPECT. 143 PathBehavior path_behavior; 144 145 // [in] Specifies a Browser object where the navigation could occur or the 146 // tab could be added. Navigate() is not obliged to use this Browser if 147 // it is not compatible with the operation being performed. If NULL, 148 // |profile| should be specified to find or create a matching Browser. 149 // [out] Specifies the Browser object where the navigation occurred or the 150 // tab was added. Guaranteed non-NULL unless the disposition did not 151 // require a navigation, in which case this is set to NULL 152 // (SUPPRESS_OPEN, SAVE_TO_DISK, IGNORE_ACTION). 153 // Note: If |show_window| is set to false and a new Browser is created by 154 // Navigate(), the caller is responsible for showing it so that its 155 // window can assume responsibility for the Browser's lifetime (Browser 156 // objects are deleted when the user closes a visible browser window). 157 Browser* browser; 158 159 // If |browser| == NULL, specifies a Profile to use when finding or 160 // creating a Browser. 161 Profile* profile; 162 163 private: 164 NavigateParams(); 165 }; 166 167 // Navigates according to the configuration specified in |params|. 168 void Navigate(NavigateParams* params); 169 170 } // namespace browser 171 172 #endif // CHROME_BROWSER_UI_BROWSER_NAVIGATOR_H_ 173