diff options
Diffstat (limited to 'catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py')
-rw-r--r-- | catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py b/catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py new file mode 100644 index 00000000..b6abd97e --- /dev/null +++ b/catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py @@ -0,0 +1,48 @@ +# 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']) |