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,
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    Profile* profile)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : NonUIDataTypeController(
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          base::Bind(&ChromeReportUnrecoverableError),
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          profile_sync_factory),
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      type_(type),
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      profile_(profile) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(type == syncer::EXTENSION_SETTINGS || type == syncer::APP_SETTINGS);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelType ExtensionSettingDataTypeController::type() const {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return type_;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelSafeGroup
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionSettingDataTypeController::model_safe_group() const {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return syncer::GROUP_FILE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionSettingDataTypeController::~ExtensionSettingDataTypeController() {}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ExtensionSettingDataTypeController::PostTaskOnBackendThread(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const tracked_objects::Location& from_here,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::Closure& task) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return BrowserThread::PostTask(BrowserThread::FILE, from_here, task);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ExtensionSettingDataTypeController::StartModels() {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  extensions::ExtensionSystem::Get(profile_)->InitForRegularProfile(true);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace browser_sync
61