OLD | NEW |
---|---|
1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 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 import logging | 5 import logging |
6 import os | 6 import os |
7 import subprocess | 7 import subprocess |
8 import sys | 8 import sys |
9 import time | 9 import time |
10 | 10 |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
210 | 210 |
211 Note: This does not include the app's background page. | 211 Note: This does not include the app's background page. |
212 """ | 212 """ |
213 | 213 |
214 class PairingState: | 214 class PairingState: |
215 """ The current state of the setup flow. """ | 215 """ The current state of the setup flow. """ |
216 SCAN = 'scan' | 216 SCAN = 'scan' |
217 PAIR = 'pair' | 217 PAIR = 'pair' |
218 CLICK_FOR_TRIAL_RUN = 'click_for_trial_run' | 218 CLICK_FOR_TRIAL_RUN = 'click_for_trial_run' |
219 TRIAL_RUN_COMPLETED = 'trial_run_completed' | 219 TRIAL_RUN_COMPLETED = 'trial_run_completed' |
220 PROMOTE_SMARTLOCK_FOR_ANDROID = 'promote-smart-lock-for-android' | |
220 | 221 |
221 def __init__(self, app_page, chromeos): | 222 def __init__(self, app_page, chromeos): |
222 """ | 223 """ |
223 Args: | 224 Args: |
224 app_page: Inspector page of the app window. | 225 app_page: Inspector page of the app window. |
225 chromeos: The parent Chrome wrapper. | 226 chromeos: The parent Chrome wrapper. |
226 """ | 227 """ |
227 self._app_page = app_page | 228 self._app_page = app_page |
228 self._chromeos = chromeos | 229 self._chromeos = chromeos |
229 | 230 |
230 @property | 231 @property |
231 def pairing_state(self): | 232 def pairing_state(self): |
232 ''' Returns the state the app is currently in. | 233 ''' Returns the state the app is currently in. |
233 | 234 |
234 Raises: | 235 Raises: |
235 ValueError: The current state is unknown. | 236 ValueError: The current state is unknown. |
236 ''' | 237 ''' |
237 state = self._app_page.EvaluateJavaScript( | 238 state = self._app_page.EvaluateJavaScript( |
238 'document.body.getAttribute("step")') | 239 'document.body.getAttribute("step")') |
239 if state == 'scan': | 240 if state == 'scan': |
240 return SmartLockApp.PairingState.SCAN | 241 return SmartLockApp.PairingState.SCAN |
241 elif state == 'pair': | 242 elif state == 'pair': |
242 return SmartLockApp.PairingState.PAIR | 243 return SmartLockApp.PairingState.PAIR |
244 elif state == 'promote-smart-lock-for-android': | |
245 return SmartLockApp.PairingState.PROMOTE_SMARTLOCK_FOR_ANDROID | |
243 elif state == 'complete': | 246 elif state == 'complete': |
244 button_text = self._app_page.EvaluateJavaScript( | 247 button_text = self._app_page.EvaluateJavaScript( |
245 'document.getElementById("pairing-button").textContent') | 248 'document.getElementById("pairing-button").textContent') |
246 button_text = button_text.strip().lower() | 249 button_text = button_text.strip().lower() |
247 if button_text == 'try it out': | 250 if button_text == 'try it out': |
248 return SmartLockApp.PairingState.CLICK_FOR_TRIAL_RUN | 251 return SmartLockApp.PairingState.CLICK_FOR_TRIAL_RUN |
249 elif button_text == 'done': | 252 elif button_text == 'done': |
250 return SmartLockApp.PairingState.TRIAL_RUN_COMPLETED | 253 return SmartLockApp.PairingState.TRIAL_RUN_COMPLETED |
251 else: | 254 else: |
252 raise ValueError('Unknown button text: %s', button_text) | 255 raise ValueError('Unknown button text: %s', button_text) |
(...skipping 22 matching lines...) Expand all Loading... | |
275 def PairPhone(self): | 278 def PairPhone(self): |
276 """ Starts the step of finding nearby phones. | 279 """ Starts the step of finding nearby phones. |
277 | 280 |
278 The app must be in the PAIR state. | 281 The app must be in the PAIR state. |
279 | 282 |
280 Returns: | 283 Returns: |
281 True if pairing succeeded, else False. | 284 True if pairing succeeded, else False. |
282 """ | 285 """ |
283 assert(self.pairing_state == self.PairingState.PAIR) | 286 assert(self.pairing_state == self.PairingState.PAIR) |
284 self._ClickPairingButton() | 287 self._ClickPairingButton() |
288 assert( | |
Tim Song
2015/08/03 21:42:19
The PROMOTE_SMARTLOCK_FOR_ANDROID state doesn't al
vsankar
2015/08/03 22:32:13
Done.
| |
289 self.pairing_state == self.PairingState.PROMOTE_SMARTLOCK_FOR_ANDROID) | |
290 self._ClickPairingButton() | |
285 return self.pairing_state == self.PairingState.CLICK_FOR_TRIAL_RUN | 291 return self.pairing_state == self.PairingState.CLICK_FOR_TRIAL_RUN |
286 | 292 |
287 def StartTrialRun(self): | 293 def StartTrialRun(self): |
288 """ Starts the trial run. | 294 """ Starts the trial run. |
289 | 295 |
290 The app must be in the CLICK_FOR_TRIAL_RUN state. | 296 The app must be in the CLICK_FOR_TRIAL_RUN state. |
291 | 297 |
292 Raises: | 298 Raises: |
293 TimeoutException: Timed out starting the trial run. | 299 TimeoutException: Timed out starting the trial run. |
294 """ | 300 """ |
295 assert(self.pairing_state == self.PairingState.CLICK_FOR_TRIAL_RUN) | 301 assert(self.pairing_state == self.PairingState.CLICK_FOR_TRIAL_RUN) |
296 self._app_page.EvaluateJavaScript( | 302 self._app_page.EvaluateJavaScript( |
297 'document.getElementById("pairing-button").click()') | 303 'document.getElementById("pairing-button").click()') |
298 util.WaitFor(lambda: (self._chromeos.session_state == | 304 util.WaitFor(lambda: (self._chromeos.session_state == |
299 ChromeOS.SessionState.LOCK_SCREEN), | 305 ChromeOS.SessionState.LOCK_SCREEN), |
300 10) | 306 10) |
301 | 307 |
302 def DismissApp(self): | 308 def DismissApp(self): |
303 """ Dismisses the app after setup is completed. | 309 """ Dismisses the app after setup is completed. |
304 | 310 |
305 The app must be in the TRIAL_RUN_COMPLETED state. | 311 The app must be in the TRIAL_RUN_COMPLETED state. |
306 """ | 312 """ |
307 assert(self.pairing_state == self.PairingState.TRIAL_RUN_COMPLETED) | 313 assert(self.pairing_state == self.PairingState.TRIAL_RUN_COMPLETED) |
308 self._app_page.EvaluateJavaScript( | 314 self._app_page.EvaluateJavaScript( |
309 'document.getElementById("pairing-button").click()') | 315 'document.getElementById("pairing-button").click()') |
310 | 316 |
311 def _ClickPairingButton(self): | 317 def _ClickPairingButton(self): |
318 # Waits are needed because the clicks occur before the button label changes. | |
319 time.sleep(2) | |
Tim Song
2015/08/03 21:42:18
Can you reduce the time to 1 second? I think that
vsankar
2015/08/03 22:32:13
Done.
| |
312 self._app_page.EvaluateJavaScript( | 320 self._app_page.EvaluateJavaScript( |
313 'document.getElementById("pairing-button").click()') | 321 'document.getElementById("pairing-button").click()') |
322 time.sleep(2) | |
314 util.WaitFor(lambda: self._app_page.EvaluateJavaScript( | 323 util.WaitFor(lambda: self._app_page.EvaluateJavaScript( |
315 '!document.getElementById("pairing-button").disabled'), 60) | 324 '!document.getElementById("pairing-button").disabled'), 60) |
325 time.sleep(2) | |
316 util.WaitFor(lambda: self._app_page.EvaluateJavaScript( | 326 util.WaitFor(lambda: self._app_page.EvaluateJavaScript( |
317 '!document.getElementById("pairing-button-title")' | 327 '!document.getElementById("pairing-button-title")' |
318 '.classList.contains("animated-fade-out")'), 5) | 328 '.classList.contains("animated-fade-out")'), 5) |
319 util.WaitFor(lambda: self._app_page.EvaluateJavaScript( | 329 util.WaitFor(lambda: self._app_page.EvaluateJavaScript( |
320 '!document.getElementById("pairing-button-title")' | 330 '!document.getElementById("pairing-button-title")' |
321 '.classList.contains("animated-fade-in")'), 5) | 331 '.classList.contains("animated-fade-in")'), 5) |
322 | 332 |
323 | 333 |
324 class ChromeOS(object): | 334 class ChromeOS(object): |
325 """ Wrapper for a remote ChromeOS device. | 335 """ Wrapper for a remote ChromeOS device. |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
552 try: | 562 try: |
553 extensions = self._browser.extensions.GetByExtensionId( | 563 extensions = self._browser.extensions.GetByExtensionId( |
554 'mkaemigholebcgchlkbankmihknojeak') | 564 'mkaemigholebcgchlkbankmihknojeak') |
555 except KeyError: | 565 except KeyError: |
556 return None | 566 return None |
557 for extension_page in extensions: | 567 for extension_page in extensions: |
558 pathname = extension_page.EvaluateJavaScript('document.location.pathname') | 568 pathname = extension_page.EvaluateJavaScript('document.location.pathname') |
559 if pathname == page_name: | 569 if pathname == page_name: |
560 return extension_page | 570 return extension_page |
561 return None | 571 return None |
OLD | NEW |