OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 from common import inspector_network | 5 from common import inspector_network |
6 from common import network_metrics | 6 from common import network_metrics |
7 from telemetry import decorators | 7 from telemetry import decorators |
8 from telemetry.testing import tab_test_case | 8 from telemetry.testing import tab_test_case |
9 | 9 |
10 | 10 |
11 class InspectorNetworkTabTest(tab_test_case.TabTestCase): | 11 class InspectorNetworkTabTest(tab_test_case.TabTestCase): |
12 class TestCase(object): | 12 class TestCase(object): |
13 def __init__(self, responses_count=0, | 13 def __init__(self, responses_count=0, |
14 subresources=None): | 14 subresources=None): |
15 # Number of responses expected for this case. | 15 # Number of responses expected for this case. |
16 self.responses_count = responses_count | 16 self.responses_count = responses_count |
17 # List of subresource links for this case. | 17 # List of subresource links for this case. |
18 self.subresources = subresources | 18 self.subresources = subresources |
19 | 19 |
20 def __init__(self, *args): | 20 def __init__(self, *args): |
21 super(InspectorNetworkTabTest, self).__init__(*args) | 21 super(InspectorNetworkTabTest, self).__init__(*args) |
22 | 22 |
| 23 def _FilterFaviconEvents(self, events): |
| 24 for event in events: |
| 25 if 'favicon.ico' in event.args['response']['url']: |
| 26 events.remove(event) |
| 27 return events |
| 28 |
23 def _NavigateAndGetHTTPResponseEvents(self, page): | 29 def _NavigateAndGetHTTPResponseEvents(self, page): |
24 network = inspector_network.InspectorNetwork( | 30 network = inspector_network.InspectorNetwork( |
25 self._tab._inspector_backend._websocket) | 31 self._tab._inspector_backend._websocket) |
26 network.timeline_recorder.Start() | 32 network.timeline_recorder.Start() |
27 self.Navigate(page) | 33 self.Navigate(page) |
28 timeline_model = network.timeline_recorder.Stop() | 34 timeline_model = network.timeline_recorder.Stop() |
29 self.assertTrue(timeline_model) | 35 self.assertTrue(timeline_model) |
30 return timeline_model.GetAllEventsOfName('HTTPResponse') | 36 return timeline_model.GetAllEventsOfName('HTTPResponse') |
31 | 37 |
32 # crbug.com/449979, crbug.com/452279, crbug.com/455269, crbug.com/483212 | |
33 @decorators.Disabled('mac', 'android', 'win', 'linux', 'chromeos') | |
34 def testHTTPResponseTimelineRecorder(self): | 38 def testHTTPResponseTimelineRecorder(self): |
35 tests = { | 39 tests = { |
36 'blank.html': InspectorNetworkTabTest.TestCase(responses_count=1), | 40 'blank.html': InspectorNetworkTabTest.TestCase(responses_count=1), |
37 'green_rect.html': InspectorNetworkTabTest.TestCase(responses_count=1), | 41 'green_rect.html': InspectorNetworkTabTest.TestCase(responses_count=1), |
38 'image_decoding.html': InspectorNetworkTabTest.TestCase( | 42 'image_decoding.html': InspectorNetworkTabTest.TestCase( |
39 responses_count=2, subresources=['image.png']), | 43 responses_count=2, subresources=['image.png']), |
40 } | 44 } |
41 for page, test in tests.iteritems(): | 45 for page, test in tests.iteritems(): |
42 events = self._NavigateAndGetHTTPResponseEvents(page) | 46 events = self._FilterFaviconEvents( |
| 47 self._NavigateAndGetHTTPResponseEvents(page)) |
43 self.assertEqual(test.responses_count, len(events)) | 48 self.assertEqual(test.responses_count, len(events)) |
44 | 49 |
45 # Verify required event fields | 50 # Verify required event fields |
46 for event in events: | 51 for event in events: |
47 self.assertEqual('HTTPResponse', event.name) | 52 self.assertEqual('HTTPResponse', event.name) |
48 resp = inspector_network.InspectorNetworkResponseData.FromTimelineEvent( | 53 resp = inspector_network.InspectorNetworkResponseData.FromTimelineEvent( |
49 event) | 54 event) |
50 self.assertLess(0.0, resp.timestamp) | 55 self.assertLess(0.0, resp.timestamp) |
51 | 56 |
52 self.assertTrue(resp.headers) | 57 self.assertTrue(resp.headers) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 events = self._NavigateAndGetHTTPResponseEvents('image_decoding.html') | 89 events = self._NavigateAndGetHTTPResponseEvents('image_decoding.html') |
85 images_second = [] | 90 images_second = [] |
86 for event in events: | 91 for event in events: |
87 resp = inspector_network.InspectorNetworkResponseData.FromTimelineEvent( | 92 resp = inspector_network.InspectorNetworkResponseData.FromTimelineEvent( |
88 event) | 93 event) |
89 if resp.GetHeader('Content-Type') == 'image/png': | 94 if resp.GetHeader('Content-Type') == 'image/png': |
90 images_second.append(resp) | 95 images_second.append(resp) |
91 self.assertEqual(1, len(images_second)) | 96 self.assertEqual(1, len(images_second)) |
92 # On the second fetch, the image is served from cache. | 97 # On the second fetch, the image is served from cache. |
93 self.assertTrue(images_second[0].served_from_cache) | 98 self.assertTrue(images_second[0].served_from_cache) |
OLD | NEW |