def _FindAllPossibleBrowsers(finder_options, android_platform): """Testable version of FindAllAvailableBrowsers.""" if not android_platform: return [] possible_browsers = [] for apk in finder_options.webview_embedder_apk: if not os.path.exists(apk): raise exceptions.PathMissingError( 'Unable to find apk specified by --webview-embedder-apk=%s' % apk) # Add the exact APK if given. if _CanPossiblyHandlePath(finder_options.browser_executable): if not os.path.exists(finder_options.browser_executable): raise exceptions.PathMissingError( 'Unable to find exact apk specified by --browser-executable=%s' % finder_options.browser_executable) package_name = apk_helper.GetPackageName(finder_options.browser_executable) try: backend_settings = next( b for b in ANDROID_BACKEND_SETTINGS if b.package == package_name) except StopIteration: raise exceptions.UnknownPackageError( '%s specified by --browser-executable has an unknown package: %s' % (finder_options.browser_executable, package_name)) possible_browsers.append(PossibleAndroidBrowser( 'exact', finder_options, android_platform, backend_settings, finder_options.browser_executable)) if finder_options.IsBrowserTypeRelevant('reference'): reference_browser = _GetReferenceAndroidBrowser( android_platform, finder_options) if reference_browser: possible_browsers.append(reference_browser) # Add any other known available browsers. for settings in ANDROID_BACKEND_SETTINGS: if finder_options.IsBrowserTypeRelevant(settings.browser_type): local_apk = None if finder_options.IsBrowserTypeReference(): local_apk = _FetchReferenceApk( android_platform, finder_options.IsBrowserTypeBundle()) if settings.IsWebView(): p_browser = PossibleAndroidBrowser( settings.browser_type, finder_options, android_platform, settings, local_apk=local_apk, target_os='android_webview') else: p_browser = PossibleAndroidBrowser( settings.browser_type, finder_options, android_platform, settings, local_apk=local_apk) if p_browser.IsAvailable(): possible_browsers.append(p_browser) return possible_browsers
def _FindAllPossibleBrowsers(finder_options, android_platform): """Testable version of FindAllAvailableBrowsers.""" if not android_platform: return [] possible_browsers = [] # Add the exact APK if given. if _CanPossiblyHandlePath(finder_options.browser_executable): if not os.path.exists(finder_options.browser_executable): raise exceptions.PathMissingError( 'Unable to find exact apk specified by --browser-executable=%s' % finder_options.browser_executable) package_name = apk_helper.GetPackageName( finder_options.browser_executable) try: backend_settings = next(backend_settings for target_package, backend_settings in CHROME_PACKAGE_NAMES.itervalues() if package_name == target_package) except StopIteration: raise exceptions.UnknownPackageError( '%s specified by --browser-executable has an unknown package: %s' % (finder_options.browser_executable, package_name)) possible_browsers.append( PossibleAndroidBrowser('exact', finder_options, android_platform, backend_settings(package_name), finder_options.browser_executable)) # Add the reference build if found. os_version = dependency_util.GetChromeApkOsVersion( android_platform.GetOSVersionName()) arch = android_platform.GetArchName() try: reference_build = binary_manager.FetchPath('chrome_stable', arch, 'android', os_version) except (binary_manager.NoPathFoundError, binary_manager.CloudStorageError): reference_build = None if reference_build and os.path.exists(reference_build): # TODO(aiolos): how do we stably map the android chrome_stable apk to the # correct package name? package, backend_settings = CHROME_PACKAGE_NAMES['android-chrome'] possible_browsers.append( PossibleAndroidBrowser('reference', finder_options, android_platform, backend_settings(package), reference_build)) # Add any known local versions. for name, package_info in CHROME_PACKAGE_NAMES.iteritems(): package, backend_settings = package_info p_browser = PossibleAndroidBrowser(name, finder_options, android_platform, backend_settings(package)) if p_browser.IsAvailable(): possible_browsers.append(p_browser) return possible_browsers
def _FindAllPossibleBrowsers(finder_options, android_platform): """Testable version of FindAllAvailableBrowsers.""" if not android_platform: return [] possible_browsers = [] # Add the exact APK if given. if _CanPossiblyHandlePath(finder_options.browser_executable): if not os.path.exists(finder_options.browser_executable): raise exceptions.PathMissingError( 'Unable to find exact apk specified by --browser-executable=%s' % finder_options.browser_executable) package_name = apk_helper.GetPackageName( finder_options.browser_executable) try: backend_settings = next(b for b in ANDROID_BACKEND_SETTINGS if b.package == package_name) except StopIteration: raise exceptions.UnknownPackageError( '%s specified by --browser-executable has an unknown package: %s' % (finder_options.browser_executable, package_name)) possible_browsers.append( PossibleAndroidBrowser('exact', finder_options, android_platform, backend_settings, finder_options.browser_executable)) # Add the reference build if found. os_version = dependency_util.GetChromeApkOsVersion( android_platform.GetOSVersionName()) arch = android_platform.GetArchName() try: reference_build = binary_manager.FetchPath('chrome_stable', arch, 'android', os_version) except (binary_manager.NoPathFoundError, binary_manager.CloudStorageError): reference_build = None if reference_build and os.path.exists(reference_build): # TODO(aiolos): how do we stably map the android chrome_stable apk to the # correct backend settings? possible_browsers.append( PossibleAndroidBrowser( 'reference', finder_options, android_platform, android_browser_backend_settings.ANDROID_CHROME, reference_build)) # Add any other known available browsers. for settings in ANDROID_BACKEND_SETTINGS: p_browser = PossibleAndroidBrowser(settings.browser_type, finder_options, android_platform, settings) if p_browser.IsAvailable(): possible_browsers.append(p_browser) return possible_browsers
def _FindAllPossibleBrowsers(finder_options, android_platform): """Testable version of FindAllAvailableBrowsers.""" if not android_platform: return [] possible_browsers = [] # Add the exact APK if given. if (finder_options.browser_executable and CanPossiblyHandlePath(finder_options.browser_executable)): apk_name = os.path.basename(finder_options.browser_executable) package_info = next((info for info in CHROME_PACKAGE_NAMES.itervalues() if info[2] == apk_name), None) # It is okay if the APK name doesn't match any of known chrome browser APKs, # since it may be of a different browser (say, mandoline). if package_info: normalized_path = os.path.expanduser( finder_options.browser_executable) exact_package = apk_helper.GetPackageName(normalized_path) if not exact_package: raise exceptions.PackageDetectionError( 'Unable to find package for %s specified by --browser-executable' % normalized_path) [package, backend_settings, _] = package_info if package == exact_package: possible_browsers.append( PossibleAndroidBrowser('exact', finder_options, android_platform, backend_settings(package), normalized_path)) else: raise exceptions.UnknownPackageError( '%s specified by --browser-executable has an unknown package: %s' % (normalized_path, exact_package)) for name, package_info in CHROME_PACKAGE_NAMES.iteritems(): package, backend_settings, local_apk = package_info b = PossibleAndroidBrowser(name, finder_options, android_platform, backend_settings(package), local_apk) if b.platform.CanLaunchApplication(package) or b.HaveLocalAPK(): possible_browsers.append(b) return possible_browsers
def _FindAllPossibleBrowsers(finder_options, android_platform): """Testable version of FindAllAvailableBrowsers.""" if not android_platform: return [] possible_browsers = [] # Add the exact APK if given. if (finder_options.browser_executable and CanPossiblyHandlePath(finder_options.browser_executable)): normalized_path = os.path.expanduser(finder_options.browser_executable) exact_package = adb_commands.GetPackageName(normalized_path) if not exact_package: raise exceptions.PackageDetectionError( 'Unable to find package for %s specified by --browser-executable' % normalized_path) package_info = next((info for info in CHROME_PACKAGE_NAMES.itervalues() if info[0] == exact_package), None) if package_info: [package, backend_settings, _] = package_info possible_browsers.append( PossibleAndroidBrowser( 'exact', finder_options, android_platform, backend_settings(package), normalized_path)) else: raise exceptions.UnknownPackageError( '%s specified by --browser-executable has an unknown package: %s' % (normalized_path, exact_package)) for name, package_info in CHROME_PACKAGE_NAMES.iteritems(): package, backend_settings, local_apk = package_info b = PossibleAndroidBrowser(name, finder_options, android_platform, backend_settings(package), local_apk) if b.platform.CanLaunchApplication(package) or b.HaveLocalAPK(): possible_browsers.append(b) return possible_browsers
def _FindAllPossibleBrowsers(finder_options, android_platform): """Testable version of FindAllAvailableBrowsers.""" if not android_platform: return [] possible_browsers = [] # Add the exact APK if given. if (finder_options.browser_executable and CanPossiblyHandlePath(finder_options.browser_executable)): apk_name = os.path.basename(finder_options.browser_executable) normalized_path = os.path.expanduser(finder_options.browser_executable) exact_package = apk_helper.GetPackageName(normalized_path) package_info = next( (info for info in CHROME_PACKAGE_NAMES.itervalues() if info[0] == exact_package or info[2] == apk_name), None) # It is okay if the APK name or package doesn't match any of known chrome # browser APKs, since it may be of a different browser. if package_info: if not exact_package: raise exceptions.PackageDetectionError( 'Unable to find package for %s specified by --browser-executable' % normalized_path) [package, backend_settings, _] = package_info if package == exact_package: possible_browsers.append( PossibleAndroidBrowser('exact', finder_options, android_platform, backend_settings(package), normalized_path)) else: raise exceptions.UnknownPackageError( '%s specified by --browser-executable has an unknown package: %s' % (normalized_path, exact_package)) # Add the reference build if found. os_version = dependency_util.GetChromeApkOsVersion( android_platform.GetOSVersionName()) arch = android_platform.GetArchName() try: reference_build = binary_manager.FetchPath('chrome_stable', arch, 'android', os_version) except (binary_manager.NoPathFoundError, binary_manager.CloudStorageError): reference_build = None if reference_build and os.path.exists(reference_build): # TODO(aiolos): how do we stably map the android chrome_stable apk to the # correct package name? package, backend_settings, _ = CHROME_PACKAGE_NAMES['android-chrome'] possible_browsers.append( PossibleAndroidBrowser('reference', finder_options, android_platform, backend_settings(package), reference_build)) # Add any known local versions. for name, package_info in CHROME_PACKAGE_NAMES.iteritems(): package, backend_settings, apk_name = package_info if apk_name and not finder_options.chrome_root: continue b = PossibleAndroidBrowser(name, finder_options, android_platform, backend_settings(package), apk_name) if b.platform.CanLaunchApplication(package) or b.HaveLocalAPK(): possible_browsers.append(b) return possible_browsers