bool Download_JS_Handler::Execute(const CefString& name, CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval, CefString& exception){ if (name == "start"){ auto msg=CefProcessMessage::Create("start_download"); msg->GetArgumentList()->SetString(0, arguments.at(3)->GetStringValue()); msg->GetArgumentList()->SetInt(1, arguments.at(0)->GetIntValue()); msg->GetArgumentList()->SetInt(2, arguments.at(4)->GetIntValue()); msg->GetArgumentList()->SetInt(3, arguments.at(5)->GetIntValue()); msg->GetArgumentList()->SetInt(4, arguments[6]->GetIntValue()); //CefV8Context::GetCurrentContext()->GetBrowser()->GetHost()->StartDownload("http://google.com");//nur im browser process //arguments.at(1)->GetFunctionHandler()->Execute("drawPauseButton",arguments.at(2),arguments,CefV8Value::CreateNull(),CefString("nein")); //::MessageBox(NULL, std::to_string(arguments.at(0)->GetIntValue()).c_str(),"okok",MB_OK);//problem bei derm ganzen getstringvalue usw.gibt im Fehlerfall nix zurück,also getstringvalue gibt nix zurück,ist aber eigentlich int CefV8Context::GetCurrentContext()->GetBrowser()->SendProcessMessage(PID_BROWSER,msg); do_execute_callback_function_dl_manager(arguments);//zwar net gut,dass er vor dem dlder button geändert wird(was passiert bei click vor download-start auf den button) wird,spart aber code(aktuell von jetzt ausgehend;-)) //@TODO(geringe Priorität):callback-function speichern und aufrufen wenn download begonnen return true; } else if (name == "pause"){ auto msg = CefProcessMessage::Create("pause_download"); msg->GetArgumentList()->SetInt(0, arguments.at(0)->GetIntValue()); CefV8Context::GetCurrentContext()->GetBrowser()->SendProcessMessage(PID_BROWSER, msg); do_execute_callback_function_dl_manager(arguments); return true; } else if (name == "resume"){ auto msg = CefProcessMessage::Create("resume_download"); msg->GetArgumentList()->SetInt(0, arguments.at(0)->GetIntValue()); CefV8Context::GetCurrentContext()->GetBrowser()->SendProcessMessage(PID_BROWSER, msg); do_execute_callback_function_dl_manager(arguments); return true; } else if (name == "init_JS_Handler"){ //downloader_browser_ref->AddRef(); CefV8Context::GetCurrentContext()->GetBrowser()->SendProcessMessage(PID_BROWSER,CefProcessMessage::Create("js_code_initialized")); return true; } else if (name == "download_of_group_finished"){ auto msg=CefProcessMessage::Create("download_of_group_finished"); msg->GetArgumentList()->SetInt(0, arguments[0]->GetIntValue()); CefV8Context::GetCurrentContext()->GetBrowser()->SendProcessMessage(PID_BROWSER,msg ); return true; } return false; }
__declspec(dllexport) void DestroyFrame(fwString frameName) { auto procMessage = CefProcessMessage::Create("destroyFrame"); auto argumentList = procMessage->GetArgumentList(); argumentList->SetSize(1); argumentList->SetString(0, frameName.c_str()); auto rootWindow = Instance<NUIWindowManager>::Get()->GetRootWindow(); auto browser = rootWindow->GetBrowser(); browser->SendProcessMessage(PID_RENDERER, procMessage); std::unique_lock<std::shared_mutex> lock(frameListMutex); frameList.erase(frameName); }
void RunVisitorT<T>::visitprivate(const CellCallExp &e) { CoverageInstance::invokeAndStartChrono((void*)&e); //get head T execMeCell; try { e.getName().accept(execMeCell); } catch (ScilabException &) { CoverageInstance::stopChrono((void*)&e); throw; } if (execMeCell.getResult() != NULL) { //a{xxx} with a variable, extraction types::InternalType *pIT = NULL; pIT = execMeCell.getResult(); if (pIT) { if (pIT->isCell() == false) { CoverageInstance::stopChrono((void*)&e); throw ast::InternalError(_W("[error] Cell contents reference from a non-cell array object.\n"), 999, e.getFirstLocation()); } //Create list of indexes ast::exps_t exps = e.getArgs(); types::typed_list *pArgs = GetArgumentList(exps); if (pArgs->size() == 0) { // Case a{} delete pArgs; std::wostringstream os; os << _W("Cell : Cannot extract without arguments.\n"); CoverageInstance::stopChrono((void*)&e); throw ast::InternalError(os.str(), 999, e.getFirstLocation()); } types::List* pList = pIT->getAs<types::Cell>()->extractCell(pArgs); if (pList == NULL) { delete pArgs; std::wostringstream os; os << _W("inconsistent row/column dimensions\n"); //os << ((*e.args_get().begin())->getLocation()).getLocationString() << std::endl; CoverageInstance::stopChrono((void*)&e); throw ast::InternalError(os.str(), 999, e.getFirstLocation()); } if (pList->getSize() == 1) { types::InternalType* ret = pList->get(0); setResult(ret); ret->IncreaseRef(); pList->killMe(); ret->DecreaseRef(); } else { setResult(pList); } //clean pArgs return by GetArgumentList for (int iArg = 0; iArg < (int)pArgs->size(); iArg++) { (*pArgs)[iArg]->killMe(); } delete pArgs; } } else { //result == NULL ,variable doesn't exist :( // Should never be in this case // In worst case variable pointing to function does not exists // visitprivate(SimpleVar) will throw the right exception. } CoverageInstance::stopChrono((void*)&e); }