summaryrefslogtreecommitdiff
path: root/chromium/net/extras
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/extras')
-rw-r--r--chromium/net/extras/sqlite/sqlite_persistent_cookie_store.cc28
-rw-r--r--chromium/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc19
-rw-r--r--chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc2
-rw-r--r--chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc75
4 files changed, 83 insertions, 41 deletions
diff --git a/chromium/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/chromium/net/extras/sqlite/sqlite_persistent_cookie_store.cc
index 26ed5f2ad0d..474db6ecaa0 100644
--- a/chromium/net/extras/sqlite/sqlite_persistent_cookie_store.cc
+++ b/chromium/net/extras/sqlite/sqlite_persistent_cookie_store.cc
@@ -77,20 +77,10 @@ enum CookieCommitProblem {
COOKIE_COMMIT_PROBLEM_ADD = 1,
COOKIE_COMMIT_PROBLEM_UPDATE_ACCESS = 2,
COOKIE_COMMIT_PROBLEM_DELETE = 3,
+ COOKIE_COMMIT_PROBLEM_TRANSACTION_COMMIT = 4,
COOKIE_COMMIT_PROBLEM_LAST_ENTRY
};
-// Used to report a histogram on status of cookie commit to disk.
-//
-// Please do not reorder or remove entries. New entries must be added to the
-// end of the list, just before BACKING_STORE_RESULTS_LAST_ENTRY.
-enum BackingStoreResults {
- BACKING_STORE_RESULTS_SUCCESS = 0,
- BACKING_STORE_RESULTS_FAILURE = 1,
- BACKING_STORE_RESULTS_MIXED = 2,
- BACKING_STORE_RESULTS_LAST_ENTRY
-};
-
void RecordCookieLoadProblem(CookieLoadProblem event) {
UMA_HISTOGRAM_ENUMERATION("Cookie.LoadProblem", event,
COOKIE_LOAD_PROBLEM_LAST_ENTRY);
@@ -1221,7 +1211,6 @@ void SQLitePersistentCookieStore::Backend::DoCommit() {
if (!transaction.Begin())
return;
- bool trouble = false;
for (auto& kv : ops) {
for (std::unique_ptr<PendingOperation>& po_entry : kv.second) {
// Free the cookies as we commit them to the database.
@@ -1237,7 +1226,6 @@ void SQLitePersistentCookieStore::Backend::DoCommit() {
if (!crypto_->EncryptString(po->cc().Value(), &encrypted_value)) {
DLOG(WARNING) << "Could not encrypt a cookie, skipping add.";
RecordCookieCommitProblem(COOKIE_COMMIT_PROBLEM_ENCRYPT_FAILED);
- trouble = true;
continue;
}
add_smt.BindCString(3, ""); // value
@@ -1263,7 +1251,6 @@ void SQLitePersistentCookieStore::Backend::DoCommit() {
if (!add_smt.Run()) {
DLOG(WARNING) << "Could not add a cookie to the DB.";
RecordCookieCommitProblem(COOKIE_COMMIT_PROBLEM_ADD);
- trouble = true;
}
break;
@@ -1278,7 +1265,6 @@ void SQLitePersistentCookieStore::Backend::DoCommit() {
DLOG(WARNING)
<< "Could not update cookie last access time in the DB.";
RecordCookieCommitProblem(COOKIE_COMMIT_PROBLEM_UPDATE_ACCESS);
- trouble = true;
}
break;
@@ -1290,7 +1276,6 @@ void SQLitePersistentCookieStore::Backend::DoCommit() {
if (!del_smt.Run()) {
DLOG(WARNING) << "Could not delete a cookie from the DB.";
RecordCookieCommitProblem(COOKIE_COMMIT_PROBLEM_DELETE);
- trouble = true;
}
break;
@@ -1300,13 +1285,10 @@ void SQLitePersistentCookieStore::Backend::DoCommit() {
}
}
}
- bool succeeded = transaction.Commit();
- UMA_HISTOGRAM_ENUMERATION("Cookie.BackingStoreUpdateResults",
- succeeded
- ? (trouble ? BACKING_STORE_RESULTS_MIXED
- : BACKING_STORE_RESULTS_SUCCESS)
- : BACKING_STORE_RESULTS_FAILURE,
- BACKING_STORE_RESULTS_LAST_ENTRY);
+ bool commit_ok = transaction.Commit();
+ if (!commit_ok) {
+ RecordCookieCommitProblem(COOKIE_COMMIT_PROBLEM_TRANSACTION_COMMIT);
+ }
}
size_t SQLitePersistentCookieStore::Backend::GetQueueLengthForTesting() {
diff --git a/chromium/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc b/chromium/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
index 7555e39ea88..79fa984d105 100644
--- a/chromium/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
+++ b/chromium/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
@@ -31,6 +31,7 @@
#include "net/base/test_completion_callback.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_constants.h"
+#include "net/cookies/cookie_inclusion_status.h"
#include "net/cookies/cookie_store_test_callbacks.h"
#include "net/extras/sqlite/cookie_crypto_delegate.h"
#include "net/log/net_log_capture_mode.h"
@@ -1273,16 +1274,14 @@ TEST_F(SQLitePersistentCookieStoreTest, KeyInconsistency) {
cookie_scheme_callback1.MakeCallback());
cookie_scheme_callback1.WaitUntilDone();
EXPECT_TRUE(cookie_scheme_callback1.result());
- ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus>
- set_cookie_callback;
+ ResultSavingCookieCallback<CookieInclusionStatus> set_cookie_callback;
GURL ftp_url("ftp://subdomain.ftperiffic.com/page/");
auto cookie =
CanonicalCookie::Create(ftp_url, "A=B; max-age=3600", base::Time::Now(),
base::nullopt /* server_time */);
cookie_monster->SetCanonicalCookieAsync(
std::move(cookie), ftp_url, CookieOptions::MakeAllInclusive(),
- base::BindOnce(&ResultSavingCookieCallback<
- CanonicalCookie::CookieInclusionStatus>::Run,
+ base::BindOnce(&ResultSavingCookieCallback<CookieInclusionStatus>::Run,
base::Unretained(&set_cookie_callback)));
set_cookie_callback.WaitUntilDone();
EXPECT_TRUE(set_cookie_callback.result().IsInclude());
@@ -1290,16 +1289,14 @@ TEST_F(SQLitePersistentCookieStoreTest, KeyInconsistency) {
// Also insert a whole bunch of cookies to slow down the background loading of
// all the cookies.
for (int i = 0; i < 50; ++i) {
- ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus>
- set_cookie_callback2;
+ ResultSavingCookieCallback<CookieInclusionStatus> set_cookie_callback2;
GURL url(base::StringPrintf("http://example%d.com/", i));
auto canonical_cookie =
CanonicalCookie::Create(url, "A=B; max-age=3600", base::Time::Now(),
base::nullopt /* server_time */);
cookie_monster->SetCanonicalCookieAsync(
std::move(canonical_cookie), url, CookieOptions::MakeAllInclusive(),
- base::BindOnce(&ResultSavingCookieCallback<
- CanonicalCookie::CookieInclusionStatus>::Run,
+ base::BindOnce(&ResultSavingCookieCallback<CookieInclusionStatus>::Run,
base::Unretained(&set_cookie_callback2)));
set_cookie_callback2.WaitUntilDone();
EXPECT_TRUE(set_cookie_callback2.result().IsInclude());
@@ -1347,16 +1344,14 @@ TEST_F(SQLitePersistentCookieStoreTest, OpsIfInitFailed) {
std::unique_ptr<CookieMonster> cookie_monster =
std::make_unique<CookieMonster>(store_.get(), nullptr);
- ResultSavingCookieCallback<CanonicalCookie::CookieInclusionStatus>
- set_cookie_callback;
+ ResultSavingCookieCallback<CookieInclusionStatus> set_cookie_callback;
GURL url("http://www.example.com/");
auto cookie =
CanonicalCookie::Create(url, "A=B; max-age=3600", base::Time::Now(),
base::nullopt /* server_time */);
cookie_monster->SetCanonicalCookieAsync(
std::move(cookie), url, CookieOptions::MakeAllInclusive(),
- base::BindOnce(&ResultSavingCookieCallback<
- CanonicalCookie::CookieInclusionStatus>::Run,
+ base::BindOnce(&ResultSavingCookieCallback<CookieInclusionStatus>::Run,
base::Unretained(&set_cookie_callback)));
set_cookie_callback.WaitUntilDone();
EXPECT_TRUE(set_cookie_callback.result().IsInclude());
diff --git a/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc b/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc
index 55d28e49413..c4fbb1e586d 100644
--- a/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc
+++ b/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc
@@ -582,8 +582,6 @@ bool SQLitePersistentReportingAndNelStore::Backend::CreateDatabaseSchema() {
base::Optional<int>
SQLitePersistentReportingAndNelStore::Backend::DoMigrateDatabaseSchema() {
int cur_version = meta_table()->GetVersionNumber();
- if (cur_version != 1)
- return base::nullopt;
// Future database upgrade statements go here.
diff --git a/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc b/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
index 1faaac6612e..aed51b9a5d7 100644
--- a/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
+++ b/chromium/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store_unittest.cc
@@ -16,12 +16,15 @@
#include "base/task/post_task.h"
#include "base/task/thread_pool.h"
#include "base/test/bind_test_util.h"
+#include "base/test/metrics/histogram_tester.h"
#include "base/test/simple_test_clock.h"
#include "base/threading/thread_restrictions.h"
#include "base/threading/thread_task_runner_handle.h"
#include "net/network_error_logging/network_error_logging_service.h"
#include "net/reporting/reporting_test_util.h"
#include "net/test/test_with_task_environment.h"
+#include "sql/database.h"
+#include "sql/meta_table.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
@@ -199,8 +202,7 @@ class SQLitePersistentReportingAndNelStoreTest
info.priority = priority;
info.weight = weight;
ReportingEndpoint endpoint(
- ReportingEndpointGroupKey(NetworkIsolationKey::Todo(), origin,
- group_name),
+ ReportingEndpointGroupKey(NetworkIsolationKey(), origin, group_name),
std::move(info));
return endpoint;
}
@@ -212,8 +214,7 @@ class SQLitePersistentReportingAndNelStoreTest
OriginSubdomains include_subdomains = OriginSubdomains::DEFAULT,
base::Time expires = kExpires) {
return CachedReportingEndpointGroup(
- ReportingEndpointGroupKey(NetworkIsolationKey::Todo(), origin,
- group_name),
+ ReportingEndpointGroupKey(NetworkIsolationKey(), origin, group_name),
include_subdomains, expires, last_used);
}
@@ -237,6 +238,72 @@ TEST_F(SQLitePersistentReportingAndNelStoreTest, CreateDBAndTables) {
EXPECT_NE(std::string::npos, contents.find("reporting_endpoint_groups"));
}
+TEST_F(SQLitePersistentReportingAndNelStoreTest, TestInvalidMetaTableRecovery) {
+ CreateStore();
+ InitializeStore();
+ base::Time now = base::Time::Now();
+ NetworkErrorLoggingService::NelPolicy policy1 =
+ MakeNelPolicy(url::Origin::Create(GURL("https://www.foo.test")), now);
+ store_->AddNelPolicy(policy1);
+
+ // Close and reopen the database.
+ DestroyStore();
+ CreateStore();
+
+ // Load the stored policy.
+ std::vector<NetworkErrorLoggingService::NelPolicy> policies;
+ LoadNelPolicies(&policies);
+ ASSERT_EQ(1u, policies.size());
+ EXPECT_EQ(policy1.origin, policies[0].origin);
+ EXPECT_EQ(policy1.received_ip_address, policies[0].received_ip_address);
+ EXPECT_EQ(policy1.report_to, policies[0].report_to);
+ EXPECT_TRUE(WithinOneMicrosecond(policy1.expires, policies[0].expires));
+ EXPECT_EQ(policy1.include_subdomains, policies[0].include_subdomains);
+ EXPECT_EQ(policy1.success_fraction, policies[0].success_fraction);
+ EXPECT_EQ(policy1.failure_fraction, policies[0].failure_fraction);
+ EXPECT_TRUE(WithinOneMicrosecond(policy1.last_used, policies[0].last_used));
+ DestroyStore();
+ policies.clear();
+
+ // Now corrupt the meta table.
+ {
+ sql::Database db;
+ ASSERT_TRUE(
+ db.Open(temp_dir_.GetPath().Append(kReportingAndNELStoreFilename)));
+ sql::MetaTable meta_table;
+ meta_table.Init(&db, 1, 1);
+ ASSERT_TRUE(db.Execute("DELETE FROM meta"));
+ db.Close();
+ }
+
+ base::HistogramTester hist_tester;
+
+ // Upon loading, the database should be reset to a good, blank state.
+ CreateStore();
+ LoadNelPolicies(&policies);
+ ASSERT_EQ(0U, policies.size());
+
+ hist_tester.ExpectUniqueSample("ReportingAndNEL.CorruptMetaTable", 1, 1);
+
+ // Verify that, after, recovery, the database persists properly.
+ NetworkErrorLoggingService::NelPolicy policy2 =
+ MakeNelPolicy(url::Origin::Create(GURL("https://www.bar.test")), now);
+ store_->AddNelPolicy(policy2);
+ DestroyStore();
+
+ CreateStore();
+ LoadNelPolicies(&policies);
+ ASSERT_EQ(1u, policies.size());
+ EXPECT_EQ(policy2.origin, policies[0].origin);
+ EXPECT_EQ(policy2.received_ip_address, policies[0].received_ip_address);
+ EXPECT_EQ(policy2.report_to, policies[0].report_to);
+ EXPECT_TRUE(WithinOneMicrosecond(policy2.expires, policies[0].expires));
+ EXPECT_EQ(policy2.include_subdomains, policies[0].include_subdomains);
+ EXPECT_EQ(policy2.success_fraction, policies[0].success_fraction);
+ EXPECT_EQ(policy2.failure_fraction, policies[0].failure_fraction);
+ EXPECT_TRUE(WithinOneMicrosecond(policy2.last_used, policies[0].last_used));
+}
+
TEST_F(SQLitePersistentReportingAndNelStoreTest, PersistNelPolicy) {
CreateStore();
InitializeStore();