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

Unified Diff: chrome/test/chromedriver/webserver.py

Issue 11746025: [chromedriver]Implement command: title. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. Created 7 years, 12 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: chrome/test/chromedriver/webserver.py
diff --git a/chrome/test/chromedriver/webserver.py b/chrome/test/chromedriver/webserver.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6c28e084cb6fc501899e3fdeb9e6a617736de52
--- /dev/null
+++ b/chrome/test/chromedriver/webserver.py
@@ -0,0 +1,64 @@
+# 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 BaseHTTPServer
+import os
+import threading
+
+
+class _FileRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+ """Sends back file resources relative to the server's |root_dir|."""
+
+ def do_GET(self):
+ if self.path.endswith('favicon.ico'):
+ self.send_error(404)
+ return
+ path = os.path.join(self.server.root_dir, *self.path.split('/'))
+ with open(path, 'r') as f:
+ data = f.read()
+ self.send_response(200)
+ self.send_header('Content-Length', len(data))
+ self.end_headers()
+ self.wfile.write(data)
+
+
+class WebServer(object):
+ """An HTTP or HTTPS server that serves files on its own thread."""
+
+ def __init__(self, root_dir, server_cert_and_key_path=None):
+ """Starts the Web server on its own thread on an ephemeral port.
kkania 2013/01/08 21:26:29 web
chrisgao (Use stgao instead) 2013/01/08 22:23:34 Done.
+ It is an HTTP server if parameter server_cert_and_key_path is not provied.
kkania 2013/01/08 21:26:29 provided
chrisgao (Use stgao instead) 2013/01/08 22:23:34 Done.
+ Otherwises, it is an HTTPS server.
kkania 2013/01/08 21:26:29 Otherwise
chrisgao (Use stgao instead) 2013/01/08 22:23:34 Done.
+
+ After this function returns, it is safe to assume the server is ready
+ to receive requests.
+
+ Args:
+ root_dir: root path to serve files from.
+ server_cert_and_key_path: path to a PEM file containing the cert and key.
kkania 2013/01/08 21:26:29 explain what happens if it is none
+ """
+ self._server = BaseHTTPServer.HTTPServer(
+ ('127.0.0.1', 0), _FileRequestHandler)
+ self._server.root_dir = root_dir
+ if server_cert_and_key_path is not None:
+ self._is_https_enabled = True
+ self._server.socket = ssl.wrap_socket(
+ self._server.socket, certfile=server_cert_and_key_path,
+ server_side=True)
+ else:
+ self._is_https_enabled = False
+
+ self._thread = threading.Thread(target=self._server.serve_forever)
+ self._thread.start()
+
+ def GetUrl(self):
+ """Returns the base URL of the server."""
+ if self._is_https_enabled:
+ return 'https://127.0.0.1:%s' % self._server.server_port
+ return 'http://127.0.0.1:%s' % self._server.server_port
+
+ def Shutdown(self):
+ """Shuts down the server synchronously."""
+ self._server.shutdown()
+ self._thread.join()

Powered by Google App Engine
This is Rietveld 408576698