146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import extension_to_load
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionDict(object):
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  """Dictionary of ExtensionPage instances, with extension_id as key."""
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  def __init__(self, extension_backend):
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self._extension_backend = extension_backend
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  def __getitem__(self, load_extension):
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    """Given an ExtensionToLoad instance, returns the corresponding
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ExtensionPage instance."""
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if not isinstance(load_extension, extension_to_load.ExtensionToLoad):
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      raise TypeError("Input param must be of type ExtensionToLoad")
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return self.GetByExtensionId(load_extension.extension_id)[0]
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  def __contains__(self, load_extension):
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    """Checks if this ExtensionToLoad instance has been loaded"""
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if not isinstance(load_extension, extension_to_load.ExtensionToLoad):
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      raise TypeError("Input param must be of type ExtensionToLoad")
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return load_extension.extension_id in self._extension_backend
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  def keys(self):
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return self._extension_backend.keys()
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def GetByExtensionId(self, extension_id):
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    """Returns a list of extensions given an extension id. This is useful for
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    connecting to built-in apps and component extensions."""
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return self._extension_backend[extension_id]
34