extension_setting_data_type_controller.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/extension_setting_data_type_controller.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory.h"
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/sync_driver/generic_change_processor.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/syncable_service.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionSettingDataTypeController::ExtensionSettingDataTypeController(
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    syncer::ModelType type,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProfileSyncComponentsFactory* profile_sync_factory,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile,
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    const DisableTypeCallback& disable_callback)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : NonUIDataTypeController(
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          base::Bind(&ChromeReportUnrecoverableError),
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          disable_callback,
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          profile_sync_factory),
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      type_(type),
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      profile_(profile) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(type == syncer::EXTENSION_SETTINGS || type == syncer::APP_SETTINGS);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelType ExtensionSettingDataTypeController::type() const {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return type_;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelSafeGroup
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionSettingDataTypeController::model_safe_group() const {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return syncer::GROUP_FILE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionSettingDataTypeController::~ExtensionSettingDataTypeController() {}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ExtensionSettingDataTypeController::PostTaskOnBackendThread(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const tracked_objects::Location& from_here,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::Closure& task) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return BrowserThread::PostTask(BrowserThread::FILE, from_here, task);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ExtensionSettingDataTypeController::StartModels() {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  extensions::ExtensionSystem::Get(profile_)->InitForRegularProfile(true);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace browser_sync
63