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

Revert changes to user agent after experiencing webcompat issues in Dev/Nightly #2583

Merged
merged 3 commits into from
Jun 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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: 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