diff options
author | albertb@chromium.org <albertb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-15 18:41:08 +0000 |
---|---|---|
committer | albertb@chromium.org <albertb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-15 18:41:08 +0000 |
commit | 2c936bf562756d8521f422d589410d570bc3bcff (patch) | |
tree | b20a996c3d48c8094a65cca2c5c24d7ebf0b56fc /chrome | |
parent | 6ef445eeeca97681c0d152d3b36e1dac9f20e75e (diff) | |
download | chromium_src-2c936bf562756d8521f422d589410d570bc3bcff.zip chromium_src-2c936bf562756d8521f422d589410d570bc3bcff.tar.gz chromium_src-2c936bf562756d8521f422d589410d570bc3bcff.tar.bz2 |
Re-land: Hook up the dom_ui sync options to the sync service.
TBR=tim
BUG=chromiumos:6363
TEST=manual
Review URL: http://codereview.chromium.org/3447003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59530 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/dom_ui/sync_options_handler.cc | 24 | ||||
-rw-r--r-- | chrome/browser/dom_ui/sync_options_handler.h | 6 | ||||
-rw-r--r-- | chrome/browser/resources/options.html | 7 | ||||
-rw-r--r-- | chrome/browser/resources/options/sync_options.html | 19 | ||||
-rw-r--r-- | chrome/browser/resources/options/sync_options.js | 64 | ||||
-rw-r--r-- | chrome/browser/sync/profile_sync_service.cc | 11 | ||||
-rw-r--r-- | chrome/common/notification_type.h | 5 |
7 files changed, 124 insertions, 12 deletions
diff --git a/chrome/browser/dom_ui/sync_options_handler.cc b/chrome/browser/dom_ui/sync_options_handler.cc index bcf8580..a8798bb 100644 --- a/chrome/browser/dom_ui/sync_options_handler.cc +++ b/chrome/browser/dom_ui/sync_options_handler.cc @@ -11,6 +11,7 @@ #include "base/time.h" #include "base/utf_string_conversions.h" #include "base/values.h" +#include "chrome/browser/sync/sync_setup_flow.h" #include "chrome/common/notification_service.h" #include "grit/browser_resources.h" #include "grit/chromium_strings.h" @@ -47,3 +48,26 @@ void SyncOptionsHandler::GetLocalizedValues( localized_strings->SetString("syncapps", l10n_util::GetStringUTF16(IDS_SYNC_DATATYPE_APPS)); } + +void SyncOptionsHandler::Initialize() { + ProfileSyncService* service = + dom_ui_->GetProfile()->GetOriginalProfile()->GetProfileSyncService(); + DCHECK(service); + + DictionaryValue args; + SyncSetupFlow::GetArgsForChooseDataTypes(service, &args); + + dom_ui_->CallJavascriptFunction(L"SyncOptions.setRegisteredDataTypes", args); +} + +void SyncOptionsHandler::RegisterMessages() { + dom_ui_->RegisterMessageCallback("updatePreferredDataTypes", + NewCallback(this, &SyncOptionsHandler::OnPreferredDataTypesUpdated)); +} + +void SyncOptionsHandler::OnPreferredDataTypesUpdated(const ListValue* args) { + NotificationService::current()->Notify( + NotificationType::SYNC_DATA_TYPES_UPDATED, + NotificationService::AllSources(), + NotificationService::NoDetails()); +} diff --git a/chrome/browser/dom_ui/sync_options_handler.h b/chrome/browser/dom_ui/sync_options_handler.h index 15a77e6..76de737 100644 --- a/chrome/browser/dom_ui/sync_options_handler.h +++ b/chrome/browser/dom_ui/sync_options_handler.h @@ -16,8 +16,14 @@ class SyncOptionsHandler : public OptionsPageUIHandler { // OptionsUIHandler implementation. virtual void GetLocalizedValues(DictionaryValue* localized_strings); + virtual void Initialize(); + virtual void RegisterMessages(); private: + // Called when the user updates the set of enabled data types to sync. |args| + // is ignored. + void OnPreferredDataTypesUpdated(const ListValue* args); + DISALLOW_COPY_AND_ASSIGN(SyncOptionsHandler); }; diff --git a/chrome/browser/resources/options.html b/chrome/browser/resources/options.html index 6809d7f..905950c 100644 --- a/chrome/browser/resources/options.html +++ b/chrome/browser/resources/options.html @@ -96,6 +96,7 @@ <script src="options/personal_options.js"></script> <script src="options/search_engine_manager.js"></script> <script src="options/search_engine_manager_engine_list.js"></script> +<script src="options/sync_options.js"></script> <script> var AddStartupPageOverlay = options.AddStartupPageOverlay; @@ -117,6 +118,7 @@ var PersonalOptions = options.PersonalOptions; var Preferences = options.Preferences; var SearchEngineManager = options.SearchEngineManager; var ProxyOptions = options.ProxyOptions; +var SyncOptions = options.SyncOptions; /** * Window onload handler, sets up the page. @@ -141,6 +143,7 @@ function load() { OptionsPage.registerSubPage(FontSettings.getInstance()); OptionsPage.registerSubPage(PasswordsExceptions.getInstance()); OptionsPage.registerSubPage(SearchEngineManager.getInstance()); + OptionsPage.registerSubPage(SyncOptions.getInstance()); OptionsPage.registerOverlay(AddStartupPageOverlay.getInstance()); OptionsPage.registerOverlay(AlertOverlay.getInstance()); OptionsPage.registerOverlay(AutoFillEditAddressOverlay.getInstance()); @@ -175,10 +178,6 @@ function load() { OptionsPage.registerSubPage(ProxyOptions.getInstance()); } - var syncSettings = new OptionsPage('sync', - localStrings.getString('syncPage'), - 'syncPage'); - OptionsPage.registerSubPage(syncSettings); var languageModifierKeysOverlay = new OptionsPage( 'languageCustomizeModifierKeysOverlay', localStrings.getString('languageCustomizeModifierKeysOverlay'), diff --git a/chrome/browser/resources/options/sync_options.html b/chrome/browser/resources/options/sync_options.html index b6d85fa..a503d78 100644 --- a/chrome/browser/resources/options/sync_options.html +++ b/chrome/browser/resources/options/sync_options.html @@ -12,14 +12,6 @@ i18n-content="syncbookmarks"></span></label></td> </tr> <tr> - <td class="option-name"><label><input id="typedurls-check" - pref="sync.typed_urls" type="checkbox"><span - i18n-content="synctypedurls"></span></label></td> - <td class="option-name"><label><input id="passwords-check" - pref="sync.passwords" type="checkbox"><span - i18n-content="syncpasswords"></span></label></td> - </tr> - <tr> <td class="option-name"><label><input id="extensions-check" pref="sync.extensions" type="checkbox"><span i18n-content="syncextensions"></span></label></td> @@ -31,6 +23,17 @@ <td class="option-name"><label><input id="themes-check" pref="sync.themes" type="checkbox"><span i18n-content="syncthemes"></span></label></td> + <td class="option-name"><label><input id="apps-check" + pref="sync.apps" type="checkbox"><span + i18n-content="syncapps"></span><label></td> + </tr> + <tr> + <td class="option-name"><label><input id="typedurls-check" + pref="sync.typed_urls" type="checkbox"><span + i18n-content="synctypedurls"></span></label></td> + <td class="option-name"><label><input id="passwords-check" + pref="sync.passwords" type="checkbox"><span + i18n-content="syncpasswords"></span></label></td> </tr> </table> </section> diff --git a/chrome/browser/resources/options/sync_options.js b/chrome/browser/resources/options/sync_options.js new file mode 100644 index 0000000..59c3781 --- /dev/null +++ b/chrome/browser/resources/options/sync_options.js @@ -0,0 +1,64 @@ +// Copyright (c) 2010 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() { + const OptionsPage = options.OptionsPage; + + /** + * Encapsulated handling of the sync options page. + * @constructor + */ + function SyncOptions() { + OptionsPage.call(this, 'sync', templateData.syncPage, 'syncPage'); + } + + cr.addSingletonGetter(SyncOptions); + + SyncOptions.prototype = { + __proto__: OptionsPage.prototype, + + initializePage: function() { + OptionsPage.prototype.initializePage.call(this); + this.registerEventHandlers(); + }, + + /** + * Registers event handler on all the data type checkboxes so that the set + * of data types to sync get updated as the user checks/unchecks them. + */ + registerEventHandlers: function() { + checks = $('syncPage').getElementsByTagName('input'); + for (var i = 0; i < checks.length; i++) { + checks[i].onclick = function(event) { + chrome.send('updatePreferredDataTypes'); + }; + } + } + }; + + /** + * Toggles the visibility of the data type checkboxes based on whether they + * are enabled on not. + * @param {Object} dict A mapping from data type to a boolean indicating + * whether it is enabled. + */ + SyncOptions.setRegisteredDataTypes = function(dict) { + for (var type in dict) { + if (type.match(/Registered$/) && !dict[type]) { + node = $(type.replace(/([a-z]+)Registered$/i, '$1').toLowerCase() + + '-check'); + if (node) { + node.parentNode.style.display = 'none'; + } + } + } + }; + + // Export + return { + SyncOptions: SyncOptions + }; + +}); + diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc index a33aecf..1196647 100644 --- a/chrome/browser/sync/profile_sync_service.cc +++ b/chrome/browser/sync/profile_sync_service.cc @@ -81,6 +81,9 @@ ProfileSyncService::ProfileSyncService(ProfileSyncFactory* factory, NotificationType::SYNC_CONFIGURE_DONE, NotificationService::AllSources()); registrar_.Add(this, + NotificationType::SYNC_DATA_TYPES_UPDATED, + NotificationService::AllSources()); + registrar_.Add(this, NotificationType::SYNC_PASSPHRASE_REQUIRED, NotificationService::AllSources()); registrar_.Add(this, @@ -881,6 +884,14 @@ void ProfileSyncService::Observe(NotificationType type, SetPassphrase("dummy passphrase"); break; } + case NotificationType::SYNC_DATA_TYPES_UPDATED: { + if (!HasSyncSetupCompleted()) break; + + syncable::ModelTypeSet types; + GetPreferredDataTypes(&types); + OnUserChoseDatatypes(false, types); + break; + } case NotificationType::SYNC_PASSPHRASE_ACCEPTED: { // Make sure the data types that depend on the passphrase are started at // this time. diff --git a/chrome/common/notification_type.h b/chrome/common/notification_type.h index 0063736..fa1febb 100644 --- a/chrome/common/notification_type.h +++ b/chrome/common/notification_type.h @@ -1043,6 +1043,11 @@ class NotificationType { // accepted passphrase. SYNC_PASSPHRASE_ACCEPTED, + // Sent when the set of data types that should be synced has been modified + // externally (eg. by the dom_ui options screen). + // There are no source or details for this notification. + SYNC_DATA_TYPES_UPDATED, + // Cookies ----------------------------------------------------------------- // Sent when a cookie changes. The source is a Profile object, the details |