1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 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)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/value_store/value_store_change.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ValueStoreChange::ToJson(
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ValueStoreChangeList& changes) {
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue changes_value;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (ValueStoreChangeList::const_iterator it = changes.begin();
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      it != changes.end(); ++it) {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::DictionaryValue* change_value = new base::DictionaryValue();
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it->old_value()) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      change_value->Set("oldValue", it->old_value()->DeepCopy());
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it->new_value()) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      change_value->Set("newValue", it->new_value()->DeepCopy());
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    changes_value.SetWithoutPathExpansion(it->key(), change_value);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string json;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::JSONWriter::Write(&changes_value, &json);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return json;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStoreChange::ValueStoreChange(
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& key, base::Value* old_value, base::Value* new_value)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : inner_(new Inner(key, old_value, new_value)) {}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStoreChange::~ValueStoreChange() {}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::string& ValueStoreChange::key() const {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(inner_.get());
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return inner_->key_;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const base::Value* ValueStoreChange::old_value() const {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(inner_.get());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return inner_->old_value_.get();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const base::Value* ValueStoreChange::new_value() const {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(inner_.get());
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return inner_->new_value_.get();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStoreChange::Inner::Inner(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& key, base::Value* old_value, base::Value* new_value)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : key_(key), old_value_(old_value), new_value_(new_value) {}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStoreChange::Inner::~Inner() {}
56