1// Copyright 2013 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#include "components/user_prefs/user_prefs.h"
6
7#include "base/logging.h"
8#include "base/memory/singleton.h"
9#include "base/prefs/pref_service.h"
10#include "content/public/browser/browser_context.h"
11
12namespace user_prefs {
13
14namespace {
15
16void* UserDataKey() {
17  // We just need a unique constant. Use the address of a static that
18  // COMDAT folding won't touch in an optimizing linker.
19  static int data_key = 0;
20  return reinterpret_cast<void*>(&data_key);
21}
22
23}  // namespace
24
25// static
26PrefService* UserPrefs::Get(content::BrowserContext* context) {
27  DCHECK(context);
28  DCHECK(context->GetUserData(UserDataKey()));
29  return static_cast<UserPrefs*>(
30      context->GetUserData(UserDataKey()))->prefs_;
31}
32
33// static
34void UserPrefs::Set(content::BrowserContext* context, PrefService* prefs) {
35  DCHECK(context);
36  DCHECK(prefs);
37  DCHECK(!context->GetUserData(UserDataKey()));
38  context->SetUserData(UserDataKey(), new UserPrefs(prefs));
39}
40
41UserPrefs::UserPrefs(PrefService* prefs) : prefs_(prefs) {
42}
43
44UserPrefs::~UserPrefs() {
45}
46
47}  // namespace user_prefs
48