コード例 #1
0
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&notify=%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)
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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)
コード例 #5
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #6
0
def Stats(request):
  """Stats"""

  params = {
    'page_title': 'Stats',
  }
  return util.Render(request, 'admin/stats.html', params)
コード例 #7
0
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
コード例 #8
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #9
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #10
0
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)
コード例 #11
0
ファイル: handlers.py プロジェクト: smartree/browserscope
def PerformanceTiming(request):
  """PerformanceTiming"""

  params = {
    'page_title': 'Performance Timing Test',
  }
  return util.Render(request, 'templates/tests/performance_timing.html', params,
                     CATEGORY)
コード例 #12
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #13
0
 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
コード例 #14
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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])
コード例 #15
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #16
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #17
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #18
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #19
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #20
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #21
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #22
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #23
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #24
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #25
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #26
0
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)
コード例 #27
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #28
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #29
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)
コード例 #30
0
ファイル: handlers.py プロジェクト: smartree/browserscope
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)