예제 #1
0
FilterEngine::FilterEngine(JsEnginePtr jsEngine,
                           const FilterEngine::Prefs& preconfiguredPrefs)
    : jsEngine(jsEngine), initialized(false), firstRun(false), updateCheckId(0)
{
  jsEngine->SetEventCallback("_init", std::bind(&FilterEngine::InitDone,
      this, std::placeholders::_1));

  {
    // Lock the JS engine while we are loading scripts, no timeouts should fire
    // until we are done.
    const JsContext context(jsEngine);

    // Set the preconfigured prefs
    JsValuePtr preconfiguredPrefsObject = jsEngine->NewObject();
    for (FilterEngine::Prefs::const_iterator it = preconfiguredPrefs.begin();
         it != preconfiguredPrefs.end(); it++)
    {
      preconfiguredPrefsObject->SetProperty(it->first, it->second);
    }
    jsEngine->SetGlobalProperty("_preconfiguredPrefs", preconfiguredPrefsObject);
    // Load adblockplus scripts
    for (int i = 0; !jsSources[i].empty(); i += 2)
      jsEngine->Evaluate(jsSources[i + 1], jsSources[i]);
  }

  // TODO: This should really be implemented via a conditional variable
  while (!initialized)
    ::Sleep(10);
}
예제 #2
0
FilterEngine::FilterEngine(JsEnginePtr jsEngine)
    : jsEngine(jsEngine), initialized(false), firstRun(false), updateCheckId(0)
{
  jsEngine->SetEventCallback("init", std::tr1::bind(&FilterEngine::InitDone,
      this, std::tr1::placeholders::_1));

  {
    // Lock the JS engine while we are loading scripts, no timeouts should fire
    // until we are done.
    const JsContext context(jsEngine);
    for (int i = 0; !jsSources[i].empty(); i += 2)
      jsEngine->Evaluate(jsSources[i + 1], jsSources[i]);
  }

  // TODO: This should really be implemented via a conditional variable
  while (!initialized)
    ::Sleep(10);
}