Skip to content

Commit bfeaa65

Browse files
committed
Customize forbes.com cookies
Fixes a sub-item in "Add site-hacks from browser-laptop #84" See https://github.com/brave/browser-laptop/blob/master/js/data/siteHacks.js#L60 for the equivalent rule
1 parent 4f48443 commit bfeaa65

7 files changed

+103
-10
lines changed

browser/net/brave_network_delegate_base.cc

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ int BraveNetworkDelegateBase::OnBeforeStartTransaction(net::URLRequest* request,
4747
std::shared_ptr<brave::BraveURLRequestContext> ctx(
4848
new brave::BraveURLRequestContext());
4949
callbacks_[request->identifier()] = callback;
50+
ctx->headers = headers;
5051
ctx->request_identifier = request->identifier();
5152
ctx->event_type = brave::kOnBeforeStartTransaction;
5253
RunNextCallback(request, nullptr, ctx);

browser/net/brave_profile_network_delegate.cc

+5
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ BraveProfileNetworkDelegate::BraveProfileNetworkDelegate(
2121
brave::OnBeforeURLRequest_HttpsePreFileWork);
2222
before_url_request_callbacks_.push_back(callback);
2323

24+
brave::OnBeforeStartTransactionCallback start_transactions_callback =
25+
base::Bind(
26+
brave::OnBeforeStartTransaction_SiteHacksWork);
27+
before_start_transaction_callbacks_.push_back(start_transactions_callback);
28+
2429
}
2530

2631
BraveProfileNetworkDelegate::~BraveProfileNetworkDelegate() {

browser/net/brave_site_hacks_network_delegate_helper.cc

+22
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,26 @@ int OnBeforeURLRequest_SiteHacksWork(
105105
return net::OK;
106106
}
107107

108+
void CheckForCookieOverride(const GURL& url, const URLPattern& pattern,
109+
net::HttpRequestHeaders* headers, const std::string& extra_cookies) {
110+
if (pattern.MatchesURL(url)) {
111+
std::string cookies;
112+
if (headers->GetHeader(kCookieHeader, &cookies)) {
113+
cookies = "; ";
114+
}
115+
cookies += extra_cookies;
116+
headers->SetHeader(kCookieHeader, cookies);
117+
}
118+
}
119+
120+
int OnBeforeStartTransaction_SiteHacksWork(net::URLRequest* request,
121+
net::HttpRequestHeaders* headers,
122+
const ResponseCallback& next_callback,
123+
std::shared_ptr<BraveURLRequestContext> ctx) {
124+
CheckForCookieOverride(request->url(),
125+
URLPattern(URLPattern::SCHEME_ALL, kForbesPattern), headers,
126+
kForbesExtraCookies);
127+
return net::OK;
128+
}
129+
108130
} // namespace brave

browser/net/brave_site_hacks_network_delegate_helper.h

+5
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ int OnBeforeURLRequest_SiteHacksWork(
2121
const ResponseCallback& next_callback,
2222
std::shared_ptr<BraveURLRequestContext> ctx);
2323

24+
int OnBeforeStartTransaction_SiteHacksWork(net::URLRequest* request,
25+
net::HttpRequestHeaders* headers,
26+
const ResponseCallback& next_callback,
27+
std::shared_ptr<BraveURLRequestContext> ctx);
28+
2429
} // namespace brave
2530

2631
#endif // BRAVE_BROWSER_NET_BRAVE_SITE_HACKS_NETWORK_DELEGATE_H_

browser/net/brave_site_hacks_network_delegate_helper_unittest.cc

+64-10
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ TEST_F(BraveSiteHacksNetworkDelegateHelperTest, NoChangeURL) {
3535
context()->CreateRequest(url, net::IDLE, &test_delegate,
3636
TRAFFIC_ANNOTATION_FOR_TESTS);
3737
std::shared_ptr<brave::BraveURLRequestContext>
38-
before_url_context(new brave::BraveURLRequestContext());
38+
url_context(new brave::BraveURLRequestContext());
3939
brave::ResponseCallback callback;
4040
GURL new_url;
4141
int ret =
4242
OnBeforeURLRequest_SiteHacksWork(request.get(), &new_url, callback,
43-
before_url_context);
43+
url_context);
4444
EXPECT_TRUE(new_url.is_empty());
4545
EXPECT_EQ(ret, net::OK);
4646
}
@@ -57,16 +57,15 @@ TEST_F(BraveSiteHacksNetworkDelegateHelperTest, RedirectsToEmptyDataURLs) {
5757
context()->CreateRequest(url, net::IDLE, &test_delegate,
5858
TRAFFIC_ANNOTATION_FOR_TESTS);
5959
std::shared_ptr<brave::BraveURLRequestContext>
60-
before_url_context(new brave::BraveURLRequestContext());
60+
url_context(new brave::BraveURLRequestContext());
6161
brave::ResponseCallback callback;
6262
GURL new_url;
6363
int ret =
6464
OnBeforeURLRequest_SiteHacksWork(request.get(), &new_url, callback,
65-
before_url_context);
65+
url_context);
6666
EXPECT_EQ(ret, net::OK);
6767
EXPECT_STREQ(new_url.spec().c_str(), kEmptyDataURI);
68-
});
69-
}
68+
}); }
7069

7170
TEST_F(BraveSiteHacksNetworkDelegateHelperTest, RedirectsToStubs) {
7271
std::vector<GURL> urls({
@@ -80,12 +79,12 @@ TEST_F(BraveSiteHacksNetworkDelegateHelperTest, RedirectsToStubs) {
8079
context()->CreateRequest(url, net::IDLE, &test_delegate,
8180
TRAFFIC_ANNOTATION_FOR_TESTS);
8281
std::shared_ptr<brave::BraveURLRequestContext>
83-
before_url_context(new brave::BraveURLRequestContext());
82+
url_context(new brave::BraveURLRequestContext());
8483
brave::ResponseCallback callback;
8584
GURL new_url;
8685
int ret =
8786
OnBeforeURLRequest_SiteHacksWork(request.get(), &new_url, callback,
88-
before_url_context);
87+
url_context);
8988
EXPECT_EQ(ret, net::OK);
9089
EXPECT_TRUE(new_url.SchemeIs("data"));
9190
});
@@ -103,16 +102,71 @@ TEST_F(BraveSiteHacksNetworkDelegateHelperTest, Blocking) {
103102
context()->CreateRequest(url, net::IDLE, &test_delegate,
104103
TRAFFIC_ANNOTATION_FOR_TESTS);
105104
std::shared_ptr<brave::BraveURLRequestContext>
106-
before_url_context(new brave::BraveURLRequestContext());
105+
url_context(new brave::BraveURLRequestContext());
107106
brave::ResponseCallback callback;
108107
GURL new_url;
109108
int ret =
110109
OnBeforeURLRequest_SiteHacksWork(request.get(), &new_url, callback,
111-
before_url_context);
110+
url_context);
112111
EXPECT_EQ(ret, net::ERR_ABORTED);
113112
});
114113
}
115114

115+
TEST_F(BraveSiteHacksNetworkDelegateHelperTest, ForbesWithCookieHeader) {
116+
GURL url("https://www.forbes.com");
117+
net::TestDelegate test_delegate;
118+
std::unique_ptr<net::URLRequest> request =
119+
context()->CreateRequest(url, net::IDLE, &test_delegate,
120+
TRAFFIC_ANNOTATION_FOR_TESTS);
121+
net::HttpRequestHeaders headers;
122+
headers.SetHeader(kCookieHeader, "name=value; name2=value2; name3=value3");
123+
std::shared_ptr<brave::BraveURLRequestContext>
124+
url_context(new brave::BraveURLRequestContext());
125+
brave::ResponseCallback callback;
126+
int ret = brave::OnBeforeStartTransaction_SiteHacksWork(request.get(), &headers,
127+
callback, url_context);
128+
std::string cookies;
129+
headers.GetHeader(kCookieHeader, &cookies);
130+
EXPECT_TRUE(cookies.find(std::string("; ") + kForbesExtraCookies) != std::string::npos);
131+
EXPECT_EQ(ret, net::OK);
132+
}
116133

134+
TEST_F(BraveSiteHacksNetworkDelegateHelperTest, ForbesWithoutCookieHeader) {
135+
GURL url("https://www.forbes.com/prime_numbers/573259391");
136+
net::TestDelegate test_delegate;
137+
std::unique_ptr<net::URLRequest> request =
138+
context()->CreateRequest(url, net::IDLE, &test_delegate,
139+
TRAFFIC_ANNOTATION_FOR_TESTS);
140+
net::HttpRequestHeaders headers;
141+
std::shared_ptr<brave::BraveURLRequestContext>
142+
url_context(new brave::BraveURLRequestContext());
143+
brave::ResponseCallback callback;
144+
int ret = brave::OnBeforeStartTransaction_SiteHacksWork(request.get(), &headers,
145+
callback, url_context);
146+
std::string cookies;
147+
headers.GetHeader(kCookieHeader, &cookies);
148+
EXPECT_TRUE(cookies.find(kForbesExtraCookies) != std::string::npos);
149+
EXPECT_EQ(ret, net::OK);
150+
}
151+
152+
TEST_F(BraveSiteHacksNetworkDelegateHelperTest, NotForbesNoCookieChange) {
153+
GURL url("https://www.brave.com/prime_numbers/573259391");
154+
net::TestDelegate test_delegate;
155+
std::unique_ptr<net::URLRequest> request =
156+
context()->CreateRequest(url, net::IDLE, &test_delegate,
157+
TRAFFIC_ANNOTATION_FOR_TESTS);
158+
net::HttpRequestHeaders headers;
159+
std::string expected_cookies = "name=value; name2=value2; name3=value3";
160+
headers.SetHeader(kCookieHeader, "name=value; name2=value2; name3=value3");
161+
std::shared_ptr<brave::BraveURLRequestContext>
162+
url_context(new brave::BraveURLRequestContext());
163+
brave::ResponseCallback callback;
164+
int ret = brave::OnBeforeStartTransaction_SiteHacksWork(request.get(), &headers,
165+
callback, url_context);
166+
std::string cookies;
167+
headers.GetHeader(kCookieHeader, &cookies);
168+
EXPECT_STREQ(cookies.c_str(), expected_cookies.c_str());
169+
EXPECT_EQ(ret, net::OK);
170+
}
117171

118172
} // namespace

common/network_constants.cc

+3
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,6 @@ const char kJSDataURLPrefix[] = "data:application/javascript;base64,";
55
const char kGeoLocationsPattern[] = "https://www.googleapis.com/geolocation/v1/geolocate?key=*";
66
const char kGoogleTagManagerPattern[] = "https://www.googletagmanager.com/gtm.js";
77
const char kGoogleTagServicesPattern[] = "https://www.googletagservices.com/tag/js/gpt.js";
8+
const char kCookieHeader[] = "Cookie";
9+
const char kForbesPattern[] = "https://www.forbes.com/*";
10+
const char kForbesExtraCookies[] = "forbes_ab=true; welcomeAd=true; adblock_session=Off; dailyWelcomeCookie=true";

common/network_constants.h

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ extern const char kJSDataURLPrefix[];
66
extern const char kGeoLocationsPattern[];
77
extern const char kGoogleTagManagerPattern[];
88
extern const char kGoogleTagServicesPattern[];
9+
extern const char kCookieHeader[];
10+
extern const char kForbesPattern[];
11+
extern const char kForbesExtraCookies[];
912

1013
#endif // BRAVE_COMMON_NETWORK_CONSTANTS_H_
1114

0 commit comments

Comments
 (0)