void ContentBlockingInformationWidget::setWindow(Window *window) { if (m_window && !m_window->isAboutToClose()) { disconnect(m_window, SIGNAL(aboutToNavigate()), this, SLOT(clear())); disconnect(m_window, SIGNAL(requestBlocked(NetworkManager::ResourceInformation)), this, SLOT(handleRequest(NetworkManager::ResourceInformation))); } m_window = window; m_amount = 0; if (window) { m_amount = window->getContentsWidget()->getBlockedRequests().count(); m_isContentBlockingEnabled = (m_window->getOption(SettingsManager::ContentBlocking_EnableContentBlockingOption).toBool()); connect(m_window, SIGNAL(aboutToNavigate()), this, SLOT(clear())); connect(m_window, SIGNAL(requestBlocked(NetworkManager::ResourceInformation)), this, SLOT(handleRequest(NetworkManager::ResourceInformation))); } else { m_isContentBlockingEnabled = false; } updateState(); setEnabled(m_window); }
QWebEnginePage* QtWebEnginePage::createWindow(QWebEnginePage::WebWindowType type) { if (type == QWebEnginePage::WebDialog) { QtWebEngineWebWidget *widget(NULL); if (!m_widget || m_widget->getLastUrlClickTime().isNull() || m_widget->getLastUrlClickTime().secsTo(QDateTime::currentDateTime()) > 1) { const QString popupsPolicy(SettingsManager::getValue(QLatin1String("Content/PopupsPolicy"), (m_widget ? m_widget->getRequestedUrl() : QUrl())).toString()); if (popupsPolicy == QLatin1String("blockAll")) { return NULL; } if (popupsPolicy == QLatin1String("ask")) { QtWebEnginePage *page(new QtWebEnginePage(false, NULL)); page->markAsPopup(); connect(page, SIGNAL(aboutToNavigate(QUrl, QWebEnginePage::NavigationType)), this, SLOT(removePopup(QUrl))); return page; } } if (m_widget) { widget = qobject_cast<QtWebEngineWebWidget*>(m_widget->clone(false)); } else { widget = new QtWebEngineWebWidget(false, NULL, NULL); } widget->pageLoadStarted(); emit requestedNewWindow(widget, WindowsManager::calculateOpenHints(WindowsManager::NewTabOpen)); return widget->getPage(); } return QWebEnginePage::createWindow(type); }
bool QtWebEnginePage::acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) { if (m_isPopup) { emit aboutToNavigate(url, type); return false; } if (isMainFrame && url.scheme() == QLatin1String("javascript")) { runJavaScript(url.path()); return false; } if (url.scheme() == QLatin1String("mailto")) { QDesktopServices::openUrl(url); return false; } if (isMainFrame && type == QWebEnginePage::NavigationTypeReload && m_previousNavigationType == QWebEnginePage::NavigationTypeFormSubmitted && SettingsManager::getValue(QLatin1String("Choices/WarnFormResend")).toBool()) { bool cancel(false); bool warn(true); if (m_widget) { ContentsDialog dialog(ThemesManager::getIcon(QLatin1String("dialog-warning")), tr("Question"), tr("Are you sure that you want to send form data again?"), tr("Do you want to resend data?"), (QDialogButtonBox::Yes | QDialogButtonBox::Cancel), NULL, m_widget); dialog.setCheckBox(tr("Do not show this message again"), false); connect(m_widget, SIGNAL(aboutToReload()), &dialog, SLOT(close())); m_widget->showDialog(&dialog); cancel = !dialog.isAccepted(); warn = !dialog.getCheckBoxState(); } else { QMessageBox dialog; dialog.setWindowTitle(tr("Question")); dialog.setText(tr("Are you sure that you want to send form data again?")); dialog.setInformativeText(tr("Do you want to resend data?")); dialog.setIcon(QMessageBox::Question); dialog.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); dialog.setDefaultButton(QMessageBox::Cancel); dialog.setCheckBox(new QCheckBox(tr("Do not show this message again"))); cancel = (dialog.exec() == QMessageBox::Cancel); warn = !dialog.checkBox()->isChecked(); } SettingsManager::setValue(QLatin1String("Choices/WarnFormResend"), warn); if (cancel) { return false; } } if (isMainFrame && type != QWebEnginePage::NavigationTypeReload) { m_previousNavigationType = type; } if (isMainFrame) { scripts().clear(); const QList<UserScript*> scripts(AddonsManager::getUserScriptsForUrl(url)); for (int i = 0; i < scripts.count(); ++i) { QWebEngineScript::InjectionPoint injectionPoint(QWebEngineScript::DocumentReady); if (scripts.at(i)->getInjectionTime() == UserScript::DocumentCreationTime) { injectionPoint = QWebEngineScript::DocumentCreation; } else if (scripts.at(i)->getInjectionTime() == UserScript::DeferredTime) { injectionPoint = QWebEngineScript::Deferred; } QWebEngineScript script; script.setSourceCode(scripts.at(i)->getSource()); script.setRunsOnSubFrames(scripts.at(i)->shouldRunOnSubFrames()); script.setInjectionPoint(injectionPoint); this->scripts().insert(script); } emit aboutToNavigate(url, type); } return true; }