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 <windows.h> | 8 #include <windows.h> |
9 #include <shellapi.h> | 9 #include <shellapi.h> |
10 #endif // OS_WIN | 10 #endif // OS_WIN |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
243 cancel_download_confirmation_state_(NOT_PROMPTED), | 243 cancel_download_confirmation_state_(NOT_PROMPTED), |
244 maximized_state_(MAXIMIZED_STATE_DEFAULT), | 244 maximized_state_(MAXIMIZED_STATE_DEFAULT), |
245 method_factory_(this), | 245 method_factory_(this), |
246 block_command_execution_(false), | 246 block_command_execution_(false), |
247 last_blocked_command_id_(-1), | 247 last_blocked_command_id_(-1), |
248 last_blocked_command_disposition_(CURRENT_TAB), | 248 last_blocked_command_disposition_(CURRENT_TAB), |
249 pending_web_app_action_(NONE), | 249 pending_web_app_action_(NONE), |
250 ALLOW_THIS_IN_INITIALIZER_LIST( | 250 ALLOW_THIS_IN_INITIALIZER_LIST( |
251 tab_restore_service_delegate_( | 251 tab_restore_service_delegate_( |
252 new BrowserTabRestoreServiceDelegate(this))), | 252 new BrowserTabRestoreServiceDelegate(this))), |
253 bookmark_bar_state_(BookmarkBar::HIDDEN) { | 253 bookmark_bar_state_(BookmarkBar::HIDDEN), |
254 notify_tab_of_fullscreen_exit_(false), | |
255 tab_caused_fullscreen_(false) { | |
254 registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED, | 256 registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED, |
255 NotificationService::AllSources()); | 257 NotificationService::AllSources()); |
256 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED, | 258 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED, |
257 NotificationService::AllSources()); | 259 NotificationService::AllSources()); |
258 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, | 260 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, |
259 NotificationService::AllSources()); | 261 NotificationService::AllSources()); |
260 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, | 262 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
261 NotificationService::AllSources()); | 263 NotificationService::AllSources()); |
262 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, | 264 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, |
263 NotificationService::AllSources()); | 265 NotificationService::AllSources()); |
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1484 } | 1486 } |
1485 | 1487 |
1486 void Browser::CloseWindow() { | 1488 void Browser::CloseWindow() { |
1487 UserMetrics::RecordAction(UserMetricsAction("CloseWindow")); | 1489 UserMetrics::RecordAction(UserMetricsAction("CloseWindow")); |
1488 window_->Close(); | 1490 window_->Close(); |
1489 } | 1491 } |
1490 | 1492 |
1491 void Browser::NewTab() { | 1493 void Browser::NewTab() { |
1492 UserMetrics::RecordAction(UserMetricsAction("NewTab")); | 1494 UserMetrics::RecordAction(UserMetricsAction("NewTab")); |
1493 | 1495 |
1496 ExitTabbedFullscreenMode(); | |
1497 | |
1494 if (is_type_tabbed()) { | 1498 if (is_type_tabbed()) { |
1495 AddBlankTab(true); | 1499 AddBlankTab(true); |
1496 GetSelectedTabContentsWrapper()->view()->RestoreFocus(); | 1500 GetSelectedTabContentsWrapper()->view()->RestoreFocus(); |
1497 } else { | 1501 } else { |
1498 Browser* b = GetOrCreateTabbedBrowser(profile_); | 1502 Browser* b = GetOrCreateTabbedBrowser(profile_); |
1499 b->AddBlankTab(true); | 1503 b->AddBlankTab(true); |
1500 b->window()->Show(); | 1504 b->window()->Show(); |
1501 // The call to AddBlankTab above did not set the focus to the tab as its | 1505 // The call to AddBlankTab above did not set the focus to the tab as its |
1502 // window was not active, so we have to do it explicitly. | 1506 // window was not active, so we have to do it explicitly. |
1503 // See http://crbug.com/6380. | 1507 // See http://crbug.com/6380. |
1504 b->GetSelectedTabContentsWrapper()->view()->RestoreFocus(); | 1508 b->GetSelectedTabContentsWrapper()->view()->RestoreFocus(); |
1505 } | 1509 } |
1506 } | 1510 } |
1507 | 1511 |
1508 void Browser::CloseTab() { | 1512 void Browser::CloseTab() { |
1509 UserMetrics::RecordAction(UserMetricsAction("CloseTab_Accelerator")); | 1513 UserMetrics::RecordAction(UserMetricsAction("CloseTab_Accelerator")); |
1510 if (CanCloseTab()) | 1514 if (CanCloseTab()) |
1511 tab_handler_->GetTabStripModel()->CloseSelectedTabs(); | 1515 tab_handler_->GetTabStripModel()->CloseSelectedTabs(); |
1516 ExitTabbedFullscreenMode(); | |
1512 } | 1517 } |
1513 | 1518 |
1514 void Browser::SelectNextTab() { | 1519 void Browser::SelectNextTab() { |
1515 UserMetrics::RecordAction(UserMetricsAction("SelectNextTab")); | 1520 UserMetrics::RecordAction(UserMetricsAction("SelectNextTab")); |
1521 ExitTabbedFullscreenMode(); | |
1516 tab_handler_->GetTabStripModel()->SelectNextTab(); | 1522 tab_handler_->GetTabStripModel()->SelectNextTab(); |
1517 } | 1523 } |
1518 | 1524 |
1519 void Browser::SelectPreviousTab() { | 1525 void Browser::SelectPreviousTab() { |
1520 UserMetrics::RecordAction(UserMetricsAction("SelectPrevTab")); | 1526 UserMetrics::RecordAction(UserMetricsAction("SelectPrevTab")); |
1527 ExitTabbedFullscreenMode(); | |
Ben Goodger (Google)
2011/08/15 22:37:12
For all of these... these aren't the only ways tha
koz (OOO until 15th September)
2011/08/16 07:06:55
Done.
| |
1521 tab_handler_->GetTabStripModel()->SelectPreviousTab(); | 1528 tab_handler_->GetTabStripModel()->SelectPreviousTab(); |
1522 } | 1529 } |
1523 | 1530 |
1524 void Browser::OpenTabpose() { | 1531 void Browser::OpenTabpose() { |
1525 #if defined(OS_MACOSX) | 1532 #if defined(OS_MACOSX) |
1526 if (!CommandLine::ForCurrentProcess()->HasSwitch( | 1533 if (!CommandLine::ForCurrentProcess()->HasSwitch( |
1527 switches::kEnableExposeForTabs)) { | 1534 switches::kEnableExposeForTabs)) { |
1528 return; | 1535 return; |
1529 } | 1536 } |
1530 | 1537 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1591 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab")); | 1598 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab")); |
1592 int tab_strip_index = tab_handler_->GetTabStripModel()->active_index(); | 1599 int tab_strip_index = tab_handler_->GetTabStripModel()->active_index(); |
1593 TabContentsWrapper* contents = | 1600 TabContentsWrapper* contents = |
1594 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index); | 1601 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index); |
1595 Browser* browser = Browser::Create(profile_); | 1602 Browser* browser = Browser::Create(profile_); |
1596 browser->tabstrip_model()->AppendTabContents(contents, true); | 1603 browser->tabstrip_model()->AppendTabContents(contents, true); |
1597 browser->window()->Show(); | 1604 browser->window()->Show(); |
1598 } | 1605 } |
1599 | 1606 |
1600 void Browser::ToggleFullscreenMode() { | 1607 void Browser::ToggleFullscreenMode() { |
1608 bool entering_fullscreen = !window_->IsFullscreen(); | |
1609 | |
1601 #if !defined(OS_MACOSX) | 1610 #if !defined(OS_MACOSX) |
1602 // In kiosk mode, we always want to be fullscreen. When the browser first | 1611 // In kiosk mode, we always want to be fullscreen. When the browser first |
1603 // starts we're not yet fullscreen, so let the initial toggle go through. | 1612 // starts we're not yet fullscreen, so let the initial toggle go through. |
1604 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) && | 1613 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) && |
1605 window_->IsFullscreen()) | 1614 window_->IsFullscreen()) |
1606 return; | 1615 return; |
1607 #endif | 1616 #endif |
1608 | 1617 |
1609 UserMetrics::RecordAction(UserMetricsAction("ToggleFullscreen")); | 1618 UserMetrics::RecordAction(UserMetricsAction("ToggleFullscreen")); |
1610 window_->SetFullscreen(!window_->IsFullscreen()); | 1619 window_->SetFullscreen(entering_fullscreen); |
1611 | 1620 |
1612 // Once the window has become fullscreen it'll call back to | 1621 // Once the window has become fullscreen it'll call back to |
1613 // WindowFullscreenStateChanged(). We don't do this immediately as | 1622 // WindowFullscreenStateChanged(). We don't do this immediately as |
1614 // BrowserWindow::SetFullscreen() asks for bookmark_bar_state_, so we let the | 1623 // BrowserWindow::SetFullscreen() asks for bookmark_bar_state_, so we let the |
1615 // BrowserWindow invoke WindowFullscreenStateChanged when appropriate. | 1624 // BrowserWindow invoke WindowFullscreenStateChanged when appropriate. |
1616 | 1625 |
1617 // TODO: convert mac to invoke WindowFullscreenStateChanged once it updates | 1626 // TODO: convert mac to invoke WindowFullscreenStateChanged once it updates |
1618 // the necessary state of the frame. | 1627 // the necessary state of the frame. |
1619 #if defined(OS_MACOSX) | 1628 #if defined(OS_MACOSX) |
1620 WindowFullscreenStateChanged(); | 1629 WindowFullscreenStateChanged(); |
1621 #endif | 1630 #endif |
1631 | |
1632 if (!entering_fullscreen) | |
1633 NotifyTabOfFullscreenExit(); | |
1634 } | |
1635 | |
1636 void Browser::NotifyTabOfFullscreenExit() { | |
1637 if (!notify_tab_of_fullscreen_exit_) | |
Ben Goodger (Google)
2011/08/15 22:37:12
Would be nice for the logic of this function to li
koz (OOO until 15th September)
2011/08/16 07:06:55
Done.
| |
1638 return; | |
1639 TabContentsWrapper* tab_contents = GetSelectedTabContentsWrapper(); | |
1640 RenderViewHost* host = tab_contents->render_view_host(); | |
1641 host->Send(new ViewMsg_ExitFullscreen(host->routing_id())); | |
1642 notify_tab_of_fullscreen_exit_ = false; | |
1643 tab_caused_fullscreen_ = false; | |
1622 } | 1644 } |
1623 | 1645 |
1624 #if defined(OS_CHROMEOS) | 1646 #if defined(OS_CHROMEOS) |
1625 void Browser::Search() { | 1647 void Browser::Search() { |
1626 // If the NTP is showing, close it. | 1648 // If the NTP is showing, close it. |
1627 const GURL& url = GetSelectedTabContents()->GetURL(); | 1649 const GURL& url = GetSelectedTabContents()->GetURL(); |
1628 if (url.SchemeIs(chrome::kChromeUIScheme) && | 1650 if (url.SchemeIs(chrome::kChromeUIScheme) && |
1629 url.host() == chrome::kChromeUINewTabHost) { | 1651 url.host() == chrome::kChromeUINewTabHost) { |
1630 CloseTab(); | 1652 CloseTab(); |
1631 return; | 1653 return; |
(...skipping 1484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3116 | 3138 |
3117 if (source) { | 3139 if (source) { |
3118 NotificationService::current()->Notify( | 3140 NotificationService::current()->Notify( |
3119 content::NOTIFICATION_TAB_ADDED, | 3141 content::NOTIFICATION_TAB_ADDED, |
3120 Source<TabContentsDelegate>(source->delegate()), | 3142 Source<TabContentsDelegate>(source->delegate()), |
3121 Details<TabContents>(source)); | 3143 Details<TabContents>(source)); |
3122 } | 3144 } |
3123 } | 3145 } |
3124 | 3146 |
3125 void Browser::ActivateContents(TabContents* contents) { | 3147 void Browser::ActivateContents(TabContents* contents) { |
3148 int activating_index = | |
3149 tab_handler_->GetTabStripModel()->GetWrapperIndex(contents); | |
3150 int active_index = tab_handler_->GetTabStripModel()->active_index(); | |
3151 | |
3152 if (activating_index != active_index) { | |
3153 ExitTabbedFullscreenMode(); | |
3154 } | |
3126 tab_handler_->GetTabStripModel()->ActivateTabAt( | 3155 tab_handler_->GetTabStripModel()->ActivateTabAt( |
3127 tab_handler_->GetTabStripModel()->GetWrapperIndex(contents), false); | 3156 activating_index, false); |
3128 window_->Activate(); | 3157 window_->Activate(); |
3129 } | 3158 } |
3130 | 3159 |
3131 void Browser::DeactivateContents(TabContents* contents) { | 3160 void Browser::DeactivateContents(TabContents* contents) { |
3132 window_->Deactivate(); | 3161 window_->Deactivate(); |
3133 } | 3162 } |
3134 | 3163 |
3135 void Browser::LoadingStateChanged(TabContents* source) { | 3164 void Browser::LoadingStateChanged(TabContents* source) { |
3136 window_->UpdateLoadingAnimations( | 3165 window_->UpdateLoadingAnimations( |
3137 tab_handler_->GetTabStripModel()->TabsAreLoading()); | 3166 tab_handler_->GetTabStripModel()->TabsAreLoading()); |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3470 | 3499 |
3471 void Browser::DidNavigateToPendingEntry(TabContents* tab) { | 3500 void Browser::DidNavigateToPendingEntry(TabContents* tab) { |
3472 if (tab == GetSelectedTabContents()) | 3501 if (tab == GetSelectedTabContents()) |
3473 UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TAB_STATE); | 3502 UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TAB_STATE); |
3474 } | 3503 } |
3475 | 3504 |
3476 content::JavaScriptDialogCreator* Browser::GetJavaScriptDialogCreator() { | 3505 content::JavaScriptDialogCreator* Browser::GetJavaScriptDialogCreator() { |
3477 return GetJavaScriptDialogCreatorInstance(); | 3506 return GetJavaScriptDialogCreatorInstance(); |
3478 } | 3507 } |
3479 | 3508 |
3509 void Browser::ToggleFullscreenModeForRVH(TabContents* tab, | |
3510 bool enter_fullscreen) { | |
3511 if (tab != GetSelectedTabContents()) | |
3512 return; | |
3513 if (enter_fullscreen) { | |
Ben Goodger (Google)
2011/08/15 22:37:12
These toggling functions make my brain hurt.
Give
Peter Kasting
2011/08/15 22:42:54
BTW Ben, that's how things originally were, and I
Peter Kasting
2011/08/15 22:42:54
Nit: Shorter:
notify_tab_of_fullscreen_exit_ =
koz (OOO until 15th September)
2011/08/16 07:06:55
This is shorter, but I feel it is less semantic. M
| |
3514 notify_tab_of_fullscreen_exit_ = true; | |
3515 if (!window_->IsFullscreen()) { | |
3516 tab_caused_fullscreen_ = true; | |
3517 ToggleFullscreenMode(); | |
3518 } | |
3519 } else { | |
3520 notify_tab_of_fullscreen_exit_ = false; | |
3521 if (tab_caused_fullscreen_) | |
3522 ToggleFullscreenMode(); | |
3523 } | |
3524 } | |
3525 | |
3526 void Browser::ExitTabbedFullscreenMode() { | |
3527 if (tab_caused_fullscreen_) | |
3528 ToggleFullscreenMode(); | |
3529 else | |
3530 NotifyTabOfFullscreenExit(); | |
3531 } | |
3532 | |
3480 /////////////////////////////////////////////////////////////////////////////// | 3533 /////////////////////////////////////////////////////////////////////////////// |
3481 // Browser, TabContentsWrapperDelegate implementation: | 3534 // Browser, TabContentsWrapperDelegate implementation: |
3482 | 3535 |
3483 void Browser::OnDidGetApplicationInfo(TabContentsWrapper* source, | 3536 void Browser::OnDidGetApplicationInfo(TabContentsWrapper* source, |
3484 int32 page_id) { | 3537 int32 page_id) { |
3485 if (GetSelectedTabContentsWrapper() != source) | 3538 if (GetSelectedTabContentsWrapper() != source) |
3486 return; | 3539 return; |
3487 | 3540 |
3488 NavigationEntry* entry = source->controller().GetLastCommittedEntry(); | 3541 NavigationEntry* entry = source->controller().GetLastCommittedEntry(); |
3489 if (!entry || (entry->page_id() != page_id)) | 3542 if (!entry || (entry->page_id() != page_id)) |
(...skipping 1292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4782 window_->BookmarkBarStateChanged(animate_type); | 4835 window_->BookmarkBarStateChanged(animate_type); |
4783 } | 4836 } |
4784 | 4837 |
4785 void Browser::ShowSyncSetup() { | 4838 void Browser::ShowSyncSetup() { |
4786 ProfileSyncService* service = profile()->GetProfileSyncService(); | 4839 ProfileSyncService* service = profile()->GetProfileSyncService(); |
4787 if (service->HasSyncSetupCompleted()) | 4840 if (service->HasSyncSetupCompleted()) |
4788 ShowOptionsTab(chrome::kSyncSetupSubPage); | 4841 ShowOptionsTab(chrome::kSyncSetupSubPage); |
4789 else | 4842 else |
4790 profile()->GetProfileSyncService()->ShowLoginDialog(); | 4843 profile()->GetProfileSyncService()->ShowLoginDialog(); |
4791 } | 4844 } |
OLD | NEW |