Revert "Implement ClearSiteDataOnChangedSetsForContext method for FPS."
This reverts commit 6604d5dac85d24d233791d4cf889fa040004a169.
Reason for revert: Suspected culprit for multiple ASAN failures on linux bots. Example: https://ci.chromium.org/ui/p/chromium/builders/ci/linux-chromeos-dbg/30359/overview
Original change's description:
> Implement ClearSiteDataOnChangedSetsForContext method for FPS.
>
> This CL:
> - triggers site state clearing and update DB
> - adds metric to record whether clearing is successful.
>
> Bug: 1219656
> Change-Id: I406be199255b08b962f423b21ca5ca2a4e17bf4c
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3857668
> Reviewed-by: Chris Fredrickson <cfredric@chromium.org>
> Commit-Queue: Shuran Huang <shuuran@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1055983}
Bug: 1219656, 1372171
Change-Id: Ic5bb143d285536cacb413a3bba1484083ecf3963
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3937711
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Joel Hockey <joelhockey@chromium.org>
Reviewed-by: Meredith Lane <meredithl@chromium.org>
Commit-Queue: Meredith Lane <meredithl@chromium.org>
Owners-Override: Meredith Lane <meredithl@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1056092}
diff --git a/content/browser/first_party_sets/first_party_sets_handler_impl.cc b/content/browser/first_party_sets/first_party_sets_handler_impl.cc
index 8122aa6..5ba79be 100644
--- a/content/browser/first_party_sets/first_party_sets_handler_impl.cc
+++ b/content/browser/first_party_sets/first_party_sets_handler_impl.cc
@@ -10,15 +10,12 @@
#include "base/bind.h"
#include "base/files/file.h"
#include "base/logging.h"
-#include "base/metrics/histogram_functions.h"
#include "base/task/thread_pool.h"
#include "base/types/optional_util.h"
#include "base/values.h"
#include "content/browser/first_party_sets/first_party_set_parser.h"
#include "content/browser/first_party_sets/first_party_sets_loader.h"
-#include "content/browser/first_party_sets/first_party_sets_site_data_remover.h"
#include "content/browser/first_party_sets/local_set_declaration.h"
-#include "content/public/browser/browser_context.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/first_party_sets_handler.h"
#include "content/public/common/content_client.h"
@@ -33,30 +30,6 @@
constexpr base::FilePath::CharType kFirstPartySetsDatabase[] =
FILE_PATH_LITERAL("first_party_sets.db");
-using ClearSiteDataOutcomeType =
- FirstPartySetsHandlerImpl::ClearSiteDataOutcomeType;
-
-// `failed_data_types` is a bitmask used to indicate data types from
-// BrowsingDataRemover::DataType enum that were failed to remove.
-ClearSiteDataOutcomeType ComputeClearSiteDataOutcome(
- uint64_t failed_data_types) {
- ClearSiteDataOutcomeType outcome = ClearSiteDataOutcomeType::kSuccess;
- if (failed_data_types & BrowsingDataRemover::DATA_TYPE_COOKIES) {
- outcome = ClearSiteDataOutcomeType::kCookieFailed;
- }
- if (failed_data_types & BrowsingDataRemover::DATA_TYPE_DOM_STORAGE) {
- outcome = outcome == ClearSiteDataOutcomeType::kCookieFailed
- ? ClearSiteDataOutcomeType::kCookieAndStorageFailed
- : ClearSiteDataOutcomeType::kStorageFailed;
- }
- return outcome;
-}
-
-void RecordClearSiteDataOutcome(ClearSiteDataOutcomeType outcome) {
- base::UmaHistogramEnumeration(
- "FirstPartySets.Initialization.ClearSiteDataOutcomeType", outcome);
-}
-
} // namespace
// static
@@ -307,81 +280,14 @@
DCHECK(!browser_context_id.empty());
DCHECK(enabled_);
- if (db_helper_.is_null()) {
- VLOG(1) << "Invalid First-Party Sets database. Failed to clear site data "
- "for browser_context_id="
- << browser_context_id;
- std::move(callback).Run(std::move(context_config));
- return;
+ if (!db_helper_.is_null()) {
+ // TODO(crbug.com/1219656): Call site state clearing.
+ // TODO(https://crbug.com/1219656): don't invoke `callback` until site state
+ // clearing is complete.
+ db_helper_.AsyncCall(&FirstPartySetsHandlerDatabaseHelper::PersistSets)
+ .WithArgs(browser_context_id, version_, global_sets_->Clone(),
+ context_config.Clone());
}
- // Extract the callback into a variable and pass it into DB async call args,
- // to prevent the case that `context_config` gets used after it's moved. This
- // is because C++ does not have a defined evaluation order for function
- // parameters.
- base::OnceCallback<void(const std::vector<net::SchemefulSite>&)>
- on_get_sites_to_clear = base::BindOnce(
- &FirstPartySetsHandlerImpl::OnGetSitesToClear,
- // base::Unretained(this) is safe here because this
- // is a static singleton.
- base::Unretained(this), browser_context_getter, browser_context_id,
- context_config.Clone(), std::move(callback));
-
- db_helper_
- .AsyncCall(&FirstPartySetsHandlerDatabaseHelper::
- UpdateAndGetSitesToClearForContext)
- .WithArgs(browser_context_id, global_sets_->Clone(),
- std::move(context_config))
- .Then(std::move(on_get_sites_to_clear));
-}
-
-void FirstPartySetsHandlerImpl::OnGetSitesToClear(
- base::RepeatingCallback<BrowserContext*()> browser_context_getter,
- const std::string& browser_context_id,
- net::FirstPartySetsContextConfig context_config,
- base::OnceCallback<void(net::FirstPartySetsContextConfig)> callback,
- const std::vector<net::SchemefulSite>& sites_to_clear) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
- BrowserContext* browser_context = browser_context_getter.Run();
- if (!browser_context) {
- DVLOG(1) << "Invalid Browser Context. Failed to clear site data for "
- "browser_context_id="
- << browser_context_id;
-
- std::move(callback).Run(std::move(context_config));
- return;
- }
-
- FirstPartySetsSiteDataRemover::RemoveSiteData(
- *browser_context->GetBrowsingDataRemover(), sites_to_clear,
- base::BindOnce(
- &FirstPartySetsHandlerImpl::DidClearSiteDataOnChangedSetsForContext,
- // base::Unretained(this) is safe here because
- // this is a static singleton.
- base::Unretained(this), browser_context_id, std::move(context_config),
- std::move(callback)));
-}
-
-void FirstPartySetsHandlerImpl::DidClearSiteDataOnChangedSetsForContext(
- const std::string& browser_context_id,
- net::FirstPartySetsContextConfig context_config,
- base::OnceCallback<void(net::FirstPartySetsContextConfig)> callback,
- uint64_t failed_data_types) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- DCHECK(!db_helper_.is_null());
-
- ClearSiteDataOutcomeType outcome =
- ComputeClearSiteDataOutcome(failed_data_types);
- RecordClearSiteDataOutcome(outcome);
- if (outcome == ClearSiteDataOutcomeType::kSuccess) {
- db_helper_
- .AsyncCall(
- &FirstPartySetsHandlerDatabaseHelper::UpdateClearStatusForContext)
- .WithArgs(browser_context_id);
- }
- db_helper_.AsyncCall(&FirstPartySetsHandlerDatabaseHelper::PersistSets)
- .WithArgs(browser_context_id, version_, global_sets_->Clone(),
- context_config.Clone());
std::move(callback).Run(std::move(context_config));
}
diff --git a/content/browser/first_party_sets/first_party_sets_handler_impl.h b/content/browser/first_party_sets/first_party_sets_handler_impl.h
index db1fab84..20c0a7e 100644
--- a/content/browser/first_party_sets/first_party_sets_handler_impl.h
+++ b/content/browser/first_party_sets/first_party_sets_handler_impl.h
@@ -41,28 +41,6 @@
// the current First-Party Sets data to disk.
class CONTENT_EXPORT FirstPartySetsHandlerImpl : public FirstPartySetsHandler {
public:
- // The outcome types of clearing site data for data types covered in
- // FirstPartySetsSiteDataRemover. We only clear
- // `BrowsingDataRemover::DATA_TYPE_COOKIES` and
- // `BrowsingDataRemover::DATA_TYPE_DOM_STORAGE` for now. Cache is "cleared"
- // with a different approach.
- //
- // These values are persisted to logs. Entries should not be renumbered and
- // numeric values should never be reused.
- enum class ClearSiteDataOutcomeType {
- kSuccess = 0,
- // Failed to clear data type of `BrowsingDataRemover::DATA_TYPE_COOKIES`.
- kCookieFailed = 1,
- // Failed to clear data type of
- // `BrowsingDataRemover::DATA_TYPE_DOM_STORAGE`.
- kStorageFailed = 2,
- // Failed to clear both `BrowsingDataRemover::DATA_TYPE_COOKIES` and
- // `BrowsingDataRemover::DATA_TYPE_DOM_STORAGE` data types.
- kCookieAndStorageFailed = 3,
-
- kMaxValue = kCookieAndStorageFailed,
- };
-
using SetsReadyOnceCallback =
base::OnceCallback<void(net::GlobalFirstPartySets)>;
@@ -109,6 +87,7 @@
const base::Value::Dict* policy,
base::OnceCallback<void(net::FirstPartySetsContextConfig)> callback)
override;
+ // TODO(shuuran@chromium.org): Implement the code to clear site state.
void ClearSiteDataOnChangedSetsForContext(
base::RepeatingCallback<BrowserContext*()> browser_context_getter,
const std::string& browser_context_id,
@@ -174,22 +153,6 @@
net::FirstPartySetsContextConfig GetContextConfigForPolicyInternal(
const base::Value::Dict& policy) const;
- void OnGetSitesToClear(
- base::RepeatingCallback<BrowserContext*()> browser_context_getter,
- const std::string& browser_context_id,
- net::FirstPartySetsContextConfig context_config,
- base::OnceCallback<void(net::FirstPartySetsContextConfig)> callback,
- const std::vector<net::SchemefulSite>& sites_to_clear) const;
-
- // `failed_data_types` is a bitmask used to indicate data types from
- // BrowsingDataRemover::DataType enum that were failed to remove. 0 indicates
- // success.
- void DidClearSiteDataOnChangedSetsForContext(
- const std::string& browser_context_id,
- net::FirstPartySetsContextConfig context_config,
- base::OnceCallback<void(net::FirstPartySetsContextConfig)> callback,
- uint64_t failed_data_types) const;
-
// Whether Init has been called already or not.
bool initialized_ = false;
diff --git a/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc b/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc
index ca6e01a..6d77cc5 100644
--- a/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc
+++ b/content/browser/first_party_sets/first_party_sets_handler_impl_unittest.cc
@@ -12,15 +12,12 @@
#include "base/files/scoped_temp_dir.h"
#include "base/json/json_reader.h"
#include "base/run_loop.h"
-#include "base/test/metrics/histogram_tester.h"
#include "base/test/task_environment.h"
#include "base/test/test_future.h"
#include "base/version.h"
#include "content/browser/first_party_sets/first_party_set_parser.h"
#include "content/browser/first_party_sets/local_set_declaration.h"
#include "content/public/browser/first_party_sets_handler.h"
-#include "content/public/test/browser_task_environment.h"
-#include "content/public/test/test_browser_context.h"
#include "net/base/schemeful_site.h"
#include "net/first_party_sets/first_party_set_entry.h"
#include "net/first_party_sets/first_party_sets_context_config.h"
@@ -50,9 +47,6 @@
const char* kPrimaryField = "primary";
const char* kCctldsField = "ccTLDs";
-const char* kFirstPartySetsClearSiteDataOutcomeHistogram =
- "FirstPartySets.Initialization.ClearSiteDataOutcomeType";
-
BrowserContext* FakeBrowserContextGetter() {
return nullptr;
}
@@ -188,12 +182,9 @@
FirstPartySetsHandlerImpl::GetInstance()->ResetForTesting();
}
- BrowserContext* context() { return &context_; }
-
protected:
base::ScopedTempDir scoped_dir_;
- BrowserTaskEnvironment env_;
- TestBrowserContext context_;
+ base::test::TaskEnvironment env_;
};
class FirstPartySetsHandlerImplEnabledTest
@@ -227,7 +218,6 @@
TEST_F(FirstPartySetsHandlerImplEnabledTest,
ClearSiteDataOnChangedSetsForContext_Successful) {
- base::HistogramTester histogram;
net::SchemefulSite foo(GURL("https://foo.test"));
net::SchemefulSite associated(GURL("https://associatedsite.test"));
@@ -251,13 +241,11 @@
Pair(associated, net::FirstPartySetEntry(
foo, net::SiteType::kAssociated, 0))));
- // Should not yet be recorded.
- histogram.ExpectTotalCount(kFirstPartySetsClearSiteDataOutcomeHistogram, 0);
base::RunLoop run_loop;
FirstPartySetsHandlerImpl::GetInstance()
->ClearSiteDataOnChangedSetsForContext(
- base::BindLambdaForTesting([&]() { return context(); }),
- browser_context_id, net::FirstPartySetsContextConfig(),
+ base::BindRepeating(&FakeBrowserContextGetter), browser_context_id,
+ net::FirstPartySetsContextConfig(),
base::BindLambdaForTesting(
[&](net::FirstPartySetsContextConfig) { run_loop.Quit(); }));
run_loop.Run();
@@ -271,15 +259,10 @@
Pair(associated,
net::FirstPartySetEntry(foo, net::SiteType::kAssociated,
absl::nullopt))));
-
- histogram.ExpectUniqueSample(
- kFirstPartySetsClearSiteDataOutcomeHistogram,
- FirstPartySetsHandlerImpl::ClearSiteDataOutcomeType::kSuccess, 1);
}
TEST_F(FirstPartySetsHandlerImplEnabledTest,
ClearSiteDataOnChangedSetsForContext_EmptyDBPath) {
- base::HistogramTester histogram;
net::SchemefulSite foo(GURL("https://foo.test"));
net::SchemefulSite associated(GURL("https://associatedsite.test"));
@@ -313,8 +296,6 @@
run_loop.Run();
EXPECT_EQ(GetPersistedGlobalSetsAndWait(browser_context_id), absl::nullopt);
- // Should not be recorded.
- histogram.ExpectTotalCount(kFirstPartySetsClearSiteDataOutcomeHistogram, 0);
}
TEST_F(FirstPartySetsHandlerImplEnabledTest,
@@ -329,9 +310,8 @@
base::test::TestFuture<net::FirstPartySetsContextConfig> future;
FirstPartySetsHandlerImpl::GetInstance()
->ClearSiteDataOnChangedSetsForContext(
- base::BindLambdaForTesting([&]() { return context(); }),
- browser_context_id, net::FirstPartySetsContextConfig(),
- future.GetCallback());
+ base::BindRepeating(&FakeBrowserContextGetter), browser_context_id,
+ net::FirstPartySetsContextConfig(), future.GetCallback());
FirstPartySetsHandlerImpl::GetInstance()->SetPublicFirstPartySets(
base::Version("0.0.1"),
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index c3264ba..e10d5ab7 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -43636,13 +43636,6 @@
<int value="4" label="User left the page before first contentful paint"/>
</enum>
-<enum name="FirstPartySetsClearSiteDataOutcomeType">
- <int value="0" label="Success"/>
- <int value="1" label="Failed to clear cookies"/>
- <int value="2" label="Failed to clear storage"/>
- <int value="3" label="Failed to clear cookies and storage"/>
-</enum>
-
<enum name="FirstPartySetsDatabaseInitStatus">
<int value="0" label="Unattempted"/>
<int value="1" label="Success"/>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index f6a450f5..003ab36 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -6225,16 +6225,6 @@
</summary>
</histogram>
-<histogram name="FirstPartySets.Initialization.ClearSiteDataOutcomeType"
- enum="FirstPartySetsClearSiteDataOutcomeType" expires_after="2023-08-20">
- <owner>shuuran@google.com</owner>
- <owner>kaustubhag@google.com</owner>
- <summary>
- Measures the outcome of site data clearing. Recorded when First-Party Sets
- initialization triggers site data clearing for a given browser context.
- </summary>
-</histogram>
-
<histogram name="FirstRun.IOSFirebaseConfigured" enum="FirebaseConfiguredState"
expires_after="M89">
<owner>ghendel@chromium.org</owner>