1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
7 from telemetry
.internal
.backends
.chrome_inspector
import inspector_backend_list
8 from telemetry
.internal
.browser
import extension_page
11 class ExtensionBackendList(inspector_backend_list
.InspectorBackendList
):
12 """A dynamic sequence of extension_page.ExtensionPages."""
14 def __init__(self
, browser_backend
):
15 super(ExtensionBackendList
, self
).__init
__(browser_backend
)
17 def ShouldIncludeContext(self
, context
):
18 return context
['url'].startswith('chrome-extension://')
20 def CreateWrapper(self
, inspector_backend
):
21 return extension_page
.ExtensionPage(inspector_backend
)
23 class ExtensionBackendDict(collections
.Mapping
):
24 """A dynamic mapping of extension_id to extension_page.ExtensionPages."""
26 def __init__(self
, browser_backend
):
27 self
._extension
_backend
_list
= ExtensionBackendList(browser_backend
)
29 def __getitem__(self
, extension_id
):
31 for context_id
in self
._extension
_backend
_list
.IterContextIds():
32 if self
.ContextIdToExtensionId(context_id
) == extension_id
:
34 self
._extension
_backend
_list
.GetBackendFromContextId(context_id
))
36 raise KeyError('Cannot find an extension with id=%s' % extension_id
)
40 for context_id
in self
._extension
_backend
_list
.IterContextIds():
41 yield self
._extension
_backend
_list
.GetBackendFromContextId(context_id
)
44 return len(self
._extension
_backend
_list
)
46 def ContextIdToExtensionId(self
, context_id
):
47 context
= self
._extension
_backend
_list
.GetContextInfo(context_id
)
48 return extension_page
.UrlToExtensionId(context
['url'])