Skip to content

Commit

Permalink
additional cf bindings
Browse files Browse the repository at this point in the history
  • Loading branch information
SergeyZhukovsky committed Nov 4, 2020
1 parent 736807b commit 90ed5df
Show file tree
Hide file tree
Showing 9 changed files with 181 additions and 117 deletions.
5 changes: 5 additions & 0 deletions browser/android/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ source_set("android_browser_process") {
"//mojo/public/cpp/bindings",
]

if (is_android) { deps += ["//brave/content/browser/mojom",]
sources += ["//brave/content/browser/cosmetic_filters_communication_impl.cc",
"//brave/content/browser/cosmetic_filters_communication_impl.h",
"//brave/content/browser/cosmetic_filters_observer.h",]}

if (brave_ads_enabled) {
sources += [
"//brave/browser/brave_ads/android/brave_ads_native_helper.cc",
Expand Down
122 changes: 103 additions & 19 deletions browser/android/brave_cosmetic_resources_tab_helper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ const char k_observing_script[] =
"};"
"startObserving();"
"})();";

bool ShouldDoCosmeticFiltering(content::WebContents* contents,
const GURL& url) {
Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
Expand All @@ -141,7 +142,8 @@ bool ShouldDoCosmeticFiltering(content::WebContents* contents,

BraveCosmeticResourcesTabHelper::BraveCosmeticResourcesTabHelper(
content::WebContents* contents)
: WebContentsObserver(contents) {
: WebContentsObserver(contents),
enabled_1st_party_cf_filtering_(false) {
}

BraveCosmeticResourcesTabHelper::~BraveCosmeticResourcesTabHelper() {
Expand Down Expand Up @@ -218,20 +220,19 @@ void BraveCosmeticResourcesTabHelper::CSSRulesRoutine(

Profile* profile = Profile::FromBrowserContext(
web_contents()->GetBrowserContext());
render_frame_host->enabled_1st_party_cf_filtering =
enabled_1st_party_cf_filtering_ =
brave_shields::IsFirstPartyCosmeticFilteringEnabled(
HostContentSettingsMapFactory::GetForProfile(profile), url);
base::ListValue* cf_exceptions_list;
if (resources_dict->GetList("exceptions", &cf_exceptions_list)) {
for (size_t i = 0; i < cf_exceptions_list->GetSize(); i++) {
render_frame_host->cf_exceptions.push_back(
cf_exceptions_list->GetList()[i].GetString());
exceptions_.push_back(cf_exceptions_list->GetList()[i].GetString());
}
}
base::ListValue* hide_selectors_list;
base::ListValue* force_hide_selectors_list = nullptr;
if (resources_dict->GetList("hide_selectors", &hide_selectors_list)) {
if (render_frame_host->enabled_1st_party_cf_filtering) {
if (enabled_1st_party_cf_filtering_) {
// TODO
// resources.force_hide_selectors.push(...resources.hide_selectors)
force_hide_selectors_list = hide_selectors_list;
Expand All @@ -247,16 +248,6 @@ void BraveCosmeticResourcesTabHelper::CSSRulesRoutine(
"`,nextIndex);"
"nextIndex++;";
}
// cosmeticFilterConsiderNewSelectors_script +=
// "window.cosmeticStyleSheet.insertRule"
// "(`.pb-ad{display:none !important;}"
// "`,nextIndex);"
// "nextIndex++;";
// cosmeticFilterConsiderNewSelectors_script +=
// "window.cosmeticStyleSheet.insertRule"
// "(`.ad-300x250{display:none !important;}"
// "`,nextIndex);"
// "nextIndex++;";
cosmeticFilterConsiderNewSelectors_script +=
"if (!document.adoptedStyleSheets.includes("
"window.cosmeticStyleSheet)){"
Expand All @@ -278,7 +269,7 @@ void BraveCosmeticResourcesTabHelper::CSSRulesRoutine(
if (i != 0) {
styled_stylesheet += ",";
}
styled_stylesheet += hide_selectors_list->GetList()[i].GetString();
styled_stylesheet += force_hide_selectors_list->GetList()[i].GetString();
}
styled_stylesheet += "{display:none!important;}\n";
}
Expand Down Expand Up @@ -318,10 +309,93 @@ void BraveCosmeticResourcesTabHelper::CSSRulesRoutine(
//
}

std::unique_ptr<base::ListValue>
BraveCosmeticResourcesTabHelper::GetHiddenClassIdSelectorsOnTaskRunner(
const std::vector<std::string>& classes,
const std::vector<std::string>& ids) {
base::Optional<base::Value> hide_selectors = g_brave_browser_process->
ad_block_service()->HiddenClassIdSelectors(classes, ids, exceptions_);

base::Optional<base::Value> regional_selectors = g_brave_browser_process->
ad_block_regional_service_manager()->
HiddenClassIdSelectors(classes, ids, exceptions_);

base::Optional<base::Value> custom_selectors = g_brave_browser_process->
ad_block_custom_filters_service()->
HiddenClassIdSelectors(classes, ids, exceptions_);

if (hide_selectors && hide_selectors->is_list()) {
if (regional_selectors && regional_selectors->is_list()) {
for (auto i = regional_selectors->GetList().begin();
i < regional_selectors->GetList().end(); i++) {
hide_selectors->Append(std::move(*i));
}
}
} else {
hide_selectors = std::move(regional_selectors);
}

auto result_list = std::make_unique<base::ListValue>();
if (hide_selectors && hide_selectors->is_list()) {
result_list->Append(std::move(*hide_selectors));
}
if (custom_selectors && custom_selectors->is_list()) {
result_list->Append(std::move(*custom_selectors));
}

return result_list;
}

void BraveCosmeticResourcesTabHelper::GetHiddenClassIdSelectorsOnUI(
content::RenderFrameHost* render_frame_host,
std::unique_ptr<base::ListValue> selectors) {
if (!selectors) {
return;
}
if (enabled_1st_party_cf_filtering_) {
// TODO
// resources.force_hide_selectors.push(...resources.hide_selectors)
//force_hide_selectors_list = selectors;
} else {
std::string cosmeticFilterConsiderNewSelectors_script =
"(function() {"
"let nextIndex = window.cosmeticStyleSheet.rules.length;";
bool execute_script = false;
for (size_t i = 0; i < selectors->GetSize(); i++) {
base::ListValue* selectors_list = nullptr;
if (!selectors->GetList()[i].GetAsList(&selectors_list) ||
selectors_list->GetSize() == 0) {
continue;
}
for (size_t j = 0; j < selectors_list->GetSize(); j++) {
std::string rule = selectors_list->GetList()[i].GetString() +
"{display:none !important;}";
cosmeticFilterConsiderNewSelectors_script +=
"window.cosmeticStyleSheet.insertRule(`" + rule +
"`,nextIndex);"
"nextIndex++;";
execute_script = true;
LOG(ERROR) << "!!!rule == " << rule;
}
}
if (execute_script) {
cosmeticFilterConsiderNewSelectors_script +=
"if (!document.adoptedStyleSheets.includes("
"window.cosmeticStyleSheet)){"
"document.adoptedStyleSheets = [window.cosmeticStyleSheet];"
"};";
cosmeticFilterConsiderNewSelectors_script += "})();";
render_frame_host->ExecuteJavaScriptInIsolatedWorld(
base::UTF8ToUTF16(cosmeticFilterConsiderNewSelectors_script),
base::NullCallback(), ISOLATED_WORLD_ID_CHROME_INTERNAL);
}
}
}

void BraveCosmeticResourcesTabHelper::ProcessURL(
content::RenderFrameHost* render_frame_host, const GURL& url,
const bool& main_frame) {
content::CosmeticFiltersCommunicationImpl::GetInstance(render_frame_host, this);
content::CosmeticFiltersCommunicationImpl::CreateInstance(render_frame_host, this);
if (!ShouldDoCosmeticFiltering(web_contents(), url)) {
return;
}
Expand Down Expand Up @@ -367,8 +441,18 @@ bool BraveCosmeticResourcesTabHelper::OnMessageReceived(
return false;
}

void BraveCosmeticResourcesTabHelper::HiddenClassIdSelectors() {
LOG(ERROR) << "!!!here10";
void BraveCosmeticResourcesTabHelper::HiddenClassIdSelectors(
content::RenderFrameHost* render_frame_host,
const std::vector<std::string>& classes,
const std::vector<std::string>& ids) {
g_brave_browser_process->ad_block_service()->GetTaskRunner()->
PostTaskAndReplyWithResult(FROM_HERE,
base::BindOnce(&BraveCosmeticResourcesTabHelper::
GetHiddenClassIdSelectorsOnTaskRunner, base::Unretained(this),
classes, ids),
base::BindOnce(&BraveCosmeticResourcesTabHelper::
GetHiddenClassIdSelectorsOnUI, base::Unretained(this),
render_frame_host));
}

WEB_CONTENTS_USER_DATA_KEY_IMPL(BraveCosmeticResourcesTabHelper)
30 changes: 23 additions & 7 deletions browser/android/brave_cosmetic_resources_tab_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#ifndef BRAVE_BROWSER_ANDROID_BRAVE_COSMETIC_RESOURCES_TAB_HELPER_H_
#define BRAVE_BROWSER_ANDROID_BRAVE_COSMETIC_RESOURCES_TAB_HELPER_H_

#include <vector>

#include "base/memory/weak_ptr.h"
#include "brave/content/browser/cosmetic_filters_observer.h"
#include "content/public/browser/web_contents_observer.h"
Expand All @@ -31,6 +33,19 @@ class BraveCosmeticResourcesTabHelper
content::RenderFrameHost* render_frame_host) override;
bool OnMessageReceived(const IPC::Message& message) override;
//

// content::CosmeticFiltersObserver overrides:
void HiddenClassIdSelectors(content::RenderFrameHost* render_frame_host,
const std::vector<std::string>& classes,
const std::vector<std::string>& ids) override;
//

WEB_CONTENTS_USER_DATA_KEY_DECL();

private:
void ProcessURL(content::RenderFrameHost* render_frame_host, const GURL& url,
const bool& main_frame);

std::unique_ptr<base::ListValue> GetUrlCosmeticResourcesOnTaskRunner(
const std::string& url);
void GetUrlCosmeticResourcesOnUI(content::RenderFrameHost* render_frame_host,
Expand All @@ -40,15 +55,16 @@ class BraveCosmeticResourcesTabHelper
base::DictionaryValue* resources_dict,
content::RenderFrameHost* render_frame_host);

// content::CosmeticFiltersObserver overrides:
void HiddenClassIdSelectors() override;
//
std::unique_ptr<base::ListValue> GetHiddenClassIdSelectorsOnTaskRunner(
const std::vector<std::string>& classes,
const std::vector<std::string>& ids);
void GetHiddenClassIdSelectorsOnUI(
content::RenderFrameHost* render_frame_host,
std::unique_ptr<base::ListValue> selectors);

WEB_CONTENTS_USER_DATA_KEY_DECL();
std::vector<std::string> exceptions_;
bool enabled_1st_party_cf_filtering_;

private:
void ProcessURL(content::RenderFrameHost* render_frame_host, const GURL& url,
const bool& main_frame);
DISALLOW_COPY_AND_ASSIGN(BraveCosmeticResourcesTabHelper);
};

Expand Down
104 changes: 25 additions & 79 deletions content/browser/cosmetic_filters_communication_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,79 +6,41 @@
#include "brave/content/browser/cosmetic_filters_communication_impl.h"

#include "base/json/json_reader.h"
//#include "brave/browser/brave_browser_process_impl.h"
#include "brave/components/brave_shields/browser/ad_block_custom_filters_service.h"
#include "brave/components/brave_shields/browser/ad_block_regional_service_manager.h"
#include "brave/components/brave_shields/browser/ad_block_service.h"
#include "brave/content/browser/cosmetic_filters_observer.h"
#include "content/public/browser/render_frame_host.h"

namespace content {

// static
void CosmeticFiltersCommunicationImpl::GetInstance(
void CosmeticFiltersCommunicationImpl::CreateInstance(
content::RenderFrameHost* render_frame_host,
CosmeticFiltersObserver* cosmetic_filters_observer) {
CosmeticFiltersCommunicationImpl(render_frame_host, cosmetic_filters_observer);
if (!render_frame_host->cosmetic_filters_communication_impl_) {
render_frame_host->cosmetic_filters_communication_impl_.reset(
new CosmeticFiltersCommunicationImpl(
render_frame_host, cosmetic_filters_observer));
} else {
render_frame_host->cosmetic_filters_communication_impl_->SetObserver(
cosmetic_filters_observer);
}
}

CosmeticFiltersCommunicationImpl::CosmeticFiltersCommunicationImpl(
content::RenderFrameHost* render_frame_host,
CosmeticFiltersObserver* cosmetic_filters_observer)
: render_frame_host_(render_frame_host),
cosmetic_filters_observer_(cosmetic_filters_observer) {
if (cosmetic_filters_observer_) {
cosmetic_filters_observer_->HiddenClassIdSelectors();
}
}

CosmeticFiltersCommunicationImpl::~CosmeticFiltersCommunicationImpl() {
}

std::unique_ptr<base::ListValue>
CosmeticFiltersCommunicationImpl::GetHiddenClassIdSelectorsOnTaskRunner(
const std::vector<std::string>& classes,
const std::vector<std::string>& ids) {
// base::Optional<base::Value> hide_selectors = g_brave_browser_process->
// ad_block_service()->HiddenClassIdSelectors(classes, ids,
// render_frame_host_->cf_exceptions);

// base::Optional<base::Value> regional_selectors = g_brave_browser_process->
// ad_block_regional_service_manager()->
// HiddenClassIdSelectors(classes, ids,
// render_frame_host_->cf_exceptions);

// base::Optional<base::Value> custom_selectors = g_brave_browser_process->
// ad_block_custom_filters_service()->
// HiddenClassIdSelectors(classes, ids,
// render_frame_host_->cf_exceptions);

// if (hide_selectors && hide_selectors->is_list()) {
// if (regional_selectors && regional_selectors->is_list()) {
// for (auto i = regional_selectors->GetList().begin();
// i < regional_selectors->GetList().end(); i++) {
// hide_selectors->Append(std::move(*i));
// }
// }
// } else {
// hide_selectors = std::move(regional_selectors);
// }

auto result_list = std::make_unique<base::ListValue>();
// if (hide_selectors && hide_selectors->is_list()) {
// result_list->Append(std::move(*hide_selectors));
// }
// if (custom_selectors && custom_selectors->is_list()) {
// result_list->Append(std::move(*custom_selectors));
// }

return result_list;
}

void CosmeticFiltersCommunicationImpl::GetHiddenClassIdSelectorsOnUI(
std::unique_ptr<base::ListValue> selectors) {

}
void CosmeticFiltersCommunicationImpl::SetObserver(
CosmeticFiltersObserver* cosmetic_filters_observer) {
if (cosmetic_filters_observer && !cosmetic_filters_observer_) {
cosmetic_filters_observer_ = cosmetic_filters_observer;
}
}

void CosmeticFiltersCommunicationImpl::HiddenClassIdSelectors(
const std::string& input) {
Expand All @@ -95,42 +57,26 @@ void CosmeticFiltersCommunicationImpl::HiddenClassIdSelectors(
base::ListValue* classes_list;
if (input_dict->GetList("classes", &classes_list)) {
for (size_t i = 0; i < classes_list->GetSize(); i++) {
if (!classes_list->GetList()[i].is_string()) {
continue;
}
classes.push_back(classes_list->GetList()[i].GetString());
}
}
std::vector<std::string> ids;
base::ListValue* ids_list;
if (input_dict->GetList("ids", &ids_list)) {
for (size_t i = 0; i < ids_list->GetSize(); i++) {
if (!ids_list->GetList()[i].is_string()) {
continue;
}
ids.push_back(ids_list->GetList()[i].GetString());
}
}

// g_brave_browser_process->ad_block_service()->GetTaskRunner()->
// PostTaskAndReplyWithResult(FROM_HERE,
// base::BindOnce(&CosmeticFiltersCommunicationImpl::
// GetHiddenClassIdSelectorsOnTaskRunner, base::Unretained(this),
// classes, ids),
// base::BindOnce(&CosmeticFiltersCommunicationImpl::
// GetHiddenClassIdSelectorsOnUI, base::Unretained(this)));




// for (size_t i = 0; i < render_frame_host_->cf_exceptions.size(); i++) {
// LOG(ERROR) << "!!!exception == " << render_frame_host_->cf_exceptions[i];
// }

// if (render_frame_host_->enabled_1st_party_cf_filtering) {
// // TODO
// // resources.force_hide_selectors.push(...resources.hide_selectors)
// force_hide_selectors_list = hide_selectors_list;
// } else {
// }

// std::string cosmeticFilterConsiderNewSelectors_script =
// "(function() {"
// "let nextIndex = window.cosmeticStyleSheet.rules.length;";
if (cosmetic_filters_observer_) {
cosmetic_filters_observer_->HiddenClassIdSelectors(render_frame_host_,
classes, ids);
}
}

} // namespace content
Loading

0 comments on commit 90ed5df

Please sign in to comment.