| LEFT | RIGHT | 
|---|
| 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-2015 Eyeo GmbH | 3  * Copyright (C) 2006-2016 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 | 
| 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| 12  * GNU General Public License for more details. | 12  * GNU General Public License for more details. | 
| 13  * | 13  * | 
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 78     }; | 78     }; | 
| 79 | 79 | 
| 80     MockWebRequest* mockWebRequest; | 80     MockWebRequest* mockWebRequest; | 
| 81     FilterEnginePtr filterEngine; | 81     FilterEnginePtr filterEngine; | 
| 82 | 82 | 
| 83     void SetUp() | 83     void SetUp() | 
| 84     { | 84     { | 
| 85       AdblockPlus::AppInfo appInfo; | 85       AdblockPlus::AppInfo appInfo; | 
| 86       appInfo.name = "test"; | 86       appInfo.name = "test"; | 
| 87       appInfo.version = "1.0.1"; | 87       appInfo.version = "1.0.1"; | 
| 88       AdblockPlus::JsEnginePtr jsEngine = createJsEngine(appInfo); | 88       AdblockPlus::JsEnginePtr jsEngine = CreateJsEngine(appInfo); | 
| 89       jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new LazyFileSystem)); | 89       jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new LazyFileSystem)); | 
| 90       mockWebRequest = new MockWebRequest; | 90       mockWebRequest = new MockWebRequest; | 
| 91       jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(mockWebRequest)); | 91       jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(mockWebRequest)); | 
| 92       filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine)); | 92       filterEngine = FilterEnginePtr(new AdblockPlus::FilterEngine(jsEngine)); | 
| 93     } | 93     } | 
| 94   }; | 94   }; | 
| 95 | 95 | 
| 96   struct MockUpdateAvailableCallback | 96   struct MockUpdateAvailableCallback | 
| 97   { | 97   { | 
| 98     MockUpdateAvailableCallback(int& timesCalled) : timesCalled(timesCalled) {} | 98     MockUpdateAvailableCallback(int& timesCalled) : timesCalled(timesCalled) {} | 
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 273   ASSERT_TRUE(match1); | 273   ASSERT_TRUE(match1); | 
| 274   ASSERT_EQ(AdblockPlus::Filter::TYPE_BLOCKING, match1->GetType()); | 274   ASSERT_EQ(AdblockPlus::Filter::TYPE_BLOCKING, match1->GetType()); | 
| 275 | 275 | 
| 276   AdblockPlus::FilterPtr match2 = | 276   AdblockPlus::FilterPtr match2 = | 
| 277     filterEngine->Matches("http://ads.com/adbanner.gif", AdblockPlus::FilterEngi
     ne::CONTENT_TYPE_IMAGE, | 277     filterEngine->Matches("http://ads.com/adbanner.gif", AdblockPlus::FilterEngi
     ne::CONTENT_TYPE_IMAGE, | 
| 278                           "http://example.org/"); | 278                           "http://example.org/"); | 
| 279   ASSERT_TRUE(match2); | 279   ASSERT_TRUE(match2); | 
| 280   ASSERT_EQ(AdblockPlus::Filter::TYPE_EXCEPTION, match2->GetType()); | 280   ASSERT_EQ(AdblockPlus::Filter::TYPE_EXCEPTION, match2->GetType()); | 
| 281 } | 281 } | 
| 282 | 282 | 
|  | 283 TEST_F(FilterEngineTest, MatchesWithContentTypeMask) | 
|  | 284 { | 
|  | 285   filterEngine->GetFilter("adbanner.gif.js$script,image")->AddToList(); | 
|  | 286   filterEngine->GetFilter("@@notbanner.gif")->AddToList(); | 
|  | 287   filterEngine->GetFilter("blockme")->AddToList(); | 
|  | 288   filterEngine->GetFilter("@@||example.doc^$document")->AddToList(); | 
|  | 289 | 
|  | 290   EXPECT_FALSE(filterEngine->Matches("http://example.org/foobar.gif", | 
|  | 291     AdblockPlus::FilterEngine::CONTENT_TYPE_IMAGE, "")) | 
|  | 292     << "another url should not match"; | 
|  | 293 | 
|  | 294   EXPECT_FALSE(filterEngine->Matches("http://example.org/adbanner.gif.js", | 
|  | 295     /*mask*/ 0, "")) << "zero mask should not match (filter with some options)"; | 
|  | 296 | 
|  | 297   EXPECT_FALSE(filterEngine->Matches("http://example.xxx/blockme", | 
|  | 298     /*mask*/ 0, "")) << "zero mask should not match (filter without any option)"
     ; | 
|  | 299 | 
|  | 300   EXPECT_FALSE(filterEngine->Matches("http://example.org/adbanner.gif.js", | 
|  | 301     AdblockPlus::FilterEngine::CONTENT_TYPE_OBJECT, "")) | 
|  | 302     << "one arbitrary flag in mask should not match"; | 
|  | 303 | 
|  | 304   EXPECT_TRUE(filterEngine->Matches("http://example.org/adbanner.gif.js", | 
|  | 305     AdblockPlus::FilterEngine::CONTENT_TYPE_IMAGE | | 
|  | 306     AdblockPlus::FilterEngine::CONTENT_TYPE_OBJECT, "")) | 
|  | 307     << "one of flags in mask should match"; | 
|  | 308 | 
|  | 309   EXPECT_TRUE(filterEngine->Matches("http://example.org/adbanner.gif.js", | 
|  | 310     AdblockPlus::FilterEngine::CONTENT_TYPE_IMAGE | | 
|  | 311     AdblockPlus::FilterEngine::CONTENT_TYPE_SCRIPT, "")) | 
|  | 312     << "both flags in mask should match"; | 
|  | 313 | 
|  | 314   EXPECT_TRUE(filterEngine->Matches("http://example.org/adbanner.gif.js", | 
|  | 315     AdblockPlus::FilterEngine::CONTENT_TYPE_IMAGE | | 
|  | 316     AdblockPlus::FilterEngine::CONTENT_TYPE_SCRIPT | | 
|  | 317     AdblockPlus::FilterEngine::CONTENT_TYPE_OBJECT, "")) | 
|  | 318     << "both flags with another flag in mask should match"; | 
|  | 319 | 
|  | 320   EXPECT_TRUE(filterEngine->Matches("http://example.org/adbanner.gif.js", | 
|  | 321     AdblockPlus::FilterEngine::CONTENT_TYPE_SCRIPT | | 
|  | 322     AdblockPlus::FilterEngine::CONTENT_TYPE_OBJECT, "")) | 
|  | 323     << "one of flags in mask should match"; | 
|  | 324 | 
|  | 325   { | 
|  | 326     AdblockPlus::FilterPtr filter; | 
|  | 327     ASSERT_TRUE(filter = filterEngine->Matches("http://child.any/blockme", | 
|  | 328       AdblockPlus::FilterEngine::CONTENT_TYPE_SCRIPT | | 
|  | 329       AdblockPlus::FilterEngine::CONTENT_TYPE_OBJECT, "http://example.doc")) | 
|  | 330       << "non-zero mask should match on whitelisted document"; | 
|  | 331 | 
|  | 332     EXPECT_EQ(AdblockPlus::Filter::TYPE_EXCEPTION, filter->GetType()); | 
|  | 333   } | 
|  | 334 | 
|  | 335   { | 
|  | 336     AdblockPlus::FilterPtr filter; | 
|  | 337     ASSERT_TRUE(filter = filterEngine->Matches("http://example.doc/blockme", | 
|  | 338       /*mask*/0, "http://example.doc")) | 
|  | 339       << "zero mask should match when document is whitelisted"; | 
|  | 340 | 
|  | 341     EXPECT_EQ(AdblockPlus::Filter::TYPE_EXCEPTION, filter->GetType()); | 
|  | 342   } | 
|  | 343 } | 
|  | 344 | 
| 283 TEST_F(FilterEngineTest, MatchesNestedFrameRequest) | 345 TEST_F(FilterEngineTest, MatchesNestedFrameRequest) | 
| 284 { | 346 { | 
| 285   filterEngine->GetFilter("adbanner.gif")->AddToList(); | 347   filterEngine->GetFilter("adbanner.gif")->AddToList(); | 
| 286   filterEngine->GetFilter("@@adbanner.gif$domain=example.org")->AddToList(); | 348   filterEngine->GetFilter("@@adbanner.gif$domain=example.org")->AddToList(); | 
| 287 | 349 | 
| 288   std::vector<std::string> documentUrls1; | 350   std::vector<std::string> documentUrls1; | 
| 289   documentUrls1.push_back("http://ads.com/frame/"); | 351   documentUrls1.push_back("http://ads.com/frame/"); | 
| 290   documentUrls1.push_back("http://example.com/"); | 352   documentUrls1.push_back("http://example.com/"); | 
| 291   AdblockPlus::FilterPtr match1 = | 353   AdblockPlus::FilterPtr match1 = | 
| 292     filterEngine->Matches("http://ads.com/adbanner.gif", AdblockPlus::FilterEngi
     ne::CONTENT_TYPE_IMAGE, | 354     filterEngine->Matches("http://ads.com/adbanner.gif", AdblockPlus::FilterEngi
     ne::CONTENT_TYPE_IMAGE, | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 374   ASSERT_TRUE(filterEngine->IsFirstRun()); | 436   ASSERT_TRUE(filterEngine->IsFirstRun()); | 
| 375 } | 437 } | 
| 376 | 438 | 
| 377 TEST_F(FilterEngineTest, SetRemoveFilterChangeCallback) | 439 TEST_F(FilterEngineTest, SetRemoveFilterChangeCallback) | 
| 378 { | 440 { | 
| 379   int timesCalled = 0; | 441   int timesCalled = 0; | 
| 380   MockFilterChangeCallback mockFilterChangeCallback(timesCalled); | 442   MockFilterChangeCallback mockFilterChangeCallback(timesCalled); | 
| 381 | 443 | 
| 382   filterEngine->SetFilterChangeCallback(mockFilterChangeCallback); | 444   filterEngine->SetFilterChangeCallback(mockFilterChangeCallback); | 
| 383   filterEngine->GetFilter("foo")->AddToList(); | 445   filterEngine->GetFilter("foo")->AddToList(); | 
| 384   EXPECT_EQ(2, timesCalled); | 446   EXPECT_EQ(1, timesCalled); | 
| 385 | 447 | 
| 386   filterEngine->RemoveFilterChangeCallback(); | 448   filterEngine->RemoveFilterChangeCallback(); | 
| 387   filterEngine->GetFilter("foo")->RemoveFromList(); | 449   filterEngine->GetFilter("foo")->RemoveFromList(); | 
| 388   EXPECT_EQ(2, timesCalled); | 450   EXPECT_EQ(1, timesCalled); | 
| 389 } | 451 } | 
| 390 | 452 | 
| 391 TEST_F(UpdaterTest, SetRemoveUpdateAvailableCallback) | 453 TEST_F(UpdaterTest, SetRemoveUpdateAvailableCallback) | 
| 392 { | 454 { | 
| 393   mockWebRequest->response.status = 0; | 455   mockWebRequest->response.status = 0; | 
| 394   mockWebRequest->response.responseStatus = 200; | 456   mockWebRequest->response.responseStatus = 200; | 
| 395   mockWebRequest->response.responseText = "\ | 457   mockWebRequest->response.responseText = "\ | 
| 396 {\ | 458 {\ | 
| 397   \"test\": {\ | 459   \"test\": {\ | 
| 398     \"version\": \"1.0.2\",\ | 460     \"version\": \"1.0.2\",\ | 
| 399     \"url\": \"https://downloads.adblockplus.org/test-1.0.2.tar.gz?update\"\ | 461     \"url\": \"https://downloads.adblockplus.org/test-1.0.2.tar.gz?update\"\ | 
| 400   }\ | 462   }\ | 
| 401 }"; | 463 }"; | 
| 402 | 464 | 
| 403   int timesCalled = 0; | 465   int timesCalled = 0; | 
| 404   MockUpdateAvailableCallback mockUpdateAvailableCallback(timesCalled); | 466   MockUpdateAvailableCallback mockUpdateAvailableCallback(timesCalled); | 
| 405 | 467 | 
| 406   filterEngine->SetUpdateAvailableCallback(mockUpdateAvailableCallback); | 468   filterEngine->SetUpdateAvailableCallback(mockUpdateAvailableCallback); | 
| 407   filterEngine->ForceUpdateCheck(&NoOpUpdaterCallback); | 469   filterEngine->ForceUpdateCheck(&NoOpUpdaterCallback); | 
| 408   AdblockPlus::Sleep(100); | 470   AdblockPlus::Sleep(100); | 
| 409   ASSERT_EQ(1, timesCalled); | 471   ASSERT_EQ(1, timesCalled); | 
| 410 | 472 | 
| 411   filterEngine->RemoveUpdateAvailableCallback(); | 473   filterEngine->RemoveUpdateAvailableCallback(); | 
| 412   filterEngine->ForceUpdateCheck(&NoOpUpdaterCallback); | 474   filterEngine->ForceUpdateCheck(&NoOpUpdaterCallback); | 
| 413   AdblockPlus::Sleep(100); | 475   AdblockPlus::Sleep(100); | 
| 414   ASSERT_EQ(1, timesCalled); | 476   ASSERT_EQ(1, timesCalled); | 
| 415 } | 477 } | 
|  | 478 | 
|  | 479 TEST_F(FilterEngineTest, DocumentWhitelisting) | 
|  | 480 { | 
|  | 481   filterEngine->GetFilter("@@||example.org^$document")->AddToList(); | 
|  | 482   filterEngine->GetFilter("@@||example.com^$document,domain=example.de")->AddToL
     ist(); | 
|  | 483 | 
|  | 484   ASSERT_TRUE(filterEngine->IsDocumentWhitelisted( | 
|  | 485       "http://example.org", | 
|  | 486       std::vector<std::string>())); | 
|  | 487 | 
|  | 488   ASSERT_FALSE(filterEngine->IsDocumentWhitelisted( | 
|  | 489       "http://example.co.uk", | 
|  | 490       std::vector<std::string>())); | 
|  | 491 | 
|  | 492   ASSERT_FALSE(filterEngine->IsDocumentWhitelisted( | 
|  | 493       "http://example.com", | 
|  | 494       std::vector<std::string>())); | 
|  | 495 | 
|  | 496   std::vector<std::string> documentUrls1; | 
|  | 497   documentUrls1.push_back("http://example.de"); | 
|  | 498 | 
|  | 499   ASSERT_TRUE(filterEngine->IsDocumentWhitelisted( | 
|  | 500       "http://example.com", | 
|  | 501       documentUrls1)); | 
|  | 502 | 
|  | 503   ASSERT_FALSE(filterEngine->IsDocumentWhitelisted( | 
|  | 504       "http://example.co.uk", | 
|  | 505       documentUrls1)); | 
|  | 506 } | 
|  | 507 | 
|  | 508 TEST_F(FilterEngineTest, ElemhideWhitelisting) | 
|  | 509 { | 
|  | 510   filterEngine->GetFilter("@@||example.org^$elemhide")->AddToList(); | 
|  | 511   filterEngine->GetFilter("@@||example.com^$elemhide,domain=example.de")->AddToL
     ist(); | 
|  | 512 | 
|  | 513   ASSERT_TRUE(filterEngine->IsElemhideWhitelisted( | 
|  | 514       "http://example.org", | 
|  | 515       std::vector<std::string>())); | 
|  | 516 | 
|  | 517   ASSERT_FALSE(filterEngine->IsElemhideWhitelisted( | 
|  | 518       "http://example.co.uk", | 
|  | 519       std::vector<std::string>())); | 
|  | 520 | 
|  | 521   ASSERT_FALSE(filterEngine->IsElemhideWhitelisted( | 
|  | 522       "http://example.com", | 
|  | 523       std::vector<std::string>())); | 
|  | 524 | 
|  | 525   std::vector<std::string> documentUrls1; | 
|  | 526   documentUrls1.push_back("http://example.de"); | 
|  | 527 | 
|  | 528   ASSERT_TRUE(filterEngine->IsElemhideWhitelisted( | 
|  | 529       "http://example.com", | 
|  | 530       documentUrls1)); | 
|  | 531 | 
|  | 532   ASSERT_FALSE(filterEngine->IsElemhideWhitelisted( | 
|  | 533       "http://example.co.uk", | 
|  | 534       documentUrls1)); | 
|  | 535 } | 
| LEFT | RIGHT | 
|---|