Commit a23da87e authored by Tomasz Moniuszko's avatar Tomasz Moniuszko Committed by Commit Bot

Don't post delayed task after SharedProtoDatabase::Shutdown()

Bug: 546640
Change-Id: Id2685a95d05e621012bb0e9aab6b129e88e57cd7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2391144Reviewed-by: default avatarssid <ssid@chromium.org>
Reviewed-by: default avatarNico Weber <thakis@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Commit-Queue: Tomasz Moniuszko <tmoniuszko@opera.com>
Cr-Commit-Position: refs/heads/master@{#808273}
parent 37b2923f
...@@ -16,9 +16,6 @@ class TabStateDBFactoryTest : public testing::Test { ...@@ -16,9 +16,6 @@ class TabStateDBFactoryTest : public testing::Test {
TabStateDBFactoryTest() = default; TabStateDBFactoryTest() = default;
void SetUp() override { void SetUp() override {
// TODO(crbug.com/546640): This test seems to leak data across tests (on
// Windows, even temp files) because SharedProtoDatabase doesn't get
// reliably deleted upon steardown.
ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); ASSERT_TRUE(profile_dir_.CreateUniqueTempDir());
ASSERT_TRUE(different_profile_dir_.CreateUniqueTempDir()); ASSERT_TRUE(different_profile_dir_.CreateUniqueTempDir());
......
...@@ -29,6 +29,7 @@ include_rules = [ ...@@ -29,6 +29,7 @@ include_rules = [
"+components/keep_alive_registry", "+components/keep_alive_registry",
"+components/keyed_service/content", "+components/keyed_service/content",
"+components/keyed_service/core", "+components/keyed_service/core",
"+components/leveldb_proto/public",
"+components/nacl/browser", "+components/nacl/browser",
"+components/nacl/common", "+components/nacl/common",
"+components/nacl/renderer", "+components/nacl/renderer",
......
...@@ -70,6 +70,7 @@ ...@@ -70,6 +70,7 @@
#include "components/keyed_service/core/simple_dependency_manager.h" #include "components/keyed_service/core/simple_dependency_manager.h"
#include "components/keyed_service/core/simple_factory_key.h" #include "components/keyed_service/core/simple_factory_key.h"
#include "components/keyed_service/core/simple_key_map.h" #include "components/keyed_service/core/simple_key_map.h"
#include "components/leveldb_proto/public/proto_database_provider.h"
#include "components/omnibox/browser/autocomplete_classifier.h" #include "components/omnibox/browser/autocomplete_classifier.h"
#include "components/omnibox/browser/history_index_restore_observer.h" #include "components/omnibox/browser/history_index_restore_observer.h"
#include "components/omnibox/browser/in_memory_url_index.h" #include "components/omnibox/browser/in_memory_url_index.h"
...@@ -493,6 +494,16 @@ TestingProfile::~TestingProfile() { ...@@ -493,6 +494,16 @@ TestingProfile::~TestingProfile() {
if (host_content_settings_map_.get()) if (host_content_settings_map_.get())
host_content_settings_map_->ShutdownOnUIThread(); host_content_settings_map_->ShutdownOnUIThread();
// Make sure SharedProtoDatabase doesn't post delayed tasks anymore.
ForEachStoragePartition(
this,
base::BindRepeating([](content::StoragePartition* storage_partition) {
if (auto* provider =
storage_partition->GetProtoDatabaseProviderForTesting()) {
provider->SetSharedDBDeleteObsoleteDelayForTesting(base::TimeDelta());
}
}));
// Shutdown storage partitions before we post a task to delete // Shutdown storage partitions before we post a task to delete
// the resource context. // the resource context.
ShutdownStoragePartitions(); ShutdownStoragePartitions();
......
...@@ -52,4 +52,10 @@ void ProtoDatabaseProvider::GetSharedDBInstance( ...@@ -52,4 +52,10 @@ void ProtoDatabaseProvider::GetSharedDBInstance(
base::BindOnce(std::move(callback), db_)); base::BindOnce(std::move(callback), db_));
} }
void ProtoDatabaseProvider::SetSharedDBDeleteObsoleteDelayForTesting(
base::TimeDelta delay) {
if (db_)
db_->set_delete_obsolete_delay_for_testing(delay); // IN-TEST
}
} // namespace leveldb_proto } // namespace leveldb_proto
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/sequenced_task_runner.h" #include "base/sequenced_task_runner.h"
#include "base/time/time.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
#include "components/leveldb_proto/internal/proto_database_impl.h" #include "components/leveldb_proto/internal/proto_database_impl.h"
#include "components/leveldb_proto/internal/shared_proto_database_provider.h" #include "components/leveldb_proto/internal/shared_proto_database_provider.h"
...@@ -60,9 +61,10 @@ class COMPONENT_EXPORT(LEVELDB_PROTO) ProtoDatabaseProvider { ...@@ -60,9 +61,10 @@ class COMPONENT_EXPORT(LEVELDB_PROTO) ProtoDatabaseProvider {
const base::FilePath& unique_db_dir, const base::FilePath& unique_db_dir,
const scoped_refptr<base::SequencedTaskRunner>& task_runner); const scoped_refptr<base::SequencedTaskRunner>& task_runner);
virtual ~ProtoDatabaseProvider(); virtual ~ProtoDatabaseProvider();
void SetSharedDBDeleteObsoleteDelayForTesting(base::TimeDelta delay);
private: private:
friend class TestProtoDatabaseProvider; friend class TestProtoDatabaseProvider;
template <typename T_> template <typename T_>
......
...@@ -1662,6 +1662,11 @@ void StoragePartitionImpl::SetProtoDatabaseProvider( ...@@ -1662,6 +1662,11 @@ void StoragePartitionImpl::SetProtoDatabaseProvider(
proto_database_provider_ = std::move(proto_db_provider); proto_database_provider_ = std::move(proto_db_provider);
} }
leveldb_proto::ProtoDatabaseProvider*
StoragePartitionImpl::GetProtoDatabaseProviderForTesting() {
return proto_database_provider_.get();
}
void StoragePartitionImpl::OpenLocalStorage( void StoragePartitionImpl::OpenLocalStorage(
const url::Origin& origin, const url::Origin& origin,
mojo::PendingReceiver<blink::mojom::StorageArea> receiver) { mojo::PendingReceiver<blink::mojom::StorageArea> receiver) {
......
...@@ -155,6 +155,8 @@ class CONTENT_EXPORT StoragePartitionImpl ...@@ -155,6 +155,8 @@ class CONTENT_EXPORT StoragePartitionImpl
void SetProtoDatabaseProvider( void SetProtoDatabaseProvider(
std::unique_ptr<leveldb_proto::ProtoDatabaseProvider> proto_db_provider) std::unique_ptr<leveldb_proto::ProtoDatabaseProvider> proto_db_provider)
override; override;
leveldb_proto::ProtoDatabaseProvider* GetProtoDatabaseProviderForTesting()
override;
void ClearDataForOrigin(uint32_t remove_mask, void ClearDataForOrigin(uint32_t remove_mask,
uint32_t quota_storage_remove_mask, uint32_t quota_storage_remove_mask,
const GURL& storage_origin) override; const GURL& storage_origin) override;
......
...@@ -285,6 +285,11 @@ class CONTENT_EXPORT StoragePartition { ...@@ -285,6 +285,11 @@ class CONTENT_EXPORT StoragePartition {
mojo::PendingRemote<network::mojom::NetworkContext> mojo::PendingRemote<network::mojom::NetworkContext>
network_context_remote) = 0; network_context_remote) = 0;
// Returns the same provider as GetProtoDatabaseProvider() but doesn't create
// a new instance and returns nullptr instead.
virtual leveldb_proto::ProtoDatabaseProvider*
GetProtoDatabaseProviderForTesting() = 0;
// The value pointed to by |settings| should remain valid until the // The value pointed to by |settings| should remain valid until the
// the function is called again with a new value or a nullptr. // the function is called again with a new value or a nullptr.
static void SetDefaultQuotaSettingsForTesting( static void SetDefaultQuotaSettingsForTesting(
......
...@@ -127,6 +127,11 @@ TestStoragePartition::GetProtoDatabaseProvider() { ...@@ -127,6 +127,11 @@ TestStoragePartition::GetProtoDatabaseProvider() {
void TestStoragePartition::SetProtoDatabaseProvider( void TestStoragePartition::SetProtoDatabaseProvider(
std::unique_ptr<leveldb_proto::ProtoDatabaseProvider> proto_db_provider) {} std::unique_ptr<leveldb_proto::ProtoDatabaseProvider> proto_db_provider) {}
leveldb_proto::ProtoDatabaseProvider*
TestStoragePartition::GetProtoDatabaseProviderForTesting() {
return nullptr;
}
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
HostZoomMap* TestStoragePartition::GetHostZoomMap() { HostZoomMap* TestStoragePartition::GetHostZoomMap() {
return host_zoom_map_; return host_zoom_map_;
......
...@@ -142,6 +142,8 @@ class TestStoragePartition : public StoragePartition { ...@@ -142,6 +142,8 @@ class TestStoragePartition : public StoragePartition {
void SetProtoDatabaseProvider( void SetProtoDatabaseProvider(
std::unique_ptr<leveldb_proto::ProtoDatabaseProvider> proto_db_provider) std::unique_ptr<leveldb_proto::ProtoDatabaseProvider> proto_db_provider)
override; override;
leveldb_proto::ProtoDatabaseProvider* GetProtoDatabaseProviderForTesting()
override;
void set_content_index_context(ContentIndexContext* context) { void set_content_index_context(ContentIndexContext* context) {
content_index_context_ = context; content_index_context_ = context;
......
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