summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoralbertb@chromium.org <albertb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-15 18:41:08 +0000
committeralbertb@chromium.org <albertb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-15 18:41:08 +0000
commit2c936bf562756d8521f422d589410d570bc3bcff (patch)
treeb20a996c3d48c8094a65cca2c5c24d7ebf0b56fc /chrome
parent6ef445eeeca97681c0d152d3b36e1dac9f20e75e (diff)
downloadchromium_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.cc24
-rw-r--r--chrome/browser/dom_ui/sync_options_handler.h6
-rw-r--r--chrome/browser/resources/options.html7
-rw-r--r--chrome/browser/resources/options/sync_options.html19
-rw-r--r--chrome/browser/resources/options/sync_options.js64
-rw-r--r--chrome/browser/sync/profile_sync_service.cc11
-rw-r--r--chrome/common/notification_type.h5
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