Exemplo n.º 1
0
void DownloadManager::closeDownloadTab(const QUrl &url) const
{
    // Attempt to close empty tab that was opened only for loading the download url
    auto testWebView = [](TabbedWebView *view, const QUrl &url) {
        if (view->browserWindow()->tabWidget()->tabBar()->normalTabsCount() < 2) {
            return false;
        }
        WebPage *page = view->page();
        if (page->history()->count() != 0) {
            return false;
        }
        if (page->url() != QUrl()) {
            return false;
        }
        QUrl tabUrl = page->requestedUrl();
        if (tabUrl.isEmpty()) {
            tabUrl = QUrl(view->webTab()->locationBar()->text());
        }
        return tabUrl.host() == url.host();
    };

    if (testWebView(mApp->getWindow()->weView(), url)) {
        mApp->getWindow()->weView()->closeView();
        return;
    }

    const auto windows = mApp->windows();
    for (auto *window : windows) {
        const auto tabs = window->tabWidget()->allTabs();
        for (auto *tab : tabs) {
            auto *view = tab->webView();
            if (testWebView(view, url)) {
                view->closeView();
                return;
            }
        }
    }
}