1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-24 04:36:34 +01:00

Fixed bug in click2flash when some flash's won't be loaded

This commit is contained in:
nowrep 2011-04-15 20:44:57 +02:00
parent d3ef260c12
commit a84af542ab
4 changed files with 79 additions and 47 deletions

View File

@ -138,10 +138,46 @@ void ClickToFlash::toWhitelist()
void ClickToFlash::load()
{
QWidget* parent = parentWidget();
QWebView* view = 0;
// QWidget* parent = parentWidget();
// QWebView* view = 0;
// while (parent) {
// if (QWebView* aView = qobject_cast<QWebView*>(parent)) {
// view = aView;
// break;
// }
// parent = parent->parentWidget();
// }
// if (!view)
// return;
// const QString selector = "%1[type=\"application/x-shockwave-flash\"]";
// hide();
// QList<QWebFrame*> frames;
// frames.append(view->page()->mainFrame());
// while (!frames.isEmpty()) {
// QWebFrame* frame = frames.takeFirst();
// QWebElement docElement = frame->documentElement();
// QWebElementCollection elements;
// elements.append(docElement.findAll(selector.arg("object")));
// elements.append(docElement.findAll(selector.arg("embed")));
// foreach(QWebElement element, elements) {
// if (checkElement(element)) {
// QWebElement substitute = element.clone();
// emit signalLoadClickToFlash(true);
// element.replace(substitute);
// deleteLater();
// return;
// }
// }
// frames += frame->childFrames();
// }
QWidget *parent = parentWidget();
QWebView *view = 0;
while (parent) {
if (QWebView* aView = qobject_cast<QWebView*>(parent)) {
if (QWebView *aView = qobject_cast<QWebView*>(parent)) {
view = aView;
break;
}
@ -150,28 +186,32 @@ void ClickToFlash::load()
if (!view)
return;
const QString selector = "%1[type=\"application/x-shockwave-flash\"]";
hide();
// const QString selector = QLatin1String("%1[type=\"application/x-shockwave-flash\"]");
const QString mime = QLatin1String("application/futuresplash");
hide();
QList<QWebFrame*> frames;
frames.append(view->page()->mainFrame());
while (!frames.isEmpty()) {
QWebFrame* frame = frames.takeFirst();
QWebFrame *frame = frames.takeFirst();
QWebElement docElement = frame->documentElement();
QWebElementCollection elements;
elements.append(docElement.findAll(selector.arg("object")));
elements.append(docElement.findAll(selector.arg("embed")));
elements.append(docElement.findAll(QLatin1String("object")));
// elements.append(docElement.findAll(selector.arg(QLatin1String("object"))));
elements.append(docElement.findAll(QLatin1String("embed")));
// elements.append(docElement.findAll(selector.arg(QLatin1String("embed"))));
foreach(QWebElement element, elements) {
if (checkElement(element)) {
QWebElement substitute = element.clone();
emit signalLoadClickToFlash(true);
element.replace(substitute);
deleteLater();
return;
}
QWebElement element;
foreach (element, elements) {
if (!checkElement(element))
continue;
QWebElement substitute = element.clone();
substitute.setAttribute(QLatin1String("type"), mime);
element.replace(substitute);
return;
}
frames += frame->childFrames();
}
}
@ -182,19 +222,27 @@ bool ClickToFlash::checkElement(QWebElement el)
QString checkString;
QString urlString;
checkString = QUrl(el.attribute("src")).toString(QUrl::RemoveQuery);
if (checkString.isEmpty())
checkString = QUrl(el.attribute("data")).toString(QUrl::RemoveQuery);
if (checkString.isEmpty())
return false;
urlString = m_url.toString(QUrl::RemoveQuery);
if (urlString.contains(checkString))
return true;
QWebElementCollection collec = el.findAll("*");
int i = 0;
while (i < collec.count()) {
QWebElement el = collec.at(i);
checkString = QUrl(el.attribute("src")).toString(QUrl::RemoveQuery);
urlString = m_url.toString(QUrl::RemoveQuery);
if (urlString.contains(checkString))
return true;
i++;
}
qDebug() << checkString << m_url;
// QWebElementCollection collec = el.findAll("*");
// int i = 0;
// while (i < collec.count()) {
// QWebElement el = collec.at(i);
// checkString = QUrl(el.attribute("src")).toString(QUrl::RemoveQuery);
// urlString = m_url.toString(QUrl::RemoveQuery);
// if (urlString.contains(checkString))
// return true;
// i++;
// }
return false;
}

View File

@ -63,9 +63,6 @@ class ClickToFlash : public QWidget
public:
explicit ClickToFlash(const QUrl &pluginUrl, QWidget* parent = 0);
signals:
void signalLoadClickToFlash(bool);
private slots:
void load();
void customContextMenuRequested(const QPoint &pos);

View File

@ -22,9 +22,7 @@
WebPluginFactory::WebPluginFactory(QObject* parent)
: QWebPluginFactory(parent)
,m_loadClickToFlash(false)
{
connect(this, SIGNAL(signalLoadClickToFlash(bool)), SLOT(setLoadClickToFlash(bool)));
}
QObject* WebPluginFactory::create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const
@ -33,7 +31,8 @@ QObject* WebPluginFactory::create(const QString &mimeType, const QUrl &url, cons
Q_UNUSED(argumentValues)
if (mimeType != "application/x-shockwave-flash") {
qDebug() << mimeType;
if (mimeType != "application/futuresplash")
qDebug() << mimeType;
return 0;
}
if (!mApp->plugins()->c2f_isEnabled())
@ -44,14 +43,8 @@ QObject* WebPluginFactory::create(const QString &mimeType, const QUrl &url, cons
if (whitelist.contains(url.host()) || whitelist.contains("www."+url.host()) || whitelist.contains(url.host().remove("www.")))
return 0;
if (m_loadClickToFlash) {
emit signalLoadClickToFlash(false);
return 0;
} else {
ClickToFlash* ctf = new ClickToFlash(url);
connect(ctf, SIGNAL(signalLoadClickToFlash(bool)), this, SLOT(setLoadClickToFlash(bool)));
return ctf;
}
ClickToFlash* ctf = new ClickToFlash(url);
return ctf;
}
QList<QWebPluginFactory::Plugin> WebPluginFactory::plugins() const

View File

@ -30,13 +30,7 @@ public:
virtual QObject* create (const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const;
QList<QWebPluginFactory::Plugin> plugins() const;
signals:
void signalLoadClickToFlash(bool) const;
public slots:
void setLoadClickToFlash(bool load) { m_loadClickToFlash = load; }
private:
bool m_loadClickToFlash;
};
#endif // WEB_PLUGIN_FACTORY_H