| 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 | 
| 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  * | 
| 14  * You should have received a copy of the GNU General Public License | 14  * You should have received a copy of the GNU General Public License | 
| 15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
| 16  */ | 16  */ | 
| 17 | 17 | 
| 18 #include <sstream> | 18 #include <sstream> | 
| 19 | 19 | 
| 20 #include "../src/Thread.h" | 20 #include "../src/Thread.h" | 
| 21 #include "BaseJsTest.h" | 21 #include "BaseJsTest.h" | 
| 22 | 22 | 
| 23 using namespace AdblockPlus; | 23 using namespace AdblockPlus; | 
| 24 | 24 | 
| 25 namespace | 25 namespace | 
| 26 { | 26 { | 
| 27   typedef std::shared_ptr<AdblockPlus::FilterEngine> FilterEnginePtr; |  | 
| 28 |  | 
| 29   class TestFileSystem : public LazyFileSystem | 27   class TestFileSystem : public LazyFileSystem | 
| 30   { | 28   { | 
| 31   public: | 29   public: | 
| 32     IOBuffer prefsContents; | 30     IOBuffer prefsContents; | 
| 33 | 31 | 
| 34     void Read(const std::string& path, const ReadCallback& callback) const overr
     ide | 32     void Read(const std::string& path, const ReadCallback& callback) const overr
     ide | 
| 35     { | 33     { | 
| 36       scheduler([this, path, callback] | 34       scheduler([this, path, callback] | 
| 37       { | 35       { | 
| 38         if (path == "prefs.json" && !prefsContents.empty()) | 36         if (path == "prefs.json" && !prefsContents.empty()) | 
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 88     void ResetPlatform() | 86     void ResetPlatform() | 
| 89     { | 87     { | 
| 90       ThrowingPlatformCreationParameters platformParams; | 88       ThrowingPlatformCreationParameters platformParams; | 
| 91       platformParams.fileSystem = fileSystem; | 89       platformParams.fileSystem = fileSystem; | 
| 92       platformParams.webRequest.reset(new NoopWebRequest()); | 90       platformParams.webRequest.reset(new NoopWebRequest()); | 
| 93       platformParams.logSystem.reset(new LazyLogSystem()); | 91       platformParams.logSystem.reset(new LazyLogSystem()); | 
| 94       platformParams.timer.reset(new NoopTimer()); | 92       platformParams.timer.reset(new NoopTimer()); | 
| 95       platform.reset(new Platform(std::move(platformParams))); | 93       platform.reset(new Platform(std::move(platformParams))); | 
| 96     } | 94     } | 
| 97 | 95 | 
| 98     FilterEnginePtr CreateFilterEngine(const AdblockPlus::FilterEngine::Prefs& p
     reconfiguredPrefs = | 96     FilterEngine& CreateFilterEngine(const AdblockPlus::FilterEngine::Prefs& pre
     configuredPrefs = | 
| 99       AdblockPlus::FilterEngine::Prefs()) | 97       AdblockPlus::FilterEngine::Prefs()) | 
| 100     { | 98     { | 
| 101       AdblockPlus::FilterEngine::CreationParameters createParams; | 99       AdblockPlus::FilterEngine::CreationParameters createParams; | 
| 102       createParams.preconfiguredPrefs = preconfiguredPrefs; | 100       createParams.preconfiguredPrefs = preconfiguredPrefs; | 
| 103       return ::CreateFilterEngine(*fileSystem, *platform, createParams); | 101       return ::CreateFilterEngine(*fileSystem, *platform, createParams); | 
| 104     } | 102     } | 
| 105   }; | 103   }; | 
| 106 } | 104 } | 
| 107 | 105 | 
| 108 TEST_F(PrefsTest, PrefsGetSet) | 106 TEST_F(PrefsTest, PrefsGetSet) | 
| 109 { | 107 { | 
| 110   auto filterEngine = CreateFilterEngine(); | 108   auto& filterEngine = CreateFilterEngine(); | 
| 111   ASSERT_EQ("patterns.ini", filterEngine->GetPref("patternsfile").AsString()); | 109   ASSERT_EQ("patterns.ini", filterEngine.GetPref("patternsfile").AsString()); | 
| 112   ASSERT_EQ(24, filterEngine->GetPref("patternsbackupinterval").AsInt()); | 110   ASSERT_EQ(24, filterEngine.GetPref("patternsbackupinterval").AsInt()); | 
| 113   ASSERT_TRUE(filterEngine->GetPref("subscriptions_autoupdate").AsBool()); | 111   ASSERT_TRUE(filterEngine.GetPref("subscriptions_autoupdate").AsBool()); | 
| 114   ASSERT_TRUE(filterEngine->GetPref("foobar").IsUndefined()); | 112   ASSERT_TRUE(filterEngine.GetPref("foobar").IsUndefined()); | 
| 115 | 113 | 
| 116   ASSERT_ANY_THROW(filterEngine->SetPref("patternsfile", GetJsEngine().NewValue(
     0))); | 114   ASSERT_ANY_THROW(filterEngine.SetPref("patternsfile", GetJsEngine().NewValue(0
     ))); | 
| 117   ASSERT_ANY_THROW(filterEngine->SetPref("patternsbackupinterval", GetJsEngine()
     .NewValue(true))); | 115   ASSERT_ANY_THROW(filterEngine.SetPref("patternsbackupinterval", GetJsEngine().
     NewValue(true))); | 
| 118   ASSERT_ANY_THROW(filterEngine->SetPref("subscriptions_autoupdate", GetJsEngine
     ().NewValue("foo"))); | 116   ASSERT_ANY_THROW(filterEngine.SetPref("subscriptions_autoupdate", GetJsEngine(
     ).NewValue("foo"))); | 
| 119 | 117 | 
| 120   filterEngine->SetPref("patternsfile", GetJsEngine().NewValue("filters.ini")); | 118   filterEngine.SetPref("patternsfile", GetJsEngine().NewValue("filters.ini")); | 
| 121   filterEngine->SetPref("patternsbackupinterval", GetJsEngine().NewValue(48)); | 119   filterEngine.SetPref("patternsbackupinterval", GetJsEngine().NewValue(48)); | 
| 122   filterEngine->SetPref("subscriptions_autoupdate", GetJsEngine().NewValue(false
     )); | 120   filterEngine.SetPref("subscriptions_autoupdate", GetJsEngine().NewValue(false)
     ); | 
| 123 | 121 | 
| 124   ASSERT_EQ("filters.ini", filterEngine->GetPref("patternsfile").AsString()); | 122   ASSERT_EQ("filters.ini", filterEngine.GetPref("patternsfile").AsString()); | 
| 125   ASSERT_EQ(48, filterEngine->GetPref("patternsbackupinterval").AsInt()); | 123   ASSERT_EQ(48, filterEngine.GetPref("patternsbackupinterval").AsInt()); | 
| 126   ASSERT_FALSE(filterEngine->GetPref("subscriptions_autoupdate").AsBool()); | 124   ASSERT_FALSE(filterEngine.GetPref("subscriptions_autoupdate").AsBool()); | 
| 127 } | 125 } | 
| 128 | 126 | 
| 129 TEST_F(PrefsTest, PrefsPersist) | 127 TEST_F(PrefsTest, PrefsPersist) | 
| 130 { | 128 { | 
| 131   { | 129   { | 
| 132     auto filterEngine = CreateFilterEngine(); | 130     auto& filterEngine = CreateFilterEngine(); | 
| 133     ASSERT_EQ("patterns.ini", filterEngine->GetPref("patternsfile").AsString()); | 131     ASSERT_EQ("patterns.ini", filterEngine.GetPref("patternsfile").AsString()); | 
| 134     ASSERT_EQ(24, filterEngine->GetPref("patternsbackupinterval").AsInt()); | 132     ASSERT_EQ(24, filterEngine.GetPref("patternsbackupinterval").AsInt()); | 
| 135     ASSERT_TRUE(filterEngine->GetPref("subscriptions_autoupdate").AsBool()); | 133     ASSERT_TRUE(filterEngine.GetPref("subscriptions_autoupdate").AsBool()); | 
| 136 | 134 | 
| 137     filterEngine->SetPref("patternsfile", GetJsEngine().NewValue("filters.ini"))
     ; | 135     filterEngine.SetPref("patternsfile", GetJsEngine().NewValue("filters.ini")); | 
| 138     filterEngine->SetPref("patternsbackupinterval", GetJsEngine().NewValue(48)); | 136     filterEngine.SetPref("patternsbackupinterval", GetJsEngine().NewValue(48)); | 
| 139     filterEngine->SetPref("subscriptions_autoupdate", GetJsEngine().NewValue(fal
     se)); | 137     filterEngine.SetPref("subscriptions_autoupdate", GetJsEngine().NewValue(fals
     e)); | 
| 140   } | 138   } | 
| 141   ASSERT_FALSE(fileSystem->prefsContents.empty()); | 139   ASSERT_FALSE(fileSystem->prefsContents.empty()); | 
| 142 | 140 | 
| 143   { | 141   { | 
| 144     ResetPlatform(); | 142     ResetPlatform(); | 
| 145     auto filterEngine = CreateFilterEngine(); | 143     auto& filterEngine = CreateFilterEngine(); | 
| 146     ASSERT_EQ("filters.ini", filterEngine->GetPref("patternsfile").AsString()); | 144     ASSERT_EQ("filters.ini", filterEngine.GetPref("patternsfile").AsString()); | 
| 147     ASSERT_EQ(48, filterEngine->GetPref("patternsbackupinterval").AsInt()); | 145     ASSERT_EQ(48, filterEngine.GetPref("patternsbackupinterval").AsInt()); | 
| 148     ASSERT_FALSE(filterEngine->GetPref("subscriptions_autoupdate").AsBool()); | 146     ASSERT_FALSE(filterEngine.GetPref("subscriptions_autoupdate").AsBool()); | 
| 149   } | 147   } | 
| 150 } | 148 } | 
| 151 | 149 | 
| 152 TEST_F(PrefsTest, UnknownPrefs) | 150 TEST_F(PrefsTest, UnknownPrefs) | 
| 153 { | 151 { | 
| 154   using IOBuffer = AdblockPlus::IFileSystem::IOBuffer; | 152   using IOBuffer = AdblockPlus::IFileSystem::IOBuffer; | 
| 155   std::string content = "{\"foobar\":2, \"patternsbackupinterval\": 12}"; | 153   std::string content = "{\"foobar\":2, \"patternsbackupinterval\": 12}"; | 
| 156   fileSystem->prefsContents = IOBuffer(content.cbegin(), content.cend()); | 154   fileSystem->prefsContents = IOBuffer(content.cbegin(), content.cend()); | 
| 157   auto filterEngine = CreateFilterEngine(); | 155   auto& filterEngine = CreateFilterEngine(); | 
| 158   ASSERT_TRUE(filterEngine->GetPref("foobar").IsUndefined()); | 156   ASSERT_TRUE(filterEngine.GetPref("foobar").IsUndefined()); | 
| 159   ASSERT_EQ(12, filterEngine->GetPref("patternsbackupinterval").AsInt()); | 157   ASSERT_EQ(12, filterEngine.GetPref("patternsbackupinterval").AsInt()); | 
| 160 } | 158 } | 
| 161 | 159 | 
| 162 TEST_F(PrefsTest, SyntaxFailure) | 160 TEST_F(PrefsTest, SyntaxFailure) | 
| 163 { | 161 { | 
| 164   using IOBuffer = AdblockPlus::IFileSystem::IOBuffer; | 162   using IOBuffer = AdblockPlus::IFileSystem::IOBuffer; | 
| 165   std::string content = "{\"patternsbackupinterval\": 6, \"foo\"}"; | 163   std::string content = "{\"patternsbackupinterval\": 6, \"foo\"}"; | 
| 166   fileSystem->prefsContents = IOBuffer(content.cbegin(), content.cend()); | 164   fileSystem->prefsContents = IOBuffer(content.cbegin(), content.cend()); | 
| 167   auto filterEngine = CreateFilterEngine(); | 165   ASSERT_EQ(24, CreateFilterEngine().GetPref("patternsbackupinterval").AsInt()); | 
| 168 |  | 
| 169   ASSERT_EQ(24, filterEngine->GetPref("patternsbackupinterval").AsInt()); |  | 
| 170 } | 166 } | 
| 171 | 167 | 
| 172 TEST_F(PrefsTest, PreconfiguredPrefsPreconfigured) | 168 TEST_F(PrefsTest, PreconfiguredPrefsPreconfigured) | 
| 173 { | 169 { | 
| 174   AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 170   AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 
| 175   preconfiguredPrefs.emplace("disable_auto_updates", GetJsEngine().NewValue(fals
     e)); | 171   preconfiguredPrefs.emplace("disable_auto_updates", GetJsEngine().NewValue(fals
     e)); | 
| 176   preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue(t
     rue)); | 172   preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue(t
     rue)); | 
| 177   auto filterEngine = CreateFilterEngine(preconfiguredPrefs); | 173   auto& filterEngine = CreateFilterEngine(preconfiguredPrefs); | 
| 178 | 174 | 
| 179   ASSERT_TRUE(filterEngine->GetPref("disable_auto_updates").IsBool()); | 175   ASSERT_TRUE(filterEngine.GetPref("disable_auto_updates").IsBool()); | 
| 180   ASSERT_FALSE(filterEngine->GetPref("disable_auto_updates").AsBool()); | 176   ASSERT_FALSE(filterEngine.GetPref("disable_auto_updates").AsBool()); | 
| 181   ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").IsBool()); | 177   ASSERT_TRUE(filterEngine.GetPref("suppress_first_run_page").IsBool()); | 
| 182   ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").AsBool()); | 178   ASSERT_TRUE(filterEngine.GetPref("suppress_first_run_page").AsBool()); | 
| 183 } | 179 } | 
| 184 | 180 | 
| 185 TEST_F(PrefsTest, PreconfiguredPrefsUnsupported) | 181 TEST_F(PrefsTest, PreconfiguredPrefsUnsupported) | 
| 186 { | 182 { | 
| 187   AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 183   AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 
| 188   preconfiguredPrefs.emplace("unsupported_preconfig", GetJsEngine().NewValue(tru
     e)); | 184   preconfiguredPrefs.emplace("unsupported_preconfig", GetJsEngine().NewValue(tru
     e)); | 
| 189   auto filterEngine = CreateFilterEngine(preconfiguredPrefs); | 185   auto& filterEngine = CreateFilterEngine(preconfiguredPrefs); | 
| 190 | 186 | 
| 191   ASSERT_TRUE(filterEngine->GetPref("unsupported_preconfig").IsUndefined()); | 187   ASSERT_TRUE(filterEngine.GetPref("unsupported_preconfig").IsUndefined()); | 
| 192 } | 188 } | 
| 193 | 189 | 
| 194 TEST_F(PrefsTest, PreconfiguredPrefsOverride) | 190 TEST_F(PrefsTest, PreconfiguredPrefsOverride) | 
| 195 { | 191 { | 
| 196   AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 192   AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 
| 197   preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue(t
     rue)); | 193   preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue(t
     rue)); | 
| 198   auto filterEngine = CreateFilterEngine(preconfiguredPrefs); | 194   auto& filterEngine = CreateFilterEngine(preconfiguredPrefs); | 
| 199 | 195 | 
| 200   filterEngine->SetPref("suppress_first_run_page", GetJsEngine().NewValue(false)
     ); | 196   filterEngine.SetPref("suppress_first_run_page", GetJsEngine().NewValue(false))
     ; | 
| 201   ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").IsBool()); | 197   ASSERT_TRUE(filterEngine.GetPref("suppress_first_run_page").IsBool()); | 
| 202   ASSERT_FALSE(filterEngine->GetPref("suppress_first_run_page").AsBool()); | 198   ASSERT_FALSE(filterEngine.GetPref("suppress_first_run_page").AsBool()); | 
| 203 } | 199 } | 
| 204 | 200 | 
| 205 TEST_F(PrefsTest, PrefsPersistWhenPreconfigured) | 201 TEST_F(PrefsTest, PrefsPersistWhenPreconfigured) | 
| 206 { | 202 { | 
| 207   { | 203   { | 
| 208     AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 204     AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 
| 209     preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue
     (true)); | 205     preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue
     (true)); | 
| 210     auto filterEngine = CreateFilterEngine(preconfiguredPrefs); | 206     auto& filterEngine = CreateFilterEngine(preconfiguredPrefs); | 
| 211 | 207 | 
| 212     ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").IsBool()); | 208     ASSERT_TRUE(filterEngine.GetPref("suppress_first_run_page").IsBool()); | 
| 213     ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").AsBool()); | 209     ASSERT_TRUE(filterEngine.GetPref("suppress_first_run_page").AsBool()); | 
| 214     filterEngine->SetPref("suppress_first_run_page", GetJsEngine().NewValue(fals
     e)); | 210     filterEngine.SetPref("suppress_first_run_page", GetJsEngine().NewValue(false
     )); | 
| 215   } | 211   } | 
| 216   ASSERT_FALSE(fileSystem->prefsContents.empty()); | 212   ASSERT_FALSE(fileSystem->prefsContents.empty()); | 
| 217 | 213 | 
| 218   { | 214   { | 
| 219     ResetPlatform(); | 215     ResetPlatform(); | 
| 220     AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 216     AdblockPlus::FilterEngine::Prefs preconfiguredPrefs; | 
| 221     preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue
     (true)); | 217     preconfiguredPrefs.emplace("suppress_first_run_page", GetJsEngine().NewValue
     (true)); | 
| 222     auto filterEngine = CreateFilterEngine(preconfiguredPrefs); | 218     auto& filterEngine = CreateFilterEngine(preconfiguredPrefs); | 
| 223 | 219 | 
| 224     ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").IsBool()); | 220     ASSERT_TRUE(filterEngine.GetPref("suppress_first_run_page").IsBool()); | 
| 225     ASSERT_FALSE(filterEngine->GetPref("suppress_first_run_page").AsBool()); | 221     ASSERT_FALSE(filterEngine.GetPref("suppress_first_run_page").AsBool()); | 
| 226   } | 222   } | 
| 227 } | 223 } | 
| OLD | NEW | 
|---|