| # Copyright 2014 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. |
| |
| import collections |
| |
| from telemetry.internal.backends.chrome_inspector import inspector_backend_list |
| from telemetry.internal.browser import extension_page |
| |
| |
| class ExtensionBackendList(inspector_backend_list.InspectorBackendList): |
| """A dynamic sequence of extension_page.ExtensionPages.""" |
| |
| def __init__(self, browser_backend): |
| super(ExtensionBackendList, self).__init__(browser_backend) |
| |
| def ShouldIncludeContext(self, context): |
| return context['url'].startswith('chrome-extension://') |
| |
| def CreateWrapper(self, inspector_backend): |
| return extension_page.ExtensionPage(inspector_backend) |
| |
| class ExtensionBackendDict(collections.Mapping): |
| """A dynamic mapping of extension_id to extension_page.ExtensionPages.""" |
| |
| def __init__(self, browser_backend): |
| self._extension_backend_list = ExtensionBackendList(browser_backend) |
| |
| def __getitem__(self, extension_id): |
| extensions = [] |
| for context_id in self._extension_backend_list.IterContextIds(): |
| if self.ContextIdToExtensionId(context_id) == extension_id: |
| extensions.append( |
| self._extension_backend_list.GetBackendFromContextId(context_id)) |
| if not extensions: |
| raise KeyError('Cannot find an extension with id=%s' % extension_id) |
| return extensions |
| |
| def __iter__(self): |
| for context_id in self._extension_backend_list.IterContextIds(): |
| yield self._extension_backend_list.GetBackendFromContextId(context_id) |
| |
| def __len__(self): |
| return len(self._extension_backend_list) |
| |
| def ContextIdToExtensionId(self, context_id): |
| context = self._extension_backend_list.GetContextInfo(context_id) |
| return extension_page.UrlToExtensionId(context['url']) |