Home | History | Annotate | Download | only in pyautolib
      1 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 """Python representation for Chromium Plugins info.
      6 
      7 This is the info available at about:plugins.
      8 Obtain one of these from PyUITestSuite::GetPluginsInfo() call.
      9 
     10 Example:
     11 class MyTest(pyauto.PyUITest):
     12   def testBasic(self):
     13     info = self.GetPluginsInfo()  # fetch plugins snapshot
     14     print info.Plugins()
     15 
     16 See more examples in chrome/test/functional/plugins.py.
     17 """
     18 
     19 import simplejson as json
     20 
     21 from pyauto_errors import JSONInterfaceError
     22 
     23 
     24 class PluginsInfo(object):
     25   """Represent info for Chromium plugins.
     26 
     27   The info is represented as a list of dictionaries, one for each plugin.
     28   """
     29   def __init__(self, plugins_dict):
     30     """Initialize a PluginsInfo from a json string.
     31 
     32     Args:
     33       plugins_dict: a dictionary returned by the automation command
     34           'GetPluginsInfo'.
     35 
     36     Raises:
     37       pyauto_errors.JSONInterfaceError if the automation call returns an error.
     38     """
     39     # JSON string prepared in GetPluginsInfo() in automation_provider.cc
     40     self.pluginsdict = plugins_dict
     41     if self.pluginsdict.has_key('error'):
     42       raise JSONInterfaceError(self.pluginsdict['error'])
     43 
     44   def Plugins(self):
     45     """Get plugins.
     46 
     47     Returns:
     48       a list of plugins info
     49       Sample:
     50       [ { u'desc': u'Shockwave Flash 10.0 r45',
     51           u'enabled': True,
     52           u'mimeTypes': [ { u'description': u'Shockwave Flash',
     53                             u'fileExtensions': [u'swf'],
     54                             u'mimeType': u'application/x-shockwave-flash'},
     55                           { u'description': u'FutureSplash Player',
     56                             u'fileExtensions': [u'spl'],
     57                             u'mimeType': u'application/futuresplash'}],
     58           u'name': u'Shockwave Flash',
     59           u'path': u'/Library/Internet Plug-Ins/Flash Player.plugin',
     60           u'version': u'10.0.45.2'},
     61         { u'desc': u'Version 1.1.2.9282',
     62           u'enabled': True,
     63           u'mimeTypes': [ { u'description': u'Google voice and video chat',
     64                             u'fileExtensions': [u'googletalk'],
     65                             u'mimeType': u'application/googletalk'}],
     66           u'name': u'Google Talk NPAPI Plugin',
     67           u'path': u'/Library/Internet Plug-Ins/googletalkbrowserplugin.plugin',
     68           u'version': u'1.1.2.9282'},
     69         ...,
     70         ...,
     71       ]
     72     """
     73     return self.pluginsdict.get('plugins', [])
     74 
     75   def PluginForPath(self, path):
     76     """Get plugin info for the given plugin path.
     77 
     78     Returns:
     79       a dictionary of info for the plugin.
     80     """
     81     got = filter(lambda x: x['path'] == path, self.Plugins())
     82     if not got: return None
     83     return got[0]
     84 
     85   def PluginForName(self, name):
     86     """Get plugin info for the given name.
     87 
     88     There might be several plugins with the same name.
     89 
     90     Args:
     91       name: the name for which to look for.
     92 
     93     Returns:
     94       a list of info dictionaries for each plugin found with the given name.
     95     """
     96     return filter(lambda x: x['name'] == name, self.Plugins())
     97 
     98   def FirstPluginForName(self, name):
     99     """Get plugin info for the first plugin with the given name.
    100 
    101     This is useful in case there are multiple plugins for a name.
    102 
    103     Args:
    104       name: the name for which to look for.
    105 
    106     Returns:
    107       a plugin info dictionary
    108       None, if not found
    109     """
    110     all = self.PluginForName(name)
    111     if not all: return None
    112     return all[0]
    113