diff options
author | miu@chromium.org <miu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-15 23:02:30 +0000 |
---|---|---|
committer | miu@chromium.org <miu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-15 23:03:33 +0000 |
commit | 8faaaa1db317847005281e04eaa3a44909a4f097 (patch) | |
tree | 636edef2aacada9eb6d15f58c851b008602a26e6 /net | |
parent | 9a341ca5ce10ddcdca8b750df56bc2e9eb46ba4e (diff) | |
download | chromium_src-8faaaa1db317847005281e04eaa3a44909a4f097.zip chromium_src-8faaaa1db317847005281e04eaa3a44909a4f097.tar.gz chromium_src-8faaaa1db317847005281e04eaa3a44909a4f097.tar.bz2 |
Revert of Move sqlite_channel_id_store from chrome/browser/net to net/extras. (patchset #26 of https://codereview.chromium.org/381073002/)
Reason for revert:
Closed the tree on failing net_unittests:
http://build.chromium.org/p/chromium.linux/buildstatus?builder=Linux%20Tests%20%28dbg%29%281%29&number=32912
Original issue's description:
> Move sqlite_channel_id_store from chrome/browser/net to net/extras.
> Application of special storage policy is split out into chrome/browser/net/quota_policy_channel_id_store.
>
> TEST=net_unittests --gtest_filter=SQLiteChannelIDStoreTest*
> TEST=unit_tests --gtest_filter=QuotaPolicyChannelIDStore*
>
> BUG=397545
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=289996
TBR=mef@chromium.org
NOTREECHECKS=true
NOTRY=true
Review URL: https://codereview.chromium.org/477253002
Cr-Commit-Position: refs/heads/master@{#290038}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@290038 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/BUILD.gn | 10 | ||||
-rw-r--r-- | net/extras/sqlite/DEPS | 5 | ||||
-rw-r--r-- | net/extras/sqlite/sqlite_channel_id_store.cc | 636 | ||||
-rw-r--r-- | net/extras/sqlite/sqlite_channel_id_store.h | 61 | ||||
-rw-r--r-- | net/extras/sqlite/sqlite_channel_id_store_unittest.cc | 510 | ||||
-rw-r--r-- | net/net.gyp | 14 | ||||
-rw-r--r-- | net/net.gypi | 5 |
7 files changed, 0 insertions, 1241 deletions
diff --git a/net/BUILD.gn b/net/BUILD.gn index 454f5dc..d9b2d39 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn @@ -563,15 +563,6 @@ grit("net_resources") { ] } -static_library("net_extras") { - sources = gypi_values.net_extras_sources - configs += [ "//build/config/compiler:wexit_time_destructors" ] - deps = [ - ":net", - "//sql:sql", - ] -} - static_library("http_server") { sources = [ "server/http_connection.cc", @@ -1103,7 +1094,6 @@ test("net_unittests") { deps = [ ":http_server", ":net", - ":net_extras", ":quic_tools", ":test_support", "//base", diff --git a/net/extras/sqlite/DEPS b/net/extras/sqlite/DEPS deleted file mode 100644 index 40ed5cf..0000000 --- a/net/extras/sqlite/DEPS +++ /dev/null @@ -1,5 +0,0 @@ -include_rules = [ - "+base", - "+net", - "+sql", -] diff --git a/net/extras/sqlite/sqlite_channel_id_store.cc b/net/extras/sqlite/sqlite_channel_id_store.cc deleted file mode 100644 index ee89ce0..0000000 --- a/net/extras/sqlite/sqlite_channel_id_store.cc +++ /dev/null @@ -1,636 +0,0 @@ -// 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 "net/extras/sqlite/sqlite_channel_id_store.h" - -#include <set> - -#include "base/basictypes.h" -#include "base/bind.h" -#include "base/file_util.h" -#include "base/files/file_path.h" -#include "base/location.h" -#include "base/logging.h" -#include "base/memory/scoped_ptr.h" -#include "base/memory/scoped_vector.h" -#include "base/metrics/histogram.h" -#include "base/sequenced_task_runner.h" -#include "base/strings/string_util.h" -#include "net/cert/x509_certificate.h" -#include "net/cookies/cookie_util.h" -#include "net/ssl/ssl_client_cert_type.h" -#include "sql/error_delegate_util.h" -#include "sql/meta_table.h" -#include "sql/statement.h" -#include "sql/transaction.h" -#include "url/gurl.h" - -namespace { - -// Version number of the database. -const int kCurrentVersionNumber = 4; -const int kCompatibleVersionNumber = 1; - -// Initializes the certs table, returning true on success. -bool InitTable(sql::Connection* db) { - // The table is named "origin_bound_certs" for backwards compatability before - // we renamed this class to SQLiteChannelIDStore. Likewise, the primary - // key is "origin", but now can be other things like a plain domain. - if (!db->DoesTableExist("origin_bound_certs")) { - if (!db->Execute( - "CREATE TABLE origin_bound_certs (" - "origin TEXT NOT NULL UNIQUE PRIMARY KEY," - "private_key BLOB NOT NULL," - "cert BLOB NOT NULL," - "cert_type INTEGER," - "expiration_time INTEGER," - "creation_time INTEGER)")) { - return false; - } - } - - return true; -} - -} // namespace - -namespace net { - -// This class is designed to be shared between any calling threads and the -// background task runner. It batches operations and commits them on a timer. -class SQLiteChannelIDStore::Backend - : public base::RefCountedThreadSafe<SQLiteChannelIDStore::Backend> { - public: - Backend( - const base::FilePath& path, - const scoped_refptr<base::SequencedTaskRunner>& background_task_runner) - : path_(path), - num_pending_(0), - force_keep_session_state_(false), - background_task_runner_(background_task_runner), - corruption_detected_(false) {} - - // Creates or loads the SQLite database. - void Load(const LoadedCallback& loaded_callback); - - // Batch a channel ID addition. - void AddChannelID(const DefaultChannelIDStore::ChannelID& channel_id); - - // Batch a channel ID deletion. - void DeleteChannelID(const DefaultChannelIDStore::ChannelID& channel_id); - - // Post background delete of all channel ids for |server_identifiers|. - void DeleteAllInList(const std::list<std::string>& server_identifiers); - - // Commit any pending operations and close the database. This must be called - // before the object is destructed. - void Close(); - - void SetForceKeepSessionState(); - - private: - friend class base::RefCountedThreadSafe<SQLiteChannelIDStore::Backend>; - - // You should call Close() before destructing this object. - virtual ~Backend() { - DCHECK(!db_.get()) << "Close should have already been called."; - DCHECK_EQ(0u, num_pending_); - DCHECK(pending_.empty()); - } - - void LoadInBackground( - ScopedVector<DefaultChannelIDStore::ChannelID>* channel_ids); - - // Database upgrade statements. - bool EnsureDatabaseVersion(); - - class PendingOperation { - public: - enum OperationType { CHANNEL_ID_ADD, CHANNEL_ID_DELETE }; - - PendingOperation(OperationType op, - const DefaultChannelIDStore::ChannelID& channel_id) - : op_(op), channel_id_(channel_id) {} - - OperationType op() const { return op_; } - const DefaultChannelIDStore::ChannelID& channel_id() const { - return channel_id_; - } - - private: - OperationType op_; - DefaultChannelIDStore::ChannelID channel_id_; - }; - - private: - // Batch a channel id operation (add or delete). - void BatchOperation(PendingOperation::OperationType op, - const DefaultChannelIDStore::ChannelID& channel_id); - // Commit our pending operations to the database. - void Commit(); - // Close() executed on the background task runner. - void InternalBackgroundClose(); - - void BackgroundDeleteAllInList( - const std::list<std::string>& server_identifiers); - - void DatabaseErrorCallback(int error, sql::Statement* stmt); - void KillDatabase(); - - const base::FilePath path_; - scoped_ptr<sql::Connection> db_; - sql::MetaTable meta_table_; - - typedef std::list<PendingOperation*> PendingOperationsList; - PendingOperationsList pending_; - PendingOperationsList::size_type num_pending_; - // True if the persistent store should skip clear on exit rules. - bool force_keep_session_state_; - // Guard |pending_|, |num_pending_| and |force_keep_session_state_|. - base::Lock lock_; - - scoped_refptr<base::SequencedTaskRunner> background_task_runner_; - - // Indicates if the kill-database callback has been scheduled. - bool corruption_detected_; - - DISALLOW_COPY_AND_ASSIGN(Backend); -}; - -void SQLiteChannelIDStore::Backend::Load( - const LoadedCallback& loaded_callback) { - // This function should be called only once per instance. - DCHECK(!db_.get()); - scoped_ptr<ScopedVector<DefaultChannelIDStore::ChannelID> > channel_ids( - new ScopedVector<DefaultChannelIDStore::ChannelID>()); - ScopedVector<DefaultChannelIDStore::ChannelID>* channel_ids_ptr = - channel_ids.get(); - - background_task_runner_->PostTaskAndReply( - FROM_HERE, - base::Bind(&Backend::LoadInBackground, this, channel_ids_ptr), - base::Bind(loaded_callback, base::Passed(&channel_ids))); -} - -void SQLiteChannelIDStore::Backend::LoadInBackground( - ScopedVector<DefaultChannelIDStore::ChannelID>* channel_ids) { - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); - - // This method should be called only once per instance. - DCHECK(!db_.get()); - - base::TimeTicks start = base::TimeTicks::Now(); - - // Ensure the parent directory for storing certs is created before reading - // from it. - const base::FilePath dir = path_.DirName(); - if (!base::PathExists(dir) && !base::CreateDirectory(dir)) - return; - - int64 db_size = 0; - if (base::GetFileSize(path_, &db_size)) - UMA_HISTOGRAM_COUNTS("DomainBoundCerts.DBSizeInKB", db_size / 1024); - - db_.reset(new sql::Connection); - db_->set_histogram_tag("DomainBoundCerts"); - - // Unretained to avoid a ref loop with db_. - db_->set_error_callback( - base::Bind(&SQLiteChannelIDStore::Backend::DatabaseErrorCallback, - base::Unretained(this))); - - if (!db_->Open(path_)) { - NOTREACHED() << "Unable to open cert DB."; - if (corruption_detected_) - KillDatabase(); - db_.reset(); - return; - } - - if (!EnsureDatabaseVersion() || !InitTable(db_.get())) { - NOTREACHED() << "Unable to open cert DB."; - if (corruption_detected_) - KillDatabase(); - meta_table_.Reset(); - db_.reset(); - return; - } - - db_->Preload(); - - // Slurp all the certs into the out-vector. - sql::Statement smt(db_->GetUniqueStatement( - "SELECT origin, private_key, cert, cert_type, expiration_time, " - "creation_time FROM origin_bound_certs")); - if (!smt.is_valid()) { - if (corruption_detected_) - KillDatabase(); - meta_table_.Reset(); - db_.reset(); - return; - } - - while (smt.Step()) { - SSLClientCertType type = static_cast<SSLClientCertType>(smt.ColumnInt(3)); - if (type != CLIENT_CERT_ECDSA_SIGN) - continue; - std::string private_key_from_db, cert_from_db; - smt.ColumnBlobAsString(1, &private_key_from_db); - smt.ColumnBlobAsString(2, &cert_from_db); - scoped_ptr<DefaultChannelIDStore::ChannelID> channel_id( - new DefaultChannelIDStore::ChannelID( - smt.ColumnString(0), // origin - base::Time::FromInternalValue(smt.ColumnInt64(5)), - base::Time::FromInternalValue(smt.ColumnInt64(4)), - private_key_from_db, - cert_from_db)); - channel_ids->push_back(channel_id.release()); - } - - UMA_HISTOGRAM_COUNTS_10000( - "DomainBoundCerts.DBLoadedCount", - static_cast<base::HistogramBase::Sample>(channel_ids->size())); - base::TimeDelta load_time = base::TimeTicks::Now() - start; - UMA_HISTOGRAM_CUSTOM_TIMES("DomainBoundCerts.DBLoadTime", - load_time, - base::TimeDelta::FromMilliseconds(1), - base::TimeDelta::FromMinutes(1), - 50); - DVLOG(1) << "loaded " << channel_ids->size() << " in " - << load_time.InMilliseconds() << " ms"; -} - -bool SQLiteChannelIDStore::Backend::EnsureDatabaseVersion() { - // Version check. - if (!meta_table_.Init( - db_.get(), kCurrentVersionNumber, kCompatibleVersionNumber)) { - return false; - } - - if (meta_table_.GetCompatibleVersionNumber() > kCurrentVersionNumber) { - LOG(WARNING) << "Server bound cert database is too new."; - return false; - } - - int cur_version = meta_table_.GetVersionNumber(); - if (cur_version == 1) { - sql::Transaction transaction(db_.get()); - if (!transaction.Begin()) - return false; - if (!db_->Execute( - "ALTER TABLE origin_bound_certs ADD COLUMN cert_type " - "INTEGER")) { - LOG(WARNING) << "Unable to update server bound cert database to " - << "version 2."; - return false; - } - // All certs in version 1 database are rsa_sign, which are unsupported. - // Just discard them all. - if (!db_->Execute("DELETE from origin_bound_certs")) { - LOG(WARNING) << "Unable to update server bound cert database to " - << "version 2."; - return false; - } - ++cur_version; - meta_table_.SetVersionNumber(cur_version); - meta_table_.SetCompatibleVersionNumber( - std::min(cur_version, kCompatibleVersionNumber)); - transaction.Commit(); - } - - if (cur_version <= 3) { - sql::Transaction transaction(db_.get()); - if (!transaction.Begin()) - return false; - - if (cur_version == 2) { - if (!db_->Execute( - "ALTER TABLE origin_bound_certs ADD COLUMN " - "expiration_time INTEGER")) { - LOG(WARNING) << "Unable to update server bound cert database to " - << "version 4."; - return false; - } - } - - if (!db_->Execute( - "ALTER TABLE origin_bound_certs ADD COLUMN " - "creation_time INTEGER")) { - LOG(WARNING) << "Unable to update server bound cert database to " - << "version 4."; - return false; - } - - sql::Statement statement( - db_->GetUniqueStatement("SELECT origin, cert FROM origin_bound_certs")); - sql::Statement update_expires_statement(db_->GetUniqueStatement( - "UPDATE origin_bound_certs SET expiration_time = ? WHERE origin = ?")); - sql::Statement update_creation_statement(db_->GetUniqueStatement( - "UPDATE origin_bound_certs SET creation_time = ? WHERE origin = ?")); - if (!statement.is_valid() || !update_expires_statement.is_valid() || - !update_creation_statement.is_valid()) { - LOG(WARNING) << "Unable to update server bound cert database to " - << "version 4."; - return false; - } - - while (statement.Step()) { - std::string origin = statement.ColumnString(0); - std::string cert_from_db; - statement.ColumnBlobAsString(1, &cert_from_db); - // Parse the cert and extract the real value and then update the DB. - scoped_refptr<X509Certificate> cert(X509Certificate::CreateFromBytes( - cert_from_db.data(), static_cast<int>(cert_from_db.size()))); - if (cert.get()) { - if (cur_version == 2) { - update_expires_statement.Reset(true); - update_expires_statement.BindInt64( - 0, cert->valid_expiry().ToInternalValue()); - update_expires_statement.BindString(1, origin); - if (!update_expires_statement.Run()) { - LOG(WARNING) << "Unable to update server bound cert database to " - << "version 4."; - return false; - } - } - - update_creation_statement.Reset(true); - update_creation_statement.BindInt64( - 0, cert->valid_start().ToInternalValue()); - update_creation_statement.BindString(1, origin); - if (!update_creation_statement.Run()) { - LOG(WARNING) << "Unable to update server bound cert database to " - << "version 4."; - return false; - } - } else { - // If there's a cert we can't parse, just leave it. It'll get replaced - // with a new one if we ever try to use it. - LOG(WARNING) << "Error parsing cert for database upgrade for origin " - << statement.ColumnString(0); - } - } - - cur_version = 4; - meta_table_.SetVersionNumber(cur_version); - meta_table_.SetCompatibleVersionNumber( - std::min(cur_version, kCompatibleVersionNumber)); - transaction.Commit(); - } - - // Put future migration cases here. - - // When the version is too old, we just try to continue anyway, there should - // not be a released product that makes a database too old for us to handle. - LOG_IF(WARNING, cur_version < kCurrentVersionNumber) - << "Server bound cert database version " << cur_version - << " is too old to handle."; - - return true; -} - -void SQLiteChannelIDStore::Backend::DatabaseErrorCallback( - int error, - sql::Statement* stmt) { - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); - - if (!sql::IsErrorCatastrophic(error)) - return; - - // TODO(shess): Running KillDatabase() multiple times should be - // safe. - if (corruption_detected_) - return; - - corruption_detected_ = true; - - // TODO(shess): Consider just calling RazeAndClose() immediately. - // db_ may not be safe to reset at this point, but RazeAndClose() - // would cause the stack to unwind safely with errors. - background_task_runner_->PostTask(FROM_HERE, - base::Bind(&Backend::KillDatabase, this)); -} - -void SQLiteChannelIDStore::Backend::KillDatabase() { - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); - - if (db_) { - // This Backend will now be in-memory only. In a future run the database - // will be recreated. Hopefully things go better then! - bool success = db_->RazeAndClose(); - UMA_HISTOGRAM_BOOLEAN("DomainBoundCerts.KillDatabaseResult", success); - meta_table_.Reset(); - db_.reset(); - } -} - -void SQLiteChannelIDStore::Backend::AddChannelID( - const DefaultChannelIDStore::ChannelID& channel_id) { - BatchOperation(PendingOperation::CHANNEL_ID_ADD, channel_id); -} - -void SQLiteChannelIDStore::Backend::DeleteChannelID( - const DefaultChannelIDStore::ChannelID& channel_id) { - BatchOperation(PendingOperation::CHANNEL_ID_DELETE, channel_id); -} - -void SQLiteChannelIDStore::Backend::DeleteAllInList( - const std::list<std::string>& server_identifiers) { - if (server_identifiers.empty()) - return; - // Perform deletion on background task runner. - background_task_runner_->PostTask( - FROM_HERE, - base::Bind( - &Backend::BackgroundDeleteAllInList, this, server_identifiers)); -} - -void SQLiteChannelIDStore::Backend::BatchOperation( - PendingOperation::OperationType op, - const DefaultChannelIDStore::ChannelID& channel_id) { - // Commit every 30 seconds. - static const int kCommitIntervalMs = 30 * 1000; - // Commit right away if we have more than 512 outstanding operations. - static const size_t kCommitAfterBatchSize = 512; - - // We do a full copy of the cert here, and hopefully just here. - scoped_ptr<PendingOperation> po(new PendingOperation(op, channel_id)); - - PendingOperationsList::size_type num_pending; - { - base::AutoLock locked(lock_); - pending_.push_back(po.release()); - num_pending = ++num_pending_; - } - - if (num_pending == 1) { - // We've gotten our first entry for this batch, fire off the timer. - background_task_runner_->PostDelayedTask( - FROM_HERE, - base::Bind(&Backend::Commit, this), - base::TimeDelta::FromMilliseconds(kCommitIntervalMs)); - } else if (num_pending == kCommitAfterBatchSize) { - // We've reached a big enough batch, fire off a commit now. - background_task_runner_->PostTask(FROM_HERE, - base::Bind(&Backend::Commit, this)); - } -} - -void SQLiteChannelIDStore::Backend::Commit() { - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); - - PendingOperationsList ops; - { - base::AutoLock locked(lock_); - pending_.swap(ops); - num_pending_ = 0; - } - - // Maybe an old timer fired or we are already Close()'ed. - if (!db_.get() || ops.empty()) - return; - - sql::Statement add_statement(db_->GetCachedStatement( - SQL_FROM_HERE, - "INSERT INTO origin_bound_certs (origin, private_key, cert, cert_type, " - "expiration_time, creation_time) VALUES (?,?,?,?,?,?)")); - if (!add_statement.is_valid()) - return; - - sql::Statement del_statement(db_->GetCachedStatement( - SQL_FROM_HERE, "DELETE FROM origin_bound_certs WHERE origin=?")); - if (!del_statement.is_valid()) - return; - - sql::Transaction transaction(db_.get()); - if (!transaction.Begin()) - return; - - for (PendingOperationsList::iterator it = ops.begin(); it != ops.end(); - ++it) { - // Free the certs as we commit them to the database. - scoped_ptr<PendingOperation> po(*it); - switch (po->op()) { - case PendingOperation::CHANNEL_ID_ADD: { - add_statement.Reset(true); - add_statement.BindString(0, po->channel_id().server_identifier()); - const std::string& private_key = po->channel_id().private_key(); - add_statement.BindBlob( - 1, private_key.data(), static_cast<int>(private_key.size())); - const std::string& cert = po->channel_id().cert(); - add_statement.BindBlob(2, cert.data(), static_cast<int>(cert.size())); - add_statement.BindInt(3, CLIENT_CERT_ECDSA_SIGN); - add_statement.BindInt64( - 4, po->channel_id().expiration_time().ToInternalValue()); - add_statement.BindInt64( - 5, po->channel_id().creation_time().ToInternalValue()); - if (!add_statement.Run()) - NOTREACHED() << "Could not add a server bound cert to the DB."; - break; - } - case PendingOperation::CHANNEL_ID_DELETE: - del_statement.Reset(true); - del_statement.BindString(0, po->channel_id().server_identifier()); - if (!del_statement.Run()) - NOTREACHED() << "Could not delete a server bound cert from the DB."; - break; - - default: - NOTREACHED(); - break; - } - } - transaction.Commit(); -} - -// Fire off a close message to the background task runner. We could still have a -// pending commit timer that will be holding a reference on us, but if/when -// this fires we will already have been cleaned up and it will be ignored. -void SQLiteChannelIDStore::Backend::Close() { - // Must close the backend on the background task runner. - background_task_runner_->PostTask( - FROM_HERE, base::Bind(&Backend::InternalBackgroundClose, this)); -} - -void SQLiteChannelIDStore::Backend::InternalBackgroundClose() { - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); - // Commit any pending operations - Commit(); - db_.reset(); -} - -void SQLiteChannelIDStore::Backend::BackgroundDeleteAllInList( - const std::list<std::string>& server_identifiers) { - DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); - - if (!db_.get()) - return; - - sql::Statement del_smt(db_->GetCachedStatement( - SQL_FROM_HERE, "DELETE FROM origin_bound_certs WHERE origin=?")); - if (!del_smt.is_valid()) { - LOG(WARNING) << "Unable to delete channel ids."; - return; - } - - sql::Transaction transaction(db_.get()); - if (!transaction.Begin()) { - LOG(WARNING) << "Unable to delete channel ids."; - return; - } - - for (std::list<std::string>::const_iterator it = server_identifiers.begin(); - it != server_identifiers.end(); - ++it) { - del_smt.Reset(true); - del_smt.BindString(0, *it); - if (!del_smt.Run()) - NOTREACHED() << "Could not delete a channel id from the DB."; - } - - if (!transaction.Commit()) - LOG(WARNING) << "Unable to delete channel ids."; -} - -void SQLiteChannelIDStore::Backend::SetForceKeepSessionState() { - base::AutoLock locked(lock_); - force_keep_session_state_ = true; -} - -SQLiteChannelIDStore::SQLiteChannelIDStore( - const base::FilePath& path, - const scoped_refptr<base::SequencedTaskRunner>& background_task_runner) - : backend_(new Backend(path, background_task_runner)) { -} - -void SQLiteChannelIDStore::Load(const LoadedCallback& loaded_callback) { - backend_->Load(loaded_callback); -} - -void SQLiteChannelIDStore::AddChannelID( - const DefaultChannelIDStore::ChannelID& channel_id) { - backend_->AddChannelID(channel_id); -} - -void SQLiteChannelIDStore::DeleteChannelID( - const DefaultChannelIDStore::ChannelID& channel_id) { - backend_->DeleteChannelID(channel_id); -} - -void SQLiteChannelIDStore::DeleteAllInList( - const std::list<std::string>& server_identifiers) { - backend_->DeleteAllInList(server_identifiers); -} - -void SQLiteChannelIDStore::SetForceKeepSessionState() { - backend_->SetForceKeepSessionState(); -} - -SQLiteChannelIDStore::~SQLiteChannelIDStore() { - backend_->Close(); - // We release our reference to the Backend, though it will probably still have - // a reference if the background task runner has not run Close() yet. -} - -} // namespace net diff --git a/net/extras/sqlite/sqlite_channel_id_store.h b/net/extras/sqlite/sqlite_channel_id_store.h deleted file mode 100644 index 9d032a3..0000000 --- a/net/extras/sqlite/sqlite_channel_id_store.h +++ /dev/null @@ -1,61 +0,0 @@ -// 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. - -#ifndef NET_EXTRAS_SQLITE_SQLITE_CHANNEL_ID_STORE_H_ -#define NET_EXTRAS_SQLITE_SQLITE_CHANNEL_ID_STORE_H_ - -#include <list> -#include <string> - -#include "base/callback_forward.h" -#include "base/compiler_specific.h" -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "net/ssl/default_channel_id_store.h" - -namespace base { -class FilePath; -class SequencedTaskRunner; -} - -class GURL; - -namespace net { - -// Implements the DefaultChannelIDStore::PersistentStore interface -// in terms of a SQLite database. For documentation about the actual member -// functions consult the documentation of the parent class -// DefaultChannelIDStore::PersistentCertStore. -class SQLiteChannelIDStore : public DefaultChannelIDStore::PersistentStore { - public: - // Create or open persistent store in file |path|. All I/O tasks are performed - // in background using |background_task_runner|. - SQLiteChannelIDStore( - const base::FilePath& path, - const scoped_refptr<base::SequencedTaskRunner>& background_task_runner); - - // DefaultChannelIDStore::PersistentStore: - virtual void Load(const LoadedCallback& loaded_callback) OVERRIDE; - virtual void AddChannelID( - const DefaultChannelIDStore::ChannelID& channel_id) OVERRIDE; - virtual void DeleteChannelID( - const DefaultChannelIDStore::ChannelID& channel_id) OVERRIDE; - virtual void SetForceKeepSessionState() OVERRIDE; - - // Delete channel ids from servers in |server_identifiers|. - void DeleteAllInList(const std::list<std::string>& server_identifiers); - - private: - virtual ~SQLiteChannelIDStore(); - - class Backend; - - scoped_refptr<Backend> backend_; - - DISALLOW_COPY_AND_ASSIGN(SQLiteChannelIDStore); -}; - -} // namespace net - -#endif // NET_EXTRAS_SQLITE_SQLITE_CHANNEL_ID_STORE_H_ diff --git a/net/extras/sqlite/sqlite_channel_id_store_unittest.cc b/net/extras/sqlite/sqlite_channel_id_store_unittest.cc deleted file mode 100644 index 5fefbcf..0000000 --- a/net/extras/sqlite/sqlite_channel_id_store_unittest.cc +++ /dev/null @@ -1,510 +0,0 @@ -// 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 "base/bind.h" -#include "base/file_util.h" -#include "base/files/scoped_temp_dir.h" -#include "base/memory/ref_counted.h" -#include "base/memory/scoped_vector.h" -#include "base/message_loop/message_loop.h" -#include "base/run_loop.h" -#include "base/stl_util.h" -#include "net/base/test_data_directory.h" -#include "net/extras/sqlite/sqlite_channel_id_store.h" -#include "net/ssl/ssl_client_cert_type.h" -#include "net/test/cert_test_util.h" -#include "sql/statement.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace net { - -const base::FilePath::CharType kTestChannelIDFilename[] = - FILE_PATH_LITERAL("ChannelID"); - -class SQLiteChannelIDStoreTest : public testing::Test { - public: - void Load(ScopedVector<DefaultChannelIDStore::ChannelID>* channel_ids) { - base::RunLoop run_loop; - store_->Load(base::Bind(&SQLiteChannelIDStoreTest::OnLoaded, - base::Unretained(this), - &run_loop)); - run_loop.Run(); - channel_ids->swap(channel_ids_); - channel_ids_.clear(); - } - - void OnLoaded( - base::RunLoop* run_loop, - scoped_ptr<ScopedVector<DefaultChannelIDStore::ChannelID> > channel_ids) { - channel_ids_.swap(*channel_ids); - run_loop->Quit(); - } - - protected: - static void ReadTestKeyAndCert(std::string* key, std::string* cert) { - base::FilePath key_path = - GetTestCertsDirectory().AppendASCII("unittest.originbound.key.der"); - base::FilePath cert_path = - GetTestCertsDirectory().AppendASCII("unittest.originbound.der"); - ASSERT_TRUE(base::ReadFileToString(key_path, key)); - ASSERT_TRUE(base::ReadFileToString(cert_path, cert)); - } - - static base::Time GetTestCertExpirationTime() { - // Cert expiration time from 'dumpasn1 unittest.originbound.der': - // GeneralizedTime 19/11/2111 02:23:45 GMT - // base::Time::FromUTCExploded can't generate values past 2038 on 32-bit - // linux, so we use the raw value here. - return base::Time::FromInternalValue(GG_INT64_C(16121816625000000)); - } - - static base::Time GetTestCertCreationTime() { - // UTCTime 13/12/2011 02:23:45 GMT - base::Time::Exploded exploded_time; - exploded_time.year = 2011; - exploded_time.month = 12; - exploded_time.day_of_week = 0; // Unused. - exploded_time.day_of_month = 13; - exploded_time.hour = 2; - exploded_time.minute = 23; - exploded_time.second = 45; - exploded_time.millisecond = 0; - return base::Time::FromUTCExploded(exploded_time); - } - - virtual void SetUp() { - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - store_ = new SQLiteChannelIDStore( - temp_dir_.path().Append(kTestChannelIDFilename), - base::MessageLoopProxy::current()); - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids; - Load(&channel_ids); - ASSERT_EQ(0u, channel_ids.size()); - // Make sure the store gets written at least once. - store_->AddChannelID( - DefaultChannelIDStore::ChannelID("google.com", - base::Time::FromInternalValue(1), - base::Time::FromInternalValue(2), - "a", - "b")); - } - - base::ScopedTempDir temp_dir_; - scoped_refptr<SQLiteChannelIDStore> store_; - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids_; -}; - -// Test if data is stored as expected in the SQLite database. -TEST_F(SQLiteChannelIDStoreTest, TestPersistence) { - store_->AddChannelID( - DefaultChannelIDStore::ChannelID("foo.com", - base::Time::FromInternalValue(3), - base::Time::FromInternalValue(4), - "c", - "d")); - - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids; - // Replace the store effectively destroying the current one and forcing it - // to write its data to disk. Then we can see if after loading it again it - // is still there. - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); - store_ = - new SQLiteChannelIDStore(temp_dir_.path().Append(kTestChannelIDFilename), - base::MessageLoopProxy::current()); - - // Reload and test for persistence - Load(&channel_ids); - ASSERT_EQ(2U, channel_ids.size()); - DefaultChannelIDStore::ChannelID* goog_channel_id; - DefaultChannelIDStore::ChannelID* foo_channel_id; - if (channel_ids[0]->server_identifier() == "google.com") { - goog_channel_id = channel_ids[0]; - foo_channel_id = channel_ids[1]; - } else { - goog_channel_id = channel_ids[1]; - foo_channel_id = channel_ids[0]; - } - ASSERT_EQ("google.com", goog_channel_id->server_identifier()); - ASSERT_STREQ("a", goog_channel_id->private_key().c_str()); - ASSERT_STREQ("b", goog_channel_id->cert().c_str()); - ASSERT_EQ(1, goog_channel_id->creation_time().ToInternalValue()); - ASSERT_EQ(2, goog_channel_id->expiration_time().ToInternalValue()); - ASSERT_EQ("foo.com", foo_channel_id->server_identifier()); - ASSERT_STREQ("c", foo_channel_id->private_key().c_str()); - ASSERT_STREQ("d", foo_channel_id->cert().c_str()); - ASSERT_EQ(3, foo_channel_id->creation_time().ToInternalValue()); - ASSERT_EQ(4, foo_channel_id->expiration_time().ToInternalValue()); - - // Now delete the cert and check persistence again. - store_->DeleteChannelID(*channel_ids[0]); - store_->DeleteChannelID(*channel_ids[1]); - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); - channel_ids.clear(); - store_ = - new SQLiteChannelIDStore(temp_dir_.path().Append(kTestChannelIDFilename), - base::MessageLoopProxy::current()); - - // Reload and check if the cert has been removed. - Load(&channel_ids); - ASSERT_EQ(0U, channel_ids.size()); - // Close the store. - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); -} - -// Test if data is stored as expected in the SQLite database. -TEST_F(SQLiteChannelIDStoreTest, TestDeleteAll) { - store_->AddChannelID( - DefaultChannelIDStore::ChannelID("foo.com", - base::Time::FromInternalValue(3), - base::Time::FromInternalValue(4), - "c", - "d")); - - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids; - // Replace the store effectively destroying the current one and forcing it - // to write its data to disk. Then we can see if after loading it again it - // is still there. - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); - store_ = - new SQLiteChannelIDStore(temp_dir_.path().Append(kTestChannelIDFilename), - base::MessageLoopProxy::current()); - - // Reload and test for persistence - Load(&channel_ids); - ASSERT_EQ(2U, channel_ids.size()); - // DeleteAll except foo.com (shouldn't fail if one is missing either). - std::list<std::string> delete_server_identifiers; - delete_server_identifiers.push_back("google.com"); - delete_server_identifiers.push_back("missing.com"); - store_->DeleteAllInList(delete_server_identifiers); - - // Now check persistence again. - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); - channel_ids.clear(); - store_ = - new SQLiteChannelIDStore(temp_dir_.path().Append(kTestChannelIDFilename), - base::MessageLoopProxy::current()); - - // Reload and check that only foo.com persisted in store. - Load(&channel_ids); - ASSERT_EQ(1U, channel_ids.size()); - ASSERT_EQ("foo.com", channel_ids[0]->server_identifier()); -} - -TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV1) { - // Reset the store. We'll be using a different database for this test. - store_ = NULL; - - base::FilePath v1_db_path(temp_dir_.path().AppendASCII("v1db")); - - std::string key_data; - std::string cert_data; - ReadTestKeyAndCert(&key_data, &cert_data); - - // Create a version 1 database. - { - sql::Connection db; - ASSERT_TRUE(db.Open(v1_db_path)); - ASSERT_TRUE(db.Execute( - "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY," - "value LONGVARCHAR);" - "INSERT INTO \"meta\" VALUES('version','1');" - "INSERT INTO \"meta\" VALUES('last_compatible_version','1');" - "CREATE TABLE origin_bound_certs (" - "origin TEXT NOT NULL UNIQUE PRIMARY KEY," - "private_key BLOB NOT NULL,cert BLOB NOT NULL);")); - - sql::Statement add_smt(db.GetUniqueStatement( - "INSERT INTO origin_bound_certs (origin, private_key, cert) " - "VALUES (?,?,?)")); - add_smt.BindString(0, "google.com"); - add_smt.BindBlob(1, key_data.data(), key_data.size()); - add_smt.BindBlob(2, cert_data.data(), cert_data.size()); - ASSERT_TRUE(add_smt.Run()); - - ASSERT_TRUE(db.Execute( - "INSERT INTO \"origin_bound_certs\" VALUES(" - "'foo.com',X'AA',X'BB');")); - } - - // Load and test the DB contents twice. First time ensures that we can use - // the updated values immediately. Second time ensures that the updated - // values are stored and read correctly on next load. - for (int i = 0; i < 2; ++i) { - SCOPED_TRACE(i); - - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids; - store_ = - new SQLiteChannelIDStore(v1_db_path, base::MessageLoopProxy::current()); - - // Load the database. Because the existing v1 certs are implicitly of type - // RSA, which is unsupported, they're discarded. - Load(&channel_ids); - ASSERT_EQ(0U, channel_ids.size()); - - store_ = NULL; - base::RunLoop().RunUntilIdle(); - - // Verify the database version is updated. - { - sql::Connection db; - ASSERT_TRUE(db.Open(v1_db_path)); - sql::Statement smt(db.GetUniqueStatement( - "SELECT value FROM meta WHERE key = \"version\"")); - ASSERT_TRUE(smt.Step()); - EXPECT_EQ(4, smt.ColumnInt(0)); - EXPECT_FALSE(smt.Step()); - } - } -} - -TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV2) { - // Reset the store. We'll be using a different database for this test. - store_ = NULL; - - base::FilePath v2_db_path(temp_dir_.path().AppendASCII("v2db")); - - std::string key_data; - std::string cert_data; - ReadTestKeyAndCert(&key_data, &cert_data); - - // Create a version 2 database. - { - sql::Connection db; - ASSERT_TRUE(db.Open(v2_db_path)); - ASSERT_TRUE(db.Execute( - "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY," - "value LONGVARCHAR);" - "INSERT INTO \"meta\" VALUES('version','2');" - "INSERT INTO \"meta\" VALUES('last_compatible_version','1');" - "CREATE TABLE origin_bound_certs (" - "origin TEXT NOT NULL UNIQUE PRIMARY KEY," - "private_key BLOB NOT NULL," - "cert BLOB NOT NULL," - "cert_type INTEGER);")); - - sql::Statement add_smt(db.GetUniqueStatement( - "INSERT INTO origin_bound_certs (origin, private_key, cert, cert_type) " - "VALUES (?,?,?,?)")); - add_smt.BindString(0, "google.com"); - add_smt.BindBlob(1, key_data.data(), key_data.size()); - add_smt.BindBlob(2, cert_data.data(), cert_data.size()); - add_smt.BindInt64(3, 64); - ASSERT_TRUE(add_smt.Run()); - - ASSERT_TRUE(db.Execute( - "INSERT INTO \"origin_bound_certs\" VALUES(" - "'foo.com',X'AA',X'BB',64);")); - } - - // Load and test the DB contents twice. First time ensures that we can use - // the updated values immediately. Second time ensures that the updated - // values are saved and read correctly on next load. - for (int i = 0; i < 2; ++i) { - SCOPED_TRACE(i); - - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids; - store_ = - new SQLiteChannelIDStore(v2_db_path, base::MessageLoopProxy::current()); - - // Load the database and ensure the certs can be read. - Load(&channel_ids); - ASSERT_EQ(2U, channel_ids.size()); - - ASSERT_EQ("google.com", channel_ids[0]->server_identifier()); - ASSERT_EQ(GetTestCertExpirationTime(), channel_ids[0]->expiration_time()); - ASSERT_EQ(key_data, channel_ids[0]->private_key()); - ASSERT_EQ(cert_data, channel_ids[0]->cert()); - - ASSERT_EQ("foo.com", channel_ids[1]->server_identifier()); - // Undecodable cert, expiration time will be uninitialized. - ASSERT_EQ(base::Time(), channel_ids[1]->expiration_time()); - ASSERT_STREQ("\xaa", channel_ids[1]->private_key().c_str()); - ASSERT_STREQ("\xbb", channel_ids[1]->cert().c_str()); - - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); - - // Verify the database version is updated. - { - sql::Connection db; - ASSERT_TRUE(db.Open(v2_db_path)); - sql::Statement smt(db.GetUniqueStatement( - "SELECT value FROM meta WHERE key = \"version\"")); - ASSERT_TRUE(smt.Step()); - EXPECT_EQ(4, smt.ColumnInt(0)); - EXPECT_FALSE(smt.Step()); - } - } -} - -TEST_F(SQLiteChannelIDStoreTest, TestUpgradeV3) { - // Reset the store. We'll be using a different database for this test. - store_ = NULL; - - base::FilePath v3_db_path(temp_dir_.path().AppendASCII("v3db")); - - std::string key_data; - std::string cert_data; - ReadTestKeyAndCert(&key_data, &cert_data); - - // Create a version 3 database. - { - sql::Connection db; - ASSERT_TRUE(db.Open(v3_db_path)); - ASSERT_TRUE(db.Execute( - "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY," - "value LONGVARCHAR);" - "INSERT INTO \"meta\" VALUES('version','3');" - "INSERT INTO \"meta\" VALUES('last_compatible_version','1');" - "CREATE TABLE origin_bound_certs (" - "origin TEXT NOT NULL UNIQUE PRIMARY KEY," - "private_key BLOB NOT NULL," - "cert BLOB NOT NULL," - "cert_type INTEGER," - "expiration_time INTEGER);")); - - sql::Statement add_smt(db.GetUniqueStatement( - "INSERT INTO origin_bound_certs (origin, private_key, cert, cert_type, " - "expiration_time) VALUES (?,?,?,?,?)")); - add_smt.BindString(0, "google.com"); - add_smt.BindBlob(1, key_data.data(), key_data.size()); - add_smt.BindBlob(2, cert_data.data(), cert_data.size()); - add_smt.BindInt64(3, 64); - add_smt.BindInt64(4, 1000); - ASSERT_TRUE(add_smt.Run()); - - ASSERT_TRUE(db.Execute( - "INSERT INTO \"origin_bound_certs\" VALUES(" - "'foo.com',X'AA',X'BB',64,2000);")); - } - - // Load and test the DB contents twice. First time ensures that we can use - // the updated values immediately. Second time ensures that the updated - // values are saved and read correctly on next load. - for (int i = 0; i < 2; ++i) { - SCOPED_TRACE(i); - - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids; - store_ = - new SQLiteChannelIDStore(v3_db_path, base::MessageLoopProxy::current()); - - // Load the database and ensure the certs can be read. - Load(&channel_ids); - ASSERT_EQ(2U, channel_ids.size()); - - ASSERT_EQ("google.com", channel_ids[0]->server_identifier()); - ASSERT_EQ(1000, channel_ids[0]->expiration_time().ToInternalValue()); - ASSERT_EQ(GetTestCertCreationTime(), channel_ids[0]->creation_time()); - ASSERT_EQ(key_data, channel_ids[0]->private_key()); - ASSERT_EQ(cert_data, channel_ids[0]->cert()); - - ASSERT_EQ("foo.com", channel_ids[1]->server_identifier()); - ASSERT_EQ(2000, channel_ids[1]->expiration_time().ToInternalValue()); - // Undecodable cert, creation time will be uninitialized. - ASSERT_EQ(base::Time(), channel_ids[1]->creation_time()); - ASSERT_STREQ("\xaa", channel_ids[1]->private_key().c_str()); - ASSERT_STREQ("\xbb", channel_ids[1]->cert().c_str()); - - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); - - // Verify the database version is updated. - { - sql::Connection db; - ASSERT_TRUE(db.Open(v3_db_path)); - sql::Statement smt(db.GetUniqueStatement( - "SELECT value FROM meta WHERE key = \"version\"")); - ASSERT_TRUE(smt.Step()); - EXPECT_EQ(4, smt.ColumnInt(0)); - EXPECT_FALSE(smt.Step()); - } - } -} - -TEST_F(SQLiteChannelIDStoreTest, TestRSADiscarded) { - // Reset the store. We'll be using a different database for this test. - store_ = NULL; - - base::FilePath v4_db_path(temp_dir_.path().AppendASCII("v4dbrsa")); - - std::string key_data; - std::string cert_data; - ReadTestKeyAndCert(&key_data, &cert_data); - - // Create a version 4 database with a mix of RSA and ECDSA certs. - { - sql::Connection db; - ASSERT_TRUE(db.Open(v4_db_path)); - ASSERT_TRUE(db.Execute( - "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY," - "value LONGVARCHAR);" - "INSERT INTO \"meta\" VALUES('version','4');" - "INSERT INTO \"meta\" VALUES('last_compatible_version','1');" - "CREATE TABLE origin_bound_certs (" - "origin TEXT NOT NULL UNIQUE PRIMARY KEY," - "private_key BLOB NOT NULL," - "cert BLOB NOT NULL," - "cert_type INTEGER," - "expiration_time INTEGER," - "creation_time INTEGER);")); - - sql::Statement add_smt(db.GetUniqueStatement( - "INSERT INTO origin_bound_certs " - "(origin, private_key, cert, cert_type, expiration_time, creation_time)" - " VALUES (?,?,?,?,?,?)")); - add_smt.BindString(0, "google.com"); - add_smt.BindBlob(1, key_data.data(), key_data.size()); - add_smt.BindBlob(2, cert_data.data(), cert_data.size()); - add_smt.BindInt64(3, 64); - add_smt.BindInt64(4, GetTestCertExpirationTime().ToInternalValue()); - add_smt.BindInt64(5, base::Time::Now().ToInternalValue()); - ASSERT_TRUE(add_smt.Run()); - - add_smt.Clear(); - add_smt.Assign(db.GetUniqueStatement( - "INSERT INTO origin_bound_certs " - "(origin, private_key, cert, cert_type, expiration_time, creation_time)" - " VALUES (?,?,?,?,?,?)")); - add_smt.BindString(0, "foo.com"); - add_smt.BindBlob(1, key_data.data(), key_data.size()); - add_smt.BindBlob(2, cert_data.data(), cert_data.size()); - add_smt.BindInt64(3, 1); - add_smt.BindInt64(4, GetTestCertExpirationTime().ToInternalValue()); - add_smt.BindInt64(5, base::Time::Now().ToInternalValue()); - ASSERT_TRUE(add_smt.Run()); - } - - ScopedVector<DefaultChannelIDStore::ChannelID> channel_ids; - store_ = - new SQLiteChannelIDStore(v4_db_path, base::MessageLoopProxy::current()); - - // Load the database and ensure the certs can be read. - Load(&channel_ids); - // Only the ECDSA cert (for google.com) is read, the RSA one is discarded. - ASSERT_EQ(1U, channel_ids.size()); - - ASSERT_EQ("google.com", channel_ids[0]->server_identifier()); - ASSERT_EQ(GetTestCertExpirationTime(), channel_ids[0]->expiration_time()); - ASSERT_EQ(key_data, channel_ids[0]->private_key()); - ASSERT_EQ(cert_data, channel_ids[0]->cert()); - - store_ = NULL; - // Make sure we wait until the destructor has run. - base::RunLoop().RunUntilIdle(); -} - -} // namespace net diff --git a/net/net.gyp b/net/net.gyp index d865511..c7c2c94 100644 --- a/net/net.gyp +++ b/net/net.gyp @@ -549,7 +549,6 @@ 'http_server', 'net', 'net_derived_sources', - 'net_extras', 'net_test_support', 'quic_tools', ], @@ -1051,19 +1050,6 @@ 'includes': [ '../build/grit_target.gypi' ], }, { - 'target_name': 'net_extras', - 'type': 'static_library', - 'variables': { 'enable_wexit_time_destructors': 1, }, - 'dependencies': [ - '../base/base.gyp:base', - '../sql/sql.gyp:sql', - 'net', - ], - 'sources': [ - '<@(net_extras_sources)', - ], - }, - { 'target_name': 'http_server', 'type': 'static_library', 'variables': { 'enable_wexit_time_destructors': 1, }, diff --git a/net/net.gypi b/net/net.gypi index 3bd3efc..b85f57b 100644 --- a/net/net.gypi +++ b/net/net.gypi @@ -1244,10 +1244,6 @@ 'websockets/websocket_throttle.cc', 'websockets/websocket_throttle.h', ], - 'net_extras_sources': [ - 'extras/sqlite/sqlite_channel_id_store.cc', - 'extras/sqlite/sqlite_channel_id_store.h', - ], 'net_test_sources': [ 'android/keystore_unittest.cc', 'android/network_change_notifier_android_unittest.cc', @@ -1347,7 +1343,6 @@ 'dns/record_rdata_unittest.cc', 'dns/serial_worker_unittest.cc', 'dns/single_request_host_resolver_unittest.cc', - 'extras/sqlite/sqlite_channel_id_store_unittest.cc', 'filter/filter_unittest.cc', 'filter/gzip_filter_unittest.cc', 'filter/mock_filter_context.cc', |