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

Unified Diff: tools/telemetry/telemetry/core/memory_cache_http_server.py

Issue 24451002: [telemetry] Support absolute paths by changing file:/// to file://. More robust file path handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test on mac, apparently /tmp is a symlink to /private/tmp Created 7 years, 2 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
« no previous file with comments | « tools/telemetry/telemetry/core/browser.py ('k') | tools/telemetry/telemetry/core/temporary_http_server.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/memory_cache_http_server.py
diff --git a/tools/telemetry/telemetry/core/memory_cache_http_server.py b/tools/telemetry/telemetry/core/memory_cache_http_server.py
index fa66635f41742cd3b0741c2ff02c840f8ff427ec..6e2fe86467102a2313dc6d62835067806eb431d5 100644
--- a/tools/telemetry/telemetry/core/memory_cache_http_server.py
+++ b/tools/telemetry/telemetry/core/memory_cache_http_server.py
@@ -1,6 +1,7 @@
# 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
from collections import namedtuple
import gzip
@@ -39,7 +40,7 @@ class MemoryCacheHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
self.SendHead()
def SendHead(self):
- path = self.translate_path(self.path)
+ path = os.path.realpath(self.translate_path(self.path))
if path not in self.server.resource_map:
self.send_error(404, 'File not found')
return None
@@ -149,38 +150,58 @@ class MemoryCacheHTTPServer(SocketServer.ThreadingMixIn,
def AddFileToResourceMap(self, file_path):
"""Loads file_path into the in-memory resource map."""
+ file_path = os.path.realpath(file_path)
+ if file_path in self.resource_map:
+ return
+
with open(file_path, 'rb') as fd:
response = fd.read()
fs = os.fstat(fd.fileno())
- content_type = mimetypes.guess_type(file_path)[0]
- zipped = False
- if content_type in ['text/html', 'text/css', 'application/javascript']:
- zipped = True
- sio = StringIO.StringIO()
- gzf = gzip.GzipFile(fileobj=sio, compresslevel=9, mode='wb')
- gzf.write(response)
- gzf.close()
- response = sio.getvalue()
- sio.close()
- self.resource_map[file_path] = {
- 'content-type': content_type,
- 'content-length': len(response),
- 'last-modified': fs.st_mtime,
- 'response': response,
- 'zipped': zipped
- }
-
- index = os.path.sep + 'index.html'
- if file_path.endswith(index):
- self.resource_map[
- file_path[:-len(index)]] = self.resource_map[file_path]
+ content_type = mimetypes.guess_type(file_path)[0]
+ zipped = False
+ if content_type in ['text/html', 'text/css', 'application/javascript']:
+ zipped = True
+ sio = StringIO.StringIO()
+ gzf = gzip.GzipFile(fileobj=sio, compresslevel=9, mode='wb')
+ gzf.write(response)
+ gzf.close()
+ response = sio.getvalue()
+ sio.close()
+ self.resource_map[file_path] = {
+ 'content-type': content_type,
+ 'content-length': len(response),
+ 'last-modified': fs.st_mtime,
+ 'response': response,
+ 'zipped': zipped
+ }
+
+ index = 'index.html'
+ if os.path.basename(file_path) == index:
+ self.resource_map[
+ file_path[:-len(index)]] = self.resource_map[file_path]
+
+
+def _PrintUsageAndExit():
+ print >> sys.stderr, 'usage: %prog <port> [<path1>, <path2>, ...]'
+ sys.exit(1)
def Main():
- assert len(sys.argv) > 2, 'usage: %prog <port> [<path1>, <path2>, ...]'
+ if len(sys.argv) < 3:
+ _PrintUsageAndExit()
- port = int(sys.argv[1])
+ port = sys.argv[1]
paths = sys.argv[2:]
+
+ try:
+ port = int(port)
+ except ValueError:
+ _PrintUsageAndExit()
+ for path in paths:
+ if not os.path.realpath(path).startswith(os.path.realpath(os.getcwd())):
+ print >> sys.stderr, '"%s" is not under the cwd.' % path
+ sys.exit(1)
+
server_address = ('127.0.0.1', port)
MemoryCacheHTTPRequestHandler.protocol_version = 'HTTP/1.1'
httpd = MemoryCacheHTTPServer(server_address, MemoryCacheHTTPRequestHandler,
« no previous file with comments | « tools/telemetry/telemetry/core/browser.py ('k') | tools/telemetry/telemetry/core/temporary_http_server.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698