Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Brave shields #1

Merged
merged 24 commits into from
Dec 17, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f214b88
Add Brave shields components and ad-block
bbondy Nov 11, 2017
1fd2c31
Move data reader to dat_file_util
bbondy Nov 15, 2017
6aa38cd
Refactor out common code to BaseBraveShieldsService
bbondy Nov 15, 2017
6b996df
Add TrackingProtection service
bbondy Nov 15, 2017
96fc93b
Add logic to download DAT files
bbondy Nov 16, 2017
220cca0
Add HTTPS Everywhere service (not hooked up yet)
bbondy Nov 17, 2017
7d296b9
Update DEPS for shield repos
bbondy Nov 17, 2017
91f6b99
Add brave-extension DEP
bbondy Nov 17, 2017
5179994
Add ad-block and TP extension contentSetting API
bbondy Nov 20, 2017
7649b2f
Conditionally use ad-block and TP based on content setting
bbondy Nov 19, 2017
5eec8e6
Add braveShields onBlocked extension event
bbondy Nov 20, 2017
c5d88ea
Update background process store extension
bbondy Nov 23, 2017
bd2f133
Use tab URL origin host instead of initiator origin host
bbondy Nov 24, 2017
575f632
Add brave_shields exension manifest
bbondy Nov 24, 2017
6a727e3
Add BraveNetworkDelegate and tie in HTTPS Everywhere
bbondy Dec 1, 2017
d63ad66
Refactor extension dispatch and settings to util file
bbondy Dec 2, 2017
6b90c6a
Fixes for HTTPSE caching
bbondy Dec 3, 2017
75c958b
Remove unneeded string comparison for lookups
bbondy Dec 4, 2017
5fd8b0d
Fix threading issues
bbondy Dec 6, 2017
28c5090
Fix some lint problems
bbondy Dec 6, 2017
6e18540
Reduce the amount of patch file changes
bbondy Dec 13, 2017
4a0a9f3
Don't use GetActiveProfile
bbondy Dec 13, 2017
16d5d5a
Refactor brave network delegate
bbondy Dec 15, 2017
a4e93ee
Handle extensions in antimuon
bbondy Dec 16, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ group("child_dependencies") {
group("browser_dependencies") {
public_deps = [
"//brave/browser",
"//brave/common/extensions/api"
]
}

Expand Down
9 changes: 5 additions & 4 deletions DEPS
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
use_relative_paths = True

deps = {
"vendor/ad-block": "https://github.com/brave/ad-block.git@b74f508be52931604199195905d3113bf450c851",
"vendor/tracking-protection": "https://github.com/brave/tracking-protection.git@f4e56becfc197b76cbb726b6813afe1c9dd55b88",
"vendor/hashset-cpp": "https://github.com/bbondy/hashset-cpp.git@728fd67bc269765f5a566fb1d2fd9b04b632e68a",
"vendor/bloom-filter-cpp": "https://github.com/bbondy/bloom-filter-cpp.git@b5509def04d1ecf60fdad62457a3bd09c457df90",
"vendor/ad-block": "https://github.com/brave/ad-block.git@9b1ff3275a2f4ce76ad3aaa749e4a01f32a9dabf",
"vendor/tracking-protection": "https://github.com/brave/tracking-protection.git@0931529eba33109c6b3946a83295577fea540045",
"vendor/hashset-cpp": "https://github.com/bbondy/hashset-cpp.git@f427324d667d7188a9e0975cca7f3a8c06226b4d",
"vendor/bloom-filter-cpp": "https://github.com/bbondy/bloom-filter-cpp.git@6faa14ececa33badad149c40f94ff9867159681c",
"vendor/brave-extension": "https://github.com/brave/brave-extension.git@4e7c8782e6d8c0f07b626d8f36c86093bcc7b687",
"vendor/requests": "https://github.com/kennethreitz/requests@e4d59bedfd3c7f4f254f4f5d036587bcd8152458",
"vendor/boto": "https://github.com/boto/boto@f7574aa6cc2c819430c1f05e9a1a1a666ef8169b",
"vendor/python-patch": "https://github.com/svn2github/python-patch@a336a458016ced89aba90dfc3f4c8222ae3b1403",
Expand Down
7 changes: 7 additions & 0 deletions browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ source_set("browser_process") {
sources = [
"brave_browser_process_impl.cc",
"brave_browser_process_impl.h",
"brave_tab_helpers.cc",
"brave_tab_helpers.h",
]

deps = [
Expand All @@ -20,4 +22,9 @@ source_set("browser") {
public_deps = [
"//chrome/browser",
]

deps = [
"//brave/components/brave_shields/browser:brave_shields",
"net",
]
}
40 changes: 40 additions & 0 deletions browser/brave_browser_process_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,49 @@

#include "brave/browser/brave_browser_process_impl.h"

#include "brave/components/brave_shields/browser/ad_block_service.h"
#include "brave/components/brave_shields/browser/https_everywhere_service.h"
#include "brave/components/brave_shields/browser/tracking_protection_service.h"

BraveBrowserProcessImpl* g_brave_browser_process = nullptr;


BraveBrowserProcessImpl::~BraveBrowserProcessImpl() {
}

BraveBrowserProcessImpl::BraveBrowserProcessImpl(
base::SequencedTaskRunner* local_state_task_runner,
const base::CommandLine& command_line)
: BrowserProcessImpl(local_state_task_runner, command_line) {
g_browser_process = this;
g_brave_browser_process = this;
}

brave_shields::BaseBraveShieldsService*
BraveBrowserProcessImpl::ad_block_service() {
if (ad_block_service_)
return ad_block_service_.get();

ad_block_service_ = brave_shields::AdBlockServiceFactory();
return ad_block_service_.get();
}

brave_shields::BaseBraveShieldsService*
BraveBrowserProcessImpl::tracking_protection_service() {
if (tracking_protection_service_)
return tracking_protection_service_.get();

tracking_protection_service_ =
brave_shields::TrackingProtectionServiceFactory();
return tracking_protection_service_.get();
}

brave_shields::HTTPSEverywhereService*
BraveBrowserProcessImpl::https_everywhere_service() {
if (https_everywhere_service_)
return https_everywhere_service_.get();

https_everywhere_service_ =
brave_shields::HTTPSEverywhereServiceFactory();
return https_everywhere_service_.get();
}
21 changes: 21 additions & 0 deletions browser/brave_browser_process_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,34 @@

#include "chrome/browser/browser_process_impl.h"

namespace brave_shields {
class BaseBraveShieldsService;
class HTTPSEverywhereService;
}

class BraveBrowserProcessImpl : public BrowserProcessImpl {
public:
BraveBrowserProcessImpl(base::SequencedTaskRunner* local_state_task_runner,
const base::CommandLine& command_line);
~BraveBrowserProcessImpl() override;


brave_shields::BaseBraveShieldsService* ad_block_service();
brave_shields::BaseBraveShieldsService*
tracking_protection_service();
brave_shields::HTTPSEverywhereService*
https_everywhere_service();

private:
std::unique_ptr<brave_shields::BaseBraveShieldsService> ad_block_service_;
std::unique_ptr<brave_shields::BaseBraveShieldsService>
tracking_protection_service_;
std::unique_ptr<brave_shields::HTTPSEverywhereService>
https_everywhere_service_;

DISALLOW_COPY_AND_ASSIGN(BraveBrowserProcessImpl);
};

extern BraveBrowserProcessImpl* g_brave_browser_process;

#endif // BRAVE_BROWSER_BRAVE_BROWSER_PROCESS_IMPL_H_
17 changes: 17 additions & 0 deletions browser/brave_tab_helpers.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "brave/browser/brave_tab_helpers.h"

#include "brave/components/brave_shields/browser/brave_shields_web_contents_observer.h"
#include "content/public/browser/web_contents.h"

namespace brave {

void AttachTabHelpers(content::WebContents* web_contents) {
brave_shields::BraveShieldsWebContentsObserver::CreateForWebContents(
web_contents);
}

} // namespace brave
19 changes: 19 additions & 0 deletions browser/brave_tab_helpers.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef BRAVE_BROWSER_BRAVE_TAB_HELPERS_H_
#define BRAVE_BROWSER_BRAVE_TAB_HELPERS_H_

namespace content {
class WebContents;
}

namespace brave {

void AttachTabHelpers(content::WebContents* web_contents);

} // namespace brave

#endif // BRAVE_BROWSER_BRAVE_TAB_HELPERS_H_

17 changes: 17 additions & 0 deletions browser/net/BUILD.gn
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import("//build/config/features.gni")

source_set("net") {
sources = [
"brave_network_delegate.cc",
"brave_network_delegate.h",
"brave_httpse_network_delegate.cc",
"brave_httpse_network_delegate.h",
"url_context.cc",
"url_context.h"
]
public_deps = [
"//chrome/browser",
"//content/public/browser",
"//net",
]
}
98 changes: 98 additions & 0 deletions browser/net/brave_httpse_network_delegate.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "brave/browser/net/brave_network_delegate.h"

#include "brave/browser/brave_browser_process_impl.h"
#include "brave/browser/net/brave_httpse_network_delegate.h"
#include "brave/browser/net/url_context.h"
#include "brave/components/brave_shields/browser/brave_shields_util.h"
#include "brave/components/brave_shields/browser/https_everywhere_service.h"
#include "net/url_request/url_request.h"

using content::BrowserThread;

namespace brave {

void OnBeforeURLRequest_HttpseFileWork(
net::URLRequest* request,
GURL* new_url,
std::shared_ptr<OnBeforeURLRequestContext> ctx) {
base::ThreadRestrictions::AssertIOAllowed();
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
DCHECK(ctx->request_identifier != 0);
g_brave_browser_process->https_everywhere_service()->
GetHTTPSURL(&ctx->request_url, ctx->request_identifier, ctx->new_url_spec);
}

void OnBeforeURLRequest_HttpsePostFileWork(
net::URLRequest* request,
GURL* new_url,
const ResponseCallback& next_callback,
std::shared_ptr<OnBeforeURLRequestContext> ctx) {

DCHECK_CURRENTLY_ON(BrowserThread::IO);

if (!ctx->new_url_spec.empty() &&
ctx->new_url_spec != request->url().spec()) {
*new_url = GURL(ctx->new_url_spec);
brave_shields::DispatchBlockedEventFromIO(request, "httpsEverywhere");
}

next_callback.Run();
}

int OnBeforeURLRequest_HttpsePreFileWork(
net::URLRequest* request,
GURL* new_url,
const ResponseCallback& next_callback,
std::shared_ptr<OnBeforeURLRequestContext> ctx) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);

GURL tab_origin = request->site_for_cookies().GetOrigin();
bool allow_https_everywhere = brave_shields::IsAllowContentSettingFromIO(
request, tab_origin, CONTENT_SETTINGS_TYPE_PLUGINS, "https-everywhere");
if (!allow_https_everywhere) {
return net::OK;
}

bool is_valid_url = true;
if (request) {
is_valid_url = request->url().is_valid();
std::string scheme = request->url().scheme();
if (scheme.length()) {
std::transform(scheme.begin(), scheme.end(), scheme.begin(), ::tolower);
if ("http" != scheme && "https" != scheme) {
is_valid_url = false;
}
}
}

if (is_valid_url) {
if (!g_brave_browser_process->https_everywhere_service()->
GetHTTPSURLFromCacheOnly(&request->url(), request->identifier(),
ctx->new_url_spec)) {
ctx->request_url = request->url();
BrowserThread::PostTaskAndReply(
BrowserThread::FILE, FROM_HERE,
base::Bind(OnBeforeURLRequest_HttpseFileWork,
base::Unretained(request), new_url, ctx),
base::Bind(base::IgnoreResult(
&OnBeforeURLRequest_HttpsePostFileWork),
base::Unretained(request),
new_url, next_callback, ctx)
);
return net::ERR_IO_PENDING;
} else {
if (!ctx->new_url_spec.empty()) {
*new_url = GURL(ctx->new_url_spec);
brave_shields::DispatchBlockedEventFromIO(request, "httpsEverywhere");
}
}
}

return net::OK;
}

} // namespace brave
27 changes: 27 additions & 0 deletions browser/net/brave_httpse_network_delegate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef BRAVE_BROWSER_NET_BRAVE_HTTPSE_NETWORK_DELEGATE_H_
#define BRAVE_BROWSER_NET_BRAVE_HTTPSE_NETWORK_DELEGATE_H_

#include "chrome/browser/net/chrome_network_delegate.h"
#include "brave/browser/net/url_context.h"

struct OnBeforeURLRequestContext;

namespace net {
class URLRequest;
}

namespace brave {

int OnBeforeURLRequest_HttpsePreFileWork(
net::URLRequest* request,
GURL* new_url,
const ResponseCallback& next_callback,
std::shared_ptr<OnBeforeURLRequestContext> ctx);

} // namespace brave

#endif // BRAVE_BROWSER_NET_BRAVE_NETWORK_DELEGATE_H_
Loading