Helpviewer/WebPlugins/ClickToFlash/ClickToFlashPlugin.py

changeset 1651
bc68f24d5658
child 1965
96f5a76e1845
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Helpviewer/WebPlugins/ClickToFlash/ClickToFlashPlugin.py	Wed Feb 22 09:20:53 2012 +0100
@@ -0,0 +1,212 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Flash blocker plug-in.
+"""
+
+from PyQt4.QtGui import QDialog
+from PyQt4.QtWebKit import QWebPluginFactory
+
+from ..WebPluginInterface import WebPluginInterface
+
+from .ClickToFlash import ClickToFlash
+from .ClickToFlashWhitelistDialog import ClickToFlashWhitelistDialog
+
+import Preferences
+
+
+class ClickToFlashPlugin(WebPluginInterface):
+    """
+    Class implementing the flash blocker plug-in.
+    """
+    ClickToFlashData = {
+        "application/x-shockwave-flash" : {
+            "extensions": ["swf"],
+            "icon": "flashBlock-flash.png"
+        },
+        "application/futuresplash" : {
+            "extensions": ["spl"],
+            "icon": "flashBlock-flash.png"
+        },
+        "application/x-director" : {
+            "extensions": ["dir", "dcr", "dxr"],
+            "icon": "flashBlock-director.png"
+        },
+        "application/x-authorware-map" : {
+            "extensions": ["aam"],
+            "icon": "flashBlock-authorware.png"
+        },
+        "application/x-authorware-seg" : {
+            "extensions": ["aas"],
+            "icon": "flashBlock-authorware.png"
+        },
+        "application/x-authorware-bin" : {
+            "extensions": ["aab", "x32", "u32", "vox"],
+            "icon": "flashBlock-authorware.png"
+        },
+        "image/x-freehand" : {
+            "extensions": ["fh4", "fh7", "fh5", "fhc", "fh"],
+            "icon": "flashBlock-freehand.png"
+        },
+        "application/x-silverlight-app" : {
+            "extensions": ["xap"],
+            "icon": "flashBlock-silverlight.png"
+        },
+        "application/xaml+xml" : {
+            "extensions": ["xaml"],
+            "icon": "flashBlock-silverlight.png"
+        },
+        "application/x-ms-xbap" : {
+            "extensions": ["xbap"],
+            "icon": "flashBlock-silverlight.png"
+        },
+        "application/x-java-applet" : {
+            "extensions": [],
+            "icon": "flashBlock-java.png"
+        },
+    }
+    
+    def __init__(self):
+        """
+        Constructor
+        """
+        self.__loaded = False
+        self.__whitelist = []
+    
+    def metaPlugin(self):
+        """
+        Public method to create a meta plug-in object containing plug-in info.
+        
+        @return meta plug-in object (QWebPluginFactory.Plugin)
+        """
+        plugin = QWebPluginFactory.Plugin()
+        plugin.name = "ClickToFlashPlugin"
+        mimeTypes = plugin.mimeTypes
+        for mime, value in ClickToFlashPlugin.ClickToFlashData.items():
+            mimeType = QWebPluginFactory.MimeType()
+            mimeType.name = mime
+            extensions = value["extensions"]
+            if extensions:
+                fileExtensions = mimeType.fileExtensions
+                for extension in extensions:
+                    fileExtensions.append(extension)
+                mimeType.fileExtensions = fileExtensions
+            mimeTypes.append(mimeType)
+        plugin.mimeTypes = mimeTypes
+        
+        return plugin
+    
+    def create(self, mimeType, url, argumentNames, argumentValues):
+        """
+        Public method to create a plug-in instance for the given data.
+        
+        @param mimeType MIME type for the plug-in (string)
+        @param url URL for the plug-in (QUrl)
+        @param argumentNames list of argument names (list of strings)
+        @param argumentValues list of argument values (list of strings)
+        @return reference to the created object (QWidget)
+        """
+        self.__load()
+        if not self.__enabled():
+            return None
+        
+        if self.onWhitelist(url.host()):
+            return None
+        
+        if ClickToFlash.isAlreadyAccepted(url, argumentNames, argumentValues):
+            return None
+        
+        ctf = ClickToFlash(self, mimeType, url, argumentNames, argumentValues)
+        return ctf
+    
+    def configure(self):
+        """
+        Public method to configure the plug-in.
+        """
+        self.__load()
+        dlg = ClickToFlashWhitelistDialog(self.__whitelist)
+        if dlg.exec_() == QDialog.Accepted:
+            self.__whitelist = dlg.getWhitelist()
+            self.__save()
+    
+    def isAnonymous(self):
+        """
+        Public method to indicate an anonymous plug-in.
+        """
+        return True
+    
+    def onWhitelist(self, host):
+        """
+        Public method to check, if a host is on the whitelist.
+        
+        @param host host to check for (string)
+        @return flag indicating presence in the whitelist (boolean)
+        """
+        return host in self.__whitelist or \
+               "www." + host in self.__whitelist or \
+               host.replace("www.", "") in self.__whitelist
+    
+    def addToWhitelist(self, host):
+        """
+        Public method to add a host to the whitelist.
+        
+        @param host host to be added (string)
+        """
+        if not self.onWhitelist(host):
+            self.__whitelist.append(host)
+            self.__save()
+    
+    def removeFromWhitelist(self, host):
+        """
+        Public method to remove a host from the whitelist.
+        
+        @param host host to be removed (string)
+        """
+        if self.onWhitelist(host):
+            if host in self.__whitelist:
+                self.__whitelist.remove(host)
+            elif "www." + host in self.__whitelist:
+                self.__whitelist.remove("www." + host)
+            elif host.replace("www.", "") in self.__whitelist:
+                self.__whitelist.remove(host.replace("www.", ""))
+            self.__save()
+    
+    def __load(self):
+        """
+        Private method to load the configuration.
+        """
+        if self.__loaded:
+            return
+        
+        self.__loaded = True
+        self.__whitelist = Preferences.getHelp("ClickToFlashWhitelist")
+    
+    def __save(self):
+        """
+        Private method to save the configuration.
+        """
+        Preferences.setHelp("ClickToFlashWhitelist", self.__whitelist)
+    
+    def __enabled(self):
+        """
+        Private method to check, if the plug-in is enabled.
+        
+        @return enabled status (boolean)
+        """
+        return Preferences.getHelp("ClickToFlashEnabled")
+    
+    @classmethod
+    def getIconName(cls, mimeType):
+        """
+        Class method to get the icon name for the mime type.
+        
+        @param mimeType mime type to get the icon for (string)
+        @return name of the icon file (string)
+        """
+        if mimeType in cls.ClickToFlashData:
+            return cls.ClickToFlashData[mimeType]["icon"]
+        
+        return ""

eric ide

mercurial