Skip to content

Commit

Permalink
Using leveldb instead of local_state to store the custom scriplets.
Browse files Browse the repository at this point in the history
  • Loading branch information
boocmp committed Nov 7, 2024
1 parent 9426264 commit 0146bf7
Show file tree
Hide file tree
Showing 9 changed files with 234 additions and 115 deletions.
33 changes: 19 additions & 14 deletions browser/brave_shields/ad_block_custom_resources_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* You can obtain one at https://mozilla.org/MPL/2.0/. */

#include "base/base64.h"
#include "base/test/bind.h"
#include "base/test/scoped_feature_list.h"
#include "base/values.h"
#include "brave/browser/brave_browser_process.h"
Expand All @@ -13,16 +14,11 @@
#include "brave/components/brave_shields/core/browser/ad_block_custom_resource_provider.h"
#include "brave/components/brave_shields/core/common/features.h"
#include "chrome/browser/interstitials/security_interstitial_page_test_utils.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "url/gurl.h"

#if BUILDFLAG(IS_ANDROID)
#include "chrome/test/base/android/android_browser_test.h"
#else
#include "chrome/test/base/in_process_browser_test.h"
#endif

namespace {

void AwaitElement(content::WebContents* web_contents,
Expand Down Expand Up @@ -150,6 +146,20 @@ class AdblockCustomResourcesTest : public AdBlockServiceTest {
*custom_scriptlet.GetDict().FindStringByDottedPath("kind.mime"));
}

base::Value GetCustomResources() {
base::RunLoop loop;
base::Value result;
g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->GetCustomResources(
base::BindLambdaForTesting([&loop, &result](base::Value resources) {
result = std::move(resources);
loop.Quit();
}));
loop.Run();
return result;
}

private:
base::test::ScopedFeatureList feature_list_;
};
Expand All @@ -162,11 +172,8 @@ IN_PROC_BROWSER_TEST_F(AdblockCustomResourcesTest, AddEditRemoveScriptlet) {
ASSERT_TRUE(ClickAddCustomScriptlet(web_contents()));
SaveCustomScriptlet("custom-script", kContent);

auto* ad_block_service = g_brave_browser_process->ad_block_service();

{
const auto& custom_resources =
ad_block_service->custom_resource_provider()->GetCustomResources();
const auto& custom_resources = GetCustomResources();
ASSERT_TRUE(custom_resources.is_list());
ASSERT_EQ(1u, custom_resources.GetList().size());
CheckCustomScriptlet(custom_resources.GetList().front(),
Expand All @@ -182,8 +189,7 @@ IN_PROC_BROWSER_TEST_F(AdblockCustomResourcesTest, AddEditRemoveScriptlet) {
EXPECT_EQ(kContent, GetCustomScriptletContent(web_contents()));
SaveCustomScriptlet("custom-script-edited", kEditedContent);
{
const auto& custom_resources =
ad_block_service->custom_resource_provider()->GetCustomResources();
const auto& custom_resources = GetCustomResources();
ASSERT_TRUE(custom_resources.is_list());
ASSERT_EQ(1u, custom_resources.GetList().size());
CheckCustomScriptlet(custom_resources.GetList().front(),
Expand All @@ -193,8 +199,7 @@ IN_PROC_BROWSER_TEST_F(AdblockCustomResourcesTest, AddEditRemoveScriptlet) {
ASSERT_TRUE(ClickCustomScriplet(web_contents(),
"brave-custom-script-edited.js", "delete"));
{
const auto& custom_resources =
ad_block_service->custom_resource_provider()->GetCustomResources();
const auto& custom_resources = GetCustomResources();
ASSERT_TRUE(custom_resources.is_list());
ASSERT_TRUE(custom_resources.GetList().empty());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,7 @@
</div>
<div>
<div class="flex content">$i18n{adblockCustomScriptletDialogContentLabel}</div>
<textarea class="[[getCodeClass]]" id="scriptlet-content" multiline="true"
value="{{scriptlet.content::input}}" spellcheck="false"
<textarea id="scriptlet-content" multiline="true" value="{{scriptlet.content::input}}" spellcheck="false"
placeholder="$i18n{adblockCustomScriptletWarning}">
</textarea>
</div>
Expand Down
59 changes: 37 additions & 22 deletions browser/ui/webui/settings/brave_adblock_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -298,50 +298,65 @@ void BraveAdBlockHandler::GetCustomScriptlets(const base::Value::List& args) {
CHECK(base::FeatureList::IsEnabled(
brave_shields::features::kCosmeticFilteringCustomScriptlets));
CHECK(args.size() == 1u && args[0].is_string());
AllowJavascript();

const auto& custom_resources = g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->GetCustomResources();
g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->GetCustomResources(
base::BindOnce(&BraveAdBlockHandler::OnGetCustomScriptlets,
weak_factory_.GetWeakPtr(), args[0].GetString()));
}

ResolveJavascriptCallback(args[0].GetString(), custom_resources);
void BraveAdBlockHandler::OnGetCustomScriptlets(const std::string& callback_id,
base::Value custom_resources) {
AllowJavascript();
ResolveJavascriptCallback(callback_id, custom_resources);
}

void BraveAdBlockHandler::AddCustomScriptlet(const base::Value::List& args) {
CHECK(base::FeatureList::IsEnabled(
brave_shields::features::kCosmeticFilteringCustomScriptlets));
CHECK(args.size() == 2u && args[0].is_string() && args[1].is_dict());
AllowJavascript();
auto error_code = g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->AddResource(args[1]);
ResolveJavascriptCallback(args[0].GetString(),
base::Value(static_cast<int>(error_code)));

g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->AddResource(
args[1],
base::BindOnce(&BraveAdBlockHandler::OnScriptletUpdateStatus,
weak_factory_.GetWeakPtr(), args[0].GetString()));
}

void BraveAdBlockHandler::UpdateCustomScriptlet(const base::Value::List& args) {
CHECK(base::FeatureList::IsEnabled(
brave_shields::features::kCosmeticFilteringCustomScriptlets));
CHECK(args.size() == 3u && args[0].is_string() && args[1].is_string() &&
args[2].is_dict());
AllowJavascript();
auto error_code = g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->UpdateResource(args[1].GetString(), args[2]);
ResolveJavascriptCallback(args[0].GetString(),
base::Value(static_cast<int>(error_code)));

g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->UpdateResource(
args[1].GetString(), args[2],
base::BindOnce(&BraveAdBlockHandler::OnScriptletUpdateStatus,
weak_factory_.GetWeakPtr(), args[0].GetString()));
}

void BraveAdBlockHandler::RemoveCustomScriptlet(const base::Value::List& args) {
CHECK(base::FeatureList::IsEnabled(
brave_shields::features::kCosmeticFilteringCustomScriptlets));
CHECK(args.size() == 2u && args[0].is_string() && args[1].is_string());
AllowJavascript();
auto error_code = g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->RemoveResource(args[1].GetString());

ResolveJavascriptCallback(args[0].GetString(),
g_brave_browser_process->ad_block_service()
->custom_resource_provider()
->RemoveResource(
args[1].GetString(),
base::BindOnce(&BraveAdBlockHandler::OnScriptletUpdateStatus,
weak_factory_.GetWeakPtr(), args[0].GetString()));
}

void BraveAdBlockHandler::OnScriptletUpdateStatus(
const std::string& callback_id,
brave_shields::AdBlockCustomResourceProvider::ErrorCode error_code) {
AllowJavascript();
ResolveJavascriptCallback(callback_id,
base::Value(static_cast<int>(error_code)));
}

Expand Down
9 changes: 7 additions & 2 deletions browser/ui/webui/settings/brave_adblock_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@

#include <string>

#include "base/scoped_observation.h"

#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "brave/components/brave_shields/content/browser/ad_block_subscription_service_manager.h"
#include "brave/components/brave_shields/content/browser/ad_block_subscription_service_manager_observer.h"
#include "brave/components/brave_shields/core/browser/ad_block_custom_resource_provider.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"

class Profile;
Expand Down Expand Up @@ -50,9 +50,14 @@ class BraveAdBlockHandler : public settings::SettingsPageUIHandler,
void ViewSubscriptionSource(const base::Value::List& args);
void UpdateCustomFilters(const base::Value::List& args);
void GetCustomScriptlets(const base::Value::List& args);
void OnGetCustomScriptlets(const std::string& callback_id,
base::Value custom_resources);
void AddCustomScriptlet(const base::Value::List& args);
void UpdateCustomScriptlet(const base::Value::List& args);
void RemoveCustomScriptlet(const base::Value::List& args);
void OnScriptletUpdateStatus(
const std::string& callback_id,
brave_shields::AdBlockCustomResourceProvider::ErrorCode error_code);

void RefreshSubscriptionsList();

Expand Down
3 changes: 1 addition & 2 deletions components/brave_shields/content/browser/ad_block_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ AdBlockService::AdBlockService(
if (base::FeatureList::IsEnabled(
features::kCosmeticFilteringCustomScriptlets)) {
custom_resource_provider_ = new AdBlockCustomResourceProvider(
local_state_, std::move(default_resource_provider));
profile_dir_, std::move(default_resource_provider));
resource_provider_.reset(custom_resource_provider_.get());
} else {
resource_provider_ = std::move(default_resource_provider);
Expand Down Expand Up @@ -418,7 +418,6 @@ void RegisterPrefsForAdBlockService(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(
prefs::kAdBlockMobileNotificationsListSettingTouched, false);
registry->RegisterStringPref(prefs::kAdBlockCustomFilters, std::string());
registry->RegisterListPref(prefs::kAdBlockCustomResources);
registry->RegisterDictionaryPref(prefs::kAdBlockRegionalFilters);
registry->RegisterDictionaryPref(prefs::kAdBlockListSubscriptions);
registry->RegisterBooleanPref(prefs::kAdBlockCheckedDefaultRegion, false);
Expand Down
1 change: 1 addition & 0 deletions components/brave_shields/core/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ static_library("browser") {
"//brave/components/brave_shields/core/common",
"//components/component_updater:component_updater",
"//components/prefs",
"//components/value_store",
"//crypto",
]
public_deps = [ "//base" ]
Expand Down
Loading

0 comments on commit 0146bf7

Please sign in to comment.