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 from telemetry import story | 4 from telemetry import story |
5 from telemetry.page import page as page_module | 5 from telemetry.page import page as page_module |
6 from telemetry.page import shared_page_state | 6 from telemetry.page import shared_page_state |
7 | 7 |
8 | 8 |
9 class SimplePage(page_module.Page): | 9 class SimplePage(page_module.Page): |
10 | 10 |
11 def __init__(self, url, page_set): | 11 def __init__(self, url, page_set): |
12 super(SimplePage, self).__init__( | 12 super(SimplePage, self).__init__( |
13 url=url, | 13 url=url, |
14 page_set=page_set, | 14 page_set=page_set, |
15 shared_page_state_class=shared_page_state.SharedPageState, | 15 shared_page_state_class=shared_page_state.SharedPageState, |
16 credentials_path='data/credentials.json') | 16 credentials_path='data/credentials.json') |
17 self.archive_data_file = 'data/text_selection_sites.json' | 17 self.archive_data_file = 'data/text_selection_sites.json' |
18 | 18 |
19 def RunNavigateSteps(self, action_runner): | 19 def RunNavigateSteps(self, action_runner): |
20 super(SimplePage, self).RunNavigateSteps(action_runner) | 20 super(SimplePage, self).RunNavigateSteps(action_runner) |
21 action_runner.WaitForJavaScriptCondition2( | 21 action_runner.WaitForJavaScriptCondition( |
22 'document.readyState == "complete"') | 22 'document.readyState == "complete"') |
23 | 23 |
24 | 24 |
25 class SimpleTextSelectionPage(SimplePage): | 25 class SimpleTextSelectionPage(SimplePage): |
26 | 26 |
27 def __init__(self, url, page_set): | 27 def __init__(self, url, page_set): |
28 super(SimpleTextSelectionPage, self).__init__(url=url, page_set=page_set) | 28 super(SimpleTextSelectionPage, self).__init__(url=url, page_set=page_set) |
29 | 29 |
30 def RunPageInteractions(self, action_runner): | 30 def RunPageInteractions(self, action_runner): |
31 # Create a fixed position div in the top left corner of the page, and | 31 # Create a fixed position div in the top left corner of the page, and |
32 # another one in the bottom right corner of the page. | 32 # another one in the bottom right corner of the page. |
33 # Select the text within the first div. | 33 # Select the text within the first div. |
34 action_runner.ExecuteJavaScript2(''' | 34 action_runner.ExecuteJavaScript(''' |
35 (function() { | 35 (function() { |
36 var text_div = document.createElement('div'); | 36 var text_div = document.createElement('div'); |
37 var text_div_2 = document.createElement('div'); | 37 var text_div_2 = document.createElement('div'); |
38 | 38 |
39 text_div.style.fontSize = text_div_2.style.fontSize = "10vh"; | 39 text_div.style.fontSize = text_div_2.style.fontSize = "10vh"; |
40 text_div.style.lineHeight = text_div_2.style.lineHeight = "normal"; | 40 text_div.style.lineHeight = text_div_2.style.lineHeight = "normal"; |
41 text_div.style.color = text_div_2.style.color = "red"; | 41 text_div.style.color = text_div_2.style.color = "red"; |
42 text_div.style.zIndex = text_div_2.style.zIndex = "1000"; | 42 text_div.style.zIndex = text_div_2.style.zIndex = "1000"; |
43 text_div.style.position = text_div_2.style.position = "fixed"; | 43 text_div.style.position = text_div_2.style.position = "fixed"; |
44 text_div.style.left = "10%"; | 44 text_div.style.left = "10%"; |
(...skipping 13 matching lines...) Expand all Loading... |
58 var textNode = text_div.childNodes[0]; | 58 var textNode = text_div.childNodes[0]; |
59 selection.setBaseAndExtent(textNode, 0, textNode, 5); | 59 selection.setBaseAndExtent(textNode, 0, textNode, 5); |
60 | 60 |
61 window.requestAnimationFrame(function() { | 61 window.requestAnimationFrame(function() { |
62 text_div.style.color="green"; | 62 text_div.style.color="green"; |
63 }); | 63 }); |
64 })();''') | 64 })();''') |
65 | 65 |
66 # Wait two frames so that the selection information is sent to chromium | 66 # Wait two frames so that the selection information is sent to chromium |
67 # and it is able to process input events interacting with selection. | 67 # and it is able to process input events interacting with selection. |
68 action_runner.WaitForJavaScriptCondition2( | 68 action_runner.WaitForJavaScriptCondition( |
69 'document.getElementById("text-for-perf-test").style.color == "green"') | 69 'document.getElementById("text-for-perf-test").style.color == "green"') |
70 action_runner.ExecuteJavaScript2(''' | 70 action_runner.ExecuteJavaScript(''' |
71 window.requestAnimationFrame(function() { | 71 window.requestAnimationFrame(function() { |
72 document.getElementById("text-for-perf-test").style.color="red"; | 72 document.getElementById("text-for-perf-test").style.color="red"; |
73 }); | 73 }); |
74 ''') | 74 ''') |
75 action_runner.WaitForJavaScriptCondition2( | 75 action_runner.WaitForJavaScriptCondition( |
76 'document.getElementById("text-for-perf-test").style.color == "red"') | 76 'document.getElementById("text-for-perf-test").style.color == "red"') |
77 | 77 |
78 # Confirm that the selection is set correctly. | 78 # Confirm that the selection is set correctly. |
79 text = action_runner.EvaluateJavaScript2('window.getSelection().toString()') | 79 text = action_runner.EvaluateJavaScript('window.getSelection().toString()') |
80 assert text == "Hello" | 80 assert text == "Hello" |
81 | 81 |
82 # Tap on the selected text to make the handles show up. | 82 # Tap on the selected text to make the handles show up. |
83 with action_runner.CreateGestureInteraction('TapAction'): | 83 with action_runner.CreateGestureInteraction('TapAction'): |
84 action_runner.TapElement('#text-for-perf-test') | 84 action_runner.TapElement('#text-for-perf-test') |
85 | 85 |
86 text_div_bottom = float(action_runner.EvaluateJavaScript2(''' | 86 text_div_bottom = float(action_runner.EvaluateJavaScript(''' |
87 document.getElementById("text-for-perf-test").getClientRects()[0].bottom | 87 document.getElementById("text-for-perf-test").getClientRects()[0].bottom |
88 ''')) | 88 ''')) |
89 text_div_2_bottom = float(action_runner.EvaluateJavaScript2(''' | 89 text_div_2_bottom = float(action_runner.EvaluateJavaScript(''' |
90 document.getElementById( | 90 document.getElementById( |
91 "text-for-perf-test-2").getClientRects()[0].bottom | 91 "text-for-perf-test-2").getClientRects()[0].bottom |
92 ''')) | 92 ''')) |
93 body_rect_str = action_runner.EvaluateJavaScript2(''' | 93 body_rect_str = action_runner.EvaluateJavaScript(''' |
94 var r = window.__GestureCommon_GetBoundingVisibleRect(document.body); | 94 var r = window.__GestureCommon_GetBoundingVisibleRect(document.body); |
95 r.left + " " + r.top + " " + r.height + " " + r.width; | 95 r.left + " " + r.top + " " + r.height + " " + r.width; |
96 ''') | 96 ''') |
97 body_rect_left, body_rect_top, body_rect_height, body_rect_width = map( | 97 body_rect_left, body_rect_top, body_rect_height, body_rect_width = map( |
98 float, body_rect_str.split()) | 98 float, body_rect_str.split()) |
99 | 99 |
100 # Start the drag gesture 5 pixels below the bottom left corner of the | 100 # Start the drag gesture 5 pixels below the bottom left corner of the |
101 # first div in order to drag the left selection handle. | 101 # first div in order to drag the left selection handle. |
102 p1_left_ratio = .1 | 102 p1_left_ratio = .1 |
103 p1_top_ratio = float((text_div_bottom + 5 - body_rect_top) / | 103 p1_top_ratio = float((text_div_bottom + 5 - body_rect_top) / |
104 body_rect_height) | 104 body_rect_height) |
105 | 105 |
106 # End the drag gesture below the bottom right corner of the second div, | 106 # End the drag gesture below the bottom right corner of the second div, |
107 # so that the selection end is in the second div and we can easily | 107 # so that the selection end is in the second div and we can easily |
108 # determine the position of the corresponding handle. | 108 # determine the position of the corresponding handle. |
109 p2_top_ratio = float((text_div_2_bottom - body_rect_top) / | 109 p2_top_ratio = float((text_div_2_bottom - body_rect_top) / |
110 body_rect_height) | 110 body_rect_height) |
111 | 111 |
112 with action_runner.CreateGestureInteraction('DragAction-1'): | 112 with action_runner.CreateGestureInteraction('DragAction-1'): |
113 action_runner.DragPage(left_start_ratio=p1_left_ratio, | 113 action_runner.DragPage(left_start_ratio=p1_left_ratio, |
114 top_start_ratio=p1_top_ratio, left_end_ratio=.99, | 114 top_start_ratio=p1_top_ratio, left_end_ratio=.99, |
115 top_end_ratio=p2_top_ratio, speed_in_pixels_per_second=300, | 115 top_end_ratio=p2_top_ratio, speed_in_pixels_per_second=300, |
116 use_touch=1) | 116 use_touch=1) |
117 | 117 |
118 # Confirm that the selection has changed. | 118 # Confirm that the selection has changed. |
119 text = action_runner.EvaluateJavaScript2('window.getSelection().toString()') | 119 text = action_runner.EvaluateJavaScript('window.getSelection().toString()') |
120 assert text != "Hello" | 120 assert text != "Hello" |
121 | 121 |
122 # Determine the coordinates of the end of the selection | 122 # Determine the coordinates of the end of the selection |
123 sel_end_str = action_runner.EvaluateJavaScript2(''' | 123 sel_end_str = action_runner.EvaluateJavaScript(''' |
124 var rects = window.getSelection().getRangeAt(0).getClientRects(); | 124 var rects = window.getSelection().getRangeAt(0).getClientRects(); |
125 var last_rect = rects[rects.length - 1]; | 125 var last_rect = rects[rects.length - 1]; |
126 last_rect.right + " " + last_rect.bottom; | 126 last_rect.right + " " + last_rect.bottom; |
127 ''') | 127 ''') |
128 sel_end_x, sel_end_y = map(float, sel_end_str.split()) | 128 sel_end_x, sel_end_y = map(float, sel_end_str.split()) |
129 | 129 |
130 # Start the second drag gesture 5 pixels below the end of the selection | 130 # Start the second drag gesture 5 pixels below the end of the selection |
131 # in order to drag the selection handle. | 131 # in order to drag the selection handle. |
132 p2_left_ratio = float((sel_end_x - body_rect_left) / body_rect_width) | 132 p2_left_ratio = float((sel_end_x - body_rect_left) / body_rect_width) |
133 p2_top_ratio = float((sel_end_y + 5 - body_rect_top) / body_rect_height) | 133 p2_top_ratio = float((sel_end_y + 5 - body_rect_top) / body_rect_height) |
134 | 134 |
135 with action_runner.CreateGestureInteraction('DragAction-2'): | 135 with action_runner.CreateGestureInteraction('DragAction-2'): |
136 action_runner.DragPage(left_start_ratio=p2_left_ratio, | 136 action_runner.DragPage(left_start_ratio=p2_left_ratio, |
137 top_start_ratio=p2_top_ratio, left_end_ratio=p1_left_ratio, | 137 top_start_ratio=p2_top_ratio, left_end_ratio=p1_left_ratio, |
138 top_end_ratio=p1_top_ratio, speed_in_pixels_per_second=300, | 138 top_end_ratio=p1_top_ratio, speed_in_pixels_per_second=300, |
139 use_touch=1) | 139 use_touch=1) |
140 | 140 |
141 # Confirm that the selection is back to the text in the first div. | 141 # Confirm that the selection is back to the text in the first div. |
142 text = action_runner.EvaluateJavaScript2('window.getSelection().toString()') | 142 text = action_runner.EvaluateJavaScript('window.getSelection().toString()') |
143 assert text == "Hello" | 143 assert text == "Hello" |
144 | 144 |
145 | 145 |
146 class TextSelectionSitesPageSet(story.StorySet): | 146 class TextSelectionSitesPageSet(story.StorySet): |
147 def __init__(self): | 147 def __init__(self): |
148 super(TextSelectionSitesPageSet, self).__init__( | 148 super(TextSelectionSitesPageSet, self).__init__( |
149 archive_data_file='data/top_10_mobile.json', | 149 archive_data_file='data/top_10_mobile.json', |
150 cloud_storage_bucket=story.PARTNER_BUCKET) | 150 cloud_storage_bucket=story.PARTNER_BUCKET) |
151 | 151 |
152 # A subset of top_10_mobile page set | 152 # A subset of top_10_mobile page set |
153 page_urls = [ | 153 page_urls = [ |
154 'https://www.google.co.uk/#hl=en&q=science', | 154 'https://www.google.co.uk/#hl=en&q=science', |
155 'https://m.facebook.com/rihanna', | 155 'https://m.facebook.com/rihanna', |
156 'http://search.yahoo.com/search;_ylt=?p=google', | 156 'http://search.yahoo.com/search;_ylt=?p=google', |
157 'http://www.baidu.com/s?word=google', | 157 'http://www.baidu.com/s?word=google', |
158 'https://mobile.twitter.com/justinbieber?skip_interstitial=true', | 158 'https://mobile.twitter.com/justinbieber?skip_interstitial=true', |
159 'http://yandex.ru/touchsearch?text=science' | 159 'http://yandex.ru/touchsearch?text=science' |
160 ] | 160 ] |
161 | 161 |
162 for url in page_urls: | 162 for url in page_urls: |
163 self.AddStory(SimpleTextSelectionPage(url, self)) | 163 self.AddStory(SimpleTextSelectionPage(url, self)) |
OLD | NEW |