diff options
author | marja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-06 12:32:31 +0000 |
---|---|---|
committer | marja@chromium.org <marja@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-06 12:32:31 +0000 |
commit | e9ab9adacdec0ecb9b29e3c47a1b8680a407a3ce (patch) | |
tree | 57b36c69d4129e88ed13a5764e6fb1fbfb53847e /chrome | |
parent | 762fe337e252e04861e8a0970d8683b7c3fc1bbe (diff) | |
download | chromium_src-e9ab9adacdec0ecb9b29e3c47a1b8680a407a3ce.zip chromium_src-e9ab9adacdec0ecb9b29e3c47a1b8680a407a3ce.tar.gz chromium_src-e9ab9adacdec0ecb9b29e3c47a1b8680a407a3ce.tar.bz2 |
UI changes for better session restore.
When the "reopen last pages" setting is selected, disable
the "clear on exit" setting and the session only cookie
setting.
If the user has the "reopen last pages" setting, display a
dialog when the user opens the settings page.
Change the label of the "reopen last pages" setting.
These changes are behind the command line flag
--enable-restore-session-state.
BUG=104289
TEST=NONE
Review URL: http://codereview.chromium.org/9235058
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@120562 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
17 files changed, 188 insertions, 5 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 14b4d25..e1e455e 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -5193,6 +5193,15 @@ With Instant enabled and if supported by your default search engine, search resu Because search results are requested even while you're typing your query, your default search engine may be logging these as search queries. ''' </message> + + <!-- Session restore & conflicting content settings --> + <message name="IDS_SESSION_RESTORE_OVERLAY_TITLE" desc="Title of the session restore conflicts with content settings dialog"> + Session only content settings have been disabled + </message> + <message name="IDS_SESSION_RESTORE_OVERLAY_MESSAGE" desc="Message of the session restore conflicts with content settings dialog"> + Your last browsing session will now be continued after startup. Session only content settings and clearing data on exit have been disabled. + </message> + <message name="IDS_SEARCH_PREF_EXPLANATION" desc="Description of the search engine preference"> Set which search engine is used when searching from the <ph name="BEGIN_LINK"><a target="_blank" href="$1"></ph>omnibox<ph name="END_LINK"></a></ph>. @@ -8123,6 +8132,9 @@ Would you like to start <ph name="CONTROL_PANEL_APPLET_NAME">$1<ex>Add/Remove Pr <message name="IDS_OPTIONS_STARTUP_SHOW_LAST_SESSION" desc="The label of the 'Restore previously open pages' startup option radio button"> Reopen the pages that were open last </message> + <message name="IDS_OPTIONS_STARTUP_RESTORE_LAST_SESSION" desc="The label of the 'Restore the pages to where I left off' startup option radio button"> + Restore the pages to where I left off + </message> <message name="IDS_OPTIONS_STARTUP_SHOW_PAGES" desc="The label of the 'Show these pages:' startup option radio button on the old settings page"> Open the following pages: </message> diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index de05afc..9a85b7f 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc @@ -230,6 +230,9 @@ void ProfileImpl::RegisterUserPrefs(PrefService* prefs) { prefs->RegisterStringPref(prefs::kProfileName, "", PrefService::SYNCABLE_PREF); + prefs->RegisterBooleanPref(prefs::kRestoreSessionStateDialogShown, + false, + PrefService::SYNCABLE_PREF); #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS) && defined(OS_POSIX) prefs->RegisterIntegerPref(prefs::kLocalProfileId, kInvalidLocalProfileId, diff --git a/chrome/browser/resources/options2/browser_options.css b/chrome/browser/resources/options2/browser_options.css index 5bfd040..75d9441 100644 --- a/chrome/browser/resources/options2/browser_options.css +++ b/chrome/browser/resources/options2/browser_options.css @@ -55,7 +55,7 @@ margin-top: 10px } -#instantConfirmText { +.overlayText { font-family: inherit; white-space: pre-wrap; width: 500px; diff --git a/chrome/browser/resources/options2/browser_options.html b/chrome/browser/resources/options2/browser_options.html index 4fc6dc9..a8eeaf1 100644 --- a/chrome/browser/resources/options2/browser_options.html +++ b/chrome/browser/resources/options2/browser_options.html @@ -61,7 +61,11 @@ <input type="radio" name="startup" value="1" pref="session.restore_on_startup" metric="Options_Startup_LastSession"> - <span i18n-content="startupShowLastSession"></span> + <span id="old-startup-last-text" + i18n-content="startupShowLastSession"> + </span> + <span id="new-startup-last-text" + i18n-content="startupRestoreLastSession" hidden></span> </label> </div> <div class="radio"> diff --git a/chrome/browser/resources/options2/browser_options.js b/chrome/browser/resources/options2/browser_options.js index 1fbe3cc..010db60 100644 --- a/chrome/browser/resources/options2/browser_options.js +++ b/chrome/browser/resources/options2/browser_options.js @@ -128,6 +128,12 @@ cr.define('options', function() { this.onInstantConfirmDialogShownChanged_.bind(this)); Preferences.getInstance().addEventListener('instant.enabled', this.onInstantEnabledChanged_.bind(this)); + Preferences.getInstance().addEventListener( + "session.restore_on_startup", + this.onSessionRestoreSelectedChanged_.bind(this)); + Preferences.getInstance().addEventListener( + "restore_session_state.dialog_shown", + this.onSessionRestoreDialogShownChanged_.bind(this)); // Text fields may change widths when the window changes size, so make // sure the suggestion list stays in sync. @@ -221,6 +227,12 @@ cr.define('options', function() { chrome.send('coreOptionsUserMetricsAction', ['Options_OpenUnderTheHood']); }); + + this.sessionRestoreEnabled_ = templateData.enable_restore_session_state; + if (this.sessionRestoreEnabled_) { + $('old-startup-last-text').hidden = true; + $('new-startup-last-text').hidden = false; + } }, /** @@ -354,6 +366,28 @@ cr.define('options', function() { : 'instantEnabledCheckbox'; }, + onSessionRestoreSelectedChanged_ : function(event) { + this.sessionRestoreSelected_ = event.value['value'] == 1; + this.maybeShowSessionRestoreDialog_(); + }, + + onSessionRestoreDialogShownChanged_ : function(event) { + this.sessionRestoreDialogShown_ = event.value['value']; + this.maybeShowSessionRestoreDialog_(); + }, + + maybeShowSessionRestoreDialog_ : function() { + // If either of the needed two preferences hasn't been read yet, the + // corresponding member variable will be undefined and we won't display + // the dialog yet. + if (this.sessionRestoreEnabled_ && this.sessionRestoreSelected_ && + this.sessionRestoreDialogShown_ === false) { + this.sessionRestoreDialogShown_ = true; + Preferences.setBooleanPref('restore_session_state.dialog_shown', true); + OptionsPage.navigateToPage('sessionRestoreOverlay'); + } + }, + /** * Update the Default Browsers section based on the current state. * @param {string} statusString Description of the current default state. diff --git a/chrome/browser/resources/options2/content_settings.html b/chrome/browser/resources/options2/content_settings.html index ba62d90..b849d5e 100644 --- a/chrome/browser/resources/options2/content_settings.html +++ b/chrome/browser/resources/options2/content_settings.html @@ -7,13 +7,13 @@ <div> <div class="radio"> <label> - <input type="radio" name="cookies" value="allow"> + <input type="radio" name="cookies" value="allow" id="cookies-allow"> <span i18n-content="cookies_allow"></span> </label> </div> <div class="radio"> <label> - <input type="radio" name="cookies" value="session"> + <input type="radio" name="cookies" value="session" id="cookies-session"> <span i18n-content="cookies_session_only"></span> </label> </div> diff --git a/chrome/browser/resources/options2/content_settings.js b/chrome/browser/resources/options2/content_settings.js index a891eac..f4adf2c 100644 --- a/chrome/browser/resources/options2/content_settings.js +++ b/chrome/browser/resources/options2/content_settings.js @@ -14,8 +14,24 @@ cr.define('options', function() { */ function ContentSettings() { this.activeNavTab = null; + this.sessionRestoreEnabled = false; + this.sessionRestoreSelected = false; OptionsPage.call(this, 'content', templateData.contentSettingsPageTabTitle, 'content-settings-page'); + + // Keep track of the real value of the "clear on exit" preference. (The UI + // might override it if the reopen last pages setting is selected.) + var self = this; + Preferences.getInstance().addEventListener( + "profile.clear_site_data_on_exit", + function(event) { + if (event.value && event.value['value'] != undefined) { + self.clearCookiesOnExit = (event.value['value'] == true); + } + }); + Preferences.getInstance().addEventListener( + "session.restore_on_startup", + this.onSessionRestoreSelectedChanged.bind(this)); } cr.addSingletonGetter(ContentSettings); @@ -66,7 +82,52 @@ cr.define('options', function() { if (!templateData.enable_web_intents && $('intent-section')) $('intent-section').hidden = true; + + if (templateData.enable_restore_session_state) { + this.sessionRestoreEnabled = true; + this.updateSessionRestoreContentSettings(); + } + }, + + onSessionRestoreSelectedChanged : function(event) { + if (!event.value || event.value['value'] == undefined) + return; + + this.sessionRestoreSelected = (event.value['value'] == 1); + + if (this.sessionRestoreSelected) + this.updateSessionRestoreContentSettings(); + else + this.restoreContentSettings(); + }, + + // If the "reopen last opened pages" setting is selected, disable the "clear + // on exit" checkbox, and the "session only" setting for cookies. + updateSessionRestoreContentSettings: function() { + // This feature is behind a command line flag. + if (this.sessionRestoreEnabled && this.sessionRestoreSelected) { + $('clear-cookies-on-exit').checked = false; + $('clear-cookies-on-exit').setDisabled('sessionrestore', true); + + if ($('cookies-session').checked) { + $('cookies-allow').checked = true; + } + $('cookies-session').disabled = true; + } + }, + + // Restore the values of the UI elements based on the real values of the + // preferences. + restoreContentSettings: function() { + $('clear-cookies-on-exit').checked = this.clearCookiesOnExit; + $('clear-cookies-on-exit').setDisabled('sessionrestore', false); + + if (this.cookiesSession && $('cookies-allow').checked) { + $('cookies-session').checked = true; + } + $('cookies-session').disabled = false; }, + }; ContentSettings.updateHandlersEnabledRadios = function(enabled) { @@ -92,6 +153,13 @@ cr.define('options', function() { radios[i].controlledBy = managedBy; } } + // Keep track of the real cookie content setting. (The UI might override it + // if the reopen last pages setting is selected.) + if ('cookies' in dict && 'value' in dict['cookies']) { + ContentSettings.getInstance().cookiesSession = + (dict['cookies']['value'] == 'session'); + } + ContentSettings.getInstance().updateSessionRestoreContentSettings(); OptionsPage.updateManagedBannerVisibility(); }; diff --git a/chrome/browser/resources/options2/instant_confirm_overlay.html b/chrome/browser/resources/options2/instant_confirm_overlay.html index 1e724ef..bbd55a7 100644 --- a/chrome/browser/resources/options2/instant_confirm_overlay.html +++ b/chrome/browser/resources/options2/instant_confirm_overlay.html @@ -2,7 +2,7 @@ <h1 i18n-content="instantConfirmTitle"></h1> <!-- The text has line breaks, so we must use a pre. --> <div class="content-area"> - <pre id="instantConfirmText" i18n-content="instantConfirmMessage"></pre> + <pre class="overlayText" i18n-content="instantConfirmMessage"></pre> <a id="instantConfirmLearnMore" target="_blank" i18n-content="learnMore" i18n-values="href:instantLearnMoreLink"></a> </div> diff --git a/chrome/browser/resources/options2/options.html b/chrome/browser/resources/options2/options.html index cfee5fd..6b01714 100644 --- a/chrome/browser/resources/options2/options.html +++ b/chrome/browser/resources/options2/options.html @@ -88,6 +88,7 @@ <include src="instant_confirm_overlay.html"> <include src="language_add_language_overlay.html"> <include src="manage_profile_overlay.html"> + <include src="session_restore_overlay.html"> <include src="startup_overlay.html"> <include src="../sync_setup_overlay.html"> <if expr="pp_ifdef('chromeos')"> diff --git a/chrome/browser/resources/options2/options.js b/chrome/browser/resources/options2/options.js index 682e465..1e139c5 100644 --- a/chrome/browser/resources/options2/options.js +++ b/chrome/browser/resources/options2/options.js @@ -28,6 +28,7 @@ var ManageProfileOverlay = options.ManageProfileOverlay; var ProxyOptions = options.ProxyOptions; var SearchEngineManager = options.SearchEngineManager; var SearchPage = options.SearchPage; +var SessionRestoreOverlay = options.SessionRestoreOverlay; var StartupOverlay = options.StartupOverlay; var SyncSetupOverlay = options.SyncSetupOverlay; var VirtualKeyboardManager = options.VirtualKeyboardManager; @@ -182,6 +183,8 @@ function load() { BrowserOptions.getInstance()); OptionsPage.registerOverlay(ManageProfileOverlay.getInstance(), BrowserOptions.getInstance()); + OptionsPage.registerOverlay(SessionRestoreOverlay.getInstance(), + BrowserOptions.getInstance()); OptionsPage.registerOverlay(StartupOverlay.getInstance(), BrowserOptions.getInstance()); OptionsPage.registerOverlay(SyncSetupOverlay.getInstance(), diff --git a/chrome/browser/resources/options2/options_bundle.js b/chrome/browser/resources/options2/options_bundle.js index 9b22548..d30a6f3 100644 --- a/chrome/browser/resources/options2/options_bundle.js +++ b/chrome/browser/resources/options2/options_bundle.js @@ -91,6 +91,7 @@ <include src="search_engine_manager.js"></include> <include src="search_engine_manager_engine_list.js"></include> <include src="search_page.js"></include> +<include src="session_restore_overlay.js"></include> <include src="startup_overlay.js"></include> <include src="../sync_setup_overlay.js"></include> <include src="../uber/uber_utils.js"></include> diff --git a/chrome/browser/resources/options2/session_restore_overlay.html b/chrome/browser/resources/options2/session_restore_overlay.html new file mode 100644 index 0000000..0439dbf --- /dev/null +++ b/chrome/browser/resources/options2/session_restore_overlay.html @@ -0,0 +1,12 @@ +<div id="sessionRestoreOverlay" class="page" hidden> + <h1 i18n-content="sessionRestoreOverlayTitle"></h1> + <!-- The text has line breaks, so we must use a pre. --> + <div class="content-area"> + <pre class="overlayText" i18n-content="sessionRestoreOverlayMessage"></pre> + </div> + <div class="action-area"> + <div class="button-strip"> + <button id="sessionRestoreOverlayOk" i18n-content="ok"></button> + </div> + </div> +</div> diff --git a/chrome/browser/resources/options2/session_restore_overlay.js b/chrome/browser/resources/options2/session_restore_overlay.js new file mode 100644 index 0000000..e726708 --- /dev/null +++ b/chrome/browser/resources/options2/session_restore_overlay.js @@ -0,0 +1,33 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('options', function() { + var OptionsPage = options.OptionsPage; + + function SessionRestoreOverlay() { + OptionsPage.call(this, 'sessionRestoreOverlay', + templateData.sessionRestoreOverlayTitle, + 'sessionRestoreOverlay'); + }; + + cr.addSingletonGetter(SessionRestoreOverlay); + + SessionRestoreOverlay.prototype = { + // Inherit from OptionsPage. + __proto__: OptionsPage.prototype, + + initializePage: function() { + OptionsPage.prototype.initializePage.call(this); + + $('sessionRestoreOverlayOk').onclick = function() { + OptionsPage.closeOverlay(); + }; + }, + }; + + // Export + return { + SessionRestoreOverlay: SessionRestoreOverlay + }; +}); diff --git a/chrome/browser/ui/webui/options2/browser_options_handler2.cc b/chrome/browser/ui/webui/options2/browser_options_handler2.cc index fb34661..35ad33d 100644 --- a/chrome/browser/ui/webui/options2/browser_options_handler2.cc +++ b/chrome/browser/ui/webui/options2/browser_options_handler2.cc @@ -136,6 +136,9 @@ void BrowserOptionsHandler::GetLocalizedValues( { "sectionTitleSearch", IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME }, { "sectionTitleStartup", IDS_OPTIONS_STARTUP_GROUP_NAME }, { "sectionTitleSync", IDS_SYNC_OPTIONS_GROUP_NAME }, + { "sessionRestoreOverlayMessage", IDS_SESSION_RESTORE_OVERLAY_MESSAGE }, + { "sessionRestoreOverlayTitle", IDS_SESSION_RESTORE_OVERLAY_TITLE }, + { "startupRestoreLastSession", IDS_OPTIONS_STARTUP_RESTORE_LAST_SESSION }, { "startupSetPages", IDS_OPTIONS2_STARTUP_SET_PAGES }, { "startupShowDefaultAndNewTab", IDS_OPTIONS_STARTUP_SHOW_DEFAULT_AND_NEWTAB}, diff --git a/chrome/browser/ui/webui/options2/content_settings_handler2.cc b/chrome/browser/ui/webui/options2/content_settings_handler2.cc index 511f1f5..81772aa 100644 --- a/chrome/browser/ui/webui/options2/content_settings_handler2.cc +++ b/chrome/browser/ui/webui/options2/content_settings_handler2.cc @@ -285,6 +285,9 @@ void ContentSettingsHandler::GetLocalizedValues( localized_strings->SetBoolean("enable_web_intents", !CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableWebIntents)); + localized_strings->SetBoolean("enable_restore_session_state", + CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableRestoreSessionState)); } void ContentSettingsHandler::Initialize() { diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 3ee6a6c..6820644 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc @@ -1747,4 +1747,8 @@ const char kRecoveryComponentVersion[] = "recovery_component.version"; // troubleshooting. const char kComponentUpdaterState[] = "component_updater.state"; +// Boolean pref indicating whether the session restore dialog has been shown. +const char kRestoreSessionStateDialogShown[] = + "restore_session_state.dialog_shown"; + } // namespace prefs diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 5d25b96..427511e 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h @@ -653,6 +653,8 @@ extern const char kUserPolicyRefreshRate[]; extern const char kRecoveryComponentVersion[]; extern const char kComponentUpdaterState[]; +extern const char kRestoreSessionStateDialogShown[]; + } // namespace prefs #endif // CHROME_COMMON_PREF_NAMES_H_ |