def WebPagetest(request, key): """Sends an API request to run one's test page on WebPagetest.org.""" test = models.user_test.Test.get_mem(key) if not test: msg = 'No test was found with test_key %s.' % key return http.HttpResponseServerError(msg) current_user = users.get_current_user() if (test.user.key().name() != current_user.user_id() and not users.is_current_user_admin()): return http.HttpResponse('You can\'t play with tests you don\'t own') # Help users autorun their tests by adding autorun=1 to the test url. test_url_parts = list(urlparse.urlparse(test.url)) test_url_query = dict(cgi.parse_qsl(test_url_parts[4])) test_url_query.update({'autorun': '1'}) test_url_parts[4] = urllib.urlencode(test_url_query) test_url = urlparse.urlunparse(test_url_parts) # TODO(elsigh): callback url. webpagetest_url = ( '%s&url=%s¬ify=%s' % (WEBPAGETEST_URL, test_url, urllib.quote('*****@*****.**'))) webpagetests = {} # See http://goo.gl/EfK1r for WebPagetest instructions. for location in WEBPAGETEST_LOCATIONS: url = '%s&location=%s' % (webpagetest_url, location) response = urlfetch.fetch(url) json = simplejson.loads(response.content) webpagetests[location] = json params = {'test': test, 'webpagetests': webpagetests} return util.Render(request, 'user_test_webpagetest.html', params)
def Settings(request): if request.POST: current_user = users.get_current_user() u = models.user_test.User.get_or_insert(current_user.user_id()) u.email = request.POST.get('email', current_user.email()) u.save() return http.HttpResponseRedirect('/user/settings') # Regular GET. current_user = users.get_current_user() user = models.user_test.User.get_or_insert(current_user.user_id(), email=current_user.email()) tests = db.Query(models.user_test.Test) tests.filter('user', user) # Only admins can see deleted tests. if not users.is_current_user_admin(): tests.filter('deleted', False) tests.order('-created') if tests.count() == 0: tests = None params = { 'api_key': user.key().name(), 'tests': tests, 'csrf_token': request.session.get('csrf_token') } return util.Render(request, 'user_settings.html', params)
def TestHowto(request): params = { 'page_title': 'API | User Tests HOWTO', 'max_value': models.user_test.MAX_VALUE, 'max_key_count': models.user_test.MAX_KEY_COUNT } return util.Render(request, 'user_test_howto.html', params)
def About(request): """About page.""" params = { 'page_title': 'What are the Selectors API Tests?', 'tests': all_test_sets.GetTestSet(CATEGORY).tests, } return util.Render(request, 'templates/about.html', params, CATEGORY)
def TestSelectors(request): page_title = 'Reflow CSS Selector Tests' test_key = request.GET.get('t') test_set = all_test_sets.GetTestSet(CATEGORY) try: test = test_set.GetTest(test_key) page_title += ' %s' % test.name except KeyError: test = None default_params = test_set_params.Params( 'nested_anchors', 'num_elements=400', 'num_nest=4', 'css_selector=#g-content *', 'num_css_rules=1000', 'css_text=border: 1px solid #0C0; padding: 8px;') params = { 'page_title': page_title, 'params': default_params, 'test': test, 'server': util.GetServer(request), 'autorun': request.GET.get('autorun'), 'continue': request.GET.get('continue'), 'csrf_token': request.session.get('csrf_token') } return util.Render(request, 'templates/test.html', params, CATEGORY)
def Stats(request): """Stats""" params = { 'page_title': 'Stats', } return util.Render(request, 'admin/stats.html', params)
def Test(request): response = util.Render(request, 'templates/test.html', params={}, category=CATEGORY) response.set_cookie('regularTestCookie', '1', expires=None, path='/security/') response.set_cookie('httpOnlyTestCookie', '1', expires=None, path='/security/') # This is a really naughty bunch of hacks to get around that fact that we # switched from our own Django.zip (django1.2) to the built-in django1.1 # in App Engine. response.set_cookie does not know about the httpOnly # attribute in django1.1, so we need to modify the cookie output routine # to append httpOnly for out httpOnlyTestCookie. # -elsigh def httpOnlyAwareMorselOutputString(self, attrs=None): output = self.OriginalOutputString(attrs) if self.__dict__['key'] == 'httpOnlyTestCookie': output += "; httpOnly" return output morsel = response.cookies['httpOnlyTestCookie'] OriginalOutputString = morsel.OutputString instancemethod = type(Morsel.OutputString) morsel.OriginalOutputString = OriginalOutputString morsel.OutputString = instancemethod(httpOnlyAwareMorselOutputString, morsel, Morsel) return response
def About(request): """About page.""" params = { 'page_title': 'What is the Ringmark test?', 'tests': all_test_sets.GetTestSet(CATEGORY).tests, } return util.Render(request, 'templates/about.html', params, CATEGORY)
def About(request): """About page.""" params = { 'page_title': 'What are the Reflow Tests?', 'server': util.GetServer(request), 'tests': all_test_sets.GetTestSet(CATEGORY).tests, } return util.Render(request, 'templates/about.html', params, CATEGORY)
def Index(request): """Shows a table of user tests.""" output = request.GET.get('o') if output == 'gviz_table_data': return http.HttpResponse(FormatUserTestsAsGviz(request)) else: params = {'height': '400px', 'width': 'auto', 'page_size': 20} return util.Render(request, 'user_tests_index.html', params)
def PerformanceTiming(request): """PerformanceTiming""" params = { 'page_title': 'Performance Timing Test', } return util.Render(request, 'templates/tests/performance_timing.html', params, CATEGORY)
def Trailer(request): """Network Performance Headers in Trailer Test""" params = { 'page_title': 'Performance Headers in Trailer Test', 'resource_cgi': TRAILER_RESOURCE_CGI, } return util.Render(request, 'templates/tests/trailer.html', params, CATEGORY)
def process_exception(self, request, exception): error = traceback.format_exc() logging.error('Traceback: %s', error) if users.is_current_user_admin(): return util.Render(request, '500.html', params={'traceback': error}) else: return None
def EnvironmentChecks(request): """The main test page.""" return util.Render( request, 'templates/environment-checks.html', params={ 'snippets': json.to_json(ecmascript_snippets.SNIPPET_GROUPS) }, category=CATEGORY) for group in ecmascript_snippets: for snippet in group[1:]: # group header is item 0 snippet_keys.add(snippet[ecmascript_snippets.NAME])
def NestedDivs(request): num_nest = request.GET.get('num_nest', 4) render_params = ['nested_divs', 'num_nest=%s' % num_nest] params = { 'csrf_token': request.session.get('csrf_token'), 'num_nest': num_nest, 'params': render_params, 'templates': ['50-50', '33-67', '67-33', '25-75', '75-25'] } return util.Render(request, 'templates/nested_divs.html', params, CATEGORY)
def Latency(request): """Network Performance Latency Measurement""" params = { 'page_title': 'Performance Latency Measurement', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/latency.html', params, CATEGORY)
def Faq(request): """Network Performance FAQ""" params = { 'page_title': 'Network Performance FAQ', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/faq.html', params, CATEGORY)
def CacheExpires(request): """Network Performance Cache Expires Test""" params = { 'page_title': 'Performance Cache Expires Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/cache-expires.html', params, CATEGORY)
def StylesheetsBlock(request): """Network Performance Stylesheets Block Test""" params = { 'page_title': 'Performance Stylesheets Block Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/stylesheets-block.html', params, CATEGORY)
def ScriptsAsync(request): """Network Performance Scripts Support Async""" params = { 'page_title': 'Performance Scripts Support Async Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/scripts-async.html', params, CATEGORY)
def ScriptsBlockIframes(request): """Network Performance Scripts Block Iframes Test""" params = { 'page_title': 'Performance Scripts Block Iframes Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/scripts-block-iframes.html', params, CATEGORY)
def LinkPrefetch(request): """Network Performance Link Prefetch Test""" params = { 'page_title': 'Performance Link Prefetch Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/link-prefetch.html', params, CATEGORY)
def DataUrls(request): """Network Performance Data URLs Test""" params = { 'page_title': 'Performance Data URLs Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/data-urls.html', params, CATEGORY)
def InlineScriptAfterStylesheet(request): """Network Performance Inline Script After Stylesheet Test""" params = { 'page_title': 'Performance Inline Script After Stylesheet Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/inline-script-after-stylesheet.html', params, CATEGORY)
def Gzip(request): """Network Performance, CATEGORY Gzip Test""" # HTTP_ACCEPT_ENCODING is filtered out by App Engine because it # handles compression for applications. params = { 'page_title': 'Performance Gzip Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/gzip.html', params, CATEGORY)
def Button(request): """Draws a Run the test button on the page for a user.""" params = { 'mimetype': 'text/javascript', 'fn': request.GET.get('fn', '_bRunTest'), 'btn_text': request.GET.get('btn_text', 'Run the test'), 'cb_text': request.GET.get('cb_text', 'and send my results to Browserscope (anonymously)'), } return util.Render(request, 'user_test_button.js', params)
def NestedAnchors(request): default_params = test_set_params.Params( 'nested_anchors', 'num_elements=400', 'num_nest=4', 'css_selector=p', 'num_css_rules=1000', 'css_text=border:1px solid green;padding: 5px') css_match_each = request.GET.get('css_match_each', '') show_form = int(request.GET.get('show_form', 0)) params = { 'csrf_token': request.session.get('csrf_token'), 'css_match_each': css_match_each, 'show_form': show_form, 'params': default_params, } return util.Render(request, 'templates/nested_anchors.html', params, CATEGORY)
def MaxConnections(request): """Network Performance Max Connections Test""" latency = request.COOKIES.get('latency', 9) sleep = max(6, min(9, int(4 * round((int(latency) + 500.0) / 1000.0)))) sleep = 2 params = { 'page_title': 'Performance Max Connections Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, 'sleep': sleep } return util.Render(request, 'templates/tests/max-connections.html', params, CATEGORY)
def ConnectionsPerHostname(request): """Network Performance Connections per Hostname Test""" latency = request.COOKIES.get('latency', 6) sleep = min(9, int(2 * round((int(latency) + 500.0) / 1000.0))) params = { 'page_title': 'Performance Connections per Hostname Test', 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, 'sleep': sleep, 'latency': latency, } return util.Render(request, 'templates/tests/connections-per-hostname.html', params, CATEGORY)
def CacheExpires2(request): """Network Performance Cache Expires Test""" if 't' in request.GET: prevt = int(request.GET.get('t')) else: prevt = 128 # CVSNO - If prevt wasn't found, there's an error params = { 'page_title': 'Performance Cache Expires Test', 'prevt': prevt, 'resource_cgi_base': RESOURCE_CGI_BASE, 'resource_cgi': RESOURCE_CGI, 'resource_cgi2': RESOURCE_CGI2, } return util.Render(request, 'templates/tests/cache-expires2.html', params, CATEGORY)