Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1478)

Unified Diff: chrome/browser/extensions/app_notification_storage.cc

Issue 12680004: Remove chrome/ code to handle App Notifications (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix merge conflicts. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/app_notification_storage.cc
diff --git a/chrome/browser/extensions/app_notification_storage.cc b/chrome/browser/extensions/app_notification_storage.cc
deleted file mode 100644
index 30d7977cc0efb47eac2f1515b941e05a4287d208..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/app_notification_storage.cc
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/extensions/app_notification_storage.h"
-
-#include "base/file_util.h"
-#include "base/files/file_path.h"
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/location.h"
-#include "base/sys_string_conversions.h"
-#include "base/values.h"
-#include "base/version.h"
-#include "chrome/common/extensions/extension.h"
-#include "content/public/browser/browser_thread.h"
-#include "third_party/leveldatabase/src/include/leveldb/db.h"
-
-using base::JSONReader;
-using base::JSONWriter;
-using content::BrowserThread;
-
-namespace extensions {
-
-// A concrete implementation of the AppNotificationStorage interface, using
-// LevelDb for backing storage.
-class LevelDbAppNotificationStorage : public AppNotificationStorage {
- public:
- explicit LevelDbAppNotificationStorage(const base::FilePath& path);
- virtual ~LevelDbAppNotificationStorage();
-
- // Implementing the AppNotificationStorage interface.
- virtual bool GetExtensionIds(std::set<std::string>* result) OVERRIDE;
- virtual bool Get(const std::string& extension_id,
- AppNotificationList* result) OVERRIDE;
- virtual bool Set(const std::string& extension_id,
- const AppNotificationList& list) OVERRIDE;
- virtual bool Delete(const std::string& extension_id) OVERRIDE;
-
- private:
- // If |db_| is NULL, attempt to open it. You should pass true for
- // |create_if_missing| if you need to write data into the database and want to
- // ensure it has been created after this call.
- bool OpenDbIfNeeded(bool create_if_missing);
-
- // The path where the database will reside.
- base::FilePath path_;
-
- // This should be used for all read operations on the db.
- leveldb::ReadOptions read_options_;
-
- // The leveldb database object - might be NULL if there was nothing found on
- // disk at |path_| and OpenDbIfNeeded hasn't been called with
- // create_if_missing=true yet.
- scoped_ptr<leveldb::DB> db_;
-
- DISALLOW_COPY_AND_ASSIGN(LevelDbAppNotificationStorage);
-};
-
-// static
-AppNotificationStorage* AppNotificationStorage::Create(
- const base::FilePath& path) {
- return new LevelDbAppNotificationStorage(path);
-}
-
-AppNotificationStorage::~AppNotificationStorage() {}
-
-namespace {
-
-void AppNotificationListToJSON(const AppNotificationList& list,
- std::string* result) {
- ListValue list_value;
- AppNotificationList::const_iterator i;
- for (i = list.begin(); i != list.end(); ++i) {
- DictionaryValue* dictionary = new DictionaryValue();
- (*i)->ToDictionaryValue(dictionary);
- list_value.Append(dictionary);
- }
- JSONWriter::Write(&list_value, result);
-}
-
-bool JSONToAppNotificationList(const std::string& json,
- AppNotificationList* list) {
- CHECK(list);
- scoped_ptr<Value> value(JSONReader::Read(json));
- if (!value.get() || value->GetType() != Value::TYPE_LIST)
- return false;
-
- ListValue* list_value = static_cast<ListValue*>(value.get());
- for (size_t i = 0; i < list_value->GetSize(); i++) {
- Value* item = NULL;
- if (!list_value->Get(i, &item) || !item ||
- item->GetType() != Value::TYPE_DICTIONARY)
- return false;
- DictionaryValue* dictionary = static_cast<DictionaryValue*>(item);
- AppNotification* notification =
- AppNotification::FromDictionaryValue(*dictionary);
- if (!notification)
- return false;
- list->push_back(linked_ptr<AppNotification>(notification));
- }
- return true;
-}
-
-void LogLevelDbError(const tracked_objects::Location& location,
- const leveldb::Status& status) {
- LOG(ERROR) << "AppNotificationStorage database error at "
- << location.ToString() << " status:" << status.ToString();
-}
-
-} // namespace
-
-
-LevelDbAppNotificationStorage::LevelDbAppNotificationStorage(
- const base::FilePath& path) : path_(path) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- read_options_.verify_checksums = true;
-}
-
-LevelDbAppNotificationStorage::~LevelDbAppNotificationStorage() {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-}
-
-bool LevelDbAppNotificationStorage::GetExtensionIds(
- std::set<std::string>* result) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- CHECK(result);
- if (!OpenDbIfNeeded(false))
- return false;
- if (!db_.get())
- return true;
-
- scoped_ptr<leveldb::Iterator> iter(db_->NewIterator(read_options_));
- for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
- std::string key = iter->key().ToString();
- if (Extension::IdIsValid(key))
- result->insert(key);
- }
-
- return true;
-}
-
-bool LevelDbAppNotificationStorage::Get(const std::string& extension_id,
- AppNotificationList* result) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- CHECK(result);
- if (!OpenDbIfNeeded(false))
- return false;
- if (!db_.get())
- return true;
-
- std::string json;
- leveldb::Status status = db_->Get(read_options_, extension_id, &json);
- if (status.IsNotFound()) {
- return true;
- } else if (!status.ok()) {
- LogLevelDbError(FROM_HERE, status);
- return false;
- }
-
- return JSONToAppNotificationList(json, result);
-}
-
-bool LevelDbAppNotificationStorage::Set(const std::string& extension_id,
- const AppNotificationList& list) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- if (!OpenDbIfNeeded(true))
- return false;
- CHECK(db_.get());
-
- std::string json;
- AppNotificationListToJSON(list, &json);
- leveldb::Status status = db_->Put(leveldb::WriteOptions(),
- extension_id,
- json);
- if (!status.ok()) {
- LogLevelDbError(FROM_HERE, status);
- return false;
- }
- return true;
-}
-
-bool LevelDbAppNotificationStorage::Delete(const std::string& extension_id) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
- if (!OpenDbIfNeeded(false))
- return false;
-
- if (!db_.get())
- return true; // The database doesn't exist on disk.
-
- // Leveldb does not consider it an error if the key to delete isn't present,
- // so we don't bother checking that first.
- leveldb::Status status = db_->Delete(leveldb::WriteOptions(), extension_id);
-
- if (!status.ok()) {
- LogLevelDbError(FROM_HERE, status);
- return false;
- }
- return true;
-}
-
-bool LevelDbAppNotificationStorage::OpenDbIfNeeded(bool create_if_missing) {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
- if (db_.get())
- return true;
-
- // If the file doesn't exist and the caller doesn't want it created, just
- // return early.
- if (!create_if_missing && !file_util::PathExists(path_))
- return true;
-
-#if defined(OS_POSIX)
- std::string os_path = path_.value();
-#elif defined(OS_WIN)
- std::string os_path = base::SysWideToUTF8(path_.value());
-#endif
-
- leveldb::Options options;
- options.create_if_missing = true;
- leveldb::DB* db = NULL;
- leveldb::Status status = leveldb::DB::Open(options, os_path, &db);
- if (!status.ok()) {
- LogLevelDbError(FROM_HERE, status);
- return false;
- }
- db_.reset(db);
- return true;
-}
-
-} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/app_notification_storage.h ('k') | chrome/browser/extensions/app_notification_storage_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698