Skip to content

Commit 294b7c1

Browse files
committed
Subclass ChromeBrowsingDataRemoverDelegate
We don't need to subclass HostContentsSettingsMap to clear shields settings. BraveBrowsingDataRemoverDelegateTest is added.
1 parent 7be2ab0 commit 294b7c1

22 files changed

+252
-174
lines changed

browser/browsing_data/BUILD.gn

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
source_set("browsing_data") {
22
sources = [
3+
"brave_browsing_data_remover_delegate.cc",
4+
"brave_browsing_data_remover_delegate.h",
35
"brave_clear_browsing_data.cc",
46
"brave_clear_browsing_data.h",
57
"counters/brave_site_settings_counter.cc",
@@ -9,10 +11,10 @@ source_set("browsing_data") {
911
deps = [
1012
"//base",
1113
"//chrome/common",
12-
"//content/public/browser",
1314
"//components/browsing_data/core",
1415
"//components/content_settings/core/browser",
1516
"//components/content_settings/core/common",
1617
"//components/prefs",
18+
"//content/public/browser",
1719
]
1820
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/* Copyright (c) 2020 The Brave Authors. All rights reserved.
2+
* This Source Code Form is subject to the terms of the Mozilla Public
3+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
4+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
5+
6+
#include "brave/browser/browsing_data/brave_browsing_data_remover_delegate.h"
7+
8+
#include <utility>
9+
10+
#include "brave/components/content_settings/core/browser/brave_content_settings_pref_provider.h"
11+
#include "brave/components/content_settings/core/browser/brave_content_settings_utils.h"
12+
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
13+
#include "chrome/browser/profiles/profile.h"
14+
#include "components/content_settings/core/browser/host_content_settings_map.h"
15+
16+
BraveBrowsingDataRemoverDelegate::BraveBrowsingDataRemoverDelegate(
17+
content::BrowserContext* browser_context)
18+
: ChromeBrowsingDataRemoverDelegate(browser_context),
19+
profile_(Profile::FromBrowserContext(browser_context)) {}
20+
21+
void BraveBrowsingDataRemoverDelegate::RemoveEmbedderData(
22+
const base::Time& delete_begin,
23+
const base::Time& delete_end,
24+
int remove_mask,
25+
content::BrowsingDataFilterBuilder* filter_builder,
26+
int origin_type_mask,
27+
base::OnceClosure callback) {
28+
ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(delete_begin,
29+
delete_end,
30+
remove_mask,
31+
filter_builder,
32+
origin_type_mask,
33+
std::move(callback));
34+
35+
// We do this because ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData()
36+
// doesn't clear shields settings with non all time range.
37+
// The reason is upstream assumes that plugins type only as empty string
38+
// resource ids with plugins type. but we use plugins type to store our
39+
// shields settings with non-empty resource ids.
40+
if (remove_mask & DATA_TYPE_CONTENT_SETTINGS)
41+
ClearShieldsSettings(delete_begin, delete_end);
42+
}
43+
44+
void BraveBrowsingDataRemoverDelegate::ClearShieldsSettings(
45+
base::Time begin_time,
46+
base::Time end_time) {
47+
if (begin_time.is_null() && (end_time.is_null() || end_time.is_max())) {
48+
// For all time range, we don't need to do anything here because
49+
// ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData() nukes whole
50+
// plugins type.
51+
return;
52+
}
53+
54+
auto* map = HostContentSettingsMapFactory::GetForProfile(profile_);
55+
auto* provider =
56+
static_cast<content_settings::BravePrefProvider*>(map->GetPrefProvider());
57+
for (const auto& resource_id : content_settings::GetShieldsResourceIDs()) {
58+
ContentSettingsForOneType settings;
59+
ContentSettingsType content_type = ContentSettingsType::PLUGINS;
60+
map->GetSettingsForOneType(content_type, resource_id, &settings);
61+
for (const ContentSettingPatternSource& setting : settings) {
62+
base::Time last_modified = provider->GetWebsiteSettingLastModified(
63+
setting.primary_pattern, setting.secondary_pattern, content_type,
64+
resource_id);
65+
if (last_modified >= begin_time &&
66+
(last_modified < end_time || end_time.is_null())) {
67+
provider->SetWebsiteSetting(setting.primary_pattern,
68+
setting.secondary_pattern, content_type,
69+
resource_id, nullptr);
70+
}
71+
}
72+
}
73+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/* Copyright (c) 2020 The Brave Authors. All rights reserved.
2+
* This Source Code Form is subject to the terms of the Mozilla Public
3+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
4+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
5+
6+
#ifndef BRAVE_BROWSER_BROWSING_DATA_BRAVE_BROWSING_DATA_REMOVER_DELEGATE_H_
7+
#define BRAVE_BROWSER_BROWSING_DATA_BRAVE_BROWSING_DATA_REMOVER_DELEGATE_H_
8+
9+
#include "base/time/time.h"
10+
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
11+
12+
namespace content_settings {
13+
class BravePrefProvider;
14+
} // namespace content_settings
15+
16+
class Profile;
17+
18+
class BraveBrowsingDataRemoverDelegate
19+
: public ChromeBrowsingDataRemoverDelegate {
20+
public:
21+
explicit BraveBrowsingDataRemoverDelegate(
22+
content::BrowserContext* browser_context);
23+
~BraveBrowsingDataRemoverDelegate() override = default;
24+
25+
BraveBrowsingDataRemoverDelegate(
26+
const BraveBrowsingDataRemoverDelegate&) = delete;
27+
BraveBrowsingDataRemoverDelegate operator=(
28+
const BraveBrowsingDataRemoverDelegate&) = delete;
29+
30+
private:
31+
FRIEND_TEST_ALL_PREFIXES(BraveBrowsingDataRemoverDelegateTest,
32+
ShieldsSettingsClearTest);
33+
34+
// ChromeBrowsingDataRemoverDelegate overrides:
35+
void RemoveEmbedderData(const base::Time& delete_begin,
36+
const base::Time& delete_end,
37+
int remove_mask,
38+
content::BrowsingDataFilterBuilder* filter_builder,
39+
int origin_type_mask,
40+
base::OnceClosure callback) override;
41+
42+
void ClearShieldsSettings(base::Time begin_time, base::Time end_time);
43+
44+
Profile* profile_;
45+
};
46+
47+
#endif // BRAVE_BROWSER_BROWSING_DATA_BRAVE_BROWSING_DATA_REMOVER_DELEGATE_H_
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/* Copyright (c) 2020 The Brave Authors. All rights reserved.
2+
* This Source Code Form is subject to the terms of the Mozilla Public
3+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
4+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
5+
6+
#include "brave/browser/browsing_data/brave_browsing_data_remover_delegate.h"
7+
8+
#include <memory>
9+
#include <string>
10+
#include <utility>
11+
12+
#include "base/bind.h"
13+
#include "brave/components/brave_shields/browser/brave_shields_util.h"
14+
#include "brave/components/brave_shields/common/brave_shield_constants.h"
15+
#include "brave/components/content_settings/core/browser/brave_content_settings_utils.h"
16+
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
17+
#include "chrome/test/base/testing_profile.h"
18+
#include "components/content_settings/core/browser/host_content_settings_map.h"
19+
#include "content/public/test/browser_task_environment.h"
20+
#include "testing/gtest/include/gtest/gtest.h"
21+
#include "url/gurl.h"
22+
23+
namespace {
24+
const GURL kBraveURL("https://www.brave.com");
25+
const GURL kBatURL("https://basicattentiontoken.org");
26+
const GURL kGoogleURL("https://www.google.com");
27+
const GURL kAbcURL("https://www.abc.com");
28+
} // namespace
29+
30+
class BraveBrowsingDataRemoverDelegateTest : public testing::Test {
31+
public:
32+
void SetUp() override {
33+
profile_ = std::make_unique<TestingProfile>();
34+
map_ = HostContentSettingsMapFactory::GetForProfile(profile());
35+
}
36+
37+
Profile* profile() { return profile_.get(); }
38+
39+
HostContentSettingsMap* map() { return map_.get(); }
40+
41+
BraveBrowsingDataRemoverDelegate* delegate() {
42+
return static_cast<BraveBrowsingDataRemoverDelegate*>(
43+
profile()->GetBrowsingDataRemoverDelegate());
44+
}
45+
46+
int GetShieldsSettingsCount() {
47+
int shields_settings_count = 0;
48+
for (const auto& resource_id : content_settings::GetShieldsResourceIDs()) {
49+
ContentSettingsForOneType settings;
50+
ContentSettingsType content_type = ContentSettingsType::PLUGINS;
51+
map()->GetSettingsForOneType(content_type, resource_id, &settings);
52+
shields_settings_count += settings.size();
53+
}
54+
return shields_settings_count;
55+
}
56+
57+
private:
58+
content::BrowserTaskEnvironment task_environment_;
59+
60+
std::unique_ptr<TestingProfile> profile_;
61+
scoped_refptr<HostContentSettingsMap> map_;
62+
};
63+
64+
TEST_F(BraveBrowsingDataRemoverDelegateTest, ShieldsSettingsClearTest) {
65+
// Four settings are added.
66+
// First two settings are shields settings in PLUGINS type.
67+
// Javascript is not counted as shields type because it's stored to
68+
// JAVASCRIPT type instead of PLUGINS type.
69+
// Last one is PLUGINS type but it's flash resource not shields resource.
70+
map()->SetContentSettingDefaultScope(
71+
kBraveURL, GURL(), ContentSettingsType::PLUGINS,
72+
brave_shields::kHTTPUpgradableResources, CONTENT_SETTING_ALLOW);
73+
map()->SetContentSettingDefaultScope(
74+
kBatURL, GURL(), ContentSettingsType::PLUGINS,
75+
brave_shields::kFingerprinting, CONTENT_SETTING_ALLOW);
76+
map()->SetContentSettingCustomScope(
77+
brave_shields::GetPatternFromURL(kGoogleURL, true),
78+
ContentSettingsPattern::Wildcard(),
79+
ContentSettingsType::JAVASCRIPT, "", CONTENT_SETTING_BLOCK);
80+
map()->SetContentSettingDefaultScope(
81+
kAbcURL, GURL(), ContentSettingsType::PLUGINS,
82+
"", CONTENT_SETTING_ALLOW);
83+
84+
const base::Time kNow = base::Time::Now();
85+
const base::Time k1DaysOld = kNow - base::TimeDelta::FromDays(1);
86+
87+
// Check current shields settings count is 2 and zero after clearing 1 day
88+
// time range.
89+
EXPECT_EQ(2, GetShieldsSettingsCount());
90+
delegate()->ClearShieldsSettings(k1DaysOld, kNow);
91+
EXPECT_EQ(0, GetShieldsSettingsCount());
92+
}

browser/browsing_data/counters/brave_site_settings_counter.cc

+6-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <set>
99
#include <string>
1010

11+
#include "brave/components/content_settings/core/browser/brave_content_settings_pref_provider.h"
1112
#include "brave/components/content_settings/core/browser/brave_content_settings_utils.h"
1213
#include "components/browsing_data/core/pref_names.h"
1314
#include "components/content_settings/core/browser/content_settings_registry.h"
@@ -18,9 +19,8 @@ BraveSiteSettingsCounter::BraveSiteSettingsCounter(
1819
content::HostZoomMap* zoom_map,
1920
ProtocolHandlerRegistry* handler_registry,
2021
PrefService* pref_service)
21-
: SiteSettingsCounter(map, zoom_map, handler_registry, pref_service) {
22-
map_ = static_cast<BraveHostContentSettingsMap*>(map);
23-
}
22+
: SiteSettingsCounter(map, zoom_map, handler_registry, pref_service),
23+
map_(map) {}
2424

2525
BraveSiteSettingsCounter::~BraveSiteSettingsCounter() = default;
2626

@@ -43,9 +43,11 @@ int BraveSiteSettingsCounter::CountShieldsSettings() {
4343
base::Time last_modified;
4444
DCHECK_EQ(ContentSettingsType::PLUGINS, content_type);
4545
// Fetching last time for specific resource ids.
46-
last_modified = map_->GetShieldsSettingLastModifiedDate(
46+
last_modified =
47+
map_->GetPrefProvider()->GetWebsiteSettingLastModified(
4748
content_setting.primary_pattern,
4849
content_setting.secondary_pattern,
50+
ContentSettingsType::PLUGINS,
4951
resource_identifier);
5052
if (last_modified >= period_start && last_modified < period_end) {
5153
if (content_setting.primary_pattern.GetHost().empty())

browser/browsing_data/counters/brave_site_settings_counter.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#ifndef BRAVE_BROWSER_BROWSING_DATA_COUNTERS_BRAVE_SITE_SETTINGS_COUNTER_H_
77
#define BRAVE_BROWSER_BROWSING_DATA_COUNTERS_BRAVE_SITE_SETTINGS_COUNTER_H_
88

9-
#include "brave/components/content_settings/core/browser/brave_host_content_settings_map.h"
109
#include "chrome/browser/browsing_data/counters/site_settings_counter.h"
1110

1211
// This class adds shieldss settings count
@@ -26,7 +25,7 @@ class BraveSiteSettingsCounter : public SiteSettingsCounter {
2625

2726
int CountShieldsSettings();
2827

29-
scoped_refptr<BraveHostContentSettingsMap> map_;
28+
scoped_refptr<HostContentSettingsMap> map_;
3029
};
3130

3231
#endif // BRAVE_BROWSER_BROWSING_DATA_COUNTERS_BRAVE_SITE_SETTINGS_COUNTER_H_

browser/browsing_data/counters/brave_site_settings_counter_unittest.cc

+4-5
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
#include "base/test/simple_test_clock.h"
1414
#include "brave/components/brave_shields/browser/brave_shields_util.h"
1515
#include "brave/components/brave_shields/common/brave_shield_constants.h"
16-
#include "brave/components/content_settings/core/browser/brave_host_content_settings_map.h"
1716
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
1817
#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
1918
#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
2019
#include "chrome/browser/custom_handlers/test_protocol_handler_registry_delegate.h"
2120
#include "chrome/test/base/testing_profile.h"
2221
#include "components/browsing_data/core/browsing_data_utils.h"
2322
#include "components/browsing_data/core/pref_names.h"
23+
#include "components/content_settings/core/browser/host_content_settings_map.h"
2424
#include "components/prefs/pref_service.h"
2525
#include "content/public/test/browser_task_environment.h"
2626
#include "testing/gtest/include/gtest/gtest.h"
@@ -41,8 +41,7 @@ class BraveSiteSettingsCounterTest : public testing::Test {
4141
public:
4242
void SetUp() override {
4343
profile_ = std::make_unique<TestingProfile>();
44-
map_ = static_cast<BraveHostContentSettingsMap*>(
45-
HostContentSettingsMapFactory::GetForProfile(profile()));
44+
map_ = HostContentSettingsMapFactory::GetForProfile(profile());
4645
#if !defined(OS_ANDROID)
4746
auto* zoom_map =
4847
content::HostZoomMap::GetDefaultForBrowserContext(profile());
@@ -61,7 +60,7 @@ class BraveSiteSettingsCounterTest : public testing::Test {
6160

6261
Profile* profile() { return profile_.get(); }
6362

64-
BraveHostContentSettingsMap* map() { return map_.get(); }
63+
HostContentSettingsMap* map() { return map_.get(); }
6564

6665
BraveSiteSettingsCounter* counter() { return counter_.get(); }
6766

@@ -84,7 +83,7 @@ class BraveSiteSettingsCounterTest : public testing::Test {
8483
content::BrowserTaskEnvironment task_environment_;
8584
std::unique_ptr<TestingProfile> profile_;
8685

87-
scoped_refptr<BraveHostContentSettingsMap> map_;
86+
scoped_refptr<HostContentSettingsMap> map_;
8887
std::unique_ptr<ProtocolHandlerRegistry> handler_registry_;
8988
std::unique_ptr<BraveSiteSettingsCounter> counter_;
9089
bool finished_;

chromium_src/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc

-14
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/* Copyright (c) 2020 The Brave Authors. All rights reserved.
2+
* This Source Code Form is subject to the terms of the Mozilla Public
3+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
4+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
5+
6+
#include "brave/browser/browsing_data/brave_browsing_data_remover_delegate.h"
7+
8+
#include "../../../../../chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_factory.cc"

chromium_src/chrome/browser/browsing_data/counters/browsing_data_counter_factory.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
#include "brave/browser/browsing_data/counters/brave_site_settings_counter.h"
77

88
#define SiteSettingsCounter BraveSiteSettingsCounter
9-
#include "../../../../../../chrome/browser/browsing_data/counters/browsing_data_counter_factory.cc" // NOLINT
9+
#include "../../../../../../chrome/browser/browsing_data/counters/browsing_data_counter_factory.cc"
1010
#undef SiteSettingsCounter

chromium_src/chrome/browser/content_settings/host_content_settings_map_factory.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
* You can obtain one at http://mozilla.org/MPL/2.0/. */
55

66
#include "brave/browser/profiles/profile_util.h"
7-
#include "brave/components/content_settings/core/browser/brave_host_content_settings_map.h"
87

98
#define BRAVE_BUILD_SERVICE_INSTANCE_FOR brave::IsSessionProfile(profile) ||
10-
#include "../../../../../chrome/browser/content_settings/host_content_settings_map_factory.cc" // NOLINT
9+
#include "../../../../../chrome/browser/content_settings/host_content_settings_map_factory.cc"
1110
#undef BRAVE_BUILD_SERVICE_INSTANCE_FOR

chromium_src/components/content_settings/core/browser/host_content_settings_map.h

-17
This file was deleted.

components/content_settings/core/browser/BUILD.gn

-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ source_set("browser") {
77
"brave_content_settings_pref_provider.h",
88
"brave_content_settings_utils.cc",
99
"brave_content_settings_utils.h",
10-
"brave_host_content_settings_map.cc",
11-
"brave_host_content_settings_map.h",
1210
]
1311

1412
deps = [

0 commit comments

Comments
 (0)