Index: tools/chrome_remote_control/chrome_remote_control/desktop_browser_backend.py |
diff --git a/tools/chrome_remote_control/chrome_remote_control/desktop_browser_backend.py b/tools/chrome_remote_control/chrome_remote_control/desktop_browser_backend.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a11557808cbaa6e60c7c367ab5ac27d59809bf2d |
--- /dev/null |
+++ b/tools/chrome_remote_control/chrome_remote_control/desktop_browser_backend.py |
@@ -0,0 +1,81 @@ |
+# Copyright (c) 2012 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 os as real_os |
+import sys as real_sys |
+import subprocess as real_subprocess |
+import urllib2 |
+import json |
+ |
+import browser_finder |
+import inspector_backend |
+import tab |
+ |
+DEFAULT_PORT = 9273 |
+ |
+class DesktopBrowserBackend(object): |
+ """The backend for controlling a locally-executed browser instance, on Linux, |
+ Mac or Windows. |
+ """ |
+ def __init__(self, executable, options): |
+ self._executable = executable |
+ if not self._executable: |
+ raise Exception("Cannot create browser, no executable found!") |
+ |
+ # TODO(nduca): Delete the user data dir or create one that is unique. |
dtu
2012/08/27 22:27:27
This is just tempfile.mkdtemp(). And then delete i
|
+ tmpdir = "/tmp/simple-browser-controller-profile" |
+ if real_os.path.exists(tmpdir): |
+ ret = real_os.system("rm -rf -- %s" % tmpdir) |
+ assert ret == 0 |
+ self._port = DEFAULT_PORT |
+ args = [self._executable, |
+ "--no-first-run", |
+ "--remote-debugging-port=%i" % self._port] |
+ if not options.dont_override_profile: |
+ args.append("--user-data-dir=%s" % tmpdir) |
+ args.extend(options.extra_browser_args) |
+ if options.hide_stdout: |
+ self._devnull = open(real_os.devnull, 'w') |
+ self._proc = real_subprocess.Popen( |
+ args,stdout=self._devnull, stderr=self._devnull) |
+ else: |
+ self._devnull = None |
+ self._proc = real_subprocess.Popen(args) |
+ |
+ try: |
+ self._WaitForBrowserToComeUp() |
+ except: |
+ self.Close() |
+ raise |
+ |
+ def _WaitForBrowserToComeUp(self): |
+ while True: |
+ try: |
+ self._ListTabs() |
+ break |
+ except urllib2.URLError, ex: |
+ pass |
+ |
+ def _ListTabs(self): |
+ req = urllib2.urlopen("http://localhost:%i/json" % self._port) |
+ data = req.read() |
+ return json.loads(data) |
+ |
+ @property |
+ def num_tabs(self): |
+ return len(self._ListTabs()) |
+ |
+ def GetNthTabURL(self, index): |
+ return self._ListTabs()[index]["url"] |
+ |
+ def ConnectToNthTab(self, index): |
+ ib = inspector_backend.InspectorBackend(self, self._ListTabs()[index]) |
+ return tab.Tab(ib) |
+ |
+ def Close(self): |
+ self._proc.terminate() |
+ self._proc.wait() |
+ self._proc = None |
+ |
+ if self._devnull: |
+ self._devnull.close() |