1# Copyright 2013 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.
4
5from telemetry.core import camel_case
6from telemetry.core import system_info
7from telemetry.core.backends.chrome import inspector_websocket
8
9
10class SystemInfoBackend(object):
11  def __init__(self, devtools_port, devtools_page=None):
12    self._port = devtools_port
13    self._page = devtools_page
14
15  def GetSystemInfo(self, timeout=10):
16    req = {'method': 'SystemInfo.getInfo'}
17    websocket = inspector_websocket.InspectorWebsocket()
18    try:
19      if self._page:
20        websocket.Connect('ws://127.0.0.1:%i/devtools/page/%i' %
21                          (self._port, self._page))
22      else:
23        websocket.Connect('ws://127.0.0.1:%i/devtools/browser' % self._port)
24      res = websocket.SyncRequest(req, timeout)
25    finally:
26      websocket.Disconnect()
27    if 'error' in res:
28      return None
29    return system_info.SystemInfo.FromDict(
30        camel_case.ToUnderscore(res['result']))
31