Commit e18617cc authored by sauski's avatar sauski Committed by Commit Bot

Access Context Auditing: use url::Origin for origins rather than GURL

Access Context Auditing relies on the concept of an origin in numerous
places. These were previously represented as GURLs, this change moves
all uses to use url::Origin instead.

Bug: 1101675
Change-Id: Ibfef15789c598c3ce492eac359f3d807908942bc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2279887
Commit-Queue: Theodore Olsauskas-Warren <sauski@google.com>
Reviewed-by: default avatarMartin Šrámek <msramek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785918}
parent 360dafd7
...@@ -34,8 +34,6 @@ namespace { ...@@ -34,8 +34,6 @@ namespace {
// Use host names that are explicitly included in test certificates. // Use host names that are explicitly included in test certificates.
constexpr char kTopLevelHost[] = "a.test"; constexpr char kTopLevelHost[] = "a.test";
constexpr char kEmbeddedHost[] = "b.test"; constexpr char kEmbeddedHost[] = "b.test";
constexpr char kTopLevelHostAsOrigin[] = "https://a.test";
constexpr char kEmbeddedHostAsOrigin[] = "https://b.test";
std::string GetPathWithHostAndPortReplaced(const std::string& original_path, std::string GetPathWithHostAndPortReplaced(const std::string& original_path,
net::HostPortPair host_port_pair) { net::HostPortPair host_port_pair) {
...@@ -52,7 +50,7 @@ std::string GetPathWithHostAndPortReplaced(const std::string& original_path, ...@@ -52,7 +50,7 @@ std::string GetPathWithHostAndPortReplaced(const std::string& original_path,
void CheckContainsCookieAndRecord( void CheckContainsCookieAndRecord(
const std::vector<net::CanonicalCookie>& cookies, const std::vector<net::CanonicalCookie>& cookies,
const std::vector<AccessContextAuditDatabase::AccessRecord>& record_list, const std::vector<AccessContextAuditDatabase::AccessRecord>& record_list,
const GURL& top_frame_origin, const url::Origin& top_frame_origin,
const std::string& name, const std::string& name,
const std::string& domain, const std::string& domain,
const std::string& path, const std::string& path,
...@@ -127,8 +125,12 @@ class AccessContextAuditBrowserTest : public InProcessBrowserTest { ...@@ -127,8 +125,12 @@ class AccessContextAuditBrowserTest : public InProcessBrowserTest {
return cookies_out; return cookies_out;
} }
GURL top_level_origin() { return top_level_.GetURL(kTopLevelHost, "/"); } url::Origin top_level_origin() {
GURL embedded_origin() { return embedded_.GetURL(kEmbeddedHost, "/"); } return url::Origin::Create(top_level_.GetURL(kTopLevelHost, "/"));
}
url::Origin embedded_origin() {
return url::Origin::Create(embedded_.GetURL(kEmbeddedHost, "/"));
}
protected: protected:
base::test::ScopedFeatureList feature_list_; base::test::ScopedFeatureList feature_list_;
...@@ -180,13 +182,13 @@ IN_PROC_BROWSER_TEST_F(AccessContextAuditBrowserTest, PRE_RemoveRecords) { ...@@ -180,13 +182,13 @@ IN_PROC_BROWSER_TEST_F(AccessContextAuditBrowserTest, PRE_RemoveRecords) {
auto cookies = GetAllCookies(); auto cookies = GetAllCookies();
EXPECT_EQ(records.size(), 3u); EXPECT_EQ(records.size(), 3u);
EXPECT_EQ(cookies.size(), 2u); EXPECT_EQ(cookies.size(), 2u);
CheckContainsCookieAndRecord(cookies, records, GURL(kTopLevelHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, top_level_origin(), "embedder",
"embedder", kTopLevelHost, "/", kTopLevelHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
CheckContainsCookieAndRecord(cookies, records, GURL(kTopLevelHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, top_level_origin(),
"persistent", kEmbeddedHost, "/", "persistent", kEmbeddedHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
CheckContainsCookieAndRecord(cookies, records, GURL(kEmbeddedHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, embedded_origin(),
"persistent", kEmbeddedHost, "/", "persistent", kEmbeddedHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
} }
...@@ -287,19 +289,19 @@ IN_PROC_BROWSER_TEST_F(AccessContextAuditSessionRestoreBrowserTest, ...@@ -287,19 +289,19 @@ IN_PROC_BROWSER_TEST_F(AccessContextAuditSessionRestoreBrowserTest,
auto cookies = GetAllCookies(); auto cookies = GetAllCookies();
EXPECT_EQ(records.size(), 5u); EXPECT_EQ(records.size(), 5u);
EXPECT_EQ(cookies.size(), 3u); EXPECT_EQ(cookies.size(), 3u);
CheckContainsCookieAndRecord(cookies, records, GURL(kTopLevelHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, top_level_origin(), "embedder",
"embedder", kTopLevelHost, "/", kTopLevelHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
CheckContainsCookieAndRecord(cookies, records, GURL(kTopLevelHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, top_level_origin(),
"session_only", kEmbeddedHost, "/", "session_only", kEmbeddedHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
CheckContainsCookieAndRecord(cookies, records, GURL(kTopLevelHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, top_level_origin(),
"persistent", kEmbeddedHost, "/", "persistent", kEmbeddedHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
CheckContainsCookieAndRecord(cookies, records, GURL(kEmbeddedHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, embedded_origin(),
"persistent", kEmbeddedHost, "/", "persistent", kEmbeddedHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
CheckContainsCookieAndRecord(cookies, records, GURL(kEmbeddedHostAsOrigin), CheckContainsCookieAndRecord(cookies, records, embedded_origin(),
"session_only", kEmbeddedHost, "/", "session_only", kEmbeddedHost, "/",
/*compare_host_only*/ true); /*compare_host_only*/ true);
} }
...@@ -75,7 +75,7 @@ bool DeleteNonPersistentCookies(sql::Database* db) { ...@@ -75,7 +75,7 @@ bool DeleteNonPersistentCookies(sql::Database* db) {
} // namespace } // namespace
AccessContextAuditDatabase::AccessRecord::AccessRecord( AccessContextAuditDatabase::AccessRecord::AccessRecord(
const GURL& top_frame_origin, const url::Origin& top_frame_origin,
const std::string& name, const std::string& name,
const std::string& domain, const std::string& domain,
const std::string& path, const std::string& path,
...@@ -90,9 +90,9 @@ AccessContextAuditDatabase::AccessRecord::AccessRecord( ...@@ -90,9 +90,9 @@ AccessContextAuditDatabase::AccessRecord::AccessRecord(
is_persistent(is_persistent) {} is_persistent(is_persistent) {}
AccessContextAuditDatabase::AccessRecord::AccessRecord( AccessContextAuditDatabase::AccessRecord::AccessRecord(
const GURL& top_frame_origin, const url::Origin& top_frame_origin,
const StorageAPIType& type, const StorageAPIType& type,
const GURL& origin, const url::Origin& origin,
const base::Time& last_access_time) const base::Time& last_access_time)
: top_frame_origin(top_frame_origin), : top_frame_origin(top_frame_origin),
type(type), type(type),
...@@ -228,7 +228,7 @@ void AccessContextAuditDatabase::AddRecords( ...@@ -228,7 +228,7 @@ void AccessContextAuditDatabase::AddRecords(
for (const auto& record : records) { for (const auto& record : records) {
if (record.type == StorageAPIType::kCookie) { if (record.type == StorageAPIType::kCookie) {
insert_cookie.BindString(0, record.top_frame_origin.GetOrigin().spec()); insert_cookie.BindString(0, record.top_frame_origin.Serialize());
insert_cookie.BindString(1, record.name); insert_cookie.BindString(1, record.name);
insert_cookie.BindString(2, record.domain); insert_cookie.BindString(2, record.domain);
insert_cookie.BindString(3, record.path); insert_cookie.BindString(3, record.path);
...@@ -242,10 +242,9 @@ void AccessContextAuditDatabase::AddRecords( ...@@ -242,10 +242,9 @@ void AccessContextAuditDatabase::AddRecords(
insert_cookie.Reset(true); insert_cookie.Reset(true);
} else { } else {
insert_storage_api.BindString(0, insert_storage_api.BindString(0, record.top_frame_origin.Serialize());
record.top_frame_origin.GetOrigin().spec());
insert_storage_api.BindInt(1, static_cast<int>(record.type)); insert_storage_api.BindInt(1, static_cast<int>(record.type));
insert_storage_api.BindString(2, record.origin.GetOrigin().spec()); insert_storage_api.BindString(2, record.origin.Serialize());
insert_storage_api.BindInt64( insert_storage_api.BindInt64(
3, 3,
record.last_access_time.ToDeltaSinceWindowsEpoch().InMicroseconds()); record.last_access_time.ToDeltaSinceWindowsEpoch().InMicroseconds());
...@@ -271,7 +270,7 @@ void AccessContextAuditDatabase::RemoveRecord(const AccessRecord& record) { ...@@ -271,7 +270,7 @@ void AccessContextAuditDatabase::RemoveRecord(const AccessRecord& record) {
" WHERE top_frame_origin = ? AND name = ? AND domain = ? AND path = ?"); " WHERE top_frame_origin = ? AND name = ? AND domain = ? AND path = ?");
remove_statement.Assign( remove_statement.Assign(
db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str()));
remove_statement.BindString(0, record.top_frame_origin.GetOrigin().spec()); remove_statement.BindString(0, record.top_frame_origin.Serialize());
remove_statement.BindString(1, record.name); remove_statement.BindString(1, record.name);
remove_statement.BindString(2, record.domain); remove_statement.BindString(2, record.domain);
remove_statement.BindString(3, record.path); remove_statement.BindString(3, record.path);
...@@ -280,9 +279,9 @@ void AccessContextAuditDatabase::RemoveRecord(const AccessRecord& record) { ...@@ -280,9 +279,9 @@ void AccessContextAuditDatabase::RemoveRecord(const AccessRecord& record) {
remove.append(" WHERE top_frame_origin = ? AND type = ? AND origin = ?"); remove.append(" WHERE top_frame_origin = ? AND type = ? AND origin = ?");
remove_statement.Assign( remove_statement.Assign(
db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str()));
remove_statement.BindString(0, record.top_frame_origin.GetOrigin().spec()); remove_statement.BindString(0, record.top_frame_origin.Serialize());
remove_statement.BindInt(1, static_cast<int>(record.type)); remove_statement.BindInt(1, static_cast<int>(record.type));
remove_statement.BindString(2, record.origin.GetOrigin().spec()); remove_statement.BindString(2, record.origin.Serialize());
} }
remove_statement.Run(); remove_statement.Run();
} }
...@@ -311,9 +310,10 @@ void AccessContextAuditDatabase::RemoveSessionOnlyRecords( ...@@ -311,9 +310,10 @@ void AccessContextAuditDatabase::RemoveSessionOnlyRecords(
sql::Statement select_storage_origins( sql::Statement select_storage_origins(
db_.GetCachedStatement(SQL_FROM_HERE, select.c_str())); db_.GetCachedStatement(SQL_FROM_HERE, select.c_str()));
std::vector<GURL> storage_origins; std::vector<url::Origin> storage_origins;
while (select_storage_origins.Step()) { while (select_storage_origins.Step()) {
storage_origins.emplace_back(GURL(select_storage_origins.ColumnString(0))); storage_origins.emplace_back(
url::Origin::Create(GURL(select_storage_origins.ColumnString(0))));
} }
// Remove records for all cookie domains and storage origins for which the // Remove records for all cookie domains and storage origins for which the
...@@ -347,10 +347,10 @@ void AccessContextAuditDatabase::RemoveSessionOnlyRecords( ...@@ -347,10 +347,10 @@ void AccessContextAuditDatabase::RemoveSessionOnlyRecords(
for (const auto& origin : storage_origins) { for (const auto& origin : storage_origins) {
// TODO(crbug.com/1099164): Rename IsCookieSessionOnly to better convey // TODO(crbug.com/1099164): Rename IsCookieSessionOnly to better convey
// its actual functionality. // its actual functionality.
if (!cookie_settings->IsCookieSessionOnly(origin)) if (!cookie_settings->IsCookieSessionOnly(origin.GetURL()))
continue; continue;
remove_storage_apis.BindString(0, origin.spec()); remove_storage_apis.BindString(0, origin.Serialize());
if (!remove_storage_apis.Run()) if (!remove_storage_apis.Run())
return; return;
remove_storage_apis.Reset(true); remove_storage_apis.Reset(true);
...@@ -376,7 +376,7 @@ void AccessContextAuditDatabase::RemoveAllRecordsForCookie( ...@@ -376,7 +376,7 @@ void AccessContextAuditDatabase::RemoveAllRecordsForCookie(
} }
void AccessContextAuditDatabase::RemoveAllRecordsForOriginStorage( void AccessContextAuditDatabase::RemoveAllRecordsForOriginStorage(
const GURL& origin, const url::Origin& origin,
StorageAPIType type) { StorageAPIType type) {
std::string remove; std::string remove;
remove.append("DELETE FROM "); remove.append("DELETE FROM ");
...@@ -384,7 +384,7 @@ void AccessContextAuditDatabase::RemoveAllRecordsForOriginStorage( ...@@ -384,7 +384,7 @@ void AccessContextAuditDatabase::RemoveAllRecordsForOriginStorage(
remove.append(" WHERE origin = ? AND type = ?"); remove.append(" WHERE origin = ? AND type = ?");
sql::Statement remove_statement( sql::Statement remove_statement(
db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str()));
remove_statement.BindString(0, origin.GetOrigin().spec()); remove_statement.BindString(0, origin.Serialize());
remove_statement.BindInt(1, static_cast<int>(type)); remove_statement.BindInt(1, static_cast<int>(type));
remove_statement.Run(); remove_statement.Run();
} }
...@@ -403,8 +403,9 @@ AccessContextAuditDatabase::GetAllRecords() { ...@@ -403,8 +403,9 @@ AccessContextAuditDatabase::GetAllRecords() {
while (select_cookies.Step()) { while (select_cookies.Step()) {
records.emplace_back( records.emplace_back(
GURL(select_cookies.ColumnString(0)), select_cookies.ColumnString(1), url::Origin::Create(GURL(select_cookies.ColumnString(0))),
select_cookies.ColumnString(2), select_cookies.ColumnString(3), select_cookies.ColumnString(1), select_cookies.ColumnString(2),
select_cookies.ColumnString(3),
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromMicroseconds(select_cookies.ColumnInt64(4))), base::TimeDelta::FromMicroseconds(select_cookies.ColumnInt64(4))),
select_cookies.ColumnBool(5)); select_cookies.ColumnBool(5));
...@@ -418,9 +419,9 @@ AccessContextAuditDatabase::GetAllRecords() { ...@@ -418,9 +419,9 @@ AccessContextAuditDatabase::GetAllRecords() {
while (select_storage_api.Step()) { while (select_storage_api.Step()) {
records.emplace_back( records.emplace_back(
GURL(select_storage_api.ColumnString(0)), url::Origin::Create(GURL(select_storage_api.ColumnString(0))),
static_cast<StorageAPIType>(select_storage_api.ColumnInt(1)), static_cast<StorageAPIType>(select_storage_api.ColumnInt(1)),
GURL(select_storage_api.ColumnString(2)), url::Origin::Create(GURL(select_storage_api.ColumnString(2))),
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromMicroseconds( base::TimeDelta::FromMicroseconds(
select_storage_api.ColumnInt64(3)))); select_storage_api.ColumnInt64(3))));
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "sql/init_status.h" #include "sql/init_status.h"
#include "sql/meta_table.h" #include "sql/meta_table.h"
#include "sql/test/test_helpers.h" #include "sql/test/test_helpers.h"
#include "url/gurl.h" #include "url/origin.h"
// Provides the backend SQLite storage to support access context auditing. This // Provides the backend SQLite storage to support access context auditing. This
// requires storing information associating individual client-side storage API // requires storing information associating individual client-side storage API
...@@ -38,21 +38,21 @@ class AccessContextAuditDatabase ...@@ -38,21 +38,21 @@ class AccessContextAuditDatabase
// An individual record of a Storage API access, associating the individual // An individual record of a Storage API access, associating the individual
// API usage with a top level frame origin. // API usage with a top level frame origin.
struct AccessRecord { struct AccessRecord {
AccessRecord(const GURL& top_frame_origin, AccessRecord(const url::Origin& top_frame_origin,
const std::string& name, const std::string& name,
const std::string& domain, const std::string& domain,
const std::string& path, const std::string& path,
const base::Time& last_access_time, const base::Time& last_access_time,
bool is_persistent); bool is_persistent);
AccessRecord(const GURL& top_frame_origin, AccessRecord(const url::Origin& top_frame_origin,
const StorageAPIType& type, const StorageAPIType& type,
const GURL& origin, const url::Origin& origin,
const base::Time& last_access_time); const base::Time& last_access_time);
~AccessRecord(); ~AccessRecord();
AccessRecord(const AccessRecord& other); AccessRecord(const AccessRecord& other);
AccessRecord& operator=(const AccessRecord& other); AccessRecord& operator=(const AccessRecord& other);
GURL top_frame_origin; url::Origin top_frame_origin;
StorageAPIType type; StorageAPIType type;
// Identifies a canonical cookie, only used when |type| is kCookie. // Identifies a canonical cookie, only used when |type| is kCookie.
...@@ -61,7 +61,7 @@ class AccessContextAuditDatabase ...@@ -61,7 +61,7 @@ class AccessContextAuditDatabase
std::string path; std::string path;
// Identifies an origin-keyed storage API, used when |type| is NOT kCookie. // Identifies an origin-keyed storage API, used when |type| is NOT kCookie.
GURL origin; url::Origin origin;
base::Time last_access_time; base::Time last_access_time;
...@@ -91,7 +91,7 @@ class AccessContextAuditDatabase ...@@ -91,7 +91,7 @@ class AccessContextAuditDatabase
const std::string& path); const std::string& path);
// Remove all records of access to |origin|'s storage API of |type|. // Remove all records of access to |origin|'s storage API of |type|.
void RemoveAllRecordsForOriginStorage(const GURL& origin, void RemoveAllRecordsForOriginStorage(const url::Origin& origin,
StorageAPIType type); StorageAPIType type);
// Removes all records for cookie domains and API origins that match session // Removes all records for cookie domains and API origins that match session
......
...@@ -96,52 +96,58 @@ class AccessContextAuditDatabaseTest : public testing::Test { ...@@ -96,52 +96,58 @@ class AccessContextAuditDatabaseTest : public testing::Test {
std::vector<AccessContextAuditDatabase::AccessRecord> GetTestRecords() { std::vector<AccessContextAuditDatabase::AccessRecord> GetTestRecords() {
return { return {
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test.com"), url::Origin::Create(GURL("https://test.com")),
AccessContextAuditDatabase::StorageAPIType::kLocalStorage, AccessContextAuditDatabase::StorageAPIType::kLocalStorage,
GURL("https://test.com"), url::Origin::Create(GURL("https://test.com")),
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(1))), base::TimeDelta::FromHours(1))),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test2.com:8000"), url::Origin::Create(GURL("https://test2.com:8000")),
AccessContextAuditDatabase::StorageAPIType::kLocalStorage, AccessContextAuditDatabase::StorageAPIType::kLocalStorage,
GURL("https://test.com"), url::Origin::Create(GURL("https://test.com")),
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(2))), base::TimeDelta::FromHours(2))),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test2.com"), "cookie1", "test.com", "/", url::Origin::Create(GURL("https://test2.com:8000")), "cookie1",
"test.com", "/",
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(3)), base::TimeDelta::FromHours(3)),
/* is_persistent */ true), /* is_persistent */ true),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test2.com"), kManyContextsCookieName, url::Origin::Create(GURL("https://test2.com")),
kManyContextsCookieDomain, kManyContextsCookiePath, kManyContextsCookieName, kManyContextsCookieDomain,
kManyContextsCookiePath,
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(4)), base::TimeDelta::FromHours(4)),
/* is_persistent */ true), /* is_persistent */ true),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test3.com"), kManyContextsCookieName, url::Origin::Create(GURL("https://test3.com")),
kManyContextsCookieDomain, kManyContextsCookiePath, kManyContextsCookieName, kManyContextsCookieDomain,
kManyContextsCookiePath,
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(4)), base::TimeDelta::FromHours(4)),
/* is_persistent */ true), /* is_persistent */ true),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test4.com:8000"), kManyContextsStorageAPIType, url::Origin::Create(GURL("https://test4.com:8000")),
GURL(kManyContextsStorageAPIOrigin), kManyContextsStorageAPIType,
url::Origin::Create(GURL(kManyContextsStorageAPIOrigin)),
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(5))), base::TimeDelta::FromHours(5))),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test5.com:8000"), kManyContextsStorageAPIType, url::Origin::Create(GURL("https://test5.com:8000")),
GURL(kManyContextsStorageAPIOrigin), kManyContextsStorageAPIType,
url::Origin::Create(GURL(kManyContextsStorageAPIOrigin)),
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(6))), base::TimeDelta::FromHours(6))),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test5.com:8000"), kSingleContextStorageAPIType, url::Origin::Create(GURL("https://test5.com:8000")),
GURL(kManyContextsStorageAPIOrigin), kSingleContextStorageAPIType,
url::Origin::Create(GURL(kManyContextsStorageAPIOrigin)),
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(7))), base::TimeDelta::FromHours(7))),
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
GURL("https://test6.com"), "non-persistent-cookie", url::Origin::Create(GURL("https://test6.com")),
"non-persistent-domain", "/", "non-persistent-cookie", "non-persistent-domain", "/",
base::Time::FromDeltaSinceWindowsEpoch( base::Time::FromDeltaSinceWindowsEpoch(
base::TimeDelta::FromHours(8)), base::TimeDelta::FromHours(8)),
/* is_persistent */ false), /* is_persistent */ false),
...@@ -323,15 +329,16 @@ TEST_F(AccessContextAuditDatabaseTest, RemoveAllStorageRecords) { ...@@ -323,15 +329,16 @@ TEST_F(AccessContextAuditDatabaseTest, RemoveAllStorageRecords) {
ValidateDatabaseRecords(database(), test_records); ValidateDatabaseRecords(database(), test_records);
database()->RemoveAllRecordsForOriginStorage( database()->RemoveAllRecordsForOriginStorage(
GURL(kManyContextsStorageAPIOrigin), kManyContextsStorageAPIType); url::Origin::Create(GURL(kManyContextsStorageAPIOrigin)),
kManyContextsStorageAPIType);
test_records.erase( test_records.erase(
std::remove_if( std::remove_if(
test_records.begin(), test_records.end(), test_records.begin(), test_records.end(),
[=](const AccessContextAuditDatabase::AccessRecord& record) { [=](const AccessContextAuditDatabase::AccessRecord& record) {
return (record.type == kManyContextsStorageAPIType && return (record.type == kManyContextsStorageAPIType &&
record.origin.GetOrigin() == record.origin == url::Origin::Create(
GURL(kManyContextsStorageAPIOrigin).GetOrigin()); GURL(kManyContextsStorageAPIOrigin)));
}), }),
test_records.end()); test_records.end());
ValidateDatabaseRecords(database(), test_records); ValidateDatabaseRecords(database(), test_records);
......
...@@ -47,7 +47,7 @@ bool AccessContextAuditService::Init( ...@@ -47,7 +47,7 @@ bool AccessContextAuditService::Init(
void AccessContextAuditService::RecordCookieAccess( void AccessContextAuditService::RecordCookieAccess(
const net::CookieList& accessed_cookies, const net::CookieList& accessed_cookies,
const GURL& top_frame_origin) { const url::Origin& top_frame_origin) {
auto now = base::Time::Now(); auto now = base::Time::Now();
std::vector<AccessContextAuditDatabase::AccessRecord> access_records; std::vector<AccessContextAuditDatabase::AccessRecord> access_records;
for (const auto& cookie : accessed_cookies) { for (const auto& cookie : accessed_cookies) {
...@@ -66,9 +66,9 @@ void AccessContextAuditService::RecordCookieAccess( ...@@ -66,9 +66,9 @@ void AccessContextAuditService::RecordCookieAccess(
} }
void AccessContextAuditService::RecordStorageAPIAccess( void AccessContextAuditService::RecordStorageAPIAccess(
const GURL& storage_origin, const url::Origin& storage_origin,
AccessContextAuditDatabase::StorageAPIType type, AccessContextAuditDatabase::StorageAPIType type,
const GURL& top_frame_origin) { const url::Origin& top_frame_origin) {
std::vector<AccessContextAuditDatabase::AccessRecord> access_record = { std::vector<AccessContextAuditDatabase::AccessRecord> access_record = {
AccessContextAuditDatabase::AccessRecord( AccessContextAuditDatabase::AccessRecord(
top_frame_origin, type, storage_origin, base::Time::Now())}; top_frame_origin, type, storage_origin, base::Time::Now())};
......
...@@ -31,13 +31,13 @@ class AccessContextAuditService ...@@ -31,13 +31,13 @@ class AccessContextAuditService
// Records accesses for all cookies in |details| against |top_frame_origin|. // Records accesses for all cookies in |details| against |top_frame_origin|.
void RecordCookieAccess(const net::CookieList& accessed_cookies, void RecordCookieAccess(const net::CookieList& accessed_cookies,
const GURL& top_frame_origin); const url::Origin& top_frame_origin);
// Records access for |storage_origin|'s storage of |type| against // Records access for |storage_origin|'s storage of |type| against
// |top_frame_origin|. // |top_frame_origin|.
void RecordStorageAPIAccess(const GURL& storage_origin, void RecordStorageAPIAccess(const url::Origin& storage_origin,
AccessContextAuditDatabase::StorageAPIType type, AccessContextAuditDatabase::StorageAPIType type,
const GURL& top_frame_origin); const url::Origin& top_frame_origin);
// Queries database for all access context records, which are provided via // Queries database for all access context records, which are provided via
// |callback|. // |callback|.
......
...@@ -28,7 +28,7 @@ namespace { ...@@ -28,7 +28,7 @@ namespace {
// |top_frame_origin|. // |top_frame_origin|.
void CheckContainsCookieRecord( void CheckContainsCookieRecord(
net::CanonicalCookie* cookie, net::CanonicalCookie* cookie,
GURL top_frame_origin, url::Origin top_frame_origin,
const std::vector<AccessContextAuditDatabase::AccessRecord>& records) { const std::vector<AccessContextAuditDatabase::AccessRecord>& records) {
EXPECT_NE( EXPECT_NE(
std::find_if( std::find_if(
...@@ -49,9 +49,9 @@ void CheckContainsCookieRecord( ...@@ -49,9 +49,9 @@ void CheckContainsCookieRecord(
// Checks that info in |record| matches storage API access defined by // Checks that info in |record| matches storage API access defined by
// |storage_origin|, |type| and |top_frame_origin| // |storage_origin|, |type| and |top_frame_origin|
void CheckContainsStorageAPIRecord( void CheckContainsStorageAPIRecord(
GURL storage_origin, url::Origin storage_origin,
AccessContextAuditDatabase::StorageAPIType type, AccessContextAuditDatabase::StorageAPIType type,
GURL top_frame_origin, url::Origin top_frame_origin,
const std::vector<AccessContextAuditDatabase::AccessRecord>& records) { const std::vector<AccessContextAuditDatabase::AccessRecord>& records) {
EXPECT_NE( EXPECT_NE(
std::find_if(records.begin(), records.end(), std::find_if(records.begin(), records.end(),
...@@ -159,9 +159,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) { ...@@ -159,9 +159,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) {
kTestCookieURL, kTestNonPersistentCookieName + "=1", kTestCookieURL, kTestNonPersistentCookieName + "=1",
initial_cookie_access_time, base::nullopt /* server_time */); initial_cookie_access_time, base::nullopt /* server_time */);
// Record access to these cookies against a URL. // Record access to these cookies against a URL.
GURL kTopFrameURL("https://test.com"); url::Origin kTopFrameOrigin = url::Origin::Create(GURL("https://test.com"));
service()->RecordCookieAccess({*test_cookie, *test_non_persistent_cookie}, service()->RecordCookieAccess({*test_cookie, *test_non_persistent_cookie},
kTopFrameURL); kTopFrameOrigin);
// Ensure that the record of these accesses is correctly returned. // Ensure that the record of these accesses is correctly returned.
service()->GetAllAccessRecords( service()->GetAllAccessRecords(
...@@ -170,9 +170,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) { ...@@ -170,9 +170,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) {
browser_task_environment_.RunUntilIdle(); browser_task_environment_.RunUntilIdle();
EXPECT_EQ(2u, GetReturnedRecords().size()); EXPECT_EQ(2u, GetReturnedRecords().size());
CheckContainsCookieRecord(test_cookie.get(), kTopFrameURL, CheckContainsCookieRecord(test_cookie.get(), kTopFrameOrigin,
GetReturnedRecords()); GetReturnedRecords());
CheckContainsCookieRecord(test_non_persistent_cookie.get(), kTopFrameURL, CheckContainsCookieRecord(test_non_persistent_cookie.get(), kTopFrameOrigin,
GetReturnedRecords()); GetReturnedRecords());
// Check that informing the service of non-deletion changes to the cookies // Check that informing the service of non-deletion changes to the cookies
...@@ -190,9 +190,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) { ...@@ -190,9 +190,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) {
browser_task_environment_.RunUntilIdle(); browser_task_environment_.RunUntilIdle();
EXPECT_EQ(2u, GetReturnedRecords().size()); EXPECT_EQ(2u, GetReturnedRecords().size());
CheckContainsCookieRecord(test_cookie.get(), kTopFrameURL, CheckContainsCookieRecord(test_cookie.get(), kTopFrameOrigin,
GetReturnedRecords()); GetReturnedRecords());
CheckContainsCookieRecord(test_non_persistent_cookie.get(), kTopFrameURL, CheckContainsCookieRecord(test_non_persistent_cookie.get(), kTopFrameOrigin,
GetReturnedRecords()); GetReturnedRecords());
// Check that a repeated access correctly updates associated timestamp. // Check that a repeated access correctly updates associated timestamp.
...@@ -201,7 +201,7 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) { ...@@ -201,7 +201,7 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) {
test_cookie->SetLastAccessDate(repeat_cookie_access_time); test_cookie->SetLastAccessDate(repeat_cookie_access_time);
test_non_persistent_cookie->SetLastAccessDate(repeat_cookie_access_time); test_non_persistent_cookie->SetLastAccessDate(repeat_cookie_access_time);
service()->RecordCookieAccess({*test_cookie, *test_non_persistent_cookie}, service()->RecordCookieAccess({*test_cookie, *test_non_persistent_cookie},
kTopFrameURL); kTopFrameOrigin);
ClearReturnedRecords(); ClearReturnedRecords();
service()->GetAllAccessRecords( service()->GetAllAccessRecords(
...@@ -210,9 +210,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) { ...@@ -210,9 +210,9 @@ TEST_F(AccessContextAuditServiceTest, CookieRecords) {
browser_task_environment_.RunUntilIdle(); browser_task_environment_.RunUntilIdle();
EXPECT_EQ(2u, GetReturnedRecords().size()); EXPECT_EQ(2u, GetReturnedRecords().size());
CheckContainsCookieRecord(test_cookie.get(), kTopFrameURL, CheckContainsCookieRecord(test_cookie.get(), kTopFrameOrigin,
GetReturnedRecords()); GetReturnedRecords());
CheckContainsCookieRecord(test_non_persistent_cookie.get(), kTopFrameURL, CheckContainsCookieRecord(test_non_persistent_cookie.get(), kTopFrameOrigin,
GetReturnedRecords()); GetReturnedRecords());
// Inform the service the cookies have been deleted and check they are no // Inform the service the cookies have been deleted and check they are no
...@@ -239,7 +239,8 @@ TEST_F(AccessContextAuditServiceTest, ExpiredCookies) { ...@@ -239,7 +239,8 @@ TEST_F(AccessContextAuditServiceTest, ExpiredCookies) {
kTestURL, "test_1=1; expires=Thu, 01 Jan 1970 00:00:00 GMT", kTestURL, "test_1=1; expires=Thu, 01 Jan 1970 00:00:00 GMT",
base::Time::Now(), base::nullopt /* server_time */); base::Time::Now(), base::nullopt /* server_time */);
service()->RecordCookieAccess({*test_cookie_expired}, kTestURL); service()->RecordCookieAccess({*test_cookie_expired},
url::Origin::Create(kTestURL));
service()->GetAllAccessRecords( service()->GetAllAccessRecords(
base::BindOnce(&AccessContextAuditServiceTest::AccessRecordCallback, base::BindOnce(&AccessContextAuditServiceTest::AccessRecordCallback,
...@@ -254,7 +255,7 @@ TEST_F(AccessContextAuditServiceTest, SessionOnlyRecords) { ...@@ -254,7 +255,7 @@ TEST_F(AccessContextAuditServiceTest, SessionOnlyRecords) {
const GURL kTestPersistentURL("https://persistent.com"); const GURL kTestPersistentURL("https://persistent.com");
const GURL kTestSessionOnlyExplicitURL("https://explicit-session-only.com"); const GURL kTestSessionOnlyExplicitURL("https://explicit-session-only.com");
const GURL kTestSessionOnlyContentSettingURL("https://content-setting.com"); const GURL kTestSessionOnlyContentSettingURL("https://content-setting.com");
const GURL kTopFrameURL("https://test.com"); url::Origin kTopFrameOrigin = url::Origin::Create(GURL("https://test.com"));
std::string kTestCookieName = "test"; std::string kTestCookieName = "test";
const auto kTestStorageType = const auto kTestStorageType =
AccessContextAuditDatabase::StorageAPIType::kWebDatabase; AccessContextAuditDatabase::StorageAPIType::kWebDatabase;
...@@ -279,14 +280,15 @@ TEST_F(AccessContextAuditServiceTest, SessionOnlyRecords) { ...@@ -279,14 +280,15 @@ TEST_F(AccessContextAuditServiceTest, SessionOnlyRecords) {
service()->RecordCookieAccess( service()->RecordCookieAccess(
{*test_cookie_persistent, *test_cookie_session_only_explicit, {*test_cookie_persistent, *test_cookie_session_only_explicit,
*test_cookie_session_only_content_setting}, *test_cookie_session_only_content_setting},
kTopFrameURL); kTopFrameOrigin);
// Record storage APIs for both persistent and content setting based session // Record storage APIs for both persistent and content setting based session
// only URLs. // only URLs.
service()->RecordStorageAPIAccess(kTestPersistentURL, kTestStorageType, service()->RecordStorageAPIAccess(url::Origin::Create(kTestPersistentURL),
kTopFrameURL); kTestStorageType, kTopFrameOrigin);
service()->RecordStorageAPIAccess(kTestSessionOnlyContentSettingURL, service()->RecordStorageAPIAccess(
kTestStorageType, kTopFrameURL); url::Origin::Create(kTestSessionOnlyContentSettingURL), kTestStorageType,
kTopFrameOrigin);
// Ensure all records have been initially recorded. // Ensure all records have been initially recorded.
service()->GetAllAccessRecords( service()->GetAllAccessRecords(
...@@ -313,10 +315,11 @@ TEST_F(AccessContextAuditServiceTest, SessionOnlyRecords) { ...@@ -313,10 +315,11 @@ TEST_F(AccessContextAuditServiceTest, SessionOnlyRecords) {
browser_task_environment_.RunUntilIdle(); browser_task_environment_.RunUntilIdle();
ASSERT_EQ(3u, GetReturnedRecords().size()); ASSERT_EQ(3u, GetReturnedRecords().size());
CheckContainsCookieRecord(test_cookie_persistent.get(), kTopFrameURL, CheckContainsCookieRecord(test_cookie_persistent.get(), kTopFrameOrigin,
GetReturnedRecords()); GetReturnedRecords());
CheckContainsCookieRecord(test_cookie_session_only_explicit.get(), CheckContainsCookieRecord(test_cookie_session_only_explicit.get(),
kTopFrameURL, GetReturnedRecords()); kTopFrameOrigin, GetReturnedRecords());
CheckContainsStorageAPIRecord(kTestPersistentURL, kTestStorageType, CheckContainsStorageAPIRecord(url::Origin::Create(GURL(kTestPersistentURL)),
kTopFrameURL, GetReturnedRecords()); kTestStorageType, kTopFrameOrigin,
GetReturnedRecords());
} }
...@@ -164,7 +164,8 @@ void TabSpecificContentSettingsDelegate::OnCookieAccessAllowed( ...@@ -164,7 +164,8 @@ void TabSpecificContentSettingsDelegate::OnCookieAccessAllowed(
Profile::FromBrowserContext(web_contents()->GetBrowserContext())); Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
if (access_context_audit_service) if (access_context_audit_service)
access_context_audit_service->RecordCookieAccess( access_context_audit_service->RecordCookieAccess(
accessed_cookies, web_contents()->GetLastCommittedURL().GetOrigin()); accessed_cookies,
url::Origin::Create(web_contents()->GetLastCommittedURL()));
#endif // !defined(OS_ANDROID) #endif // !defined(OS_ANDROID)
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment