Index: net/tools/testserver/testserver.py |
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py |
index d020ca3a86fa47578a3005f85f59534a16fe9602..77399023f4168504ec35a2395997181de28b68a8 100755 |
--- a/net/tools/testserver/testserver.py |
+++ b/net/tools/testserver/testserver.py |
@@ -331,6 +331,7 @@ class TestPageHandler(testserver_base.BasePageHandler): |
self.ContentTypeHandler, |
self.NoContentHandler, |
self.ServerRedirectHandler, |
+ self.CrossSiteRedirectHandler, |
self.ClientRedirectHandler, |
self.GetSSLSessionCacheHandler, |
self.SSLManySmallRecords, |
@@ -1418,6 +1419,36 @@ class TestPageHandler(testserver_base.BasePageHandler): |
return True |
+ def CrossSiteRedirectHandler(self): |
+ """Sends a server redirect to the given site. The syntax is |
+ '/cross-site/hostname/...' to redirect to //hostname/... |
+ It is used to navigate between different Sites, causing |
+ cross-site/cross-process navigations in the browser.""" |
+ |
+ test_name = "/cross-site" |
+ if not self._ShouldHandleRequest(test_name): |
+ print "CSRH: not handling request for " + test_name |
+ return False |
+ |
+ params = urllib.unquote(self.path[(len(test_name) + 1):]) |
+ slash = params.find('/') |
+ if slash < 0: |
+ self.sendRedirectHelp(test_name) |
+ return True |
+ |
+ host = params[:slash] |
+ path = params[(slash+1):] |
+ dest = "//%s:%s/%s" % (host, str(self.server.server_port), path) |
+ |
+ self.send_response(301) # moved permanently |
+ self.send_header('Location', dest) |
+ self.send_header('Content-Type', 'text/html') |
+ self.end_headers() |
+ self.wfile.write('<html><head>') |
+ self.wfile.write('</head><body>Redirecting to %s</body></html>' % dest) |
+ |
+ return True |
+ |
def ClientRedirectHandler(self): |
"""Sends a client redirect to the given URL. The syntax is |
'/client-redirect?http://foo.bar/asdf' to redirect to |