// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "extensions/browser/extension_pref_store.h"

#include "base/values.h"
#include "extensions/browser/extension_pref_value_map.h"

ExtensionPrefStore::ExtensionPrefStore(
    ExtensionPrefValueMap* extension_pref_value_map,
    bool incognito_pref_store)
    : extension_pref_value_map_(extension_pref_value_map),
      incognito_pref_store_(incognito_pref_store) {
  extension_pref_value_map_->AddObserver(this);
}

void ExtensionPrefStore::OnInitializationCompleted() {
  NotifyInitializationCompleted();
}

void ExtensionPrefStore::OnPrefValueChanged(const std::string& key) {
  CHECK(extension_pref_value_map_);
  const base::Value *winner =
      extension_pref_value_map_->GetEffectivePrefValue(key,
                                                       incognito_pref_store_,
                                                       NULL);
  if (winner) {
    SetValue(key, winner->CreateDeepCopy(),
             WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  } else {
    RemoveValue(key, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  }
}

void ExtensionPrefStore::OnExtensionPrefValueMapDestruction() {
  CHECK(extension_pref_value_map_);
  extension_pref_value_map_->RemoveObserver(this);
  extension_pref_value_map_ = NULL;
}

ExtensionPrefStore::~ExtensionPrefStore() {
  if (extension_pref_value_map_)
    extension_pref_value_map_->RemoveObserver(this);
}
