summaryrefslogtreecommitdiffstats
path: root/chromium/components/dom_distiller/core/dom_distiller_database.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/dom_distiller/core/dom_distiller_database.cc')
-rw-r--r--chromium/components/dom_distiller/core/dom_distiller_database.cc224
1 files changed, 0 insertions, 224 deletions
diff --git a/chromium/components/dom_distiller/core/dom_distiller_database.cc b/chromium/components/dom_distiller/core/dom_distiller_database.cc
deleted file mode 100644
index a799a622823..00000000000
--- a/chromium/components/dom_distiller/core/dom_distiller_database.cc
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright 2013 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 "components/dom_distiller/core/dom_distiller_database.h"
-
-#include "base/bind.h"
-#include "base/file_util.h"
-#include "base/message_loop/message_loop.h"
-#include "base/sequenced_task_runner.h"
-#include "base/strings/string_util.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "components/dom_distiller/core/article_entry.h"
-#include "third_party/leveldatabase/src/include/leveldb/db.h"
-#include "third_party/leveldatabase/src/include/leveldb/iterator.h"
-#include "third_party/leveldatabase/src/include/leveldb/options.h"
-#include "third_party/leveldatabase/src/include/leveldb/slice.h"
-#include "third_party/leveldatabase/src/include/leveldb/status.h"
-#include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
-
-using base::MessageLoop;
-using base::SequencedTaskRunner;
-
-namespace dom_distiller {
-
-DomDistillerDatabase::LevelDB::LevelDB() {}
-
-DomDistillerDatabase::LevelDB::~LevelDB() {
- DFAKE_SCOPED_LOCK(thread_checker_);
-}
-
-bool DomDistillerDatabase::LevelDB::Init(const base::FilePath& database_dir) {
- DFAKE_SCOPED_LOCK(thread_checker_);
-
- leveldb::Options options;
- options.create_if_missing = true;
- options.max_open_files = 0; // Use minimum.
-
- std::string path = database_dir.AsUTF8Unsafe();
-
- leveldb::DB* db = NULL;
- leveldb::Status status = leveldb::DB::Open(options, path, &db);
- if (status.IsCorruption()) {
- base::DeleteFile(database_dir, true);
- status = leveldb::DB::Open(options, path, &db);
- }
-
- if (status.ok()) {
- CHECK(db);
- db_.reset(db);
- return true;
- }
-
- LOG(WARNING) << "Unable to open " << database_dir.value() << ": "
- << status.ToString();
- return false;
-}
-
-bool DomDistillerDatabase::LevelDB::Save(const EntryVector& entries_to_save,
- const EntryVector& entries_to_remove) {
- DFAKE_SCOPED_LOCK(thread_checker_);
-
- leveldb::WriteBatch updates;
- for (EntryVector::const_iterator it = entries_to_save.begin();
- it != entries_to_save.end();
- ++it) {
- updates.Put(leveldb::Slice(it->entry_id()),
- leveldb::Slice(it->SerializeAsString()));
- }
- for (EntryVector::const_iterator it = entries_to_remove.begin();
- it != entries_to_remove.end();
- ++it) {
- updates.Delete(leveldb::Slice(it->entry_id()));
- }
-
- leveldb::WriteOptions options;
- options.sync = true;
- leveldb::Status status = db_->Write(options, &updates);
- if (status.ok())
- return true;
-
- DLOG(WARNING) << "Failed writing dom_distiller entries: "
- << status.ToString();
- return false;
-}
-
-bool DomDistillerDatabase::LevelDB::Load(EntryVector* entries) {
- DFAKE_SCOPED_LOCK(thread_checker_);
-
- leveldb::ReadOptions options;
- scoped_ptr<leveldb::Iterator> db_iterator(db_->NewIterator(options));
- for (db_iterator->SeekToFirst(); db_iterator->Valid(); db_iterator->Next()) {
- leveldb::Slice value_slice = db_iterator->value();
-
- ArticleEntry entry;
- if (!entry.ParseFromArray(value_slice.data(), value_slice.size())) {
- DLOG(WARNING) << "Unable to parse dom_distiller entry "
- << db_iterator->key().ToString();
- // TODO(cjhopman): Decide what to do about un-parseable entries.
- }
- entries->push_back(entry);
- }
- return true;
-}
-
-namespace {
-
-void RunInitCallback(DomDistillerDatabaseInterface::InitCallback callback,
- const bool* success) {
- callback.Run(*success);
-}
-
-void RunUpdateCallback(DomDistillerDatabaseInterface::UpdateCallback callback,
- const bool* success) {
- callback.Run(*success);
-}
-
-void RunLoadCallback(DomDistillerDatabaseInterface::LoadCallback callback,
- const bool* success,
- scoped_ptr<EntryVector> entries) {
- callback.Run(*success, entries.Pass());
-}
-
-void InitFromTaskRunner(DomDistillerDatabase::Database* database,
- const base::FilePath& database_dir,
- bool* success) {
- DCHECK(success);
-
- // TODO(cjhopman): Histogram for database size.
- *success = database->Init(database_dir);
-}
-
-void UpdateEntriesFromTaskRunner(DomDistillerDatabase::Database* database,
- scoped_ptr<EntryVector> entries_to_save,
- scoped_ptr<EntryVector> entries_to_remove,
- bool* success) {
- DCHECK(success);
- *success = database->Save(*entries_to_save, *entries_to_remove);
-}
-
-void LoadEntriesFromTaskRunner(DomDistillerDatabase::Database* database,
- EntryVector* entries,
- bool* success) {
- DCHECK(success);
- DCHECK(entries);
-
- entries->clear();
- *success = database->Load(entries);
-}
-
-} // namespace
-
-DomDistillerDatabase::DomDistillerDatabase(
- scoped_refptr<base::SequencedTaskRunner> task_runner)
- : task_runner_(task_runner) {
-}
-
-void DomDistillerDatabase::Init(const base::FilePath& database_dir,
- InitCallback callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- InitWithDatabase(scoped_ptr<Database>(new LevelDB()), database_dir, callback);
-}
-
-void DomDistillerDatabase::InitWithDatabase(scoped_ptr<Database> database,
- const base::FilePath& database_dir,
- InitCallback callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(!db_);
- DCHECK(database);
- db_.reset(database.release());
- bool* success = new bool(false);
- task_runner_->PostTaskAndReply(
- FROM_HERE,
- base::Bind(InitFromTaskRunner,
- base::Unretained(db_.get()),
- database_dir,
- success),
- base::Bind(RunInitCallback, callback, base::Owned(success)));
-}
-
-void DomDistillerDatabase::UpdateEntries(
- scoped_ptr<EntryVector> entries_to_save,
- scoped_ptr<EntryVector> entries_to_remove,
- UpdateCallback callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- bool* success = new bool(false);
- task_runner_->PostTaskAndReply(
- FROM_HERE,
- base::Bind(UpdateEntriesFromTaskRunner,
- base::Unretained(db_.get()),
- base::Passed(&entries_to_save),
- base::Passed(&entries_to_remove),
- success),
- base::Bind(RunUpdateCallback, callback, base::Owned(success)));
-}
-
-void DomDistillerDatabase::LoadEntries(LoadCallback callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- bool* success = new bool(false);
-
- scoped_ptr<EntryVector> entries(new EntryVector());
- // Get this pointer before entries is base::Passed() so we can use it below.
- EntryVector* entries_ptr = entries.get();
-
- task_runner_->PostTaskAndReply(
- FROM_HERE,
- base::Bind(LoadEntriesFromTaskRunner,
- base::Unretained(db_.get()),
- entries_ptr,
- success),
- base::Bind(RunLoadCallback,
- callback,
- base::Owned(success),
- base::Passed(&entries)));
-}
-
-DomDistillerDatabase::~DomDistillerDatabase() {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (!task_runner_->DeleteSoon(FROM_HERE, db_.release())) {
- DLOG(WARNING) << "DOM distiller database will not be deleted.";
- }
-}
-
-} // namespace dom_distiller