def __init__(self, plugin, mimeType, url, argumentNames, argumentValues, parent=None): """ Constructor @param plugin reference to the plug-in (ClickToFlashPlugin) @param mimeType MIME type for the plug-in (string) @param url requested URL (QUrl) @param argumentNames list of argument names (list of strings) @param argumentValues list of argument values (list of strings) @param parent reference to the parent widget (QWidget) """ super(ClickToFlash, self).__init__(parent) # Check AdBlock first import Helpviewer.HelpWindow manager = Helpviewer.HelpWindow.HelpWindow.adBlockManager() if manager.isEnabled(): urlString = bytes(url.toEncoded()).decode() urlDomain = url.host() for subscription in manager.subscriptions(): blockedRule = subscription.match(QNetworkRequest(url), urlDomain, urlString) if blockedRule: QTimer.singleShot(200, self.__hideAdBlocked) return self.setupUi(self) self.__swapping = False self.__element = QWebElement() self.__plugin = plugin self.__url = QUrl(url) self.__argumentNames = argumentNames[:] self.__argumentValues = argumentValues[:] self.__mimeType = mimeType self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.__showContextMenu) self.setToolTip(self.__url.toString()) iconName = plugin.getIconName(mimeType) if iconName: self.loadFlashButton.setIcon(UI.PixmapCache.getIcon(iconName)) else: self.loadFlashButton.setText(self.tr("Load"))
def __findElement(self): """ Private method to find the element belonging to this ClickToFlash instance. """ parent = self.parentWidget() view = None while parent is not None: if isinstance(parent, QWebView): view = parent break parent = parent.parentWidget() if view is None: return objectPos = view.mapFromGlobal( self.loadFlashButton.mapToGlobal(self.loadFlashButton.pos())) objectFrame = view.page().frameAt(objectPos) hitResult = QWebHitTestResult() hitElement = QWebElement() if objectFrame is not None: hitResult = objectFrame.hitTestContent(objectPos) hitElement = hitResult.element() if not hitElement.isNull() and \ hitElement.tagName().lower() in ["embed", "object"]: self.__element = hitElement return # hit test failed, trying to find element by src # attribute in elements of all frames on page (although less accurate frames = [] frames.append(view.page().mainFrame()) while frames: frame = frames.pop(0) if not frame: continue docElement = frame.documentElement() elements = QWebElementCollection() elements.append(docElement.findAll("embed")) elements.append(docElement.findAll("object")) for element in elements: if not self.__checkElement(element) and \ not self.__checkUrlOnElement(element, view): continue self.__element = element return frames.extend(frame.childFrames())