OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/browser.h" | 5 #include "chrome/browser/ui/browser.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <shellapi.h> | 8 #include <shellapi.h> |
9 #include <windows.h> | 9 #include <windows.h> |
10 #endif // OS_WIN | 10 #endif // OS_WIN |
(...skipping 1130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1141 tab_handler_->GetTabStripModel()->active_index(), | 1141 tab_handler_->GetTabStripModel()->active_index(), |
1142 wrapper); | 1142 wrapper); |
1143 } | 1143 } |
1144 | 1144 |
1145 bool Browser::CanRestoreTab() { | 1145 bool Browser::CanRestoreTab() { |
1146 return command_updater_.IsCommandEnabled(IDC_RESTORE_TAB); | 1146 return command_updater_.IsCommandEnabled(IDC_RESTORE_TAB); |
1147 } | 1147 } |
1148 | 1148 |
1149 bool Browser::NavigateToIndexWithDisposition(int index, | 1149 bool Browser::NavigateToIndexWithDisposition(int index, |
1150 WindowOpenDisposition disp) { | 1150 WindowOpenDisposition disp) { |
1151 NavigationController& controller = | 1151 TabContentsWrapper* tab = GetOrCloneTabWrapperForDisposition(disp); |
1152 GetOrCloneTabForDisposition(disp)->controller(); | 1152 |
| 1153 NavigationController& controller = tab->controller(); |
1153 if (index < 0 || index >= controller.entry_count()) | 1154 if (index < 0 || index >= controller.entry_count()) |
1154 return false; | 1155 return false; |
1155 controller.GoToIndex(index); | 1156 controller.GoToIndex(index); |
| 1157 |
| 1158 CreateNewBrowserForDisposition(tab, disp); |
| 1159 |
1156 return true; | 1160 return true; |
1157 } | 1161 } |
1158 | 1162 |
1159 browser::NavigateParams Browser::GetSingletonTabNavigateParams( | 1163 browser::NavigateParams Browser::GetSingletonTabNavigateParams( |
1160 const GURL& url) { | 1164 const GURL& url) { |
1161 browser::NavigateParams params(this, url, PageTransition::AUTO_BOOKMARK); | 1165 browser::NavigateParams params(this, url, PageTransition::AUTO_BOOKMARK); |
1162 params.disposition = SINGLETON_TAB; | 1166 params.disposition = SINGLETON_TAB; |
1163 params.window_action = browser::NavigateParams::SHOW_WINDOW; | 1167 params.window_action = browser::NavigateParams::SHOW_WINDOW; |
1164 params.user_gesture = true; | 1168 params.user_gesture = true; |
1165 return params; | 1169 return params; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1217 command_updater_.UpdateCommandEnabled(IDC_SHOW_APP_MENU, show_main_ui); | 1221 command_updater_.UpdateCommandEnabled(IDC_SHOW_APP_MENU, show_main_ui); |
1218 command_updater_.UpdateCommandEnabled(IDC_TOGGLE_VERTICAL_TABS, show_main_ui); | 1222 command_updater_.UpdateCommandEnabled(IDC_TOGGLE_VERTICAL_TABS, show_main_ui); |
1219 #if defined (ENABLE_PROFILING) && !defined(NO_TCMALLOC) | 1223 #if defined (ENABLE_PROFILING) && !defined(NO_TCMALLOC) |
1220 command_updater_.UpdateCommandEnabled(IDC_PROFILING_ENABLED, show_main_ui); | 1224 command_updater_.UpdateCommandEnabled(IDC_PROFILING_ENABLED, show_main_ui); |
1221 #endif | 1225 #endif |
1222 } | 1226 } |
1223 | 1227 |
1224 /////////////////////////////////////////////////////////////////////////////// | 1228 /////////////////////////////////////////////////////////////////////////////// |
1225 // Browser, Assorted browser commands: | 1229 // Browser, Assorted browser commands: |
1226 | 1230 |
1227 bool Browser::ShouldOpenNewTabForWindowDisposition( | 1231 bool Browser::ShouldOpenNewTabForDisposition( |
1228 WindowOpenDisposition disposition) { | 1232 WindowOpenDisposition disposition) { |
1229 return (disposition == NEW_FOREGROUND_TAB || | 1233 return (disposition == NEW_FOREGROUND_TAB || |
1230 disposition == NEW_BACKGROUND_TAB); | 1234 disposition == NEW_BACKGROUND_TAB); |
1231 } | 1235 } |
1232 | 1236 |
1233 TabContents* Browser::GetOrCloneTabForDisposition( | 1237 TabContents* Browser::GetOrCloneTabForDisposition( |
1234 WindowOpenDisposition disposition) { | 1238 WindowOpenDisposition disposition) { |
| 1239 return GetOrCloneTabWrapperForDisposition(disposition)->tab_contents(); |
| 1240 } |
| 1241 |
| 1242 TabContentsWrapper* Browser::GetOrCloneTabWrapperForDisposition( |
| 1243 WindowOpenDisposition disposition) |
| 1244 { |
1235 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); | 1245 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); |
1236 if (ShouldOpenNewTabForWindowDisposition(disposition)) { | 1246 |
1237 current_tab = current_tab->Clone(); | 1247 if (disposition == NEW_WINDOW) |
| 1248 return current_tab->Clone(); |
| 1249 |
| 1250 if (ShouldOpenNewTabForDisposition(disposition)) { |
| 1251 TabContentsWrapper* new_tab = current_tab->Clone(); |
1238 tab_handler_->GetTabStripModel()->AddTabContents( | 1252 tab_handler_->GetTabStripModel()->AddTabContents( |
1239 current_tab, -1, PageTransition::LINK, | 1253 new_tab, -1, PageTransition::LINK, |
1240 disposition == NEW_FOREGROUND_TAB ? TabStripModel::ADD_ACTIVE : | 1254 disposition == NEW_FOREGROUND_TAB ? TabStripModel::ADD_ACTIVE : |
1241 TabStripModel::ADD_NONE); | 1255 TabStripModel::ADD_NONE); |
| 1256 return new_tab; |
1242 } | 1257 } |
1243 return current_tab->tab_contents(); | 1258 |
| 1259 return current_tab; |
| 1260 } |
| 1261 |
| 1262 void Browser::CreateNewBrowserForDisposition(TabContentsWrapper* tab_contents, |
| 1263 WindowOpenDisposition disposition) |
| 1264 { |
| 1265 if (disposition == NEW_WINDOW) { |
| 1266 Browser* browser = Create(profile_); |
| 1267 browser->AddTab(tab_contents, PageTransition::LINK); |
| 1268 browser->window()->Show(); |
| 1269 } |
1244 } | 1270 } |
1245 | 1271 |
1246 void Browser::UpdateTabStripModelInsertionPolicy() { | 1272 void Browser::UpdateTabStripModelInsertionPolicy() { |
1247 tab_handler_->GetTabStripModel()->SetInsertionPolicy(UseVerticalTabs() ? | 1273 tab_handler_->GetTabStripModel()->SetInsertionPolicy(UseVerticalTabs() ? |
1248 TabStripModel::INSERT_BEFORE : TabStripModel::INSERT_AFTER); | 1274 TabStripModel::INSERT_BEFORE : TabStripModel::INSERT_AFTER); |
1249 } | 1275 } |
1250 | 1276 |
1251 void Browser::UseVerticalTabsChanged() { | 1277 void Browser::UseVerticalTabsChanged() { |
1252 UpdateTabStripModelInsertionPolicy(); | 1278 UpdateTabStripModelInsertionPolicy(); |
1253 window()->ToggleTabStripMode(); | 1279 window()->ToggleTabStripMode(); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1296 bool can_close = !watcher || watcher->CanCloseBrowser(this); | 1322 bool can_close = !watcher || watcher->CanCloseBrowser(this); |
1297 if (!can_close && is_attempting_to_close_browser_) | 1323 if (!can_close && is_attempting_to_close_browser_) |
1298 CancelWindowClose(); | 1324 CancelWindowClose(); |
1299 return can_close; | 1325 return can_close; |
1300 } | 1326 } |
1301 | 1327 |
1302 void Browser::GoBack(WindowOpenDisposition disposition) { | 1328 void Browser::GoBack(WindowOpenDisposition disposition) { |
1303 UserMetrics::RecordAction(UserMetricsAction("Back")); | 1329 UserMetrics::RecordAction(UserMetricsAction("Back")); |
1304 | 1330 |
1305 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); | 1331 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); |
1306 if (current_tab->controller().CanGoBack()) { | 1332 if (!current_tab->controller().CanGoBack()) |
1307 TabContents* new_tab = GetOrCloneTabForDisposition(disposition); | 1333 return; |
1308 // If we are on an interstitial page and clone the tab, it won't be copied | 1334 |
1309 // to the new tab, so we don't need to go back. | 1335 TabContentsWrapper* new_tab = GetOrCloneTabWrapperForDisposition(disposition); |
1310 if (current_tab->tab_contents()->showing_interstitial_page() && | 1336 if (current_tab->tab_contents()->showing_interstitial_page() && |
1311 (new_tab != current_tab->tab_contents())) | 1337 (new_tab != current_tab)) |
1312 return; | 1338 return; |
1313 new_tab->controller().GoBack(); | 1339 |
1314 } | 1340 new_tab->controller().GoBack(); |
| 1341 |
| 1342 CreateNewBrowserForDisposition(new_tab, disposition); |
1315 } | 1343 } |
1316 | 1344 |
1317 void Browser::GoForward(WindowOpenDisposition disposition) { | 1345 void Browser::GoForward(WindowOpenDisposition disposition) { |
1318 UserMetrics::RecordAction(UserMetricsAction("Forward")); | 1346 UserMetrics::RecordAction(UserMetricsAction("Forward")); |
1319 if (GetSelectedTabContentsWrapper()->controller().CanGoForward()) | 1347 |
1320 GetOrCloneTabForDisposition(disposition)->controller().GoForward(); | 1348 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); |
| 1349 if (!current_tab->controller().CanGoForward()) |
| 1350 return; |
| 1351 |
| 1352 TabContentsWrapper* new_tab = GetOrCloneTabWrapperForDisposition(disposition); |
| 1353 new_tab->controller().GoForward(); |
| 1354 |
| 1355 CreateNewBrowserForDisposition(new_tab, disposition); |
1321 } | 1356 } |
1322 | 1357 |
1323 void Browser::Reload(WindowOpenDisposition disposition) { | 1358 void Browser::Reload(WindowOpenDisposition disposition) { |
1324 UserMetrics::RecordAction(UserMetricsAction("Reload")); | 1359 UserMetrics::RecordAction(UserMetricsAction("Reload")); |
1325 ReloadInternal(disposition, false); | 1360 ReloadInternal(disposition, false); |
1326 } | 1361 } |
1327 | 1362 |
1328 void Browser::ReloadIgnoringCache(WindowOpenDisposition disposition) { | 1363 void Browser::ReloadIgnoringCache(WindowOpenDisposition disposition) { |
1329 UserMetrics::RecordAction(UserMetricsAction("ReloadIgnoringCache")); | 1364 UserMetrics::RecordAction(UserMetricsAction("ReloadIgnoringCache")); |
1330 ReloadInternal(disposition, true); | 1365 ReloadInternal(disposition, true); |
(...skipping 3234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4565 TabContents* current_tab = GetSelectedTabContents(); | 4600 TabContents* current_tab = GetSelectedTabContents(); |
4566 if (current_tab) { | 4601 if (current_tab) { |
4567 content_restrictions = current_tab->content_restrictions(); | 4602 content_restrictions = current_tab->content_restrictions(); |
4568 NavigationEntry* active_entry = current_tab->controller().GetActiveEntry(); | 4603 NavigationEntry* active_entry = current_tab->controller().GetActiveEntry(); |
4569 // See comment in UpdateCommandsForTabState about why we call url(). | 4604 // See comment in UpdateCommandsForTabState about why we call url(). |
4570 if (!SavePackage::IsSavableURL(active_entry ? active_entry->url() : GURL())) | 4605 if (!SavePackage::IsSavableURL(active_entry ? active_entry->url() : GURL())) |
4571 content_restrictions |= CONTENT_RESTRICTION_SAVE; | 4606 content_restrictions |= CONTENT_RESTRICTION_SAVE; |
4572 } | 4607 } |
4573 return content_restrictions; | 4608 return content_restrictions; |
4574 } | 4609 } |
OLD | NEW |