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 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 block_command_execution_(false), | 255 block_command_execution_(false), |
256 last_blocked_command_id_(-1), | 256 last_blocked_command_id_(-1), |
257 last_blocked_command_disposition_(CURRENT_TAB), | 257 last_blocked_command_disposition_(CURRENT_TAB), |
258 pending_web_app_action_(NONE), | 258 pending_web_app_action_(NONE), |
259 ALLOW_THIS_IN_INITIALIZER_LIST( | 259 ALLOW_THIS_IN_INITIALIZER_LIST( |
260 tab_restore_service_delegate_( | 260 tab_restore_service_delegate_( |
261 new BrowserTabRestoreServiceDelegate(this))), | 261 new BrowserTabRestoreServiceDelegate(this))), |
262 ALLOW_THIS_IN_INITIALIZER_LIST( | 262 ALLOW_THIS_IN_INITIALIZER_LIST( |
263 synced_window_delegate_( | 263 synced_window_delegate_( |
264 new BrowserSyncedWindowDelegate(this))), | 264 new BrowserSyncedWindowDelegate(this))), |
265 bookmark_bar_state_(BookmarkBar::HIDDEN) { | 265 bookmark_bar_state_(BookmarkBar::HIDDEN), |
| 266 fullscreened_tab_(NULL), |
| 267 tab_caused_fullscreen_(false) { |
266 registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED, | 268 registrar_.Add(this, content::NOTIFICATION_SSL_VISIBLE_STATE_CHANGED, |
267 NotificationService::AllSources()); | 269 NotificationService::AllSources()); |
268 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED, | 270 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED, |
269 NotificationService::AllSources()); | 271 NotificationService::AllSources()); |
270 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, | 272 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, |
271 NotificationService::AllSources()); | 273 NotificationService::AllSources()); |
272 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, | 274 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
273 NotificationService::AllSources()); | 275 NotificationService::AllSources()); |
274 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, | 276 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, |
275 NotificationService::AllSources()); | 277 NotificationService::AllSources()); |
(...skipping 999 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 local_params.disposition = CURRENT_TAB; | 1277 local_params.disposition = CURRENT_TAB; |
1276 } | 1278 } |
1277 } | 1279 } |
1278 | 1280 |
1279 browser::Navigate(&local_params); | 1281 browser::Navigate(&local_params); |
1280 } | 1282 } |
1281 | 1283 |
1282 void Browser::WindowFullscreenStateChanged() { | 1284 void Browser::WindowFullscreenStateChanged() { |
1283 UpdateCommandsForFullscreenMode(window_->IsFullscreen()); | 1285 UpdateCommandsForFullscreenMode(window_->IsFullscreen()); |
1284 UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TOGGLE_FULLSCREEN); | 1286 UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TOGGLE_FULLSCREEN); |
| 1287 MessageLoop::current()->PostTask( |
| 1288 FROM_HERE, method_factory_.NewRunnableMethod( |
| 1289 &Browser::NotifyFullscreenChange)); |
| 1290 } |
| 1291 |
| 1292 void Browser::NotifyFullscreenChange() { |
| 1293 NotificationService::current()->Notify( |
| 1294 chrome::NOTIFICATION_FULLSCREEN_CHANGED, |
| 1295 Source<Browser>(this), |
| 1296 NotificationService::NoDetails()); |
1285 } | 1297 } |
1286 | 1298 |
1287 /////////////////////////////////////////////////////////////////////////////// | 1299 /////////////////////////////////////////////////////////////////////////////// |
1288 // Browser, Assorted browser commands: | 1300 // Browser, Assorted browser commands: |
1289 | 1301 |
1290 TabContents* Browser::GetOrCloneTabForDisposition( | 1302 TabContents* Browser::GetOrCloneTabForDisposition( |
1291 WindowOpenDisposition disposition) { | 1303 WindowOpenDisposition disposition) { |
1292 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); | 1304 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); |
1293 switch (disposition) { | 1305 switch (disposition) { |
1294 case NEW_FOREGROUND_TAB: | 1306 case NEW_FOREGROUND_TAB: |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1623 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab")); | 1635 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab")); |
1624 int tab_strip_index = tab_handler_->GetTabStripModel()->active_index(); | 1636 int tab_strip_index = tab_handler_->GetTabStripModel()->active_index(); |
1625 TabContentsWrapper* contents = | 1637 TabContentsWrapper* contents = |
1626 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index); | 1638 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index); |
1627 Browser* browser = Browser::Create(profile_); | 1639 Browser* browser = Browser::Create(profile_); |
1628 browser->tabstrip_model()->AppendTabContents(contents, true); | 1640 browser->tabstrip_model()->AppendTabContents(contents, true); |
1629 browser->window()->Show(); | 1641 browser->window()->Show(); |
1630 } | 1642 } |
1631 | 1643 |
1632 void Browser::ToggleFullscreenMode() { | 1644 void Browser::ToggleFullscreenMode() { |
| 1645 bool entering_fullscreen = !window_->IsFullscreen(); |
| 1646 |
1633 #if !defined(OS_MACOSX) | 1647 #if !defined(OS_MACOSX) |
1634 // In kiosk mode, we always want to be fullscreen. When the browser first | 1648 // In kiosk mode, we always want to be fullscreen. When the browser first |
1635 // starts we're not yet fullscreen, so let the initial toggle go through. | 1649 // starts we're not yet fullscreen, so let the initial toggle go through. |
1636 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) && | 1650 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) && |
1637 window_->IsFullscreen()) | 1651 window_->IsFullscreen()) |
1638 return; | 1652 return; |
1639 #endif | 1653 #endif |
1640 | 1654 |
1641 UserMetrics::RecordAction(UserMetricsAction("ToggleFullscreen")); | 1655 UserMetrics::RecordAction(UserMetricsAction("ToggleFullscreen")); |
1642 window_->SetFullscreen(!window_->IsFullscreen()); | 1656 window_->SetFullscreen(entering_fullscreen); |
1643 | 1657 |
1644 // Once the window has become fullscreen it'll call back to | 1658 // Once the window has become fullscreen it'll call back to |
1645 // WindowFullscreenStateChanged(). We don't do this immediately as | 1659 // WindowFullscreenStateChanged(). We don't do this immediately as |
1646 // BrowserWindow::SetFullscreen() asks for bookmark_bar_state_, so we let the | 1660 // BrowserWindow::SetFullscreen() asks for bookmark_bar_state_, so we let the |
1647 // BrowserWindow invoke WindowFullscreenStateChanged when appropriate. | 1661 // BrowserWindow invoke WindowFullscreenStateChanged when appropriate. |
1648 | 1662 |
1649 // TODO: convert mac to invoke WindowFullscreenStateChanged once it updates | 1663 // TODO: convert mac to invoke WindowFullscreenStateChanged once it updates |
1650 // the necessary state of the frame. | 1664 // the necessary state of the frame. |
1651 #if defined(OS_MACOSX) | 1665 #if defined(OS_MACOSX) |
1652 WindowFullscreenStateChanged(); | 1666 WindowFullscreenStateChanged(); |
1653 #endif | 1667 #endif |
| 1668 |
| 1669 if (!entering_fullscreen) |
| 1670 NotifyTabOfFullscreenExitIfNecessary(); |
| 1671 } |
| 1672 |
| 1673 void Browser::NotifyTabOfFullscreenExitIfNecessary() { |
| 1674 if (fullscreened_tab_) |
| 1675 fullscreened_tab_->ExitFullscreenMode(); |
| 1676 fullscreened_tab_ = NULL; |
| 1677 tab_caused_fullscreen_ = false; |
1654 } | 1678 } |
1655 | 1679 |
1656 #if defined(OS_MACOSX) | 1680 #if defined(OS_MACOSX) |
1657 void Browser::TogglePresentationMode() { | 1681 void Browser::TogglePresentationMode() { |
1658 window_->SetPresentationMode(!window_->InPresentationMode()); | 1682 window_->SetPresentationMode(!window_->InPresentationMode()); |
1659 WindowFullscreenStateChanged(); | 1683 WindowFullscreenStateChanged(); |
1660 } | 1684 } |
1661 #endif | 1685 #endif |
1662 | 1686 |
1663 #if defined(OS_CHROMEOS) | 1687 #if defined(OS_CHROMEOS) |
(...skipping 1325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2989 | 3013 |
2990 // Sever the TabContents' connection back to us. | 3014 // Sever the TabContents' connection back to us. |
2991 SetAsDelegate(contents, NULL); | 3015 SetAsDelegate(contents, NULL); |
2992 } | 3016 } |
2993 | 3017 |
2994 void Browser::TabDetachedAt(TabContentsWrapper* contents, int index) { | 3018 void Browser::TabDetachedAt(TabContentsWrapper* contents, int index) { |
2995 TabDetachedAtImpl(contents, index, DETACH_TYPE_DETACH); | 3019 TabDetachedAtImpl(contents, index, DETACH_TYPE_DETACH); |
2996 } | 3020 } |
2997 | 3021 |
2998 void Browser::TabDeactivated(TabContentsWrapper* contents) { | 3022 void Browser::TabDeactivated(TabContentsWrapper* contents) { |
| 3023 if (contents == fullscreened_tab_) |
| 3024 ExitTabbedFullscreenModeIfNecessary(); |
2999 if (instant()) | 3025 if (instant()) |
3000 instant()->DestroyPreviewContents(); | 3026 instant()->DestroyPreviewContents(); |
3001 | 3027 |
3002 // Save what the user's currently typing, so it can be restored when we | 3028 // Save what the user's currently typing, so it can be restored when we |
3003 // switch back to this tab. | 3029 // switch back to this tab. |
3004 window_->GetLocationBar()->SaveStateToContents(contents->tab_contents()); | 3030 window_->GetLocationBar()->SaveStateToContents(contents->tab_contents()); |
3005 } | 3031 } |
3006 | 3032 |
3007 void Browser::ActiveTabChanged(TabContentsWrapper* old_contents, | 3033 void Browser::ActiveTabChanged(TabContentsWrapper* old_contents, |
3008 TabContentsWrapper* new_contents, | 3034 TabContentsWrapper* new_contents, |
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3592 void Browser::RunFileChooser(TabContents* tab, | 3618 void Browser::RunFileChooser(TabContents* tab, |
3593 const ViewHostMsg_RunFileChooser_Params& params) { | 3619 const ViewHostMsg_RunFileChooser_Params& params) { |
3594 Browser::RunFileChooserHelper(tab, params); | 3620 Browser::RunFileChooserHelper(tab, params); |
3595 } | 3621 } |
3596 | 3622 |
3597 void Browser::EnumerateDirectory(TabContents* tab, int request_id, | 3623 void Browser::EnumerateDirectory(TabContents* tab, int request_id, |
3598 const FilePath& path) { | 3624 const FilePath& path) { |
3599 Browser::EnumerateDirectoryHelper(tab, request_id, path); | 3625 Browser::EnumerateDirectoryHelper(tab, request_id, path); |
3600 } | 3626 } |
3601 | 3627 |
| 3628 void Browser::ToggleFullscreenModeForTab(TabContents* tab, |
| 3629 bool enter_fullscreen) { |
| 3630 if (tab != GetSelectedTabContents()) |
| 3631 return; |
| 3632 fullscreened_tab_ = enter_fullscreen ? |
| 3633 TabContentsWrapper::GetCurrentWrapperForContents(tab) : NULL; |
| 3634 if (enter_fullscreen && !window_->IsFullscreen()) |
| 3635 tab_caused_fullscreen_ = true; |
| 3636 if (tab_caused_fullscreen_) |
| 3637 ToggleFullscreenMode(); |
| 3638 } |
| 3639 |
| 3640 void Browser::ExitTabbedFullscreenModeIfNecessary() { |
| 3641 if (tab_caused_fullscreen_) |
| 3642 ToggleFullscreenMode(); |
| 3643 else |
| 3644 NotifyTabOfFullscreenExitIfNecessary(); |
| 3645 } |
| 3646 |
3602 /////////////////////////////////////////////////////////////////////////////// | 3647 /////////////////////////////////////////////////////////////////////////////// |
3603 // Browser, TabContentsWrapperDelegate implementation: | 3648 // Browser, TabContentsWrapperDelegate implementation: |
3604 | 3649 |
3605 void Browser::OnDidGetApplicationInfo(TabContentsWrapper* source, | 3650 void Browser::OnDidGetApplicationInfo(TabContentsWrapper* source, |
3606 int32 page_id) { | 3651 int32 page_id) { |
3607 if (GetSelectedTabContentsWrapper() != source) | 3652 if (GetSelectedTabContentsWrapper() != source) |
3608 return; | 3653 return; |
3609 | 3654 |
3610 NavigationEntry* entry = source->controller().GetLastCommittedEntry(); | 3655 NavigationEntry* entry = source->controller().GetLastCommittedEntry(); |
3611 if (!entry || (entry->page_id() != page_id)) | 3656 if (!entry || (entry->page_id() != page_id)) |
(...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4934 } | 4979 } |
4935 | 4980 |
4936 void Browser::ShowSyncSetup() { | 4981 void Browser::ShowSyncSetup() { |
4937 ProfileSyncService* service = | 4982 ProfileSyncService* service = |
4938 profile()->GetOriginalProfile()->GetProfileSyncService(); | 4983 profile()->GetOriginalProfile()->GetProfileSyncService(); |
4939 if (service->HasSyncSetupCompleted()) | 4984 if (service->HasSyncSetupCompleted()) |
4940 ShowOptionsTab(chrome::kSyncSetupSubPage); | 4985 ShowOptionsTab(chrome::kSyncSetupSubPage); |
4941 else | 4986 else |
4942 service->ShowLoginDialog(); | 4987 service->ShowLoginDialog(); |
4943 } | 4988 } |
OLD | NEW |