Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(235)

Unified Diff: tools/chrome_remote_control/chrome_remote_control/desktop_browser_backend.py

Issue 10875044: Basic framework for devtools-based scrolling tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add backends and modular discovery. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld 408576698