Commit da256090 authored by Sigurdur Asgeirsson's avatar Sigurdur Asgeirsson Committed by Commit Bot

RC: Expose the dirty bit for DB entries in chrome://discards.

Bug: 874968
Change-Id: Id87498398908bfe8cf7e6c7ab596074b0575325a
Reviewed-on: https://chromium-review.googlesource.com/1236499
Commit-Queue: Sigurður Ásgeirsson <siggi@chromium.org>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593178}
parent 7f1f6062
...@@ -128,6 +128,7 @@ class LocalSiteCharacteristicsDataImpl ...@@ -128,6 +128,7 @@ class LocalSiteCharacteristicsDataImpl
} }
const url::Origin& origin() const { return origin_; } const url::Origin& origin() const { return origin_; }
bool is_dirty() const { return is_dirty_; }
void ExpireAllObservationWindowsForTesting(); void ExpireAllObservationWindowsForTesting();
......
...@@ -93,8 +93,9 @@ void LocalSiteCharacteristicsDataStore::GetDatabaseSize( ...@@ -93,8 +93,9 @@ void LocalSiteCharacteristicsDataStore::GetDatabaseSize(
std::move(on_have_data).Run(base::nullopt, base::nullopt); std::move(on_have_data).Run(base::nullopt, base::nullopt);
} }
bool LocalSiteCharacteristicsDataStore::GetaDataForOrigin( bool LocalSiteCharacteristicsDataStore::GetDataForOrigin(
const url::Origin& origin, const url::Origin& origin,
bool* is_dirty,
std::unique_ptr<SiteCharacteristicsProto>* data) { std::unique_ptr<SiteCharacteristicsProto>* data) {
DCHECK_NE(nullptr, data); DCHECK_NE(nullptr, data);
const auto it = origin_data_map_.find(origin); const auto it = origin_data_map_.find(origin);
...@@ -104,6 +105,7 @@ bool LocalSiteCharacteristicsDataStore::GetaDataForOrigin( ...@@ -104,6 +105,7 @@ bool LocalSiteCharacteristicsDataStore::GetaDataForOrigin(
std::unique_ptr<SiteCharacteristicsProto> ret = std::unique_ptr<SiteCharacteristicsProto> ret =
std::make_unique<SiteCharacteristicsProto>(); std::make_unique<SiteCharacteristicsProto>();
ret->CopyFrom(it->second->FlushStateToProto()); ret->CopyFrom(it->second->FlushStateToProto());
*is_dirty = it->second->is_dirty();
*data = std::move(ret); *data = std::move(ret);
return true; return true;
} }
......
...@@ -63,8 +63,9 @@ class LocalSiteCharacteristicsDataStore ...@@ -63,8 +63,9 @@ class LocalSiteCharacteristicsDataStore
const char* GetDataStoreName() override; const char* GetDataStoreName() override;
std::vector<url::Origin> GetAllInMemoryOrigins() override; std::vector<url::Origin> GetAllInMemoryOrigins() override;
void GetDatabaseSize(DatabaseSizeCallback on_have_data) override; void GetDatabaseSize(DatabaseSizeCallback on_have_data) override;
bool GetaDataForOrigin( bool GetDataForOrigin(
const url::Origin& origin, const url::Origin& origin,
bool* is_dirty,
std::unique_ptr<SiteCharacteristicsProto>* data) override; std::unique_ptr<SiteCharacteristicsProto>* data) override;
LocalSiteCharacteristicsDataStore* GetDataStore() override; LocalSiteCharacteristicsDataStore* GetDataStore() override;
......
...@@ -50,11 +50,12 @@ class LocalSiteCharacteristicsDataStoreInspector { ...@@ -50,11 +50,12 @@ class LocalSiteCharacteristicsDataStoreInspector {
virtual void GetDatabaseSize(DatabaseSizeCallback on_have_data) = 0; virtual void GetDatabaseSize(DatabaseSizeCallback on_have_data) = 0;
// Retrieves the in-memory data for a given origin. // Retrieves the in-memory data for a given origin.
// On return |data| contains the available data for |origin|, or nullptr // On return |data| contains the available data for |origin| if available,
// if no data is available for this origin. // and |is_dirty| is true if the entry needs flushing to disk.
virtual bool GetaDataForOrigin( // Returns true if an entry exists for |origin|.
virtual bool GetDataForOrigin(
const url::Origin& origin, const url::Origin& origin,
/* TODO(siggi): more properties, like "dirty bit" */ bool* is_dirty,
std::unique_ptr<SiteCharacteristicsProto>* data) = 0; std::unique_ptr<SiteCharacteristicsProto>* data) = 0;
// Retrieves the data store this inspector is associated with. // Retrieves the data store this inspector is associated with.
......
...@@ -211,7 +211,9 @@ TEST_F(LocalSiteCharacteristicsDataStoreTest, InspectorWorks) { ...@@ -211,7 +211,9 @@ TEST_F(LocalSiteCharacteristicsDataStoreTest, InspectorWorks) {
// We expect an empty data store at the outset. // We expect an empty data store at the outset.
EXPECT_EQ(0U, inspector->GetAllInMemoryOrigins().size()); EXPECT_EQ(0U, inspector->GetAllInMemoryOrigins().size());
std::unique_ptr<SiteCharacteristicsProto> data; std::unique_ptr<SiteCharacteristicsProto> data;
EXPECT_FALSE(inspector->GetaDataForOrigin(kTestOrigin, &data)); bool is_dirty = false;
EXPECT_FALSE(inspector->GetDataForOrigin(kTestOrigin, &is_dirty, &data));
EXPECT_FALSE(is_dirty);
EXPECT_EQ(nullptr, data.get()); EXPECT_EQ(nullptr, data.get());
{ {
...@@ -220,8 +222,14 @@ TEST_F(LocalSiteCharacteristicsDataStoreTest, InspectorWorks) { ...@@ -220,8 +222,14 @@ TEST_F(LocalSiteCharacteristicsDataStoreTest, InspectorWorks) {
TabVisibility::kBackground); TabVisibility::kBackground);
EXPECT_EQ(1U, inspector->GetAllInMemoryOrigins().size()); EXPECT_EQ(1U, inspector->GetAllInMemoryOrigins().size());
EXPECT_TRUE(inspector->GetaDataForOrigin(kTestOrigin, &data)); EXPECT_TRUE(inspector->GetDataForOrigin(kTestOrigin, &is_dirty, &data));
EXPECT_FALSE(is_dirty);
ASSERT_NE(nullptr, data.get()); ASSERT_NE(nullptr, data.get());
// Touch the underlying data, see that the dirty bit updates.
writer->NotifySiteLoaded();
EXPECT_TRUE(inspector->GetDataForOrigin(kTestOrigin, &is_dirty, &data));
EXPECT_TRUE(is_dirty);
} }
// Make sure the interface is unregistered from the profile on destruction. // Make sure the interface is unregistered from the profile on destruction.
......
...@@ -68,13 +68,14 @@ void LocalSiteCharacteristicsNonRecordingDataStore::GetDatabaseSize( ...@@ -68,13 +68,14 @@ void LocalSiteCharacteristicsNonRecordingDataStore::GetDatabaseSize(
data_store_inspector_->GetDatabaseSize(std::move(on_have_data)); data_store_inspector_->GetDatabaseSize(std::move(on_have_data));
} }
bool LocalSiteCharacteristicsNonRecordingDataStore::GetaDataForOrigin( bool LocalSiteCharacteristicsNonRecordingDataStore::GetDataForOrigin(
const url::Origin& origin, const url::Origin& origin,
bool* is_dirty,
std::unique_ptr<SiteCharacteristicsProto>* data) { std::unique_ptr<SiteCharacteristicsProto>* data) {
if (!data_store_inspector_) if (!data_store_inspector_)
return false; return false;
return data_store_inspector_->GetaDataForOrigin(origin, data); return data_store_inspector_->GetDataForOrigin(origin, is_dirty, data);
} }
SiteCharacteristicsDataStore* SiteCharacteristicsDataStore*
......
...@@ -44,8 +44,9 @@ class LocalSiteCharacteristicsNonRecordingDataStore ...@@ -44,8 +44,9 @@ class LocalSiteCharacteristicsNonRecordingDataStore
const char* GetDataStoreName() override; const char* GetDataStoreName() override;
std::vector<url::Origin> GetAllInMemoryOrigins() override; std::vector<url::Origin> GetAllInMemoryOrigins() override;
void GetDatabaseSize(DatabaseSizeCallback on_have_data) override; void GetDatabaseSize(DatabaseSizeCallback on_have_data) override;
bool GetaDataForOrigin( bool GetDataForOrigin(
const url::Origin& origin, const url::Origin& origin,
bool* is_dirty,
std::unique_ptr<SiteCharacteristicsProto>* data) override; std::unique_ptr<SiteCharacteristicsProto>* data) override;
SiteCharacteristicsDataStore* GetDataStore() override; SiteCharacteristicsDataStore* GetDataStore() override;
......
...@@ -109,7 +109,9 @@ TEST_F(LocalSiteCharacteristicsNonRecordingDataStoreTest, InspectorWorks) { ...@@ -109,7 +109,9 @@ TEST_F(LocalSiteCharacteristicsNonRecordingDataStoreTest, InspectorWorks) {
// We expect an empty data store at the outset. // We expect an empty data store at the outset.
EXPECT_EQ(0U, inspector->GetAllInMemoryOrigins().size()); EXPECT_EQ(0U, inspector->GetAllInMemoryOrigins().size());
std::unique_ptr<SiteCharacteristicsProto> data; std::unique_ptr<SiteCharacteristicsProto> data;
EXPECT_FALSE(inspector->GetaDataForOrigin(kTestOrigin, &data)); bool is_dirty = false;
EXPECT_FALSE(inspector->GetDataForOrigin(kTestOrigin, &is_dirty, &data));
EXPECT_FALSE(is_dirty);
EXPECT_EQ(nullptr, data.get()); EXPECT_EQ(nullptr, data.get());
{ {
...@@ -119,8 +121,13 @@ TEST_F(LocalSiteCharacteristicsNonRecordingDataStoreTest, InspectorWorks) { ...@@ -119,8 +121,13 @@ TEST_F(LocalSiteCharacteristicsNonRecordingDataStoreTest, InspectorWorks) {
kTestOrigin, TabVisibility::kBackground); kTestOrigin, TabVisibility::kBackground);
EXPECT_EQ(1U, inspector->GetAllInMemoryOrigins().size()); EXPECT_EQ(1U, inspector->GetAllInMemoryOrigins().size());
EXPECT_TRUE(inspector->GetaDataForOrigin(kTestOrigin, &data)); EXPECT_TRUE(inspector->GetDataForOrigin(kTestOrigin, &is_dirty, &data));
EXPECT_FALSE(is_dirty);
ASSERT_NE(nullptr, data.get()); ASSERT_NE(nullptr, data.get());
// Touch the underlying data, see that the dirty bit updates.
writer->NotifySiteLoaded();
EXPECT_TRUE(inspector->GetDataForOrigin(kTestOrigin, &is_dirty, &data));
} }
// Make sure the interface is unregistered from the profile on destruction. // Make sure the interface is unregistered from the profile on destruction.
......
...@@ -341,11 +341,11 @@ void DiscardsDetailsProviderImpl::GetSiteCharacteristicsDatabase( ...@@ -341,11 +341,11 @@ void DiscardsDetailsProviderImpl::GetSiteCharacteristicsDatabase(
// Get the data for this origin and convert it from proto to the // Get the data for this origin and convert it from proto to the
// corresponding mojo structure. // corresponding mojo structure.
std::unique_ptr<SiteCharacteristicsProto> proto; std::unique_ptr<SiteCharacteristicsProto> proto;
if (data_store_inspector_->GetaDataForOrigin(origin, &proto)) { bool is_dirty = false;
if (data_store_inspector_->GetDataForOrigin(origin, &is_dirty, &proto)) {
auto entry = ConvertEntryFromProto(proto.get()); auto entry = ConvertEntryFromProto(proto.get());
entry->origin = origin.Serialize(); entry->origin = origin.Serialize();
// TODO(siggi): Get the dirty bit. entry->is_dirty = is_dirty;
entry->is_dirty = false;
result->db_rows.push_back(std::move(entry)); result->db_rows.push_back(std::move(entry));
} }
} }
......
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