1// Copyright (c) 2012 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 "chrome/browser/extensions/extension_pref_store.h"
6
7#include "base/values.h"
8#include "chrome/browser/extensions/extension_pref_value_map.h"
9
10ExtensionPrefStore::ExtensionPrefStore(
11    ExtensionPrefValueMap* extension_pref_value_map,
12    bool incognito_pref_store)
13    : extension_pref_value_map_(extension_pref_value_map),
14      incognito_pref_store_(incognito_pref_store) {
15  extension_pref_value_map_->AddObserver(this);
16}
17
18void ExtensionPrefStore::OnInitializationCompleted() {
19  NotifyInitializationCompleted();
20}
21
22void ExtensionPrefStore::OnPrefValueChanged(const std::string& key) {
23  CHECK(extension_pref_value_map_);
24  const Value *winner =
25      extension_pref_value_map_->GetEffectivePrefValue(key,
26                                                       incognito_pref_store_,
27                                                       NULL);
28  if (winner)
29    SetValue(key, winner->DeepCopy());
30  else
31    RemoveValue(key);
32}
33
34void ExtensionPrefStore::OnExtensionPrefValueMapDestruction() {
35  CHECK(extension_pref_value_map_);
36  extension_pref_value_map_->RemoveObserver(this);
37  extension_pref_value_map_ = NULL;
38}
39
40ExtensionPrefStore::~ExtensionPrefStore() {
41  if (extension_pref_value_map_)
42    extension_pref_value_map_->RemoveObserver(this);
43}
44