aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py')
-rw-r--r--catapult/telemetry/telemetry/internal/backends/chrome/extension_backend.py48
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'])