Title: [135191] trunk/Tools
Revision
135191
Author
[email protected]
Date
2012-11-19 13:23:28 -0800 (Mon, 19 Nov 2012)

Log Message

[garden-o-matic] Enable serving garden-o-matic with gardeningserver.
https://bugs.webkit.org/show_bug.cgi?id=102703

Reviewed by Ojan Vafai.

To enable gardening from a Chrome OS device, we need the ability to serve garden-o-matic
from the same origin as the gardening server. This change gently massages the current
logic to adapt an extension-sniffing-based approach of identifying static files,
rather than requiring an explicit list.

* Scripts/webkitpy/tool/servers/reflectionhandler.py:
(ReflectionHandler): Replaced STATIC_FILE_NAMES with STATIC_FILE_EXTENSIONS.
(ReflectionHandler._handle_request): Changed the logic to smell for extensions, rather than specific files.
* Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (135190 => 135191)


--- trunk/Tools/ChangeLog	2012-11-19 21:21:35 UTC (rev 135190)
+++ trunk/Tools/ChangeLog	2012-11-19 21:23:28 UTC (rev 135191)
@@ -1,3 +1,20 @@
+2012-11-19  Dimitri Glazkov  <[email protected]>
+
+        [garden-o-matic] Enable serving garden-o-matic with gardeningserver.
+        https://bugs.webkit.org/show_bug.cgi?id=102703
+
+        Reviewed by Ojan Vafai.
+
+        To enable gardening from a Chrome OS device, we need the ability to serve garden-o-matic
+        from the same origin as the gardening server. This change gently massages the current
+        logic to adapt an extension-sniffing-based approach of identifying static files,
+        rather than requiring an explicit list.
+
+        * Scripts/webkitpy/tool/servers/reflectionhandler.py:
+        (ReflectionHandler): Replaced STATIC_FILE_NAMES with STATIC_FILE_EXTENSIONS.
+        (ReflectionHandler._handle_request): Changed the logic to smell for extensions, rather than specific files.
+        * Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py: Added.
+
 2012-11-19  Ojan Vafai  <[email protected]>
 
         Add DOM and HTML watchlists and add myself to a bunch of lists

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py (135190 => 135191)


--- trunk/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py	2012-11-19 21:21:35 UTC (rev 135190)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/reflectionhandler.py	2012-11-19 21:23:28 UTC (rev 135191)
@@ -44,8 +44,8 @@
 
 
 class ReflectionHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+    STATIC_FILE_EXTENSIONS = ['.js', '.css', '.html']
     # Subclasses should override.
-    STATIC_FILE_NAMES = None
     STATIC_FILE_DIRECTORY = None
 
     # Setting this flag to True causes the server to send
@@ -78,7 +78,8 @@
             self.query = {}
         function_or_file_name = path[1:] or "index.html"
 
-        if function_or_file_name in self.STATIC_FILE_NAMES:
+        _, extension = os.path.splitext(self.path)
+        if extension in self.STATIC_FILE_EXTENSIONS:
             self._serve_static_file(function_or_file_name)
             return
 

Added: trunk/Tools/Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py (0 => 135191)


--- trunk/Tools/Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py	                        (rev 0)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/reflectionhandler_unittest.py	2012-11-19 21:23:28 UTC (rev 135191)
@@ -0,0 +1,70 @@
+# Copyright (C) 2012 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#    * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#    * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import unittest
+
+from webkitpy.tool.servers.reflectionhandler import ReflectionHandler
+
+
+class TestReflectionHandler(ReflectionHandler):
+    STATIC_FILE_DIRECTORY = "/"
+
+    def __init__(self):
+        self.static_files_served = set()
+        self.errors_sent = set()
+        self.functions_run = set()
+
+    def _serve_static_file(self, name):
+        self.static_files_served.add(name)
+
+    def send_error(self, code, description):
+        self.errors_sent.add(code)
+
+    def function_one(self):
+        self.functions_run.add("function_one")
+
+    def some_html(self):
+        self.functions_run.add("some_html")
+
+
+class ReflectionHandlerTest(unittest.TestCase):
+    def assert_handler_response(self, requests, expected_static_files, expected_errors, expected_functions):
+        handler = TestReflectionHandler()
+        for request in requests:
+            handler.path = request
+            handler._handle_request()
+        self.assertEqual(handler.static_files_served, expected_static_files)
+        self.assertEqual(handler.errors_sent, expected_errors)
+        self.assertEqual(handler.functions_run, expected_functions)
+
+    def test_static_content_or_function_switch(self):
+        self.assert_handler_response(["/test.js"], set(["test.js"]), set(), set())
+        self.assert_handler_response(["/test.js", "/test.css", "/test.html"], set(["test.js", "test.html", "test.css"]), set(), set())
+        self.assert_handler_response(["/test.js", "/test.exe", "/testhtml"], set(["test.js"]), set([404]), set())
+        self.assert_handler_response(["/test.html", "/function.one"], set(["test.html"]), set(), set(['function_one']))
+        self.assert_handler_response(["/some.html"], set(["some.html"]), set(), set())
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to