0

Quota: Cleanup some StorageType usage from QuotaManager

This change removes some usages of StorageType in QuotaManager.
After StorageType::kSyncable deprecation, all other storage types
except kTemporary are deprecated. So we no longer need to specify
StorageType. Further cleanup to remove usage in QuotaManager,
QuotaDatabase, etc. will follow.

Bug: 40211051
Change-Id: I8428a51ffc2a25781dacfffabae48de3032c6bf9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6336951
Reviewed-by: Tsuyoshi Horo <horo@chromium.org>
Commit-Queue: Ayu Ishii <ayui@chromium.org>
Reviewed-by: Nate Fischer <ntfschr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1431654}
This commit is contained in:
Ayu Ishii
2025-03-12 11:44:50 -07:00
committed by Chromium LUCI CQ
parent 9a87360d16
commit b8d256827e
19 changed files with 88 additions and 177 deletions

@@ -115,8 +115,7 @@ void GetStorageKeysTask::Run() {
content::GetIOThreadTaskRunner({})->PostTask( content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce( base::BindOnce(
&QuotaManager::GetStorageKeysForType, quota_manager_, &QuotaManager::GetAllStorageKeys, quota_manager_,
blink::mojom::StorageType::kTemporary,
base::BindOnce(&GetStorageKeysTask::OnStorageKeysObtained, this, base::BindOnce(&GetStorageKeysTask::OnStorageKeysObtained, this,
blink::mojom::StorageType::kTemporary))); blink::mojom::StorageType::kTemporary)));
} }

@@ -97,11 +97,10 @@ class SyncableFileSystemTest : public testing::Test {
} }
storage::QuotaErrorOr<storage::BucketLocator> GetOrCreateBucket( storage::QuotaErrorOr<storage::BucketLocator> GetOrCreateBucket(
const std::string& name, const std::string& name) {
StorageType type) {
base::test::TestFuture<storage::QuotaErrorOr<storage::BucketInfo>> future; base::test::TestFuture<storage::QuotaErrorOr<storage::BucketInfo>> future;
file_system_.quota_manager()->GetOrCreateBucketDeprecated( file_system_.quota_manager()->UpdateOrCreateBucket({storage_key(), name},
{storage_key(), name}, type, future.GetCallback()); future.GetCallback());
return future.Take().transform(&storage::BucketInfo::ToBucketLocator); return future.Take().transform(&storage::BucketInfo::ToBucketLocator);
} }
@@ -171,47 +170,43 @@ TEST_F(SyncableFileSystemTest, SyncableLocalSandboxCombined) {
FileSystemURL temp_url = URL(storage::kFileSystemTypeTemporary, "dir/foo"); FileSystemURL temp_url = URL(storage::kFileSystemTypeTemporary, "dir/foo");
storage::AsyncFileTestHelper::CreateFile(file_system_context(), temp_url); storage::AsyncFileTestHelper::CreateFile(file_system_context(), temp_url);
file_system_.quota_manager()->SetQuota( file_system_.quota_manager()->SetQuota(storage_key(), /*quota=*/12345 * 1024);
storage_key(), file_system_.storage_type(), /*quota=*/12345 * 1024);
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(auto bucket,
auto temp_bucket, GetOrCreateBucket(storage::kDefaultBucketName));
GetOrCreateBucket(storage::kDefaultBucketName, StorageType::kTemporary));
// Changes in the syncable files should be reflected in the temporary bucket. // Changes in the syncable files should be reflected in the temporary bucket.
int64_t temp_usage = GetBucketUsage(temp_bucket); int64_t usage = GetBucketUsage(bucket);
EXPECT_GT(temp_usage, 0); EXPECT_GT(usage, 0);
// Truncating existing syncable file should update usage for the temporary // Truncating existing syncable file should update usage for the temporary
// bucket. // bucket.
const int64_t kFileSizeToExtend = 333; const int64_t kFileSizeToExtend = 333;
storage::AsyncFileTestHelper::TruncateFile(file_system_context(), sync_url, storage::AsyncFileTestHelper::TruncateFile(file_system_context(), sync_url,
kFileSizeToExtend); kFileSizeToExtend);
int64_t new_temp_usage = GetBucketUsage(temp_bucket); int64_t new_usage = GetBucketUsage(bucket);
EXPECT_EQ(kFileSizeToExtend, new_temp_usage - temp_usage); EXPECT_EQ(kFileSizeToExtend, new_usage - usage);
// Shrinking the quota to the current usage for temporary quota storage, // Shrinking the quota to the current usage, should make extending the file
// should make extending the file further fail. // further fail.
file_system_.quota_manager()->SetQuota(storage_key(), StorageType::kTemporary, file_system_.quota_manager()->SetQuota(storage_key(), new_usage);
new_temp_usage);
EXPECT_EQ(base::File::FILE_ERROR_NO_SPACE, EXPECT_EQ(base::File::FILE_ERROR_NO_SPACE,
storage::AsyncFileTestHelper::TruncateFile( storage::AsyncFileTestHelper::TruncateFile(
file_system_context(), sync_url, kFileSizeToExtend + 1)); file_system_context(), sync_url, kFileSizeToExtend + 1));
temp_usage = new_temp_usage; usage = new_usage;
new_temp_usage = GetBucketUsage(temp_bucket); new_usage = GetBucketUsage(bucket);
EXPECT_EQ(new_temp_usage, temp_usage); EXPECT_EQ(new_usage, usage);
// Must delete both file types to delete all temporary bucket storage. // Must delete both file types to delete all temporary bucket storage.
DeleteFileSystem(storage::kFileSystemTypeTemporary); DeleteFileSystem(storage::kFileSystemTypeTemporary);
EXPECT_GT(GetBucketUsage(temp_bucket), 0); EXPECT_GT(GetBucketUsage(bucket), 0);
DeleteFileSystem(storage::kFileSystemTypeSyncable); DeleteFileSystem(storage::kFileSystemTypeSyncable);
EXPECT_EQ(GetBucketUsage(temp_bucket), 0); EXPECT_EQ(GetBucketUsage(bucket), 0);
// Restore the system default quota. // Restore the system default quota.
file_system_.quota_manager()->SetQuota( file_system_.quota_manager()->SetQuota(
storage_key(), file_system_.storage_type(), storage_key(), QuotaManager::kSyncableStorageDefaultStorageKeyQuota);
QuotaManager::kSyncableStorageDefaultStorageKeyQuota);
} }
TEST_F(SyncableFileSystemTest, BucketDeletion) { TEST_F(SyncableFileSystemTest, BucketDeletion) {
@@ -229,15 +224,14 @@ TEST_F(SyncableFileSystemTest, BucketDeletion) {
FileSystemURL temp_url = URL(storage::kFileSystemTypeTemporary, "dir/foo"); FileSystemURL temp_url = URL(storage::kFileSystemTypeTemporary, "dir/foo");
storage::AsyncFileTestHelper::CreateFile(file_system_context(), temp_url); storage::AsyncFileTestHelper::CreateFile(file_system_context(), temp_url);
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(auto bucket,
auto temp_bucket, GetOrCreateBucket(storage::kDefaultBucketName));
GetOrCreateBucket(storage::kDefaultBucketName, StorageType::kTemporary));
EXPECT_GT(GetBucketUsage(temp_bucket), 0); EXPECT_GT(GetBucketUsage(bucket), 0);
// Deleting the temporary bucket is enough to delete files for both // Deleting the temporary bucket is enough to delete files for both
// kFileSystemTypeTemporary and kFileSystemTypeSyncable. // kFileSystemTypeTemporary and kFileSystemTypeSyncable.
DeleteBucketData(temp_bucket); DeleteBucketData(bucket);
EXPECT_FALSE(storage::AsyncFileTestHelper::FileExists( EXPECT_FALSE(storage::AsyncFileTestHelper::FileExists(
file_system_context(), temp_url, file_system_context(), temp_url,
storage::AsyncFileTestHelper::kDontCheckSize)); storage::AsyncFileTestHelper::kDontCheckSize));

@@ -66,8 +66,7 @@ void BrowsingDataQuotaHelperImpl::FetchQuotaInfoOnIOThread(
DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_CURRENTLY_ON(BrowserThread::IO);
// Query for storage keys. When complete, process the collected quota info. // Query for storage keys. When complete, process the collected quota info.
quota_manager_->GetStorageKeysForType( quota_manager_->GetAllStorageKeys(
StorageType::kTemporary,
base::BindOnce(&BrowsingDataQuotaHelperImpl::GotStorageKeys, base::BindOnce(&BrowsingDataQuotaHelperImpl::GotStorageKeys,
weak_factory_.GetWeakPtr(), std::move(callback))); weak_factory_.GetWeakPtr(), std::move(callback)));
} }
@@ -130,7 +129,7 @@ void BrowsingDataQuotaHelperImpl::DeleteStorageKeyDataOnIOThread(
base::OnceClosure completed) { base::OnceClosure completed) {
DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_CURRENTLY_ON(BrowserThread::IO);
quota_manager_->DeleteStorageKeyData( quota_manager_->DeleteStorageKeyData(
storage_key, StorageType::kTemporary, storage_key,
base::BindOnce( base::BindOnce(
&BrowsingDataQuotaHelperImpl::OnStorageKeyDeletionCompleted, &BrowsingDataQuotaHelperImpl::OnStorageKeyDeletionCompleted,
weak_factory_.GetWeakPtr(), std::move(completed))); weak_factory_.GetWeakPtr(), std::move(completed)));

@@ -1010,7 +1010,7 @@ class CacheStorageCacheTest : public testing::Test {
void SetQuota(uint64_t quota) { void SetQuota(uint64_t quota) {
mock_quota_manager_->SetQuota( mock_quota_manager_->SetQuota(
blink::StorageKey::CreateFirstParty(url::Origin::Create(kTestUrl)), blink::StorageKey::CreateFirstParty(url::Origin::Create(kTestUrl)),
blink::mojom::StorageType::kTemporary, quota); quota);
} }
void SetMaxQuerySizeBytes(size_t max_bytes) { void SetMaxQuerySizeBytes(size_t max_bytes) {

@@ -388,10 +388,8 @@ class CacheStorageManagerTest : public testing::Test {
MemoryOnly(), temp_dir_path, MemoryOnly(), temp_dir_path,
base::SingleThreadTaskRunner::GetCurrentDefault().get(), base::SingleThreadTaskRunner::GetCurrentDefault().get(),
quota_policy_.get()); quota_policy_.get());
mock_quota_manager_->SetQuota(storage_key1_, StorageType::kTemporary, mock_quota_manager_->SetQuota(storage_key1_, 1024 * 1024 * 100);
1024 * 1024 * 100); mock_quota_manager_->SetQuota(storage_key2_, 1024 * 1024 * 100);
mock_quota_manager_->SetQuota(storage_key2_, StorageType::kTemporary,
1024 * 1024 * 100);
quota_manager_proxy_ = quota_manager_proxy_ =
base::MakeRefCounted<MockCacheStorageQuotaManagerProxy>( base::MakeRefCounted<MockCacheStorageQuotaManagerProxy>(

@@ -554,9 +554,7 @@ TEST_F(FileSystemAccessSandboxedFileWriterImplTest, SkipQuarantine) {
TEST_F(FileSystemAccessSandboxedFileWriterImplTest, QuotaError) { TEST_F(FileSystemAccessSandboxedFileWriterImplTest, QuotaError) {
ASSERT_TRUE(quota_manager_); ASSERT_TRUE(quota_manager_);
quota_manager_->SetQuota(kTestStorageKey, quota_manager_->SetQuota(kTestStorageKey, /*quota=*/1);
blink::mojom::StorageType::kTemporary,
/*quota=*/1);
uint64_t bytes_written; uint64_t bytes_written;
FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written); FileSystemAccessStatus result = WriteSync(0, "abc", &bytes_written);

@@ -62,7 +62,6 @@ class BucketContextTest : public testing::Test {
void SetQuotaLeft(int64_t quota_manager_response) { void SetQuotaLeft(int64_t quota_manager_response) {
quota_manager_->SetQuota(bucket_context_->bucket_locator().storage_key, quota_manager_->SetQuota(bucket_context_->bucket_locator().storage_key,
blink::mojom::StorageType::kTemporary,
quota_manager_response); quota_manager_response);
} }

@@ -350,10 +350,8 @@ class CopyOrMoveOperationTestHelper {
// Grant relatively big quota initially. // Grant relatively big quota initially.
quota_manager_->SetQuota(blink::StorageKey::CreateFirstParty(origin_), quota_manager_->SetQuota(blink::StorageKey::CreateFirstParty(origin_),
FileSystemTypeToQuotaStorageType(src_type_),
1024 * 1024); 1024 * 1024);
quota_manager_->SetQuota(blink::StorageKey::CreateFirstParty(origin_), quota_manager_->SetQuota(blink::StorageKey::CreateFirstParty(origin_),
FileSystemTypeToQuotaStorageType(dest_type_),
1024 * 1024); 1024 * 1024);
} }

@@ -269,8 +269,7 @@ class FileSystemOperationImplTest : public testing::Test {
void GrantQuotaForCurrentUsage() { void GrantQuotaForCurrentUsage() {
int64_t usage; int64_t usage;
GetUsageAndQuota(&usage, nullptr); GetUsageAndQuota(&usage, nullptr);
quota_manager()->SetQuota(sandbox_file_system_.storage_key(), quota_manager()->SetQuota(sandbox_file_system_.storage_key(), usage);
sandbox_file_system_.storage_type(), usage);
} }
int64_t GetUsage() { int64_t GetUsage() {
@@ -283,7 +282,6 @@ class FileSystemOperationImplTest : public testing::Test {
int64_t quota; int64_t quota;
GetUsageAndQuota(nullptr, &quota); GetUsageAndQuota(nullptr, &quota);
quota_manager()->SetQuota(sandbox_file_system_.storage_key(), quota_manager()->SetQuota(sandbox_file_system_.storage_key(),
sandbox_file_system_.storage_type(),
quota + quota_delta); quota + quota_delta);
} }

@@ -266,8 +266,7 @@ TEST_F(FileSystemOperationImplWriteTest, TestWriteFailureByQuota) {
ScopedTextBlob blob(blob_storage_context(), "blob:success", ScopedTextBlob blob(blob_storage_context(), "blob:success",
"Hello, world!\n"); "Hello, world!\n");
quota_manager_->SetQuota( quota_manager_->SetQuota(
blink::StorageKey::CreateFromStringForTesting(kOrigin), blink::StorageKey::CreateFromStringForTesting(kOrigin), 10);
FileSystemTypeToQuotaStorageType(kFileSystemType), 10);
file_system_context_->operation_runner()->Write(URLForPath(virtual_path_), file_system_context_->operation_runner()->Write(URLForPath(virtual_path_),
blob.GetBlobDataHandle(), 0, blob.GetBlobDataHandle(), 0,
RecordWriteCallback()); RecordWriteCallback());

@@ -165,10 +165,8 @@ class FileSystemQuotaClientTest : public testing::Test {
if (file.isDirectory) { if (file.isDirectory) {
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(
auto bucket, auto bucket,
GetOrCreateBucket(file.origin_url, kDefaultBucketName, GetOrCreateBucket(file.origin_url, kDefaultBucketName));
FileSystemTypeToQuotaStorageType(file.type))); quota_manager_->SetQuota(bucket.storage_key, 1024 * 1024 * 100);
quota_manager_->SetQuota(bucket.storage_key, bucket.type,
1024 * 1024 * 100);
ASSERT_TRUE( ASSERT_TRUE(
CreateFileSystemDirectory(path, file.origin_url, file.type)); CreateFileSystemDirectory(path, file.origin_url, file.type));
if (path.empty()) { if (path.empty()) {
@@ -215,11 +213,10 @@ class FileSystemQuotaClientTest : public testing::Test {
storage::QuotaErrorOr<BucketLocator> GetOrCreateBucket( storage::QuotaErrorOr<BucketLocator> GetOrCreateBucket(
const std::string& origin, const std::string& origin,
const std::string& name, const std::string& name) {
StorageType type) {
base::test::TestFuture<storage::QuotaErrorOr<storage::BucketInfo>> future; base::test::TestFuture<storage::QuotaErrorOr<storage::BucketInfo>> future;
quota_manager_->GetOrCreateBucketDeprecated( quota_manager_->UpdateOrCreateBucket(
{blink::StorageKey::CreateFromStringForTesting(origin), name}, type, {blink::StorageKey::CreateFromStringForTesting(origin), name},
future.GetCallback()); future.GetCallback());
return future.Take().transform(&storage::BucketInfo::ToBucketLocator); return future.Take().transform(&storage::BucketInfo::ToBucketLocator);
} }
@@ -270,9 +267,8 @@ class FileSystemQuotaClientTest : public testing::Test {
TEST_F(FileSystemQuotaClientTest, NoFileSystemTest) { TEST_F(FileSystemQuotaClientTest, NoFileSystemTest) {
FileSystemQuotaClient quota_client(GetFileSystemContext()); FileSystemQuotaClient quota_client(GetFileSystemContext());
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(auto bucket,
auto bucket, GetOrCreateBucket(kDummyURL1, kDefaultBucketName));
GetOrCreateBucket(kDummyURL1, kDefaultBucketName, kTemporary));
EXPECT_EQ(0, GetBucketUsage(quota_client, bucket)); EXPECT_EQ(0, GetBucketUsage(quota_client, bucket));
} }
@@ -282,9 +278,8 @@ TEST_F(FileSystemQuotaClientTest, NoFileTest) {
InitializeOriginFiles(quota_client, InitializeOriginFiles(quota_client,
{{true, "", 0, kDummyURL1, kFileSystemTypeTemporary}}); {{true, "", 0, kDummyURL1, kFileSystemTypeTemporary}});
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(auto bucket,
auto bucket, GetOrCreateBucket(kDummyURL1, kDefaultBucketName));
GetOrCreateBucket(kDummyURL1, kDefaultBucketName, kTemporary));
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
EXPECT_EQ(0, GetBucketUsage(quota_client, bucket)); EXPECT_EQ(0, GetBucketUsage(quota_client, bucket));
} }
@@ -292,8 +287,8 @@ TEST_F(FileSystemQuotaClientTest, NoFileTest) {
TEST_F(FileSystemQuotaClientTest, NonDefaultBucket) { TEST_F(FileSystemQuotaClientTest, NonDefaultBucket) {
FileSystemQuotaClient quota_client(GetFileSystemContext()); FileSystemQuotaClient quota_client(GetFileSystemContext());
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(auto bucket,
auto bucket, GetOrCreateBucket(kDummyURL1, "logs_bucket", kTemporary)); GetOrCreateBucket(kDummyURL1, "logs_bucket"));
ASSERT_FALSE(bucket.is_default); ASSERT_FALSE(bucket.is_default);
EXPECT_EQ(0, GetBucketUsage(quota_client, bucket)); EXPECT_EQ(0, GetBucketUsage(quota_client, bucket));
DeleteBucketData(&quota_client, bucket); DeleteBucketData(&quota_client, bucket);
@@ -542,7 +537,7 @@ TEST_F(FileSystemQuotaClientTest, DeleteOriginTest) {
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(
auto buz_temp_bucket, auto buz_temp_bucket,
GetOrCreateBucket("http://buz.com/", kDefaultBucketName, kTemporary)); GetOrCreateBucket("http://buz.com/", kDefaultBucketName));
DeleteBucketData(&quota_client, buz_temp_bucket); DeleteBucketData(&quota_client, buz_temp_bucket);
EXPECT_EQ(0, GetBucketUsage(quota_client, foo_temp_bucket)); EXPECT_EQ(0, GetBucketUsage(quota_client, foo_temp_bucket));

@@ -176,8 +176,7 @@ class SandboxFileStreamWriterTest : public FileStreamWriterTest {
void SetQuota(int64_t quota) { void SetQuota(int64_t quota) {
quota_manager_->SetQuota( quota_manager_->SetQuota(
blink::StorageKey::CreateFromStringForTesting(kURLOrigin), blink::StorageKey::CreateFromStringForTesting(kURLOrigin), quota);
blink::mojom::StorageType::kTemporary, quota);
} }
int64_t GetFreeQuota() { int64_t GetFreeQuota() {

@@ -1153,8 +1153,7 @@ void QuotaManagerImpl::GetBucketById(
std::move(callback))); std::move(callback)));
} }
void QuotaManagerImpl::GetStorageKeysForType(blink::mojom::StorageType type, void QuotaManagerImpl::GetAllStorageKeys(GetStorageKeysCallback callback) {
GetStorageKeysCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(callback); DCHECK(callback);
EnsureDatabaseOpened(); EnsureDatabaseOpened();
@@ -1164,12 +1163,10 @@ void QuotaManagerImpl::GetStorageKeysForType(blink::mojom::StorageType type,
return; return;
} }
PostTaskAndReplyWithResultForDBThread( PostTaskAndReplyWithResultForDBThread(
base::BindOnce( base::BindOnce([](QuotaDatabase* database) {
[](blink::mojom::StorageType type, QuotaDatabase* database) { DCHECK(database);
DCHECK(database); return database->GetStorageKeysForType(StorageType::kTemporary);
return database->GetStorageKeysForType(type); }),
},
type),
base::BindOnce(&QuotaManagerImpl::DidGetStorageKeys, base::BindOnce(&QuotaManagerImpl::DidGetStorageKeys,
weak_factory_.GetWeakPtr(), std::move(callback))); weak_factory_.GetWeakPtr(), std::move(callback)));
} }
@@ -1479,12 +1476,11 @@ void QuotaManagerImpl::OnClientWriteFailed(const StorageKey& storage_key) {
void QuotaManagerImpl::SetUsageCacheEnabled(QuotaClientType client_id, void QuotaManagerImpl::SetUsageCacheEnabled(QuotaClientType client_id,
const StorageKey& storage_key, const StorageKey& storage_key,
StorageType type,
bool enabled) { bool enabled) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
EnsureDatabaseOpened(); EnsureDatabaseOpened();
UsageTracker* usage_tracker = GetUsageTracker(type); UsageTracker* usage_tracker = GetUsageTracker(StorageType::kTemporary);
DCHECK(usage_tracker); DCHECK(usage_tracker);
usage_tracker->SetUsageCacheEnabled(client_id, storage_key, enabled); usage_tracker->SetUsageCacheEnabled(client_id, storage_key, enabled);
@@ -1612,13 +1608,12 @@ void QuotaManagerImpl::DeleteHostData(const std::string& host,
void QuotaManagerImpl::DeleteStorageKeyData( void QuotaManagerImpl::DeleteStorageKeyData(
const blink::StorageKey& storage_key, const blink::StorageKey& storage_key,
blink::mojom::StorageType type,
StatusCallback callback) { StatusCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
EnsureDatabaseOpened(); EnsureDatabaseOpened();
DCHECK(client_types_.contains(type)); DCHECK(client_types_.contains(StorageType::kTemporary));
if (client_types_[type].empty()) { if (client_types_[StorageType::kTemporary].empty()) {
std::move(callback).Run(blink::mojom::QuotaStatusCode::kOk); std::move(callback).Run(blink::mojom::QuotaStatusCode::kOk);
return; return;
} }
@@ -1627,7 +1622,7 @@ void QuotaManagerImpl::DeleteStorageKeyData(
weak_factory_.GetWeakPtr(), std::move(callback))); weak_factory_.GetWeakPtr(), std::move(callback)));
auto* buckets_deleter_ptr = buckets_deleter.get(); auto* buckets_deleter_ptr = buckets_deleter.get();
bucket_set_data_deleters_[buckets_deleter_ptr] = std::move(buckets_deleter); bucket_set_data_deleters_[buckets_deleter_ptr] = std::move(buckets_deleter);
GetBucketsForStorageKey(storage_key, type, GetBucketsForStorageKey(storage_key, StorageType::kTemporary,
buckets_deleter_ptr->GetBucketDeletionCallback()); buckets_deleter_ptr->GetBucketDeletionCallback());
} }

@@ -240,10 +240,9 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) QuotaManagerImpl
const BucketId& bucket_id, const BucketId& bucket_id,
base::OnceCallback<void(QuotaErrorOr<BucketInfo>)>); base::OnceCallback<void(QuotaErrorOr<BucketInfo>)>);
// Retrieves all storage keys for `type` that are in the buckets table. // Retrieves all storage keys that are in the buckets table.
// Used for listing storage keys when showing storage key quota usage. // Used for listing storage keys when showing storage key quota usage.
void GetStorageKeysForType(blink::mojom::StorageType type, void GetAllStorageKeys(GetStorageKeysCallback callback);
GetStorageKeysCallback callback);
// Retrieves all buckets for `type` that are in the buckets table. // Retrieves all buckets for `type` that are in the buckets table.
// Used for retrieving global usage data in the UsageTracker. // Used for retrieving global usage data in the UsageTracker.
@@ -331,7 +330,6 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) QuotaManagerImpl
void SetUsageCacheEnabled(QuotaClientType client_id, void SetUsageCacheEnabled(QuotaClientType client_id,
const blink::StorageKey& storage_key, const blink::StorageKey& storage_key,
blink::mojom::StorageType type,
bool enabled); bool enabled);
// Deletes `bucket` data for the specified `quota_client_types`. Pass in // Deletes `bucket` data for the specified `quota_client_types`. Pass in
@@ -357,7 +355,6 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) QuotaManagerImpl
// Deletes buckets of a particular blink::StorageKey. // Deletes buckets of a particular blink::StorageKey.
void DeleteStorageKeyData(const blink::StorageKey& storage_key, void DeleteStorageKeyData(const blink::StorageKey& storage_key,
blink::mojom::StorageType type,
StatusCallback callback); StatusCallback callback);
// Queries QuotaDatabase for the bucket with `storage_key` and `bucket_name` // Queries QuotaDatabase for the bucket with `storage_key` and `bucket_name`

@@ -463,8 +463,7 @@ void QuotaManagerProxy::SetUsageCacheEnabled(QuotaClientType client_id,
DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);
if (quota_manager_impl_) { if (quota_manager_impl_) {
quota_manager_impl_->SetUsageCacheEnabled( quota_manager_impl_->SetUsageCacheEnabled(client_id, storage_key, enabled);
client_id, storage_key, blink::mojom::StorageType::kTemporary, enabled);
} }
} }

@@ -266,11 +266,10 @@ class QuotaManagerImplTest : public testing::Test {
return future.Take(); return future.Take();
} }
std::set<StorageKey> GetStorageKeysForType( std::set<StorageKey> GetAllStorageKeys() {
blink::mojom::StorageType storage_type) {
base::test::TestFuture<std::set<StorageKey>> future; base::test::TestFuture<std::set<StorageKey>> future;
quota_manager_impl_->GetStorageKeysForType( quota_manager_impl_->GetAllStorageKeys(
storage_type, future.GetCallback<const std::set<StorageKey>&>()); future.GetCallback<const std::set<StorageKey>&>());
return future.Take(); return future.Take();
} }
@@ -1039,10 +1038,9 @@ TEST_F(QuotaManagerImplTest, GetBucketById) {
ASSERT_FALSE(is_db_disabled()); ASSERT_FALSE(is_db_disabled());
} }
TEST_F(QuotaManagerImplTest, GetStorageKeysForType) { TEST_F(QuotaManagerImplTest, GetAllStorageKeys) {
StorageKey storage_key_a = ToStorageKey("http://a.com/"); StorageKey storage_key_a = ToStorageKey("http://a.com/");
StorageKey storage_key_b = ToStorageKey("http://b.com/"); StorageKey storage_key_b = ToStorageKey("http://b.com/");
StorageKey storage_key_c = ToStorageKey("http://c.com/");
ASSERT_OK_AND_ASSIGN( ASSERT_OK_AND_ASSIGN(
BucketInfo bucket_a, BucketInfo bucket_a,
@@ -1052,18 +1050,11 @@ TEST_F(QuotaManagerImplTest, GetStorageKeysForType) {
BucketInfo bucket_b, BucketInfo bucket_b,
CreateBucketForTesting(storage_key_b, "bucket_b", kTemp)); CreateBucketForTesting(storage_key_b, "bucket_b", kTemp));
ASSERT_OK_AND_ASSIGN( EXPECT_THAT(GetAllStorageKeys(),
BucketInfo bucket_c,
CreateBucketForTesting(storage_key_c, kDefaultBucketName, kSync));
EXPECT_THAT(GetStorageKeysForType(kTemp),
testing::UnorderedElementsAre(storage_key_a, storage_key_b)); testing::UnorderedElementsAre(storage_key_a, storage_key_b));
EXPECT_THAT(GetStorageKeysForType(kSync),
testing::UnorderedElementsAre(storage_key_c));
} }
TEST_F(QuotaManagerImplTest, GetStorageKeysForTypeWithDatabaseError) { TEST_F(QuotaManagerImplTest, GetAllStorageKeysWithDatabaseError) {
disable_database_bootstrap(true); disable_database_bootstrap(true);
OpenDatabase(); OpenDatabase();
@@ -1071,7 +1062,7 @@ TEST_F(QuotaManagerImplTest, GetStorageKeysForTypeWithDatabaseError) {
DisableQuotaDatabase(); DisableQuotaDatabase();
// Return empty set when error is encountered. // Return empty set when error is encountered.
EXPECT_TRUE(GetStorageKeysForType(kTemp).empty()); EXPECT_TRUE(GetAllStorageKeys().empty());
} }
TEST_F(QuotaManagerImplTest, QuotaDatabaseResultHistogram) { TEST_F(QuotaManagerImplTest, QuotaDatabaseResultHistogram) {

@@ -160,9 +160,9 @@ void MockQuotaManager::GetBucketsForStorageKey(
} }
void MockQuotaManager::GetUsageAndQuota(const StorageKey& storage_key, void MockQuotaManager::GetUsageAndQuota(const StorageKey& storage_key,
StorageType type, blink::mojom::StorageType type,
UsageAndQuotaCallback callback) { UsageAndQuotaCallback callback) {
int64_t quota = quota_map_[std::make_pair(storage_key, type)].quota; int64_t quota = quota_map_[storage_key].quota;
int64_t usage = 0; int64_t usage = 0;
if (usage_map_.empty()) { if (usage_map_.empty()) {
@@ -178,8 +178,7 @@ void MockQuotaManager::GetUsageAndQuota(const StorageKey& storage_key,
for (const auto& entry : usage_map_) { for (const auto& entry : usage_map_) {
std::ignore = FindBucket(entry.first).transform([&](BucketInfo result) { std::ignore = FindBucket(entry.first).transform([&](BucketInfo result) {
storage::BucketLocator bucket_locator = result.ToBucketLocator(); storage::BucketLocator bucket_locator = result.ToBucketLocator();
if (bucket_locator.storage_key == storage_key && if (bucket_locator.storage_key == storage_key) {
bucket_locator.type == type) {
usage += usage_map_[bucket_locator].usage; usage += usage_map_[bucket_locator].usage;
} }
}); });
@@ -191,18 +190,16 @@ int64_t MockQuotaManager::GetQuotaForStorageKey(
const blink::StorageKey& storage_key, const blink::StorageKey& storage_key,
blink::mojom::StorageType type, blink::mojom::StorageType type,
const QuotaSettings& settings) const { const QuotaSettings& settings) const {
auto quota = quota_map_.find(std::make_pair(storage_key, type)); auto quota = quota_map_.find(storage_key);
if (quota != quota_map_.end()) { if (quota != quota_map_.end()) {
return quota->second.quota; return quota->second.quota;
} }
return QuotaManager::GetQuotaForStorageKey(storage_key, type, settings); return QuotaManager::GetQuotaForStorageKey(storage_key, type, settings);
} }
void MockQuotaManager::SetQuota(const StorageKey& storage_key, void MockQuotaManager::SetQuota(const StorageKey& storage_key,
StorageType type,
int64_t quota) { int64_t quota) {
quota_map_[std::make_pair(storage_key, type)].quota = quota; quota_map_[storage_key].quota = quota;
} }
bool MockQuotaManager::AddBucket(const BucketInfo& bucket, bool MockQuotaManager::AddBucket(const BucketInfo& bucket,

@@ -142,7 +142,6 @@ class MockQuotaManager : public QuotaManager {
// Helper method for updating internal quota info. // Helper method for updating internal quota info.
void SetQuota(const blink::StorageKey& storage_key, void SetQuota(const blink::StorageKey& storage_key,
blink::mojom::StorageType type,
int64_t quota); int64_t quota);
// Helper methods for timed-deletion testing: // Helper methods for timed-deletion testing:
@@ -246,9 +245,7 @@ class MockQuotaManager : public QuotaManager {
// The list of stored buckets that have been added via AddBucket. // The list of stored buckets that have been added via AddBucket.
std::vector<BucketData> buckets_; std::vector<BucketData> buckets_;
std::map<std::pair<blink::StorageKey, blink::mojom::StorageType>, std::map<blink::StorageKey, StorageKeyQuota> quota_map_;
StorageKeyQuota>
quota_map_;
std::map<BucketLocator, BucketUsage, CompareBucketLocators> usage_map_; std::map<BucketLocator, BucketUsage, CompareBucketLocators> usage_map_;
// Tracks number of times NotifyFailedWrite has been called per storage key. // Tracks number of times NotifyFailedWrite has been called per storage key.

@@ -84,23 +84,6 @@ class MockQuotaManagerTest : public testing::Test {
return result; return result;
} }
QuotaErrorOr<BucketInfo> GetOrCreateBucketDeprecated(
const blink::StorageKey& storage_key,
blink::mojom::StorageType type,
const std::string& bucket_name) {
QuotaErrorOr<BucketInfo> result;
base::RunLoop run_loop;
BucketInitParams params(storage_key, bucket_name);
manager_->GetOrCreateBucketDeprecated(
params, type,
base::BindLambdaForTesting([&](QuotaErrorOr<BucketInfo> bucket) {
result = std::move(bucket);
run_loop.Quit();
}));
run_loop.Run();
return result;
}
QuotaErrorOr<BucketInfo> GetBucket(const blink::StorageKey& storage_key, QuotaErrorOr<BucketInfo> GetBucket(const blink::StorageKey& storage_key,
const std::string& bucket_name, const std::string& bucket_name,
blink::mojom::StorageType type) { blink::mojom::StorageType type) {
@@ -159,12 +142,11 @@ class MockQuotaManagerTest : public testing::Test {
} }
void CheckUsageAndQuota(const blink::StorageKey& storage_key, void CheckUsageAndQuota(const blink::StorageKey& storage_key,
StorageType type,
const int64_t expected_usage, const int64_t expected_usage,
const int64_t expected_quota) { const int64_t expected_quota) {
base::test::TestFuture<blink::mojom::QuotaStatusCode, int64_t, int64_t> base::test::TestFuture<blink::mojom::QuotaStatusCode, int64_t, int64_t>
future; future;
manager()->GetUsageAndQuota(storage_key, type, future.GetCallback()); manager()->GetUsageAndQuota(storage_key, kTemporary, future.GetCallback());
blink::mojom::QuotaStatusCode status = future.Get<0>(); blink::mojom::QuotaStatusCode status = future.Get<0>();
int64_t usage = future.Get<1>(); int64_t usage = future.Get<1>();
@@ -485,58 +467,35 @@ TEST_F(MockQuotaManagerTest, QuotaAndUsage) {
StorageKey::CreateFromStringForTesting("http://host2:1/"); StorageKey::CreateFromStringForTesting("http://host2:1/");
ASSERT_OK_AND_ASSIGN(BucketInfo result, ASSERT_OK_AND_ASSIGN(BucketInfo result,
GetOrCreateBucketDeprecated(storage_key1, kTemporary, GetOrCreateBucket(storage_key1, kDefaultBucketName));
kDefaultBucketName)); const BucketLocator storage_key1_default_bucket = result.ToBucketLocator();
const BucketLocator storage_key1_temp_default_bucket =
result.ToBucketLocator();
ASSERT_OK_AND_ASSIGN(result, GetOrCreateBucketDeprecated( ASSERT_OK_AND_ASSIGN(result, GetOrCreateBucket(storage_key1, "non-default"));
storage_key1, kTemporary, "non-default")); const BucketLocator storage_key1_named_bucket = result.ToBucketLocator();
const BucketLocator storage_key1_temp_named_bucket = result.ToBucketLocator();
ASSERT_OK_AND_ASSIGN(
result,
GetOrCreateBucketDeprecated(storage_key1, kSyncable, kDefaultBucketName));
const BucketLocator storage_key1_sync_default_bucket =
result.ToBucketLocator();
ASSERT_OK_AND_ASSIGN(result, ASSERT_OK_AND_ASSIGN(result,
GetOrCreateBucketDeprecated(storage_key2, kTemporary, GetOrCreateBucket(storage_key2, kDefaultBucketName));
kDefaultBucketName)); const BucketLocator storage_key2_default_bucket = result.ToBucketLocator();
const BucketLocator storage_key2_temp_default_bucket =
result.ToBucketLocator();
SCOPED_TRACE( SCOPED_TRACE("Checking default usage and quota for storage_key1");
"Checking default usage and quota for storage_key1 (kTemporary)"); CheckUsageAndQuota(storage_key1, 0, std::numeric_limits<int64_t>::max());
CheckUsageAndQuota(storage_key1, kTemporary, 0,
std::numeric_limits<int64_t>::max());
manager()->SetQuota(storage_key1, kTemporary, 1000); manager()->SetQuota(storage_key1, 1000);
// Add usages in different buckets for the same storage key so that we can // Add usages in different buckets for the same storage key so that we can
// ensure that these get added together correctly. // ensure that these get added together correctly.
manager()->UpdateUsage(storage_key1_temp_default_bucket, 10); manager()->UpdateUsage(storage_key1_default_bucket, 10);
manager()->UpdateUsage(storage_key1_temp_named_bucket, 100); manager()->UpdateUsage(storage_key1_named_bucket, 100);
// Set a quota for the same storage key using a different type to test that
// these quotas don't affect one another.
manager()->SetQuota(storage_key1, kSyncable, 2000);
// Add usages for buckets tied to the same storage key but using a different
// type to test that these don't affect one another.
manager()->UpdateUsage(storage_key1_sync_default_bucket, 20);
// Set a quota and add usage for a different storage key to test that this // Set a quota and add usage for a different storage key to test that this
// doesn't affect the quota and usage of the other storage key. // doesn't affect the quota and usage of the other storage key.
manager()->SetQuota(storage_key2, kTemporary, 3000); manager()->SetQuota(storage_key2, 3000);
manager()->UpdateUsage(storage_key2_temp_default_bucket, 30); manager()->UpdateUsage(storage_key2_default_bucket, 30);
SCOPED_TRACE("Checking usage and quota for storage_key1 (kTemporary)"); SCOPED_TRACE("Checking usage and quota for storage_key1");
CheckUsageAndQuota(storage_key1, kTemporary, 110, 1000); CheckUsageAndQuota(storage_key1, 110, 1000);
SCOPED_TRACE("Checking usage and quota for storage_key1 (kSyncable)"); SCOPED_TRACE("Checking usage and quota for storage_key2");
CheckUsageAndQuota(storage_key1, kSyncable, 20, 2000); CheckUsageAndQuota(storage_key2, 30, 3000);
SCOPED_TRACE("Checking usage and quota for storage_key2 (kTemporary)");
CheckUsageAndQuota(storage_key2, kTemporary, 30, 3000);
} }
} // namespace storage } // namespace storage