void ClientHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser) { REQUIRE_UI_THREAD(); if (m_BrowserId == browser->GetIdentifier()) { // Free the browser pointer so that the browser can be destroyed m_Browser = NULL; if (m_OSRHandler.get()) { m_OSRHandler->OnBeforeClose(browser); m_OSRHandler = NULL; } } else if (browser->IsPopup()) { // Remove the record for DevTools popup windows. std::set<std::string>::iterator it = m_OpenDevToolsURLs.find(browser->GetMainFrame()->GetURL()); if (it != m_OpenDevToolsURLs.end()) m_OpenDevToolsURLs.erase(it); // Remove from the browser popup list. BrowserList::iterator bit = m_PopupBrowsers.begin(); for (; bit != m_PopupBrowsers.end(); ++bit) { if ((*bit)->IsSame(browser)) { m_PopupBrowsers.erase(bit); break; } } } if (--m_BrowserCount == 0) { // All browser windows have closed. Quit the application message loop. AppQuitMessageLoop(); } }
void ClientHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser) { CEF_REQUIRE_UI_THREAD(); message_router_->OnBeforeClose(browser); if (GetBrowserId() == browser->GetIdentifier()) { { base::AutoLock lock_scope(lock_); // Free the browser pointer so that the browser can be destroyed browser_ = NULL; } if (osr_handler_.get()) { osr_handler_->OnBeforeClose(browser); osr_handler_ = NULL; } } else if (browser->IsPopup()) { // Remove from the browser popup list. BrowserList::iterator bit = popup_browsers_.begin(); for (; bit != popup_browsers_.end(); ++bit) { if ((*bit)->IsSame(browser)) { popup_browsers_.erase(bit); break; } } } if (--browser_count_ == 0) { // All browser windows have closed. // Remove and delete message router handlers. MessageHandlerSet::const_iterator it = message_handler_set_.begin(); for (; it != message_handler_set_.end(); ++it) { message_router_->RemoveHandler(*(it)); delete *(it); } message_handler_set_.clear(); message_router_ = NULL; // Quit the application message loop. AppQuitMessageLoop(); } }
void TerminationSignalHandler(int signatl) { AppQuitMessageLoop(); }