blob: b6abd97e92f959620627d2ed912bb244b660786c [file] [log] [blame]
# 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'])