| Index: src/engine/main.cpp | 
| =================================================================== | 
| --- a/src/engine/main.cpp | 
| +++ b/src/engine/main.cpp | 
| @@ -1,37 +1,24 @@ | 
| #include <AdblockPlus.h> | 
| +#include <functional> | 
| #include <vector> | 
| #include <Windows.h> | 
|  | 
| #include "../shared/AutoHandle.h" | 
| #include "../shared/Communication.h" | 
| #include "../shared/Utils.h" | 
| #include "../shared/Version.h" | 
| #include "Debug.h" | 
| +#include "Updater.h" | 
|  | 
| namespace | 
| { | 
| std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; | 
|  | 
| -  std::string ToUtf8String(std::wstring str) | 
| -  { | 
| -    size_t length = str.size(); | 
| -    if (length == 0) | 
| -      return std::string(); | 
| - | 
| -    DWORD utf8StringLength = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), length, 0, 0, 0, 0); | 
| -    if (utf8StringLength == 0) | 
| -      throw std::runtime_error("Failed to determine the required buffer size"); | 
| - | 
| -    std::string utf8String(utf8StringLength, '\0'); | 
| -    WideCharToMultiByte(CP_UTF8, 0, str.c_str(), length, &utf8String[0], utf8StringLength, 0, 0); | 
| -    return utf8String; | 
| -  } | 
| - | 
| void WriteStrings(Communication::OutputBuffer& response, | 
| const std::vector<std::string>& strings) | 
| { | 
| int32_t count = strings.size(); | 
| response << count; | 
| for (int32_t i = 0; i < count; i++) | 
| response << strings[i]; | 
| } | 
| @@ -158,32 +145,47 @@ namespace | 
| { | 
| DebugException(e); | 
| } | 
|  | 
| // TODO: Keep the pipe open until the client disconnects | 
|  | 
| return 0; | 
| } | 
| + | 
| +  void OnUpdateAvailable(AdblockPlus::JsEnginePtr jsEngine, AdblockPlus::JsValueList& params) | 
| +  { | 
| +    if (params.size() < 1) | 
| +    { | 
| +      Debug("updateAvailable event missing URL"); | 
| +      return; | 
| +    } | 
| + | 
| +    Updater updater(jsEngine, params[0]->AsString()); | 
| +    updater.Update(); | 
| +  } | 
| } | 
|  | 
| std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine(const std::wstring& locale) | 
| { | 
| AdblockPlus::AppInfo appInfo; | 
| appInfo.version = ToUtf8String(IEPLUGIN_VERSION); | 
| appInfo.name = "adblockplusie"; | 
| appInfo.platform = "msie"; | 
| appInfo.locale = ToUtf8String(locale); | 
| #ifdef ADBLOCK_PLUS_TEST_MODE | 
| appInfo.developmentBuild = true; | 
| #else | 
| appInfo.developmentBuild = false; | 
| #endif | 
|  | 
| AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); | 
| +  jsEngine->SetEventCallback("updateAvailable", | 
| +      std::bind(&OnUpdateAvailable, jsEngine, std::placeholders::_1)); | 
| + | 
| std::string dataPath = ToUtf8String(GetAppDataPath()); | 
| dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get())->SetBasePath(dataPath); | 
| std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterEngine(jsEngine)); | 
| return filterEngine; | 
| } | 
|  | 
| int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) | 
| { | 
|  |