Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: chrome/browser/ui/browser.cc

Issue 7740044: Implement fullscreen info bubble on Win and Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win work Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 15 matching lines...) Expand all
26 #include "base/utf_string_conversions.h" 26 #include "base/utf_string_conversions.h"
27 #include "chrome/app/chrome_command_ids.h" 27 #include "chrome/app/chrome_command_ids.h"
28 #include "chrome/browser/autofill/autofill_manager.h" 28 #include "chrome/browser/autofill/autofill_manager.h"
29 #include "chrome/browser/autofill/personal_data_manager_factory.h" 29 #include "chrome/browser/autofill/personal_data_manager_factory.h"
30 #include "chrome/browser/background/background_contents_service.h" 30 #include "chrome/browser/background/background_contents_service.h"
31 #include "chrome/browser/bookmarks/bookmark_model.h" 31 #include "chrome/browser/bookmarks/bookmark_model.h"
32 #include "chrome/browser/bookmarks/bookmark_utils.h" 32 #include "chrome/browser/bookmarks/bookmark_utils.h"
33 #include "chrome/browser/browser_process.h" 33 #include "chrome/browser/browser_process.h"
34 #include "chrome/browser/browser_shutdown.h" 34 #include "chrome/browser/browser_shutdown.h"
35 #include "chrome/browser/character_encoding.h" 35 #include "chrome/browser/character_encoding.h"
36 #include "chrome/browser/content_settings/host_content_settings_map.h"
36 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" 37 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
37 #include "chrome/browser/custom_handlers/register_protocol_handler_infobar_deleg ate.h" 38 #include "chrome/browser/custom_handlers/register_protocol_handler_infobar_deleg ate.h"
38 #include "chrome/browser/debugger/devtools_toggle_action.h" 39 #include "chrome/browser/debugger/devtools_toggle_action.h"
39 #include "chrome/browser/debugger/devtools_window.h" 40 #include "chrome/browser/debugger/devtools_window.h"
40 #include "chrome/browser/download/chrome_download_manager_delegate.h" 41 #include "chrome/browser/download/chrome_download_manager_delegate.h"
41 #include "chrome/browser/download/download_item_model.h" 42 #include "chrome/browser/download/download_item_model.h"
42 #include "chrome/browser/download/download_started_animation.h" 43 #include "chrome/browser/download/download_started_animation.h"
43 #include "chrome/browser/extensions/crx_installer.h" 44 #include "chrome/browser/extensions/crx_installer.h"
44 #include "chrome/browser/extensions/extension_browser_event_router.h" 45 #include "chrome/browser/extensions/extension_browser_event_router.h"
45 #include "chrome/browser/extensions/extension_disabled_infobar_delegate.h" 46 #include "chrome/browser/extensions/extension_disabled_infobar_delegate.h"
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 browser::Navigate(&params); 747 browser::Navigate(&params);
747 contents = params.target_contents->tab_contents(); 748 contents = params.target_contents->tab_contents();
748 } 749 }
749 750
750 // TODO(skerner): If we are already in full screen mode, and the user 751 // TODO(skerner): If we are already in full screen mode, and the user
751 // set the app to open as a regular or pinned tab, what should happen? 752 // set the app to open as a regular or pinned tab, what should happen?
752 // Today we open the tab, but stay in full screen mode. Should we leave 753 // Today we open the tab, but stay in full screen mode. Should we leave
753 // full screen mode in this case? 754 // full screen mode in this case?
754 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN && 755 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN &&
755 !browser->window()->IsFullscreen()) 756 !browser->window()->IsFullscreen())
756 browser->ToggleFullscreenMode(); 757 browser->ToggleFullscreenMode(false);
757 758
758 return contents; 759 return contents;
759 } 760 }
760 761
761 // static 762 // static
762 void Browser::OpenBookmarkManagerWindow(Profile* profile) { 763 void Browser::OpenBookmarkManagerWindow(Profile* profile) {
763 Browser* browser = Browser::Create(profile); 764 Browser* browser = Browser::Create(profile);
764 browser->OpenBookmarkManager(); 765 browser->OpenBookmarkManager();
765 browser->window()->Show(); 766 browser->window()->Show();
766 } 767 }
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 void Browser::ConvertPopupToTabbedBrowser() { 1660 void Browser::ConvertPopupToTabbedBrowser() {
1660 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab")); 1661 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab"));
1661 int tab_strip_index = tab_handler_->GetTabStripModel()->active_index(); 1662 int tab_strip_index = tab_handler_->GetTabStripModel()->active_index();
1662 TabContentsWrapper* contents = 1663 TabContentsWrapper* contents =
1663 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index); 1664 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index);
1664 Browser* browser = Browser::Create(profile_); 1665 Browser* browser = Browser::Create(profile_);
1665 browser->tabstrip_model()->AppendTabContents(contents, true); 1666 browser->tabstrip_model()->AppendTabContents(contents, true);
1666 browser->window()->Show(); 1667 browser->window()->Show();
1667 } 1668 }
1668 1669
1669 void Browser::ToggleFullscreenMode() { 1670 // TODO Change this to an enum.
1671 void Browser::ToggleFullscreenMode(bool for_tab) {
1672 bool entering_fullscreen = !window_->IsFullscreen();
1673
1670 #if !defined(OS_MACOSX) 1674 #if !defined(OS_MACOSX)
1671 // In kiosk mode, we always want to be fullscreen. When the browser first 1675 // In kiosk mode, we always want to be fullscreen. When the browser first
1672 // starts we're not yet fullscreen, so let the initial toggle go through. 1676 // starts we're not yet fullscreen, so let the initial toggle go through.
1673 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) && 1677 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) &&
1674 window_->IsFullscreen()) 1678 window_->IsFullscreen())
1675 return; 1679 return;
1676 #endif 1680 #endif
1677 1681
1678 UserMetrics::RecordAction(UserMetricsAction("ToggleFullscreen")); 1682 UserMetrics::RecordAction(UserMetricsAction("ToggleFullscreen"));
1679 window_->SetFullscreen(!window_->IsFullscreen()); 1683 if (for_tab) {
1684 const GURL& url = GetSelectedTabContents()->GetURL();
1685 bool show_buttons = GetFullscreenSetting(url) == CONTENT_SETTING_ASK;
1686 window_->SetFullscreen(entering_fullscreen, url, show_buttons);
1687 } else {
1688 // TODO Replace with browser-specific fullscreen function.
1689 window_->SetFullscreen(entering_fullscreen, GURL(), false);
1690 }
1680 1691
1681 // Once the window has become fullscreen it'll call back to 1692 // Once the window has become fullscreen it'll call back to
1682 // WindowFullscreenStateChanged(). We don't do this immediately as 1693 // WindowFullscreenStateChanged(). We don't do this immediately as
1683 // BrowserWindow::SetFullscreen() asks for bookmark_bar_state_, so we let the 1694 // BrowserWindow::SetFullscreen() asks for bookmark_bar_state_, so we let the
1684 // BrowserWindow invoke WindowFullscreenStateChanged when appropriate. 1695 // BrowserWindow invoke WindowFullscreenStateChanged when appropriate.
1685 1696
1686 // TODO: convert mac to invoke WindowFullscreenStateChanged once it updates 1697 // TODO: convert mac to invoke WindowFullscreenStateChanged once it updates
1687 // the necessary state of the frame. 1698 // the necessary state of the frame.
1688 #if defined(OS_MACOSX) 1699 #if defined(OS_MACOSX)
1689 WindowFullscreenStateChanged(); 1700 WindowFullscreenStateChanged();
1690 #endif 1701 #endif
1691 } 1702 }
1692 1703
1693 void Browser::NotifyTabOfFullscreenExitIfNecessary() { 1704 void Browser::NotifyTabOfFullscreenExitIfNecessary() {
1694 if (fullscreened_tab_) 1705 if (fullscreened_tab_)
1695 fullscreened_tab_->ExitFullscreenMode(); 1706 fullscreened_tab_->ExitFullscreenMode();
1696 fullscreened_tab_ = NULL; 1707 fullscreened_tab_ = NULL;
1697 tab_caused_fullscreen_ = false; 1708 tab_caused_fullscreen_ = false;
1698 } 1709 }
1699 1710
1700 #if defined(OS_MACOSX) 1711 #if defined(OS_MACOSX)
1701 void Browser::TogglePresentationMode() { 1712 void Browser::TogglePresentationMode(bool for_tab) {
1702 window_->SetPresentationMode(!window_->InPresentationMode()); 1713 bool entering_fullscreen = !window_->InPresentationMode();
1714 if (for_tab) {
1715 const GURL& url = GetSelectedTabContents()->GetURL();
1716 bool show_buttons = GetFullscreenSetting(url) == CONTENT_SETTING_ASK;
1717 window_->SetPresentationMode(entering_fullscreen, url, show_buttons);
1718 } else {
1719 // TODO Replace with browser-specific fullscreen function.
1720 window_->SetFullscreen(entering_fullscreen, GURL(), false);
yzshen1 2011/10/10 19:09:30 I am not familiar with Mac implementation, but it
koz (OOO until 15th September) 2011/10/10 22:49:58 Done.
1721 }
1703 WindowFullscreenStateChanged(); 1722 WindowFullscreenStateChanged();
1704 } 1723 }
1705 #endif 1724 #endif
1706 1725
1707 #if defined(OS_CHROMEOS) 1726 #if defined(OS_CHROMEOS)
1708 void Browser::Search() { 1727 void Browser::Search() {
1709 // Exit fullscreen to show omnibox. 1728 // Exit fullscreen to show omnibox.
1710 if (window_->IsFullscreen()) { 1729 if (window_->IsFullscreen()) {
1711 ToggleFullscreenMode(); 1730 ToggleFullscreenMode(false);
1712 // ToggleFullscreenMode is asynchronous, so we don't have omnibox 1731 // ToggleFullscreenMode is asynchronous, so we don't have omnibox
1713 // visible at this point. Wait for next event cycle which toggles 1732 // visible at this point. Wait for next event cycle which toggles
1714 // the visibility of omnibox before creating new tab. 1733 // the visibility of omnibox before creating new tab.
1715 MessageLoop::current()->PostTask( 1734 MessageLoop::current()->PostTask(
1716 FROM_HERE, method_factory_.NewRunnableMethod(&Browser::Search)); 1735 FROM_HERE, method_factory_.NewRunnableMethod(&Browser::Search));
1717 return; 1736 return;
1718 } 1737 }
1719 1738
1720 const GURL& url = GetSelectedTabContents()->GetURL(); 1739 const GURL& url = GetSelectedTabContents()->GetURL();
1721 if (url.SchemeIs(chrome::kChromeUIScheme) && 1740 if (url.SchemeIs(chrome::kChromeUIScheme) &&
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after
2628 case IDC_SELECT_TAB_4: 2647 case IDC_SELECT_TAB_4:
2629 case IDC_SELECT_TAB_5: 2648 case IDC_SELECT_TAB_5:
2630 case IDC_SELECT_TAB_6: 2649 case IDC_SELECT_TAB_6:
2631 case IDC_SELECT_TAB_7: SelectNumberedTab(id - IDC_SELECT_TAB_0); 2650 case IDC_SELECT_TAB_7: SelectNumberedTab(id - IDC_SELECT_TAB_0);
2632 break; 2651 break;
2633 case IDC_SELECT_LAST_TAB: SelectLastTab(); break; 2652 case IDC_SELECT_LAST_TAB: SelectLastTab(); break;
2634 case IDC_DUPLICATE_TAB: DuplicateTab(); break; 2653 case IDC_DUPLICATE_TAB: DuplicateTab(); break;
2635 case IDC_RESTORE_TAB: RestoreTab(); break; 2654 case IDC_RESTORE_TAB: RestoreTab(); break;
2636 case IDC_COPY_URL: WriteCurrentURLToClipboard(); break; 2655 case IDC_COPY_URL: WriteCurrentURLToClipboard(); break;
2637 case IDC_SHOW_AS_TAB: ConvertPopupToTabbedBrowser(); break; 2656 case IDC_SHOW_AS_TAB: ConvertPopupToTabbedBrowser(); break;
2638 case IDC_FULLSCREEN: ToggleFullscreenMode(); break; 2657 case IDC_FULLSCREEN: ToggleFullscreenMode(false); break;
2639 #if defined(OS_MACOSX) 2658 #if defined(OS_MACOSX)
2640 case IDC_PRESENTATION_MODE: TogglePresentationMode(); break; 2659 case IDC_PRESENTATION_MODE: TogglePresentationMode(false); break;
2641 #endif 2660 #endif
2642 case IDC_EXIT: Exit(); break; 2661 case IDC_EXIT: Exit(); break;
2643 case IDC_TOGGLE_VERTICAL_TABS: ToggleUseVerticalTabs(); break; 2662 case IDC_TOGGLE_VERTICAL_TABS: ToggleUseVerticalTabs(); break;
2644 #if defined(OS_CHROMEOS) 2663 #if defined(OS_CHROMEOS)
2645 case IDC_SEARCH: Search(); break; 2664 case IDC_SEARCH: Search(); break;
2646 case IDC_SHOW_KEYBOARD_OVERLAY: ShowKeyboardOverlay(); break; 2665 case IDC_SHOW_KEYBOARD_OVERLAY: ShowKeyboardOverlay(); break;
2647 #endif 2666 #endif
2648 2667
2649 // Page-related commands 2668 // Page-related commands
2650 case IDC_SAVE_PAGE: SavePage(); break; 2669 case IDC_SAVE_PAGE: SavePage(); break;
(...skipping 1151 matching lines...) Expand 10 before | Expand all | Expand 10 after
3802 in_correct_mode_for_tab_fullscreen = window_->InPresentationMode(); 3821 in_correct_mode_for_tab_fullscreen = window_->InPresentationMode();
3803 #else 3822 #else
3804 in_correct_mode_for_tab_fullscreen = window_->IsFullscreen(); 3823 in_correct_mode_for_tab_fullscreen = window_->IsFullscreen();
3805 #endif 3824 #endif
3806 if (!in_correct_mode_for_tab_fullscreen) 3825 if (!in_correct_mode_for_tab_fullscreen)
3807 tab_caused_fullscreen_ = true; 3826 tab_caused_fullscreen_ = true;
3808 } 3827 }
3809 3828
3810 if (tab_caused_fullscreen_) { 3829 if (tab_caused_fullscreen_) {
3811 #if defined(OS_MACOSX) 3830 #if defined(OS_MACOSX)
3812 TogglePresentationMode(); 3831 TogglePresentationMode(true);
3813 #else 3832 #else
3814 ToggleFullscreenMode(); 3833 ToggleFullscreenMode(true);
3815 #endif 3834 #endif
3816 } else if (!enter_fullscreen) { 3835 } else if (!enter_fullscreen) {
3817 // If currently there is a tab in "tab fullscreen" mode and fullscreen was 3836 // If currently there is a tab in "tab fullscreen" mode and fullscreen was
3818 // not caused by it (i.e., previously it was in "browser fullscreen" mode), 3837 // not caused by it (i.e., previously it was in "browser fullscreen" mode),
3819 // we need to switch back to "browser fullscreen" mode. In this case, all we 3838 // we need to switch back to "browser fullscreen" mode. In this case, all we
3820 // have to do is notifying the tab that it has exited "tab fullscreen" mode. 3839 // have to do is notifying the tab that it has exited "tab fullscreen" mode.
3821 NotifyTabOfFullscreenExitIfNecessary(); 3840 NotifyTabOfFullscreenExitIfNecessary();
3822 } 3841 }
3823 } 3842 }
3824 3843
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
3880 FindReplyHelper(tab, request_id, number_of_matches, selection_rect, 3899 FindReplyHelper(tab, request_id, number_of_matches, selection_rect,
3881 active_match_ordinal, final_update); 3900 active_match_ordinal, final_update);
3882 } 3901 }
3883 3902
3884 void Browser::CrashedPlugin(TabContents* tab, const FilePath& plugin_path) { 3903 void Browser::CrashedPlugin(TabContents* tab, const FilePath& plugin_path) {
3885 CrashedPluginHelper(tab, plugin_path); 3904 CrashedPluginHelper(tab, plugin_path);
3886 } 3905 }
3887 3906
3888 void Browser::ExitTabbedFullscreenModeIfNecessary() { 3907 void Browser::ExitTabbedFullscreenModeIfNecessary() {
3889 if (tab_caused_fullscreen_) 3908 if (tab_caused_fullscreen_)
3890 ToggleFullscreenMode(); 3909 ToggleFullscreenMode(false);
3891 else 3910 else
3892 NotifyTabOfFullscreenExitIfNecessary(); 3911 NotifyTabOfFullscreenExitIfNecessary();
3893 } 3912 }
3894 3913
3895 void Browser::UpdatePreferredSize(TabContents* source, 3914 void Browser::UpdatePreferredSize(TabContents* source,
3896 const gfx::Size& pref_size) { 3915 const gfx::Size& pref_size) {
3897 window_->UpdatePreferredSize(source, pref_size); 3916 window_->UpdatePreferredSize(source, pref_size);
3898 } 3917 }
3899 3918
3919 void Browser::OnAcceptFullscreenPermission(const GURL& url) {
yzshen1 2011/10/10 19:09:30 On Windows: After clicking "Allow", restarting bro
koz (OOO until 15th September) 2011/10/10 22:49:58 No, I can't reproduce this. Can you repro if you d
3920 HostContentSettingsMap* settings_map = profile()->GetHostContentSettingsMap();
3921
3922 settings_map->SetContentSetting(
3923 ContentSettingsPattern::FromString(url.host()),
3924 ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_FULLSCREEN,
3925 "", CONTENT_SETTING_ALLOW);
3926 }
3927
3928 void Browser::OnDenyFullscreenPermission() {
3929 ExitTabbedFullscreenModeIfNecessary();
3930 }
3931
3932 ContentSetting Browser::GetFullscreenSetting(const GURL& url) {
3933 HostContentSettingsMap* settings_map = profile()->GetHostContentSettingsMap();
3934 return settings_map->GetContentSetting(url, url,
3935 CONTENT_SETTINGS_TYPE_FULLSCREEN, "");
3936 }
3937
3900 /////////////////////////////////////////////////////////////////////////////// 3938 ///////////////////////////////////////////////////////////////////////////////
3901 // Browser, TabContentsWrapperDelegate implementation: 3939 // Browser, TabContentsWrapperDelegate implementation:
3902 3940
3903 void Browser::OnDidGetApplicationInfo(TabContentsWrapper* source, 3941 void Browser::OnDidGetApplicationInfo(TabContentsWrapper* source,
3904 int32 page_id) { 3942 int32 page_id) {
3905 if (GetSelectedTabContentsWrapper() != source) 3943 if (GetSelectedTabContentsWrapper() != source)
3906 return; 3944 return;
3907 3945
3908 NavigationEntry* entry = source->controller().GetLastCommittedEntry(); 3946 NavigationEntry* entry = source->controller().GetLastCommittedEntry();
3909 if (!entry || (entry->page_id() != page_id)) 3947 if (!entry || (entry->page_id() != page_id))
(...skipping 1397 matching lines...) Expand 10 before | Expand all | Expand 10 after
5307 window_->GetLocationBar()->ShowFirstRunBubble(bubble_type); 5345 window_->GetLocationBar()->ShowFirstRunBubble(bubble_type);
5308 } else if (is_type_tabbed()) { 5346 } else if (is_type_tabbed()) {
5309 GlobalErrorService* service = 5347 GlobalErrorService* service =
5310 GlobalErrorServiceFactory::GetForProfile(profile()); 5348 GlobalErrorServiceFactory::GetForProfile(profile());
5311 GlobalError* error = service->GetFirstGlobalErrorWithBubbleView(); 5349 GlobalError* error = service->GetFirstGlobalErrorWithBubbleView();
5312 if (error) { 5350 if (error) {
5313 error->ShowBubbleView(this); 5351 error->ShowBubbleView(this);
5314 } 5352 }
5315 } 5353 }
5316 } 5354 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698