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 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 command_updater_(this), | 199 command_updater_(this), |
200 toolbar_model_(this), | 200 toolbar_model_(this), |
201 chrome_updater_factory_(this), | 201 chrome_updater_factory_(this), |
202 is_attempting_to_close_browser_(false), | 202 is_attempting_to_close_browser_(false), |
203 cancel_download_confirmation_state_(NOT_PROMPTED), | 203 cancel_download_confirmation_state_(NOT_PROMPTED), |
204 maximized_state_(MAXIMIZED_STATE_DEFAULT), | 204 maximized_state_(MAXIMIZED_STATE_DEFAULT), |
205 method_factory_(this), | 205 method_factory_(this), |
206 block_command_execution_(false), | 206 block_command_execution_(false), |
207 last_blocked_command_id_(-1), | 207 last_blocked_command_id_(-1), |
208 last_blocked_command_disposition_(CURRENT_TAB), | 208 last_blocked_command_disposition_(CURRENT_TAB), |
209 pending_web_app_action_(NONE) { | 209 pending_web_app_action_(NONE), |
| 210 tab_restore_service_delegate_(this) { |
210 registrar_.Add(this, NotificationType::SSL_VISIBLE_STATE_CHANGED, | 211 registrar_.Add(this, NotificationType::SSL_VISIBLE_STATE_CHANGED, |
211 NotificationService::AllSources()); | 212 NotificationService::AllSources()); |
212 registrar_.Add(this, NotificationType::EXTENSION_UPDATE_DISABLED, | 213 registrar_.Add(this, NotificationType::EXTENSION_UPDATE_DISABLED, |
213 NotificationService::AllSources()); | 214 NotificationService::AllSources()); |
214 registrar_.Add(this, NotificationType::EXTENSION_LOADED, | 215 registrar_.Add(this, NotificationType::EXTENSION_LOADED, |
215 NotificationService::AllSources()); | 216 NotificationService::AllSources()); |
216 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, | 217 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, |
217 NotificationService::AllSources()); | 218 NotificationService::AllSources()); |
218 registrar_.Add(this, NotificationType::EXTENSION_UNINSTALLED, | 219 registrar_.Add(this, NotificationType::EXTENSION_UNINSTALLED, |
219 NotificationService::AllSources()); | 220 NotificationService::AllSources()); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 profile_->ResetTabRestoreService(); | 293 profile_->ResetTabRestoreService(); |
293 } | 294 } |
294 #endif | 295 #endif |
295 | 296 |
296 SessionService* session_service = profile_->GetSessionService(); | 297 SessionService* session_service = profile_->GetSessionService(); |
297 if (session_service) | 298 if (session_service) |
298 session_service->WindowClosed(session_id_); | 299 session_service->WindowClosed(session_id_); |
299 | 300 |
300 TabRestoreService* tab_restore_service = profile()->GetTabRestoreService(); | 301 TabRestoreService* tab_restore_service = profile()->GetTabRestoreService(); |
301 if (tab_restore_service) | 302 if (tab_restore_service) |
302 tab_restore_service->BrowserClosed(this); | 303 tab_restore_service->BrowserClosed(tab_restore_service_delegate()); |
303 | 304 |
304 encoding_auto_detect_.Destroy(); | 305 encoding_auto_detect_.Destroy(); |
305 printing_enabled_.Destroy(); | 306 printing_enabled_.Destroy(); |
306 dev_tools_disabled_.Destroy(); | 307 dev_tools_disabled_.Destroy(); |
307 incognito_mode_allowed_.Destroy(); | 308 incognito_mode_allowed_.Destroy(); |
308 instant_enabled_.Destroy(); | 309 instant_enabled_.Destroy(); |
309 use_vertical_tabs_.Destroy(); | 310 use_vertical_tabs_.Destroy(); |
310 | 311 |
311 if (profile_->IsOffTheRecord() && | 312 if (profile_->IsOffTheRecord() && |
312 !BrowserList::IsOffTheRecordSessionActive()) { | 313 !BrowserList::IsOffTheRecordSessionActive()) { |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 exiting = true; | 888 exiting = true; |
888 } | 889 } |
889 | 890 |
890 // Don't use HasSessionService here, we want to force creation of the | 891 // Don't use HasSessionService here, we want to force creation of the |
891 // session service so that user can restore what was open. | 892 // session service so that user can restore what was open. |
892 SessionService* session_service = profile()->GetSessionService(); | 893 SessionService* session_service = profile()->GetSessionService(); |
893 if (session_service) | 894 if (session_service) |
894 session_service->WindowClosing(session_id()); | 895 session_service->WindowClosing(session_id()); |
895 | 896 |
896 TabRestoreService* tab_restore_service = profile()->GetTabRestoreService(); | 897 TabRestoreService* tab_restore_service = profile()->GetTabRestoreService(); |
897 if (tab_restore_service) | 898 if (tab_restore_service && type() == TYPE_NORMAL && tab_count()) |
898 tab_restore_service->BrowserClosing(this); | 899 tab_restore_service->BrowserClosing(tab_restore_service_delegate()); |
899 | 900 |
900 // TODO(sky): convert session/tab restore to use notification. | 901 // TODO(sky): convert session/tab restore to use notification. |
901 NotificationService::current()->Notify( | 902 NotificationService::current()->Notify( |
902 NotificationType::BROWSER_CLOSING, | 903 NotificationType::BROWSER_CLOSING, |
903 Source<Browser>(this), | 904 Source<Browser>(this), |
904 Details<bool>(&exiting)); | 905 Details<bool>(&exiting)); |
905 | 906 |
906 CloseAllTabs(); | 907 CloseAllTabs(); |
907 } | 908 } |
908 | 909 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 TabContentsWrapper* wrapper = tabstrip_model()->GetTabContentsAt(index); | 960 TabContentsWrapper* wrapper = tabstrip_model()->GetTabContentsAt(index); |
960 if (wrapper) | 961 if (wrapper) |
961 return wrapper->tab_contents(); | 962 return wrapper->tab_contents(); |
962 return NULL; | 963 return NULL; |
963 } | 964 } |
964 | 965 |
965 void Browser::SelectTabContentsAt(int index, bool user_gesture) { | 966 void Browser::SelectTabContentsAt(int index, bool user_gesture) { |
966 tab_handler_->GetTabStripModel()->SelectTabContentsAt(index, user_gesture); | 967 tab_handler_->GetTabStripModel()->SelectTabContentsAt(index, user_gesture); |
967 } | 968 } |
968 | 969 |
| 970 bool Browser::IsTabPinned(int index) const { |
| 971 return tabstrip_model()->IsTabPinned(index); |
| 972 } |
| 973 |
969 void Browser::CloseAllTabs() { | 974 void Browser::CloseAllTabs() { |
970 tab_handler_->GetTabStripModel()->CloseAllTabs(); | 975 tab_handler_->GetTabStripModel()->CloseAllTabs(); |
971 } | 976 } |
972 | 977 |
973 //////////////////////////////////////////////////////////////////////////////// | 978 //////////////////////////////////////////////////////////////////////////////// |
974 // Browser, Tab adding/showing functions: | 979 // Browser, Tab adding/showing functions: |
975 | 980 |
976 bool Browser::IsTabStripEditable() const { | 981 bool Browser::IsTabStripEditable() const { |
977 return window()->IsTabStripEditable(); | 982 return window()->IsTabStripEditable(); |
978 } | 983 } |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1449 UserMetrics::RecordAction(UserMetricsAction("Duplicate"), profile_); | 1454 UserMetrics::RecordAction(UserMetricsAction("Duplicate"), profile_); |
1450 DuplicateContentsAt(selected_index()); | 1455 DuplicateContentsAt(selected_index()); |
1451 } | 1456 } |
1452 | 1457 |
1453 void Browser::RestoreTab() { | 1458 void Browser::RestoreTab() { |
1454 UserMetrics::RecordAction(UserMetricsAction("RestoreTab"), profile_); | 1459 UserMetrics::RecordAction(UserMetricsAction("RestoreTab"), profile_); |
1455 TabRestoreService* service = profile_->GetTabRestoreService(); | 1460 TabRestoreService* service = profile_->GetTabRestoreService(); |
1456 if (!service) | 1461 if (!service) |
1457 return; | 1462 return; |
1458 | 1463 |
1459 service->RestoreMostRecentEntry(this); | 1464 service->RestoreMostRecentEntry(tab_restore_service_delegate()); |
1460 } | 1465 } |
1461 | 1466 |
1462 void Browser::WriteCurrentURLToClipboard() { | 1467 void Browser::WriteCurrentURLToClipboard() { |
1463 // TODO(ericu): There isn't currently a metric for this. Should there be? | 1468 // TODO(ericu): There isn't currently a metric for this. Should there be? |
1464 // We don't appear to track the action when it comes from the | 1469 // We don't appear to track the action when it comes from the |
1465 // RenderContextViewMenu. | 1470 // RenderContextViewMenu. |
1466 | 1471 |
1467 TabContents* contents = GetSelectedTabContents(); | 1472 TabContents* contents = GetSelectedTabContents(); |
1468 if (!contents->ShouldDisplayURL()) | 1473 if (!contents->ShouldDisplayURL()) |
1469 return; | 1474 return; |
(...skipping 1092 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2562 // We don't create historical tabs for incognito windows or windows without | 2567 // We don't create historical tabs for incognito windows or windows without |
2563 // profiles. | 2568 // profiles. |
2564 if (!profile() || profile()->IsOffTheRecord() || | 2569 if (!profile() || profile()->IsOffTheRecord() || |
2565 !profile()->GetTabRestoreService()) { | 2570 !profile()->GetTabRestoreService()) { |
2566 return; | 2571 return; |
2567 } | 2572 } |
2568 | 2573 |
2569 // We only create historical tab entries for tabbed browser windows. | 2574 // We only create historical tab entries for tabbed browser windows. |
2570 if (CanSupportWindowFeature(FEATURE_TABSTRIP)) { | 2575 if (CanSupportWindowFeature(FEATURE_TABSTRIP)) { |
2571 profile()->GetTabRestoreService()->CreateHistoricalTab( | 2576 profile()->GetTabRestoreService()->CreateHistoricalTab( |
2572 &contents->controller()); | 2577 &contents->controller(), |
| 2578 tab_handler_->GetTabStripModel()->GetIndexOfTabContents(contents)); |
2573 } | 2579 } |
2574 } | 2580 } |
2575 | 2581 |
2576 bool Browser::RunUnloadListenerBeforeClosing(TabContentsWrapper* contents) { | 2582 bool Browser::RunUnloadListenerBeforeClosing(TabContentsWrapper* contents) { |
2577 return Browser::RunUnloadEventsHelper(contents->tab_contents()); | 2583 return Browser::RunUnloadEventsHelper(contents->tab_contents()); |
2578 } | 2584 } |
2579 | 2585 |
2580 bool Browser::CanReloadContents(TabContents* source) const { | 2586 bool Browser::CanReloadContents(TabContents* source) const { |
2581 return type() != TYPE_DEVTOOLS; | 2587 return type() != TYPE_DEVTOOLS; |
2582 } | 2588 } |
(...skipping 1803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4386 // The page transition below is only for the purpose of inserting the tab. | 4392 // The page transition below is only for the purpose of inserting the tab. |
4387 browser->AddTab(view_source_contents, PageTransition::LINK); | 4393 browser->AddTab(view_source_contents, PageTransition::LINK); |
4388 } | 4394 } |
4389 | 4395 |
4390 if (profile_->HasSessionService()) { | 4396 if (profile_->HasSessionService()) { |
4391 SessionService* session_service = profile_->GetSessionService(); | 4397 SessionService* session_service = profile_->GetSessionService(); |
4392 if (session_service) | 4398 if (session_service) |
4393 session_service->TabRestored(&view_source_contents->controller(), false); | 4399 session_service->TabRestored(&view_source_contents->controller(), false); |
4394 } | 4400 } |
4395 } | 4401 } |
OLD | NEW |