1// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#import "ios/web_view/internal/sync/web_view_model_type_store_service_factory.h"
6
7#include <utility>
8
9#include "base/no_destructor.h"
10#include "components/keyed_service/ios/browser_state_dependency_manager.h"
11#include "components/sync/model_impl/model_type_store_service_impl.h"
12#include "ios/web_view/internal/web_view_browser_state.h"
13
14#if !defined(__has_feature) || !__has_feature(objc_arc)
15#error "This file requires ARC support."
16#endif
17
18namespace ios_web_view {
19
20// static
21WebViewModelTypeStoreServiceFactory*
22WebViewModelTypeStoreServiceFactory::GetInstance() {
23  static base::NoDestructor<WebViewModelTypeStoreServiceFactory> instance;
24  return instance.get();
25}
26
27// static
28syncer::ModelTypeStoreService*
29WebViewModelTypeStoreServiceFactory::GetForBrowserState(
30    WebViewBrowserState* browser_state) {
31  return static_cast<syncer::ModelTypeStoreService*>(
32      GetInstance()->GetServiceForBrowserState(browser_state, true));
33}
34
35WebViewModelTypeStoreServiceFactory::WebViewModelTypeStoreServiceFactory()
36    : BrowserStateKeyedServiceFactory(
37          "ModelTypeStoreService",
38          BrowserStateDependencyManager::GetInstance()) {}
39
40WebViewModelTypeStoreServiceFactory::~WebViewModelTypeStoreServiceFactory() {}
41
42std::unique_ptr<KeyedService>
43WebViewModelTypeStoreServiceFactory::BuildServiceInstanceFor(
44    web::BrowserState* context) const {
45  WebViewBrowserState* browser_state =
46      WebViewBrowserState::FromBrowserState(context);
47  return std::make_unique<syncer::ModelTypeStoreServiceImpl>(
48      browser_state->GetStatePath());
49}
50
51web::BrowserState* WebViewModelTypeStoreServiceFactory::GetBrowserStateToUse(
52    web::BrowserState* context) const {
53  WebViewBrowserState* browser_state =
54      WebViewBrowserState::FromBrowserState(context);
55  return browser_state->GetRecordingBrowserState();
56}
57
58}  // namespace ios_web_view
59