Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 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 import os | 4 import os |
| 5 | 5 |
| 6 from telemetry.page.actions.gesture_action import GestureAction | 6 from telemetry.page.actions.gesture_action import GestureAction |
| 7 from telemetry.page.actions import page_action | 7 from telemetry.page.actions import page_action |
| 8 | 8 |
| 9 class PinchAction(GestureAction): | 9 class PinchAction(GestureAction): |
| 10 def __init__(self, attributes=None): | 10 def __init__(self, attributes=None): |
| 11 super(PinchAction, self).__init__(attributes) | 11 super(PinchAction, self).__init__(attributes) |
| 12 | 12 |
| 13 def WillRunAction(self, page, tab): | 13 def WillRunAction(self, page, tab): |
| 14 for js_file in ['gesture_common.js', 'pinch.js']: | 14 for js_file in ['gesture_common.js', 'pinch.js']: |
| 15 with open(os.path.join(os.path.dirname(__file__), js_file)) as f: | 15 with open(os.path.join(os.path.dirname(__file__), js_file)) as f: |
| 16 js = f.read() | 16 js = f.read() |
| 17 tab.ExecuteJavaScript(js) | 17 tab.ExecuteJavaScript(js) |
| 18 | 18 |
| 19 # Fail if browser doesn't support synthetic pinch gestures. | 19 # Fail if browser doesn't support synthetic pinch gestures. |
| 20 if not tab.EvaluateJavaScript('window.__PinchAction_SupportedByBrowser()'): | 20 if not tab.EvaluateJavaScript('window.__PinchAction_SupportedByBrowser()'): |
| 21 raise page_action.PageActionNotSupported( | 21 raise page_action.PageActionNotSupported( |
| 22 'Synthetic pinch not supported for this browser') | 22 'Synthetic pinch not supported for this browser') |
| 23 | 23 |
| 24 # TODO(dominikg): Remove once JS interface changes have rolled into stable. | |
| 25 if not tab.EvaluateJavaScript('chrome.gpuBenchmarking.newPinchInterface'): | |
| 26 raise page_action.PageActionNotSupported(""" | |
|
Sami
2014/05/19 14:49:04
Nit: use single instead of triple quotes since oth
Dominik Grewe
2014/05/19 17:31:43
Done.
| |
| 27 This version of the browser doesn't support the new JS interface for | |
| 28 pinch gestures.""") | |
| 29 | |
| 24 if (GestureAction.GetGestureSourceTypeFromOptions(tab) == | 30 if (GestureAction.GetGestureSourceTypeFromOptions(tab) == |
| 25 'chrome.gpuBenchmarking.MOUSE_INPUT'): | 31 'chrome.gpuBenchmarking.MOUSE_INPUT'): |
| 26 raise page_action.PageActionNotSupported( | 32 raise page_action.PageActionNotSupported( |
| 27 'Pinch page action does not support mouse input') | 33 'Pinch page action does not support mouse input') |
| 28 | 34 |
| 29 if not GestureAction.IsGestureSourceTypeSupported(tab, 'touch'): | 35 if not GestureAction.IsGestureSourceTypeSupported(tab, 'touch'): |
| 30 raise page_action.PageActionNotSupported( | 36 raise page_action.PageActionNotSupported( |
| 31 'Touch input not supported for this browser') | 37 'Touch input not supported for this browser') |
| 32 | 38 |
| 33 done_callback = 'function() { window.__pinchActionDone = true; }' | 39 done_callback = 'function() { window.__pinchActionDone = true; }' |
| 34 tab.ExecuteJavaScript(""" | 40 tab.ExecuteJavaScript(""" |
| 35 window.__pinchActionDone = false; | 41 window.__pinchActionDone = false; |
| 36 window.__pinchAction = new __PinchAction(%s);""" | 42 window.__pinchAction = new __PinchAction(%s);""" |
| 37 % done_callback) | 43 % done_callback) |
| 38 | 44 |
| 45 @staticmethod | |
| 46 def _GetDefaultScaleFactorForPage(tab): | |
| 47 current_scale_factor = tab.EvaluateJavaScript( | |
| 48 'window.outerWidth / window.innerWidth') | |
| 49 return 3.0 / current_scale_factor | |
| 50 | |
| 39 def RunGesture(self, page, tab): | 51 def RunGesture(self, page, tab): |
| 40 left_anchor_percentage = getattr(self, 'left_anchor_percentage', 0.5) | 52 left_anchor_percentage = getattr(self, 'left_anchor_percentage', 0.5) |
| 41 top_anchor_percentage = getattr(self, 'top_anchor_percentage', 0.5) | 53 top_anchor_percentage = getattr(self, 'top_anchor_percentage', 0.5) |
| 42 zoom_in = getattr(self, 'zoom_in', True) | 54 scale_factor = getattr(self, 'scale_factor', |
| 43 pixels_to_cover = getattr(self, 'pixels_to_cover', 500) | 55 PinchAction._GetDefaultScaleFactorForPage(tab)) |
| 44 speed = getattr(self, 'speed', 800) | 56 speed = getattr(self, 'speed', 800) |
| 45 | 57 |
| 46 if hasattr(self, 'element_function'): | 58 if hasattr(self, 'element_function'): |
| 47 tab.ExecuteJavaScript(""" | 59 tab.ExecuteJavaScript(""" |
| 48 (%s)(function(element) { window.__pinchAction.start( | 60 (%s)(function(element) { window.__pinchAction.start( |
| 49 { element: element, | 61 { element: element, |
| 50 left_anchor_percentage: %s, | 62 left_anchor_percentage: %s, |
| 51 top_anchor_percentage: %s, | 63 top_anchor_percentage: %s, |
| 52 zoom_in: %s, | 64 scale_factor: %s, |
| 53 pixels_to_cover: %s, | |
| 54 speed: %s }) | 65 speed: %s }) |
| 55 });""" % (self.element_function, | 66 });""" % (self.element_function, |
| 56 left_anchor_percentage, | 67 left_anchor_percentage, |
| 57 top_anchor_percentage, | 68 top_anchor_percentage, |
| 58 'true' if zoom_in else 'false', | 69 scale_factor, |
| 59 pixels_to_cover, | |
| 60 speed)) | 70 speed)) |
| 61 else: | 71 else: |
| 62 tab.ExecuteJavaScript(""" | 72 tab.ExecuteJavaScript(""" |
| 63 window.__pinchAction.start( | 73 window.__pinchAction.start( |
| 64 { element: document.body, | 74 { element: document.body, |
| 65 left_anchor_percentage: %s, | 75 left_anchor_percentage: %s, |
| 66 top_anchor_percentage: %s, | 76 top_anchor_percentage: %s, |
| 67 zoom_in: %s, | 77 scale_factor: %s, |
| 68 pixels_to_cover: %s, | |
| 69 speed: %s });""" | 78 speed: %s });""" |
| 70 % (left_anchor_percentage, | 79 % (left_anchor_percentage, |
| 71 top_anchor_percentage, | 80 top_anchor_percentage, |
| 72 'true' if zoom_in else 'false', | 81 scale_factor, |
| 73 pixels_to_cover, | |
| 74 speed)) | 82 speed)) |
| 75 | 83 |
| 76 tab.WaitForJavaScriptExpression('window.__pinchActionDone', 60) | 84 tab.WaitForJavaScriptExpression('window.__pinchActionDone', 60) |
| 77 | 85 |
| 78 def CanBeBound(self): | 86 def CanBeBound(self): |
| 79 return True | 87 return True |
| 80 | 88 |
| 81 def BindMeasurementJavaScript(self, tab, start_js, stop_js): | 89 def BindMeasurementJavaScript(self, tab, start_js, stop_js): |
| 82 # Make the pinch action start and stop measurement automatically. | 90 # Make the pinch action start and stop measurement automatically. |
| 83 tab.ExecuteJavaScript(""" | 91 tab.ExecuteJavaScript(""" |
| 84 window.__pinchAction.beginMeasuringHook = function() { %s }; | 92 window.__pinchAction.beginMeasuringHook = function() { %s }; |
| 85 window.__pinchAction.endMeasuringHook = function() { %s }; | 93 window.__pinchAction.endMeasuringHook = function() { %s }; |
| 86 """ % (start_js, stop_js)) | 94 """ % (start_js, stop_js)) |
| OLD | NEW |