Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: tools/android/loading/controller.py

Issue 2026193003: tools/android/loading: Lets some execption pass through chrome controller's Open (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 """Controller objects that control the context in which chrome runs. 5 """Controller objects that control the context in which chrome runs.
6 6
7 This is responsible for the setup necessary for launching chrome, and for 7 This is responsible for the setup necessary for launching chrome, and for
8 creating a DevToolsConnection. There are remote device and local 8 creating a DevToolsConnection. There are remote device and local
9 desktop-specific versions. 9 desktop-specific versions.
10 """ 10 """
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 75
76 class ChromeControllerError(Exception): 76 class ChromeControllerError(Exception):
77 """Chrome error with detailed log. 77 """Chrome error with detailed log.
78 78
79 Note: 79 Note:
80 Some of these errors might be known intermittent errors that can usually be 80 Some of these errors might be known intermittent errors that can usually be
81 retried by the caller after re-doing any specific setup again. 81 retried by the caller after re-doing any specific setup again.
82 """ 82 """
83 _INTERMITTENT_WHITE_LIST = {websocket.WebSocketTimeoutException, 83 _INTERMITTENT_WHITE_LIST = {websocket.WebSocketTimeoutException,
84 devtools_monitor.DevToolsConnectionTargetCrashed} 84 devtools_monitor.DevToolsConnectionTargetCrashed}
85 _PASSTHROUGH_WHITE_LIST = (MemoryError, SyntaxError)
pasko 2016/06/01 12:47:17 wow, interesting, did you actually hit a memory er
gabadie 2016/06/01 12:54:43 It is not obvious in this CL but there is exceptio
pasko 2016/06/01 13:42:22 thanks, it is indeed not obvious
85 86
86 def __init__(self, log): 87 def __init__(self, log):
87 """Constructor 88 """Constructor
88 89
89 Args: 90 Args:
90 log: String containing the log of the running Chrome instance that was 91 log: String containing the log of the running Chrome instance that was
91 running. It will be interleaved with any other running Android 92 running. It will be interleaved with any other running Android
92 package. 93 package.
93 """ 94 """
94 self.error_type, self.error_value, self.error_traceback = sys.exc_info() 95 self.error_type, self.error_value, self.error_traceback = sys.exc_info()
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 continue 348 continue
348 yield connection 349 yield connection
349 if self._slow_death: 350 if self._slow_death:
350 self._device.adb.Shell('am start com.google.android.launcher') 351 self._device.adb.Shell('am start com.google.android.launcher')
351 time.sleep(self.TIME_TO_IDLE_SECONDS) 352 time.sleep(self.TIME_TO_IDLE_SECONDS)
352 break 353 break
353 else: 354 else:
354 raise ChromeControllerInternalError( 355 raise ChromeControllerInternalError(
355 'Failed to connect to Chrome devtools after {} ' 356 'Failed to connect to Chrome devtools after {} '
356 'attempts.'.format(self.DEVTOOLS_CONNECTION_ATTEMPTS)) 357 'attempts.'.format(self.DEVTOOLS_CONNECTION_ATTEMPTS))
357 except: 358 except ChromeControllerError._PASSTHROUGH_WHITE_LIST:
359 raise
360 except Exception:
358 logcat = ''.join([l + '\n' for l in self._device.adb.Logcat(dump=True)]) 361 logcat = ''.join([l + '\n' for l in self._device.adb.Logcat(dump=True)])
359 raise ChromeControllerError(log=logcat) 362 raise ChromeControllerError(log=logcat)
360 finally: 363 finally:
361 self._device.ForceStop(package_info.package) 364 self._device.ForceStop(package_info.package)
362 365
363 def ResetBrowserState(self): 366 def ResetBrowserState(self):
364 """Override for chrome state reseting.""" 367 """Override for chrome state reseting."""
365 logging.info('Reset chrome\'s profile') 368 logging.info('Reset chrome\'s profile')
366 package_info = OPTIONS.ChromePackage() 369 package_info = OPTIONS.ChromePackage()
367 # We assume all the browser is in the Default user profile directory. 370 # We assume all the browser is in the Default user profile directory.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 raise ChromeControllerInternalError( 516 raise ChromeControllerInternalError(
514 'Failed to connect to Chrome devtools after {} ' 517 'Failed to connect to Chrome devtools after {} '
515 'attempts.'.format(self.DEVTOOLS_CONNECTION_ATTEMPTS)) 518 'attempts.'.format(self.DEVTOOLS_CONNECTION_ATTEMPTS))
516 # Start and yield the devtool connection. 519 # Start and yield the devtool connection.
517 self._StartConnection(connection) 520 self._StartConnection(connection)
518 yield connection 521 yield connection
519 if self._slow_death: 522 if self._slow_death:
520 connection.Close() 523 connection.Close()
521 chrome_process.wait() 524 chrome_process.wait()
522 chrome_process = None 525 chrome_process = None
523 except: 526 except ChromeControllerError._PASSTHROUGH_WHITE_LIST:
527 raise
528 except Exception:
524 raise ChromeControllerError(log=open(tmp_log.name).read()) 529 raise ChromeControllerError(log=open(tmp_log.name).read())
525 finally: 530 finally:
526 if OPTIONS.local_noisy: 531 if OPTIONS.local_noisy:
527 sys.stderr.write(open(tmp_log.name).read()) 532 sys.stderr.write(open(tmp_log.name).read())
528 del tmp_log 533 del tmp_log
529 if chrome_process: 534 if chrome_process:
530 try: 535 try:
531 chrome_process.kill() 536 chrome_process.kill()
532 except OSError: 537 except OSError:
533 pass # Chrome is already dead. 538 pass # Chrome is already dead.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 if (not os.path.isdir(self._profile_dir) or 586 if (not os.path.isdir(self._profile_dir) or
582 os.listdir(self._profile_dir) == []): 587 os.listdir(self._profile_dir) == []):
583 # Launch chrome so that it populates the profile directory. 588 # Launch chrome so that it populates the profile directory.
584 with self.Open(): 589 with self.Open():
585 pass 590 pass
586 assert os.path.isdir(self._profile_dir) 591 assert os.path.isdir(self._profile_dir)
587 assert os.path.isdir(os.path.dirname(self._GetCacheDirectoryPath())) 592 assert os.path.isdir(os.path.dirname(self._GetCacheDirectoryPath()))
588 593
589 def _GetCacheDirectoryPath(self): 594 def _GetCacheDirectoryPath(self):
590 return os.path.join(self._profile_dir, 'Default', 'Cache') 595 return os.path.join(self._profile_dir, 'Default', 'Cache')
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698