| # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Python representation for Chromium Plugins info. |
| |
| This is the info available at about:plugins. |
| Obtain one of these from PyUITestSuite::GetPluginsInfo() call. |
| |
| Example: |
| class MyTest(pyauto.PyUITest): |
| def testBasic(self): |
| info = self.GetPluginsInfo() # fetch plugins snapshot |
| print info.Plugins() |
| |
| See more examples in chrome/test/functional/plugins.py. |
| """ |
| |
| import simplejson as json |
| |
| from pyauto_errors import JSONInterfaceError |
| |
| |
| class PluginsInfo(object): |
| """Represent info for Chromium plugins. |
| |
| The info is represented as a list of dictionaries, one for each plugin. |
| """ |
| def __init__(self, plugins_dict): |
| """Initialize a PluginsInfo from a json string. |
| |
| Args: |
| plugins_dict: a dictionary returned by the automation command |
| 'GetPluginsInfo'. |
| |
| Raises: |
| pyauto_errors.JSONInterfaceError if the automation call returns an error. |
| """ |
| # JSON string prepared in GetPluginsInfo() in automation_provider.cc |
| self.pluginsdict = plugins_dict |
| if self.pluginsdict.has_key('error'): |
| raise JSONInterfaceError(self.pluginsdict['error']) |
| |
| def Plugins(self): |
| """Get plugins. |
| |
| Returns: |
| a list of plugins info |
| Sample: |
| [ { u'desc': u'Shockwave Flash 10.0 r45', |
| u'enabled': True, |
| u'mimeTypes': [ { u'description': u'Shockwave Flash', |
| u'fileExtensions': [u'swf'], |
| u'mimeType': u'application/x-shockwave-flash'}, |
| { u'description': u'FutureSplash Player', |
| u'fileExtensions': [u'spl'], |
| u'mimeType': u'application/futuresplash'}], |
| u'name': u'Shockwave Flash', |
| u'path': u'/Library/Internet Plug-Ins/Flash Player.plugin', |
| u'version': u'10.0.45.2'}, |
| { u'desc': u'Version 1.1.2.9282', |
| u'enabled': True, |
| u'mimeTypes': [ { u'description': u'Google voice and video chat', |
| u'fileExtensions': [u'googletalk'], |
| u'mimeType': u'application/googletalk'}], |
| u'name': u'Google Talk NPAPI Plugin', |
| u'path': u'/Library/Internet Plug-Ins/googletalkbrowserplugin.plugin', |
| u'version': u'1.1.2.9282'}, |
| ..., |
| ..., |
| ] |
| """ |
| return self.pluginsdict.get('plugins', []) |
| |
| def PluginForPath(self, path): |
| """Get plugin info for the given plugin path. |
| |
| Returns: |
| a dictionary of info for the plugin. |
| """ |
| got = filter(lambda x: x['path'] == path, self.Plugins()) |
| if not got: return None |
| return got[0] |
| |
| def PluginForName(self, name): |
| """Get plugin info for the given name. |
| |
| There might be several plugins with the same name. |
| |
| Args: |
| name: the name for which to look for. |
| |
| Returns: |
| a list of info dictionaries for each plugin found with the given name. |
| """ |
| return filter(lambda x: x['name'] == name, self.Plugins()) |
| |
| def FirstPluginForName(self, name): |
| """Get plugin info for the first plugin with the given name. |
| |
| This is useful in case there are multiple plugins for a name. |
| |
| Args: |
| name: the name for which to look for. |
| |
| Returns: |
| a plugin info dictionary |
| None, if not found |
| """ |
| all = self.PluginForName(name) |
| if not all: return None |
| return all[0] |