1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Copyright 2014 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport os
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport posixpath
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil import devil_env
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil.android import device_errors
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil.android.constants import file_system
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezBIN_DIR = '%s/bin' % file_system.TEST_EXECUTABLE_DIR
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez_FRAMEWORK_DIR = '%s/framework' % file_system.TEST_EXECUTABLE_DIR
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez_COMMANDS = {
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  'unzip': 'org.chromium.android.commands.unzip.Unzip',
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez_SHELL_COMMAND_FORMAT = (
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez"""#!/system/bin/sh
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezbase=%s
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezexport CLASSPATH=$base/framework/chromium_commands.jar
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezexec app_process $base/bin %s $@
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez""")
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef Installed(device):
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  paths = [posixpath.join(BIN_DIR, c) for c in _COMMANDS]
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  paths.append(posixpath.join(_FRAMEWORK_DIR, 'chromium_commands.jar'))
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return device.PathExists(paths)
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef InstallCommands(device):
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if device.IsUserBuild():
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    raise device_errors.CommandFailedError(
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        'chromium_commands currently requires a userdebug build.',
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        device_serial=device.adb.GetDeviceSerial())
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  chromium_commands_jar_path = devil_env.config.FetchPath('chromium_commands')
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if not os.path.exists(chromium_commands_jar_path):
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    raise device_errors.CommandFailedError(
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        '%s not found. Please build chromium_commands.'
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        % chromium_commands_jar_path)
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  device.RunShellCommand(['mkdir', BIN_DIR, _FRAMEWORK_DIR])
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  for command, main_class in _COMMANDS.iteritems():
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    shell_command = _SHELL_COMMAND_FORMAT % (
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        file_system.TEST_EXECUTABLE_DIR, main_class)
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    shell_file = '%s/%s' % (BIN_DIR, command)
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    device.WriteFile(shell_file, shell_command)
51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    device.RunShellCommand(
52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez        ['chmod', '755', shell_file], check_return=True)
53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  device.adb.Push(
55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez      chromium_commands_jar_path,
56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez      '%s/chromium_commands.jar' % _FRAMEWORK_DIR)
57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
58