| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 namespace | 26 namespace |
| 27 { | 27 { |
| 28 class DefaultWebRequestTest : public ::testing::Test | 28 class DefaultWebRequestTest : public ::testing::Test |
| 29 { | 29 { |
| 30 protected: | 30 protected: |
| 31 void SetUp() | 31 void SetUp() |
| 32 { | 32 { |
| 33 JsEngineCreationParameters jsEngineParams; | 33 JsEngineCreationParameters jsEngineParams; |
| 34 jsEngineParams.logSystem = CreateLogSystem(); | 34 jsEngineParams.logSystem = CreateLogSystem(); |
| 35 jsEngineParams.timer.reset(new NoopTimer()); | 35 jsEngineParams.timer.reset(new NoopTimer()); |
| 36 jsEngineParams.fileSystem.reset(new LazyFileSystem()); | 36 jsEngineParams.fileSystem.reset(fileSystem = new LazyFileSystem()); |
| 37 jsEngineParams.webRequest = CreateWebRequest(); | 37 jsEngineParams.webRequest = CreateWebRequest(); |
| 38 jsEngine = CreateJsEngine(std::move(jsEngineParams)); | 38 jsEngine = CreateJsEngine(std::move(jsEngineParams)); |
| 39 } | 39 } |
| 40 | 40 |
| 41 virtual WebRequestPtr CreateWebRequest() | 41 virtual WebRequestPtr CreateWebRequest() |
| 42 { | 42 { |
| 43 return CreateDefaultWebRequest(); | 43 return CreateDefaultWebRequest(); |
| 44 } | 44 } |
| 45 | 45 |
| 46 virtual LogSystemPtr CreateLogSystem() | 46 virtual LogSystemPtr CreateLogSystem() |
| 47 { | 47 { |
| 48 return LogSystemPtr(new ThrowingLogSystem()); | 48 return LogSystemPtr(new ThrowingLogSystem()); |
| 49 } | 49 } |
| 50 | 50 |
| 51 JsEnginePtr jsEngine; | 51 JsEnginePtr jsEngine; |
| 52 LazyFileSystem* fileSystem; |
| 52 }; | 53 }; |
| 53 | 54 |
| 54 class MockWebRequestTest : public DefaultWebRequestTest | 55 class MockWebRequestTest : public DefaultWebRequestTest |
| 55 { | 56 { |
| 56 virtual WebRequestPtr CreateWebRequest() override | 57 virtual WebRequestPtr CreateWebRequest() override |
| 57 { | 58 { |
| 58 return DelayedWebRequest::New(webRequestTasks); | 59 return DelayedWebRequest::New(webRequestTasks); |
| 59 } | 60 } |
| 60 | 61 |
| 61 protected: | 62 protected: |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("foo.responseText.substr(0, 14)
").AsString()); | 172 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("foo.responseText.substr(0, 14)
").AsString()); |
| 172 ASSERT_EQ("text/plain", jsEngine->Evaluate("foo.responseHeaders['content-type'
].substr(0, 10)").AsString()); | 173 ASSERT_EQ("text/plain", jsEngine->Evaluate("foo.responseHeaders['content-type'
].substr(0, 10)").AsString()); |
| 173 #if defined(HAVE_CURL) | 174 #if defined(HAVE_CURL) |
| 174 ASSERT_EQ("gzip", jsEngine->Evaluate("foo.responseHeaders['content-encoding'].
substr(0, 4)").AsString()); | 175 ASSERT_EQ("gzip", jsEngine->Evaluate("foo.responseHeaders['content-encoding'].
substr(0, 4)").AsString()); |
| 175 #endif | 176 #endif |
| 176 ASSERT_TRUE(jsEngine->Evaluate("foo.responseHeaders['location']").IsUndefined(
)); | 177 ASSERT_TRUE(jsEngine->Evaluate("foo.responseHeaders['location']").IsUndefined(
)); |
| 177 } | 178 } |
| 178 | 179 |
| 179 TEST_F(DefaultWebRequestTest, XMLHttpRequest) | 180 TEST_F(DefaultWebRequestTest, XMLHttpRequest) |
| 180 { | 181 { |
| 181 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); | 182 auto filterEngine = CreateFilterEngine(*fileSystem, jsEngine); |
| 182 | 183 |
| 183 ResetTestXHR(jsEngine, "https://easylist-downloads.adblockplus.org/easylist.tx
t"); | 184 ResetTestXHR(jsEngine, "https://easylist-downloads.adblockplus.org/easylist.tx
t"); |
| 184 jsEngine->Evaluate("\ | 185 jsEngine->Evaluate("\ |
| 185 request.setRequestHeader('X', 'Y');\ | 186 request.setRequestHeader('X', 'Y');\ |
| 186 request.setRequestHeader('X2', 'Y2');\ | 187 request.setRequestHeader('X2', 'Y2');\ |
| 187 request.send(null);"); | 188 request.send(null);"); |
| 188 WaitForVariable("result", jsEngine); | 189 WaitForVariable("result", jsEngine); |
| 189 ASSERT_EQ(IWebRequest::NS_OK, jsEngine->Evaluate("request.channel.status").AsI
nt()); | 190 ASSERT_EQ(IWebRequest::NS_OK, jsEngine->Evaluate("request.channel.status").AsI
nt()); |
| 190 ASSERT_EQ(200, jsEngine->Evaluate("request.status").AsInt()); | 191 ASSERT_EQ(200, jsEngine->Evaluate("request.status").AsInt()); |
| 191 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("result.substr(0, 14)").AsStrin
g()); | 192 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("result.substr(0, 14)").AsStrin
g()); |
| 192 ASSERT_EQ("text/plain", jsEngine->Evaluate("request.getResponseHeader('Content
-Type').substr(0, 10)").AsString()); | 193 ASSERT_EQ("text/plain", jsEngine->Evaluate("request.getResponseHeader('Content
-Type').substr(0, 10)").AsString()); |
| 193 #if defined(HAVE_CURL) | 194 #if defined(HAVE_CURL) |
| 194 ASSERT_EQ("gzip", jsEngine->Evaluate("request.getResponseHeader('Content-Encod
ing').substr(0, 4)").AsString()); | 195 ASSERT_EQ("gzip", jsEngine->Evaluate("request.getResponseHeader('Content-Encod
ing').substr(0, 4)").AsString()); |
| 195 #endif | 196 #endif |
| 196 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Location')").IsNull
()); | 197 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Location')").IsNull
()); |
| 197 } | 198 } |
| 198 #else | 199 #else |
| 199 TEST_F(DefaultWebRequestTest, DummyWebRequest) | 200 TEST_F(DefaultWebRequestTest, DummyWebRequest) |
| 200 { | 201 { |
| 201 jsEngine->Evaluate("_webRequest.GET('https://easylist-downloads.adblockplus.or
g/easylist.txt', {}, function(result) {foo = result;} )"); | 202 jsEngine->Evaluate("_webRequest.GET('https://easylist-downloads.adblockplus.or
g/easylist.txt', {}, function(result) {foo = result;} )"); |
| 202 WaitForVariable("this.foo", jsEngine); | 203 WaitForVariable("this.foo", jsEngine); |
| 203 ASSERT_EQ(IWebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("foo.status").AsIn
t()); | 204 ASSERT_EQ(IWebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("foo.status").AsIn
t()); |
| 204 ASSERT_EQ(0, jsEngine->Evaluate("foo.responseStatus").AsInt()); | 205 ASSERT_EQ(0, jsEngine->Evaluate("foo.responseStatus").AsInt()); |
| 205 ASSERT_EQ("", jsEngine->Evaluate("foo.responseText").AsString()); | 206 ASSERT_EQ("", jsEngine->Evaluate("foo.responseText").AsString()); |
| 206 ASSERT_EQ("{}", jsEngine->Evaluate("JSON.stringify(foo.responseHeaders)").AsSt
ring()); | 207 ASSERT_EQ("{}", jsEngine->Evaluate("JSON.stringify(foo.responseHeaders)").AsSt
ring()); |
| 207 } | 208 } |
| 208 | 209 |
| 209 TEST_F(DefaultWebRequestTest, XMLHttpRequest) | 210 TEST_F(DefaultWebRequestTest, XMLHttpRequest) |
| 210 { | 211 { |
| 211 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); | 212 auto filterEngine = CreateFilterEngine(*fileSystem, jsEngine); |
| 212 | 213 |
| 213 ResetTestXHR(jsEngine); | 214 ResetTestXHR(jsEngine); |
| 214 jsEngine->Evaluate("\ | 215 jsEngine->Evaluate("\ |
| 215 request.setRequestHeader('X', 'Y');\ | 216 request.setRequestHeader('X', 'Y');\ |
| 216 request.send(null);"); | 217 request.send(null);"); |
| 217 WaitForVariable("result", jsEngine); | 218 WaitForVariable("result", jsEngine); |
| 218 ASSERT_EQ(IWebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("request.channel.s
tatus").AsInt()); | 219 ASSERT_EQ(IWebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("request.channel.s
tatus").AsInt()); |
| 219 ASSERT_EQ(0, jsEngine->Evaluate("request.status").AsInt()); | 220 ASSERT_EQ(0, jsEngine->Evaluate("request.status").AsInt()); |
| 220 ASSERT_EQ("error", jsEngine->Evaluate("result").AsString()); | 221 ASSERT_EQ("error", jsEngine->Evaluate("result").AsString()); |
| 221 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Content-Type')").Is
Null()); | 222 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Content-Type')").Is
Null()); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 { | 258 { |
| 258 return LogSystemPtr(catchLogSystem = new CatchLogSystem()); | 259 return LogSystemPtr(catchLogSystem = new CatchLogSystem()); |
| 259 } | 260 } |
| 260 protected: | 261 protected: |
| 261 CatchLogSystem* catchLogSystem; | 262 CatchLogSystem* catchLogSystem; |
| 262 }; | 263 }; |
| 263 } | 264 } |
| 264 | 265 |
| 265 TEST_F(MockWebRequestAndLogSystemTest, RequestHeaderValidation) | 266 TEST_F(MockWebRequestAndLogSystemTest, RequestHeaderValidation) |
| 266 { | 267 { |
| 267 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); | 268 auto filterEngine = CreateFilterEngine(*fileSystem, jsEngine); |
| 268 | 269 |
| 269 const std::string msg = "Attempt to set a forbidden header was denied: "; | 270 const std::string msg = "Attempt to set a forbidden header was denied: "; |
| 270 | 271 |
| 271 // The test will check that console.warn has been called when the | 272 // The test will check that console.warn has been called when the |
| 272 // header is rejected. While this is an implementation detail, we | 273 // header is rejected. While this is an implementation detail, we |
| 273 // have no other way to check this | 274 // have no other way to check this |
| 274 | 275 |
| 275 // test 'Accept-Encoding' is rejected | 276 // test 'Accept-Encoding' is rejected |
| 276 catchLogSystem->clear(); | 277 catchLogSystem->clear(); |
| 277 std::string url = ResetTestXHR(jsEngine); | 278 std::string url = ResetTestXHR(jsEngine); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 EXPECT_EQ(AdblockPlus::LogSystem::LOG_LEVEL_TRACE, catchLogSystem->lastLogLeve
l); | 356 EXPECT_EQ(AdblockPlus::LogSystem::LOG_LEVEL_TRACE, catchLogSystem->lastLogLeve
l); |
| 356 EXPECT_EQ("", catchLogSystem->lastMessage); | 357 EXPECT_EQ("", catchLogSystem->lastMessage); |
| 357 ProcessPendingWebRequests(); | 358 ProcessPendingWebRequests(); |
| 358 { | 359 { |
| 359 auto headersRequest = GetHeadersForRequest(url); | 360 auto headersRequest = GetHeadersForRequest(url); |
| 360 EXPECT_TRUE(headersRequest.first); | 361 EXPECT_TRUE(headersRequest.first); |
| 361 const auto& headers = headersRequest.second; | 362 const auto& headers = headersRequest.second; |
| 362 EXPECT_FALSE(headers.cend() == headers.find("Security")); | 363 EXPECT_FALSE(headers.cend() == headers.find("Security")); |
| 363 } | 364 } |
| 364 } | 365 } |
| OLD | NEW |