Skip to content

Commit b3e162d

Browse files
authored
Additional Shields menu item to show all blocked elements(same as reset) (#27910)
Additional Shields menu item to show all blocked elements(same as reset) (brave/brave-browser#43955) --------- Signed-off-by: Vadym Struts <[email protected]>
1 parent 7bd8138 commit b3e162d

30 files changed

+249
-62
lines changed

android/brave_java_resources.gni

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,7 @@ brave_java_resources = [
794794
"java/res/layout/brave_shields_stats_row.xml",
795795
"java/res/layout/brave_shields_switcher.xml",
796796
"java/res/layout/brave_shields_thank_you_layout.xml",
797+
"java/res/layout/brave_shields_third_layout.xml",
797798
"java/res/layout/brave_shields_toggle_layout.xml",
798799
"java/res/layout/brave_shields_tooltip_layout.xml",
799800
"java/res/layout/brave_stats_bottom_sheet.xml",

android/java/org/chromium/chrome/browser/preferences/website/BraveShieldsContentSettings.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,14 @@ private void destroy() {
8787
mNativeBraveShieldsContentSettings = 0;
8888
}
8989

90+
public static void resetCosmeticFilter(String url) {
91+
BraveShieldsContentSettingsJni.get().resetCosmeticFilter(url);
92+
}
93+
94+
public static boolean areAnyBlockedElementsPresent(String url) {
95+
return BraveShieldsContentSettingsJni.get().areAnyBlockedElementsPresent(url);
96+
}
97+
9098
public static void setShields(
9199
Profile profile,
92100
String host,
@@ -288,6 +296,11 @@ interface Natives {
288296
boolean getForgetFirstPartyStorageEnabled(String url, Profile profile);
289297

290298
void setCosmeticFilteringControlType(String type, String url, Profile profile);
299+
291300
String getCosmeticFilteringControlType(String url, Profile profile);
301+
302+
void resetCosmeticFilter(String url);
303+
304+
boolean areAnyBlockedElementsPresent(String url);
292305
}
293306
}

android/java/org/chromium/chrome/browser/shields/BraveShieldsHandler.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public BlockersInfo() {
111111
private View mAnchorView;
112112
private LinearLayout mMainLayout;
113113
private LinearLayout mSecondaryLayout;
114+
private LinearLayout mThirdLayout;
114115
private LinearLayout mAboutLayout;
115116
private LinearLayout mToggleLayout;
116117
private LinearLayout mThankYouLayout;
@@ -449,6 +450,7 @@ public void hideBraveShieldsMenu() {
449450
private void initViews() {
450451
mMainLayout = mPopupView.findViewById(R.id.main_layout);
451452
mSecondaryLayout = mPopupView.findViewById(R.id.brave_shields_secondary_layout_id);
453+
mThirdLayout = mPopupView.findViewById(R.id.brave_shields_third_layout_id);
452454
mAboutLayout = mPopupView.findViewById(R.id.brave_shields_about_layout_id);
453455
mToggleLayout = mPopupView.findViewById(R.id.brave_shields_toggle_layout_id);
454456
mSiteBlockCounterText = mPopupView.findViewById(R.id.site_block_count_text);
@@ -504,12 +506,24 @@ public void onClick(View v) {
504506
});
505507

506508
mToggleIcon.setColorFilter(mContext.getColor(R.color.shield_toggle_button_tint));
507-
mToggleLayout.setOnClickListener(new View.OnClickListener() {
508-
@Override
509-
public void onClick(View view) {
510-
setToggleView(!mSecondaryLayout.isShown());
511-
}
512-
});
509+
mToggleLayout.setOnClickListener(
510+
new View.OnClickListener() {
511+
@Override
512+
public void onClick(View view) {
513+
setToggleView(!mSecondaryLayout.isShown());
514+
}
515+
});
516+
mThirdLayout.setOnClickListener(
517+
new View.OnClickListener() {
518+
@Override
519+
public void onClick(View view) {
520+
BraveShieldsContentSettings.resetCosmeticFilter(mUrlSpec);
521+
hideBraveShieldsMenu();
522+
523+
Tab currentActiveTab = mIconFetcher.getTab();
524+
currentActiveTab.reload();
525+
}
526+
});
513527

514528
ImageView mPrivacyReportIcon = mPrivacyReportLayout.findViewById(R.id.toggle_favicon);
515529
mPrivacyReportIcon.setImageResource(R.drawable.ic_arrow_forward);
@@ -1020,6 +1034,10 @@ public void onClick(View view) {
10201034
mSiteBlockLayout.setVisibility(View.VISIBLE);
10211035
siteBrokenWarningText.setVisibility(View.VISIBLE);
10221036
mToggleLayout.setVisibility(View.VISIBLE);
1037+
mThirdLayout.setVisibility(
1038+
BraveShieldsContentSettings.areAnyBlockedElementsPresent(mUrlSpec)
1039+
? View.VISIBLE
1040+
: View.GONE);
10231041

10241042
String mUpText = mContext.getResources().getString(R.string.up);
10251043
SpannableString mSpanString = new SpannableString(mBraveShieldsText + " " + mUpText);
@@ -1032,6 +1050,7 @@ public void onClick(View view) {
10321050
mSiteBlockLayout.setVisibility(View.GONE);
10331051
siteBrokenWarningText.setVisibility(View.GONE);
10341052
mToggleLayout.setVisibility(View.GONE);
1053+
mThirdLayout.setVisibility(View.GONE);
10351054
setToggleView(false);
10361055

10371056
String mDownText = mContext.getResources().getString(R.string.down);

android/java/res/layout/brave_shields_main_layout.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@
137137
android:id="@+id/brave_shields_privacy_report_layout_id"
138138
layout="@layout/brave_shields_toggle_layout"/>
139139

140+
<include
141+
android:id="@+id/brave_shields_third_layout_id"
142+
layout="@layout/brave_shields_third_layout"/>
140143
</LinearLayout>
141144

142145
<include
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- Copyright (c) 2025 The Brave Authors. All rights reserved.
3+
This Source Code Form is subject to the terms of the Mozilla Public
4+
License, v. 2.0. If a copy of the MPL was not distributed with this file,
5+
You can obtain one at https://mozilla.org/MPL/2.0/. -->
6+
7+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
8+
xmlns:app="http://schemas.android.com/apk/res-auto"
9+
xmlns:tools="http://schemas.android.com/tools"
10+
android:orientation="vertical"
11+
android:layout_width="match_parent"
12+
android:layout_height="wrap_content"
13+
android:background="@color/shield_toggle_bg_color">
14+
15+
<View
16+
android:layout_width="match_parent"
17+
android:layout_height="1dp"
18+
android:alpha="0.5"
19+
android:background="@color/shield_divider_color"/>
20+
21+
<TextView
22+
android:id="@+id/show_all_blocked_elements_text"
23+
android:layout_width="wrap_content"
24+
android:layout_height="0dp"
25+
android:layout_weight="1"
26+
android:paddingHorizontal="16dp"
27+
android:paddingVertical="16dp"
28+
android:textSize="14sp"
29+
android:fontFamily="sans-serif"
30+
android:layout_gravity="center_vertical"
31+
android:textColor="@color/shield_text_color"
32+
android:text="@string/show_all_blocked_elements"/>
33+
34+
</LinearLayout>

browser/android/brave_shields_content_settings.cc

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
#include "base/android/jni_android.h"
1111
#include "base/android/jni_string.h"
12+
#include "brave/browser/brave_browser_process.h"
13+
#include "brave/components/brave_shields/content/browser/ad_block_service.h"
1214
#include "brave/components/brave_shields/content/browser/brave_shields_util.h"
1315
#include "chrome/android/chrome_jni_headers/BraveShieldsContentSettings_jni.h"
1416
#include "chrome/browser/browser_process.h"
@@ -159,6 +161,21 @@ void JNI_BraveShieldsContentSettings_SetCosmeticFilteringControlType(
159161
Profile::FromJavaObject(j_profile)->GetPrefs());
160162
}
161163

164+
void JNI_BraveShieldsContentSettings_ResetCosmeticFilter(
165+
JNIEnv* env,
166+
const base::android::JavaParamRef<jstring>& url) {
167+
g_brave_browser_process->ad_block_service()->ResetCosmeticFilter(
168+
GURL(base::android::ConvertJavaStringToUTF8(env, url)).host());
169+
}
170+
171+
jboolean JNI_BraveShieldsContentSettings_AreAnyBlockedElementsPresent(
172+
JNIEnv* env,
173+
const base::android::JavaParamRef<jstring>& url) {
174+
return g_brave_browser_process->ad_block_service()
175+
->AreAnyBlockedElementsPresent(
176+
GURL(base::android::ConvertJavaStringToUTF8(env, url)).host());
177+
}
178+
162179
base::android::ScopedJavaLocalRef<jstring>
163180
JNI_BraveShieldsContentSettings_GetCookieControlType(JNIEnv* env,
164181
const base::android::JavaParamRef<jstring>& url,

browser/brave_shields/ad_block_service_browsertest.cc

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -114,29 +114,14 @@ using brave_shields::features::kBraveAdblockScriptletDebugLogs;
114114
using brave_shields::features::kCosmeticFilteringJsPerformance;
115115

116116
namespace {
117-
118-
void WaitForSelector(const content::ToRenderFrameHost& target,
119-
const std::string& selector,
120-
const bool must_be_blocked) {
121-
static constexpr char kTemplate[] = R"(waitCSSSelector($1, 'display', $2))";
122-
ASSERT_TRUE(
123-
EvalJs(target, content::JsReplace(kTemplate, selector,
124-
must_be_blocked ? "none" : "block"))
125-
.ExtractBool());
126-
}
127-
128117
void WaitForSelectorBlocked(const content::ToRenderFrameHost& target,
129118
const std::string& selector) {
130-
WaitForSelector(target, selector, true);
131-
}
119+
static constexpr char kTemplate[] =
120+
R"(waitCSSSelector($1, 'display', 'none'))";
132121

133-
#if !BUILDFLAG(IS_ANDROID)
134-
void WaitForSelectorVisible(const content::ToRenderFrameHost& target,
135-
const std::string& selector) {
136-
WaitForSelector(target, selector, false);
122+
ASSERT_TRUE(
123+
EvalJs(target, content::JsReplace(kTemplate, selector)).ExtractBool());
137124
}
138-
#endif // !BUILDFLAG(IS_ANDROID)
139-
140125
} // namespace
141126

142127
AdBlockServiceTest::AdBlockServiceTest()
@@ -3060,16 +3045,14 @@ IN_PROC_BROWSER_TEST_F(AdBlockServiceTest, ContentPicker) {
30603045

30613046
click_menu();
30623047
// Emulate clicking `Manage filters`.
3063-
ASSERT_TRUE(content::ExecJs(web_contents(),
3064-
"cf_worker.resetSiteCosmeticFilter()",
3048+
ASSERT_TRUE(content::ExecJs(web_contents(), "cf_worker.manageCustomFilters()",
30653049
content::EXECUTE_SCRIPT_DEFAULT_OPTIONS,
30663050
ISOLATED_WORLD_ID_BRAVE_INTERNAL));
30673051

3068-
// Reload the page and check the selector is not blocked.
3069-
NavigateToURL(tab_url);
3070-
WaitForSelectorVisible(web_contents(), "#ad-banner");
3071-
EXPECT_FALSE(
3072-
content::EvalJs(web_contents(), kPickerIsInjected).ExtractBool());
3052+
ASSERT_EQ(2, browser()->tab_strip_model()->count());
3053+
ASSERT_TRUE(content::WaitForLoadStop(web_contents()));
3054+
EXPECT_EQ(web_contents()->GetLastCommittedURL(),
3055+
"chrome://settings/shields/filters");
30733056

30743057
ShieldsDown(tab_url);
30753058
NavigateToURL(tab_url);

browser/cosmetic_filters/cosmetic_filters_tab_helper.cc

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,15 @@
1111
#include "base/strings/string_util.h"
1212
#include "brave/browser/brave_browser_process.h"
1313
#include "brave/components/brave_shields/content/browser/ad_block_service.h"
14-
#include "content/public/browser/reload_type.h"
14+
#include "content/public/browser/browser_context.h"
1515
#include "content/public/browser/web_contents.h"
1616
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
1717

1818
#if !BUILDFLAG(IS_ANDROID)
1919
#include "brave/browser/ui/brave_pages.h"
20-
#include "chrome/browser/themes/theme_service.h"
21-
#include "chrome/browser/ui/browser.h"
22-
#include "chrome/browser/ui/browser_finder.h"
23-
#include "chrome/browser/ui/browser_window.h"
20+
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
2421
#include "chrome/browser/ui/color/chrome_color_id.h"
22+
#include "chrome/browser/ui/tabs/public/tab_interface.h"
2523
#include "ui/color/color_provider.h"
2624
#else
2725
#include "brave/browser/android/cosmetic_filters/cosmetic_filters_utils.h"
@@ -88,12 +86,22 @@ void CosmeticFiltersTabHelper::AddSiteCosmeticFilter(
8886
}
8987
}
9088

91-
void CosmeticFiltersTabHelper::ResetCosmeticFilterForCurrentHost() {
92-
const auto* sender_rfh = receivers_.GetCurrentTargetFrame();
93-
CHECK(sender_rfh);
94-
g_brave_browser_process->ad_block_service()->ResetCosmeticFilter(
95-
sender_rfh->GetLastCommittedOrigin().host());
96-
GetWebContents().GetController().Reload(content::ReloadType::NORMAL, true);
89+
void CosmeticFiltersTabHelper::ManageCustomFilters() {
90+
#if !BUILDFLAG(IS_ANDROID)
91+
auto* tab_interface =
92+
tabs::TabInterface::MaybeGetFromContents(&GetWebContents());
93+
if (!tab_interface) {
94+
return;
95+
}
96+
auto* browser_window_interface = tab_interface->GetBrowserWindowInterface();
97+
if (!browser_window_interface) {
98+
return;
99+
}
100+
brave::ShowBraveAdblock(
101+
browser_window_interface->GetBrowserForMigrationOnly());
102+
#else // !BUILDFLAG(IS_ANDROID)
103+
ShowCustomFilterSettings();
104+
#endif // !BUILDFLAG(IS_ANDROID)
97105
}
98106

99107
void CosmeticFiltersTabHelper::GetElementPickerThemeInfo(

browser/cosmetic_filters/cosmetic_filters_tab_helper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ class CosmeticFiltersTabHelper
3131

3232
private:
3333
void AddSiteCosmeticFilter(const std::string& filter) override;
34+
void ManageCustomFilters() override;
3435
void GetElementPickerThemeInfo(
3536
GetElementPickerThemeInfoCallback callback) override;
36-
void ResetCosmeticFilterForCurrentHost() override;
3737

3838
friend class content::WebContentsUserData<CosmeticFiltersTabHelper>;
3939

browser/cosmetic_filters/sources.gni

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ brave_browser_cosmetic_filters_sources = [
1010

1111
brave_browser_cosmetic_filters_deps = [
1212
"//base",
13-
"//brave/browser:browser_process",
1413
"//brave/components/cosmetic_filters/common:mojom",
1514
"//chrome/browser/ui",
1615
"//third_party/blink/public/common",

browser/ui/android/strings/android_brave_strings.grd

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1700,6 +1700,9 @@ Are you sure you want to do this?
17001700
<message name="IDS_ADVANCED_CONTROLS" desc="Title for toggle section.">
17011701
Advanced controls
17021702
</message>
1703+
<message name="IDS_SHOW_ALL_BLOCKED_ELEMENTS" desc="Text for show all block elements button.">
1704+
Clear all blocked elements
1705+
</message>
17031706
<message name="IDS_UPDATE_NOTIFICATION_TITLE" desc="Title of notification on application update.">
17041707
Save Data Online
17051708
</message>

browser/ui/webui/brave_shields/shields_panel_data_handler.cc

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
#include <utility>
99

10+
#include "brave/browser/brave_browser_process.h"
1011
#include "brave/browser/ui/webui/webcompat_reporter/webcompat_reporter_dialog.h"
12+
#include "brave/components/brave_shields/content/browser/ad_block_service.h"
1113
#include "chrome/browser/ui/tabs/tab_strip_model.h"
1214
#include "chrome/browser/ui/webui/top_chrome/top_chrome_web_ui_controller.h"
1315

@@ -182,6 +184,23 @@ void ShieldsPanelDataHandler::OpenWebCompatWindow() {
182184
webcompat_reporter::UISource::kShieldsPanel);
183185
}
184186

187+
void ShieldsPanelDataHandler::AreAnyBlockedElementsPresent(
188+
AreAnyBlockedElementsPresentCallback callback) {
189+
std::move(callback).Run(
190+
g_brave_browser_process->ad_block_service()->AreAnyBlockedElementsPresent(
191+
active_shields_data_controller_->web_contents()->GetURL().host()));
192+
}
193+
194+
void ShieldsPanelDataHandler::ResetBlockedElements() {
195+
g_brave_browser_process->ad_block_service()->ResetCosmeticFilter(
196+
active_shields_data_controller_->web_contents()->GetURL().host());
197+
198+
webui_controller_->embedder()->CloseUI();
199+
200+
active_shields_data_controller_->web_contents()->GetController().Reload(
201+
content::ReloadType::NORMAL, true);
202+
}
203+
185204
void ShieldsPanelDataHandler::UpdateFavicon() {
186205
if (!active_shields_data_controller_) {
187206
return;

browser/ui/webui/brave_shields/shields_panel_data_handler.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ class ShieldsPanelDataHandler
5454
void BlockAllowedScripts(const std::vector<std::string>& origins) override;
5555
void SetWebcompatEnabled(ContentSettingsType webcompat_settings_type,
5656
bool enabled) override;
57+
void ResetBlockedElements() override;
58+
void AreAnyBlockedElementsPresent(
59+
AreAnyBlockedElementsPresentCallback callback) override;
5760

5861
private:
5962
void UpdateSiteBlockInfo();

browser/ui/webui/brave_shields/shields_panel_ui.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ ShieldsPanelUI::ShieldsPanelUI(content::WebUI* web_ui)
6969
content::URLDataSource::Add(
7070
profile_, std::make_unique<FaviconSource>(
7171
profile_, chrome::FaviconUrlFormat::kFavicon2));
72-
7372
webui::SetupWebUIDataSource(source, kBraveShieldsPanelGenerated,
7473
IDR_SHIELDS_PANEL_HTML);
7574
}

components/brave_shields/content/browser/ad_block_custom_filter_reset_util.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,22 @@ std::optional<std::string> ResetCustomFiltersForHost(
5353
return result;
5454
}
5555

56+
bool IsCustomFiltersAvailable(const std::string& host,
57+
const std::string& custom_filters) {
58+
if (host.empty() || custom_filters.empty()) {
59+
return false;
60+
}
61+
62+
const auto starts_with_str = base::StrCat({host, "##"});
63+
base::StringTokenizer tokenizer(custom_filters, "\n");
64+
while (tokenizer.GetNext()) {
65+
const std::string token{
66+
base::TrimWhitespaceASCII(tokenizer.token(), base::TRIM_ALL)};
67+
if (token.starts_with(starts_with_str) && !IsInAllowList(token)) {
68+
return true;
69+
}
70+
}
71+
return false;
72+
}
73+
5674
} // namespace brave_shields

components/brave_shields/content/browser/ad_block_custom_filter_reset_util.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ std::optional<std::string> ResetCustomFiltersForHost(
1515
const std::string& host,
1616
const std::string& custom_filters);
1717

18+
bool IsCustomFiltersAvailable(const std::string& host,
19+
const std::string& custom_filters);
20+
1821
} // namespace brave_shields
1922

2023
#endif // BRAVE_COMPONENTS_BRAVE_SHIELDS_CONTENT_BROWSER_AD_BLOCK_CUSTOM_FILTER_RESET_UTIL_H_

0 commit comments

Comments
 (0)