FilterPtr FilterEngine::GetFilter(const std::string& text) { JsValuePtr func = jsEngine->Evaluate("API.getFilterFromText"); JsValueList params; params.push_back(jsEngine->NewValue(text)); return FilterPtr(new Filter(std::move(*func->Call(params)))); }
SubscriptionPtr FilterEngine::GetSubscription(const std::string& url) { JsValuePtr func = jsEngine->Evaluate("API.getSubscriptionFromUrl"); JsValueList params; params.push_back(jsEngine->NewValue(url)); return SubscriptionPtr(new Subscription(std::move(*func->Call(params)))); }
void Filter::RemoveFromList() { JsValuePtr func = jsEngine->Evaluate("API.removeFilterFromList"); JsValueList params; params.push_back(shared_from_this()); func->Call(params); }
void Subscription::UpdateFilters() { JsValuePtr func = jsEngine->Evaluate("API.updateSubscription"); JsValueList params; params.push_back(shared_from_this()); func->Call(params); }
std::string FilterEngine::GetHostFromURL(const std::string& url) { JsValuePtr func = jsEngine->Evaluate("API.getHostFromUrl"); JsValueList params; params.push_back(jsEngine->NewValue(url)); return func->Call(params)->AsString(); }
bool Subscription::IsListed() { JsValuePtr func = jsEngine->Evaluate("API.isListedSubscription"); JsValueList params; params.push_back(shared_from_this()); return func->Call(params)->AsBool(); }
AdblockPlus::JsValuePtr AdblockPlus::JsValue::Call(const JsValueList& params, JsValuePtr thisPtr) const { if (!IsFunction()) throw new std::runtime_error("Attempting to call a non-function"); const JsContext context(jsEngine); if (!thisPtr) { v8::Local<v8::Context> localContext = v8::Local<v8::Context>::New(jsEngine->GetIsolate(), *jsEngine->context); thisPtr = JsValuePtr(new JsValue(jsEngine, localContext->Global())); } if (!thisPtr->IsObject()) throw new std::runtime_error("`this` pointer has to be an object"); v8::Local<v8::Object> thisObj = v8::Local<v8::Object>::Cast(thisPtr->UnwrapValue()); std::vector<v8::Handle<v8::Value>> argv; for (JsValueList::const_iterator it = params.begin(); it != params.end(); ++it) argv.push_back((*it)->UnwrapValue()); const v8::TryCatch tryCatch; v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(UnwrapValue()); v8::Local<v8::Value> result = func->Call(thisObj, argv.size(), argv.size() ? &argv.front() : 0); if (tryCatch.HasCaught()) throw JsError(tryCatch.Exception(), tryCatch.Message()); return JsValuePtr(new JsValue(jsEngine, result)); }
JsValuePtr FilterEngine::GetPref(const std::string& pref) const { JsValuePtr func = jsEngine->Evaluate("API.getPref"); JsValueList params; params.push_back(jsEngine->NewValue(pref)); return func->Call(params); }
void Subscription::AddToList() { JsValuePtr func = jsEngine->Evaluate("API.addSubscriptionToList"); JsValueList params; params.push_back(shared_from_this()); func->Call(params); }
void FilterEngine::SetPref(const std::string& pref, JsValuePtr value) { JsValuePtr func = jsEngine->Evaluate("API.setPref"); JsValueList params; params.push_back(jsEngine->NewValue(pref)); params.push_back(value); func->Call(params); }
bool Subscription::IsUpdating() { JsValuePtr func = jsEngine->Evaluate("API.isSubscriptionUpdating"); JsValueList params; params.push_back(shared_from_this()); JsValuePtr result = func->Call(params); return result->AsBool(); }
AdblockPlus::JsValueList AdblockPlus::JsEngine::ConvertArguments(const v8::Arguments& arguments) { const JsContext context(shared_from_this()); JsValueList list; for (int i = 0; i < arguments.Length(); i++) list.push_back(JsValuePtr(new JsValue(shared_from_this(), arguments[i]))); return list; }
int FilterEngine::CompareVersions(const std::string& v1, const std::string& v2) { JsValueList params; params.push_back(jsEngine->NewValue(v1)); params.push_back(jsEngine->NewValue(v2)); JsValuePtr func = jsEngine->Evaluate("API.compareVersions"); return func->Call(params)->AsInt(); }
std::vector<FilterPtr> FilterEngine::GetListedFilters() const { JsValuePtr func = jsEngine->Evaluate("API.getListedFilters"); JsValueList values = func->Call()->AsList(); std::vector<FilterPtr> result; for (JsValueList::iterator it = values.begin(); it != values.end(); it++) result.push_back(FilterPtr(new Filter(std::move(**it)))); return result; }
std::vector<SubscriptionPtr> FilterEngine::FetchAvailableSubscriptions() const { JsValuePtr func = jsEngine->Evaluate("API.getRecommendedSubscriptions"); JsValueList values = func->Call()->AsList(); std::vector<SubscriptionPtr> result; for (JsValueList::iterator it = values.begin(); it != values.end(); it++) result.push_back(SubscriptionPtr(new Subscription(std::move(**it)))); return result; }
NotificationPtr FilterEngine::GetNextNotificationToShow(const std::string& url) { JsValuePtr func = jsEngine->Evaluate("API.getNextNotificationToShow"); JsValueList params; if (!url.empty()) { params.push_back(jsEngine->NewValue(url)); } return Notification::JsValueToNotification(func->Call(params)); }
void FilterEngine::ShowNextNotification(const std::string& url) { JsValuePtr func = jsEngine->Evaluate("API.showNextNotification"); JsValueList params; if (!url.empty()) { params.push_back(jsEngine->NewValue(url)); } func->Call(params); }
std::vector<std::string> FilterEngine::GetElementHidingSelectors(const std::string& domain) const { JsValuePtr func = jsEngine->Evaluate("API.getElementHidingSelectors"); JsValueList params; params.push_back(jsEngine->NewValue(domain)); JsValueList result = func->Call(params)->AsList(); std::vector<std::string> selectors; for (JsValueList::iterator it = result.begin(); it != result.end(); ++it) selectors.push_back((*it)->AsString()); return selectors; }
void FilterEngine::ForceUpdateCheck(FilterEngine::UpdaterCallback callback) { std::string eventName = "updateCheckDone"; eventName += ++updateCheckId; jsEngine->SetEventCallback(eventName, std::tr1::bind(&FilterEngine::UpdateCheckDone, this, eventName, callback, std::tr1::placeholders::_1)); JsValuePtr func = jsEngine->Evaluate("API.forceUpdateCheck"); JsValueList params; params.push_back(jsEngine->NewValue(eventName)); func->Call(params); }
std::vector<std::string> AdblockPlus::JsValue::GetOwnPropertyNames() const { if (!IsObject()) throw new std::runtime_error("Attempting to get propert list for a non-object"); const JsContext context(jsEngine); v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(UnwrapValue()); JsValueList properties = JsValuePtr(new JsValue(jsEngine, object->GetOwnPropertyNames()))->AsList(); std::vector<std::string> result; for (JsValueList::iterator it = properties.begin(); it != properties.end(); ++it) result.push_back((*it)->AsString()); return result; }
AdblockPlus::FilterPtr FilterEngine::CheckFilterMatch(const std::string& url, ContentType contentType, const std::string& documentUrl) const { JsValuePtr func = jsEngine->Evaluate("API.checkFilterMatch"); JsValueList params; params.push_back(jsEngine->NewValue(url)); params.push_back(jsEngine->NewValue(ContentTypeToString(contentType))); params.push_back(jsEngine->NewValue(documentUrl)); JsValuePtr result = func->Call(params); if (!result->IsNull()) return FilterPtr(new Filter(std::move(*result))); else return FilterPtr(); }
AdblockPlus::JsValueList AdblockPlus::JsValue::AsList() const { if (!IsArray()) throw std::runtime_error("Cannot convert a non-array to list"); const JsContext context(jsEngine); JsValueList result; v8::Local<v8::Array> array = v8::Local<v8::Array>::Cast(UnwrapValue()); uint32_t length = array->Length(); for (uint32_t i = 0; i < length; i++) { v8::Local<v8::Value> item = array->Get(i); result.push_back(JsValuePtr(new JsValue(jsEngine, item))); } return result; }
std::vector<std::string> Notification::GetLinks() const { std::vector<std::string> retValue; JsValuePtr jsLinks = GetProperty("links"); if (!jsLinks->IsArray()) { return retValue; } JsValueList urlLinksList = jsLinks->AsList(); for (JsValueList::const_iterator linkIterator = urlLinksList.begin(); linkIterator != urlLinksList.end(); ++linkIterator) { retValue.push_back((*linkIterator)->AsString()); } return retValue; }
void FilterEngine::UpdateCheckDone(const std::string& eventName, FilterEngine::UpdaterCallback callback, JsValueList& params) { jsEngine->RemoveEventCallback(eventName); std::string error(params.size() >= 1 && !params[0]->IsNull() ? params[0]->AsString() : ""); callback(error); }
void FilterEngine::ShowNotification(const ShowNotificationCallback& callback, const JsValueList& params) { if (params.size() < 1) return; if (!params[0]->IsObject()) { return; } callback(NotificationPtr(new Notification(std::move(*params[0])))); }
void FilterEngine::FilterChanged(FilterEngine::FilterChangeCallback callback, JsValueList& params) { std::string action(params.size() >= 1 && !params[0]->IsNull() ? params[0]->AsString() : ""); JsValuePtr item(params.size() >= 2 ? params[1] : jsEngine->NewValue(false)); callback(action, item); }
void FilterEngine::UpdateAvailable( FilterEngine::UpdateAvailableCallback callback, JsValueList& params) { if (params.size() >= 1 && !params[0]->IsNull()) callback(params[0]->AsString()); }
void FilterEngine::InitDone(JsValueList& params) { jsEngine->RemoveEventCallback("_init"); initialized = true; firstRun = params.size() && params[0]->AsBool(); }