Home | History | Annotate | Download | only in mini_installer
      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
      3 # found in the LICENSE file.
      4 
      5 """Launches Chrome.
      6 
      7 This script launches Chrome and waits until its window shows up.
      8 """
      9 
     10 import optparse
     11 import sys
     12 import time
     13 import win32process
     14 
     15 import chrome_helper
     16 
     17 
     18 def WaitForWindow(process_id, class_pattern):
     19   """Waits until a window specified by |process_id| and class name shows up.
     20 
     21   Args:
     22     process_id: The ID of the process that owns the window.
     23     class_pattern: The regular expression pattern of the window class name.
     24 
     25   Returns:
     26     A boolean value indicating whether the specified window shows up within
     27     30 seconds.
     28   """
     29   start_time = time.time()
     30   while time.time() - start_time < 30:
     31     if chrome_helper.WindowExists([process_id], class_pattern):
     32       return True
     33     time.sleep(0.1)
     34   return False
     35 
     36 
     37 def main():
     38   usage = 'usage: %prog chrome_path'
     39   parser = optparse.OptionParser(usage, description='Launch Chrome.')
     40   _, args = parser.parse_args()
     41   if len(args) != 1:
     42     parser.error('Incorrect number of arguments.')
     43   chrome_path = args[0]
     44 
     45   # Use CreateProcess rather than subprocess.Popen to avoid side effects such as
     46   # handle interitance.
     47   _, _, process_id, _ = win32process.CreateProcess(None, chrome_path, None,
     48                                                    None, 0, 0, None, None,
     49                                                    win32process.STARTUPINFO())
     50   if not WaitForWindow(process_id, 'Chrome_WidgetWin_'):
     51     raise Exception('Could not launch Chrome.')
     52   return 0
     53 
     54 
     55 if __name__ == '__main__':
     56   sys.exit(main())
     57