summaryrefslogtreecommitdiff
path: root/src/clicktoflash.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/clicktoflash.cpp')
-rw-r--r--src/clicktoflash.cpp159
1 files changed, 73 insertions, 86 deletions
diff --git a/src/clicktoflash.cpp b/src/clicktoflash.cpp
index b6e1df34..e9174470 100644
--- a/src/clicktoflash.cpp
+++ b/src/clicktoflash.cpp
@@ -1,53 +1,28 @@
-/*
- * Copyright (c) 2009, Benjamin C. Meyer
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Benjamin Meyer nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ============================================================
- *
- * This file is a part of the rekonq project
- *
- * Copyright (C) 2009 by Matthieu Gicquel <matgic78@gmail.com>
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * ============================================================ */
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2009 by Benjamin C. Meyer <ben@meyerhome.net>
+* Copyright (C) 2010 by Matthieu Gicquel <matgic78@gmail.com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
// Self Includes
@@ -66,13 +41,13 @@
-ClickToFlash::ClickToFlash(QUrl pluginUrl, QWidget *parent)
- : QWidget(parent)
- , m_url(pluginUrl)
+ClickToFlash::ClickToFlash(const QUrl &pluginUrl, QWidget *parent)
+ : QWidget(parent)
+ , m_url(pluginUrl)
{
QHBoxLayout *l = new QHBoxLayout(this);
setLayout(l);
-
+
QToolButton *button = new QToolButton(this);
button->setPopupMode(QToolButton::InstantPopup);
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
@@ -84,12 +59,12 @@ ClickToFlash::ClickToFlash(QUrl pluginUrl, QWidget *parent)
void ClickToFlash::load()
-{
+{
QWidget *parent = parentWidget();
QWebView *view = 0;
- while (parent)
+ while (parent)
{
- if (QWebView *aView = qobject_cast<QWebView*>(parent))
+ if (QWebView *aView = qobject_cast<QWebView*>(parent))
{
view = aView;
break;
@@ -99,54 +74,66 @@ void ClickToFlash::load()
if (!view)
return;
- const QString selector = QLatin1String("%1[type=\"application/x-shockwave-flash\"]");
+ const QString selector = QL1S("%1[type=\"application/x-shockwave-flash\"]");
hide();
-
+
QList<QWebFrame*> frames;
frames.append(view->page()->mainFrame());
- while (!frames.isEmpty())
+ while (!frames.isEmpty())
{
QWebFrame *frame = frames.takeFirst();
QWebElement docElement = frame->documentElement();
QWebElementCollection elements;
- elements.append(docElement.findAll(selector.arg(QLatin1String("object"))));
- elements.append(docElement.findAll(selector.arg(QLatin1String("embed"))));
-
- bool isRightElement = false;
- foreach (QWebElement element, elements)
+ elements.append(docElement.findAll(selector.arg(QL1S("object"))));
+ elements.append(docElement.findAll(selector.arg(QL1S("embed"))));
+
+ foreach(QWebElement element, elements)
{
- // TODO : find a proper solution to compare a QWebElement with a plugin
- // With this "manual" test, it's probably not working everywhere
- if(QUrl(element.attribute("data")) == m_url
- || QUrl(element.attribute("src")) == m_url)
- isRightElement = true;
- else
- {
- QWebElementCollection collec = element.findAll("param");
- int i = 0;
- while(i < collec.count() && isRightElement == false)
- {
- if(QUrl(collec.at(i).attribute("value")) == m_url)
- isRightElement = true;
- i++;
- }
- }
-
- if(isRightElement)
+ if (checkElement(element))
{
+ kDebug() << "RETURNED TRUE ...........................";
QWebElement substitute = element.clone();
emit signalLoadClickToFlash(true);
element.replace(substitute);
+ deleteLater();
return;
}
}
-
frames += frame->childFrames();
}
-
- deleteLater();
}
+bool ClickToFlash::checkElement(QWebElement el)
+{
+ kDebug() << "src: " << QUrl(el.attribute("src"));
+ kDebug() << "url: " << m_url;
+
+ QString checkString;
+ QString urlString;
+
+ checkString = QUrl(el.attribute("src")).toString(QUrl::RemoveQuery);
+ 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++;
+ }
+
+ return false;
+}