Skip to content

Commit

Permalink
Merge pull request #2583 from brave/bsc-user-agent-update
Browse files Browse the repository at this point in the history
Revert changes to user agent after experiencing webcompat issues in Dev/Nightly
  • Loading branch information
bsclifton authored Jun 4, 2019
2 parents aa8d929 + 42f559e commit 13101cf
Show file tree
Hide file tree
Showing 25 changed files with 570 additions and 96 deletions.
1 change: 0 additions & 1 deletion browser/brave_content_browser_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#include "brave/browser/renderer_host/brave_navigation_ui_data.h"
#include "brave/browser/tor/buildflags.h"
#include "brave/common/brave_cookie_blocking.h"
#include "brave/common/brave_switches.h"
#include "brave/common/tor/switches.h"
#include "brave/common/tor/tor_launcher.mojom.h"
#include "brave/common/webui_url_constants.h"
Expand Down
28 changes: 0 additions & 28 deletions browser/brave_content_browser_client_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include "base/strings/utf_string_conversions.h"
#include "brave/browser/brave_content_browser_client.h"
#include "brave/common/brave_paths.h"
#include "brave/common/brave_switches.h"
#include "brave/common/extensions/extension_constants.h"
#include "brave/common/pref_names.h"
#include "brave/components/brave_rewards/browser/buildflags/buildflags.h"
Expand All @@ -27,7 +26,6 @@
#include "chrome/test/base/ui_test_utils.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/prefs/pref_service.h"
#include "components/version_info/version_info.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_navigation_observer.h"
Expand Down Expand Up @@ -530,29 +528,3 @@ IN_PROC_BROWSER_TEST_F(BraveContentBrowserClientReferrerTest,
&referrer);
EXPECT_EQ(referrer.url, kDocumentUrl);
}

IN_PROC_BROWSER_TEST_F(BraveContentBrowserClientTest, OverrideUATest) {
const std::string appended_ua =
"Brave/" + version_info::GetMajorVersionNumber();
content::EvalJsResult js_result =
EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
"navigator.userAgent");
EXPECT_TRUE(js_result.ExtractString().find(appended_ua) != std::string::npos);
}

class BraveContentBrowserClientWithoutUAOverride
: public BraveContentBrowserClientTest {
public:
void SetUpDefaultCommandLine(base::CommandLine* command_line) override {
BraveContentBrowserClientTest::SetUpDefaultCommandLine(command_line);
command_line->AppendSwitch(switches::kDisableOverrideUA);
}
};

IN_PROC_BROWSER_TEST_F(BraveContentBrowserClientWithoutUAOverride,
DisableOverrideUATest) {
content::EvalJsResult js_result =
EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
"navigator.userAgent");
EXPECT_EQ(js_result.ExtractString(), GetUserAgent());
}
12 changes: 12 additions & 0 deletions browser/net/BUILD.gn
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import("//brave/browser/tor/buildflags/buildflags.gni")
import("//brave/browser/translate/buildflags/buildflags.gni")
import("//brave/components/brave_referrals/buildflags/buildflags.gni")
import("//brave/components/brave_webtorrent/browser/buildflags/buildflags.gni")
import("//build/config/features.gni")

Expand Down Expand Up @@ -43,6 +44,17 @@ source_set("net") {
]
}

if (enable_brave_referrals) {
sources += [
"brave_referrals_network_delegate_helper.cc",
"brave_referrals_network_delegate_helper.h",
]

deps += [
"//brave/components/brave_referrals/browser",
]
}

if (enable_tor) {
sources += [
"brave_tor_network_delegate_helper.cc",
Expand Down
30 changes: 29 additions & 1 deletion browser/net/brave_network_delegate_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ void RemoveTrackableSecurityHeadersForThirdParty(

BraveNetworkDelegateBase::BraveNetworkDelegateBase(
extensions::EventRouterForwarder* event_router)
: ChromeNetworkDelegate(event_router),
: ChromeNetworkDelegate(event_router), referral_headers_list_(nullptr),
allow_google_auth_(true) {
// Initialize the preference change registrar.
base::PostTaskWithTraits(
Expand All @@ -112,6 +112,16 @@ BraveNetworkDelegateBase::~BraveNetworkDelegateBase() {}

void BraveNetworkDelegateBase::InitPrefChangeRegistrarOnUI() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
PrefService* prefs = g_browser_process->local_state();
pref_change_registrar_.reset(new PrefChangeRegistrar());
pref_change_registrar_->Init(prefs);
pref_change_registrar_->Add(
kReferralHeaders,
base::Bind(&BraveNetworkDelegateBase::OnReferralHeadersChanged,
base::Unretained(this)));
// Retrieve current referral headers, if any.
OnReferralHeadersChanged();

PrefService* user_prefs = ProfileManager::GetActiveUserProfile()->GetPrefs();
user_pref_change_registrar_.reset(new PrefChangeRegistrar());
user_pref_change_registrar_->Init(user_prefs);
Expand All @@ -137,6 +147,23 @@ void BraveNetworkDelegateBase::InitPrefChangeRegistrarOnUI() {
allow_google_auth_ = user_prefs->GetBoolean(kGoogleLoginControlType);
}

void BraveNetworkDelegateBase::OnReferralHeadersChanged() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (const base::ListValue* referral_headers =
g_browser_process->local_state()->GetList(kReferralHeaders)) {
base::PostTaskWithTraits(
FROM_HERE, {BrowserThread::IO},
base::Bind(&BraveNetworkDelegateBase::SetReferralHeaders,
base::Unretained(this), referral_headers->DeepCopy()));
}
}

void BraveNetworkDelegateBase::SetReferralHeaders(
base::ListValue* referral_headers) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
referral_headers_list_.reset(referral_headers);
}

int BraveNetworkDelegateBase::OnBeforeURLRequest(
URLRequest* request,
net::CompletionOnceCallback callback,
Expand Down Expand Up @@ -166,6 +193,7 @@ int BraveNetworkDelegateBase::OnBeforeStartTransaction(
brave::BraveRequestInfo::FillCTXFromRequest(request, ctx);
ctx->event_type = brave::kOnBeforeStartTransaction;
ctx->headers = headers;
ctx->referral_headers_list = referral_headers_list_.get();
callbacks_[request->identifier()] = std::move(callback);
RunNextCallback(request, ctx);
return net::ERR_IO_PENDING;
Expand Down
10 changes: 10 additions & 0 deletions browser/net/brave_network_delegate_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,20 @@ class BraveNetworkDelegateBase : public ChromeNetworkDelegate {

private:
void InitPrefChangeRegistrarOnUI();
void SetReferralHeaders(base::ListValue* referral_headers);
void OnReferralHeadersChanged();
void OnPreferenceChanged(const std::string& pref_name);
void UpdateAdBlockFromPref(const std::string& pref_name);

// TODO(iefremov): actually, we don't have to keep the list here, since
// it is global for the whole browser and could live a singletonce in the
// rewards service. Eliminating this will also help to avoid using
// PrefChangeRegistrar and corresponding |base::Unretained| usages, that are
// illegal.
std::unique_ptr<base::ListValue> referral_headers_list_;
std::map<uint64_t, net::CompletionOnceCallback> callbacks_;
std::unique_ptr<PrefChangeRegistrar, content::BrowserThread::DeleteOnUIThread>
pref_change_registrar_;
std::unique_ptr<PrefChangeRegistrar, content::BrowserThread::DeleteOnUIThread>
user_pref_change_registrar_;

Expand Down
11 changes: 11 additions & 0 deletions browser/net/brave_profile_network_delegate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,16 @@
#include "brave/browser/tor/buildflags.h"
#include "brave/browser/translate/buildflags/buildflags.h"
#include "brave/common/pref_names.h"
#include "brave/components/brave_referrals/buildflags/buildflags.h"
#include "brave/components/brave_rewards/browser/buildflags/buildflags.h"
#include "brave/components/brave_webtorrent/browser/buildflags/buildflags.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "components/prefs/pref_service.h"

#if BUILDFLAG(ENABLE_BRAVE_REFERRALS)
#include "brave/browser/net/brave_referrals_network_delegate_helper.h"
#endif

#if BUILDFLAG(BRAVE_REWARDS_ENABLED)
#include "brave/components/brave_rewards/browser/net/network_delegate_helper.h"
#endif
Expand Down Expand Up @@ -74,6 +79,12 @@ BraveProfileNetworkDelegate::BraveProfileNetworkDelegate(
base::Bind(brave::OnBeforeStartTransaction_SiteHacksWork);
before_start_transaction_callbacks_.push_back(start_transaction_callback);

#if BUILDFLAG(ENABLE_BRAVE_REFERRALS)
start_transaction_callback =
base::Bind(brave::OnBeforeStartTransaction_ReferralsWork);
before_start_transaction_callbacks_.push_back(start_transaction_callback);
#endif

#if BUILDFLAG(ENABLE_BRAVE_WEBTORRENT)
brave::OnHeadersReceivedCallback headers_received_callback =
base::Bind(
Expand Down
39 changes: 39 additions & 0 deletions browser/net/brave_referrals_network_delegate_helper.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/* Copyright (c) 2019 The Brave Authors. All rights reserved.
* 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_referrals_network_delegate_helper.h"

#include "base/values.h"
#include "brave/components/brave_referrals/browser/brave_referrals_service.h"
#include "brave/common/network_constants.h"
#include "chrome/browser/browser_process.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/common/url_pattern.h"
#include "net/url_request/url_request.h"

namespace brave {

int OnBeforeStartTransaction_ReferralsWork(
net::URLRequest* request,
net::HttpRequestHeaders* headers,
const ResponseCallback& next_callback,
std::shared_ptr<BraveRequestInfo> ctx) {
if (!ctx->referral_headers_list)
return net::OK;
// If the domain for this request matches one of our target domains,
// set the associated custom headers.
const base::DictionaryValue* request_headers_dict = nullptr;
if (!BraveReferralsService::GetMatchingReferralHeaders(
*ctx->referral_headers_list, &request_headers_dict, request->url()))
return net::OK;
for (const auto& it : request_headers_dict->DictItems()) {
if (it.first == kBravePartnerHeader) {
headers->SetHeader(it.first, it.second.GetString());
}
}
return net::OK;
}

} // namespace brave
30 changes: 30 additions & 0 deletions browser/net/brave_referrals_network_delegate_helper.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/* Copyright (c) 2019 The Brave Authors. All rights reserved.
* 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_REFERRALS_NETWORK_DELEGATE_HELPER_H_
#define BRAVE_BROWSER_NET_BRAVE_REFERRALS_NETWORK_DELEGATE_HELPER_H_

#include <memory>

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

struct BraveRequestInfo;

namespace net {
class HttpRequestHeaders;
class URLRequest;
}

namespace brave {

int OnBeforeStartTransaction_ReferralsWork(
net::URLRequest* request,
net::HttpRequestHeaders* headers,
const ResponseCallback& next_callback,
std::shared_ptr<BraveRequestInfo> ctx);

} // namespace brave

#endif // BRAVE_BROWSER_NET_BRAVE_REFERRALS_NETWORK_DELEGATE_HELPER_H_
133 changes: 133 additions & 0 deletions browser/net/brave_referrals_network_delegate_helper_unittest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
/* Copyright 2019 The Brave Authors. All rights reserved.
* 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_referrals_network_delegate_helper.h"

#include <memory>
#include <string>

#include "base/json/json_reader.h"
#include "brave/browser/net/url_context.h"
#include "brave/common/network_constants.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "net/url_request/url_request_test_util.h"
#include "url/gurl.h"
#include "url/url_constants.h"

const char kTestReferralHeaders[] = R"(
[
{
"domains": [
"marketwatch.com",
"barrons.com"
],
"headers": {
"X-Brave-Partner":"dowjones",
"X-Invalid": "test"
},
"cookieNames": [
],
"expiration":31536000000
},
{
"domains": [
"townsquareblogs.com",
"tasteofcountry.com",
"ultimateclassicrock.com",
"xxlmag.com",
"popcrush.com"
],
"headers": {
"X-Brave-Partner":"townsquare"
},
"cookieNames":[
],
"expiration":31536000000
}
])";

namespace {

class BraveReferralsNetworkDelegateHelperTest : public testing::Test {
public:
BraveReferralsNetworkDelegateHelperTest()
: thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
context_(new net::TestURLRequestContext(true)) {
}
~BraveReferralsNetworkDelegateHelperTest() override {}
void SetUp() override {
context_->Init();
}
net::TestURLRequestContext* context() { return context_.get(); }

private:
content::TestBrowserThreadBundle thread_bundle_;
std::unique_ptr<net::TestURLRequestContext> context_;
};

TEST_F(BraveReferralsNetworkDelegateHelperTest,
ReplaceHeadersForMatchingDomain) {
GURL url("https://www.marketwatch.com");
net::TestDelegate test_delegate;
std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
url, net::IDLE, &test_delegate, TRAFFIC_ANNOTATION_FOR_TESTS);

base::Optional<base::Value> referral_headers =
base::JSONReader().ReadToValue(kTestReferralHeaders);
ASSERT_TRUE(referral_headers);
ASSERT_TRUE(referral_headers->is_list());

base::ListValue* referral_headers_list = nullptr;
referral_headers->GetAsList(&referral_headers_list);

net::HttpRequestHeaders headers;
brave::ResponseCallback callback;
std::shared_ptr<brave::BraveRequestInfo> brave_request_info(
new brave::BraveRequestInfo());
brave_request_info->referral_headers_list = referral_headers_list;
int ret = brave::OnBeforeStartTransaction_ReferralsWork(
request.get(), &headers, callback, brave_request_info);

std::string partner_header;
headers.GetHeader("X-Brave-Partner", &partner_header);
EXPECT_EQ(partner_header, "dowjones");

std::string invalid_partner_header;
EXPECT_EQ(headers.GetHeader("X-Invalid", &invalid_partner_header), false);
EXPECT_EQ(invalid_partner_header, "");

EXPECT_EQ(ret, net::OK);
}

TEST_F(BraveReferralsNetworkDelegateHelperTest,
NoReplaceHeadersForNonMatchingDomain) {
GURL url("https://www.google.com");
net::TestDelegate test_delegate;
std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
url, net::IDLE, &test_delegate, TRAFFIC_ANNOTATION_FOR_TESTS);

base::Optional<base::Value> referral_headers =
base::JSONReader().ReadToValue(kTestReferralHeaders);
ASSERT_TRUE(referral_headers);
ASSERT_TRUE(referral_headers->is_list());

base::ListValue* referral_headers_list = nullptr;
referral_headers->GetAsList(&referral_headers_list);

net::HttpRequestHeaders headers;
brave::ResponseCallback callback;
std::shared_ptr<brave::BraveRequestInfo> brave_request_info(
new brave::BraveRequestInfo());
brave_request_info->referral_headers_list = referral_headers_list;
int ret = brave::OnBeforeStartTransaction_ReferralsWork(
request.get(), &headers, callback, brave_request_info);

EXPECT_FALSE(headers.HasHeader("X-Brave-Partner"));

EXPECT_EQ(ret, net::OK);
}

} // namespace
Loading

0 comments on commit 13101cf

Please sign in to comment.