def set_certapps(self, enable=True, serial=None):
        AdbWrapper.adb_root(serial=serial)
        logger.info('{} Full Privilege for WebIDE...'.format('Enabling' if enable else 'Disabling'))

        need_restart = True
        try:
            tmp_dir = tempfile.mkdtemp(prefix='enablecertapps_')
            # get profile folder name xxx.default under /data/b2g/mozilla/
            profile_dir_name, retcode = AdbWrapper.adb_shell('ls /data/b2g/mozilla/ | grep default', serial=serial)
            device_src_file = os.path.join('/data/b2g/mozilla/', profile_dir_name, 'prefs.js')
            dest_temp_file = os.path.join(tmp_dir, 'prefs.js.origin')
            try:
                logger.info('Pulling prefs.js file...')
                AdbWrapper.adb_pull(device_src_file, dest_temp_file, serial=serial)
            except:
                raise Exception('Error pulling prefs.js file.')

            dest_file = os.path.join(tmp_dir, 'prefs.js')
            with open(dest_temp_file, 'r') as fr:
                with open(dest_file, 'w') as fw:
                    match = False
                    is_forbid = 'false' if enable else 'true'
                    logger.debug('is_forbid: [{}]'.format(is_forbid))
                    for line in fr:
                        if 'devtools.debugger.forbid-certified-apps' in line:
                            logger.debug('line: [{}] to [{}]'.format(line, is_forbid))
                            if is_forbid in line:
                                # do not need to restart if the setting isn't changed
                                logger.info('The full privilege is already {}.'.format('enabled' if enable else 'disabled'))
                                need_restart = False
                                break
                            else:
                                logger.info('Changing setting of pref.js file...')
                                fw.write('user_pref("devtools.debugger.forbid-certified-apps", {});\n'.format(is_forbid))
                            match = True
                        else:
                            fw.write(line)
                    if not match:
                        if not enable:
                            # the forbid is true when there is no setting
                            logger.info('The full privilege is already disabled.')
                            need_restart = False
                        else:
                            if need_restart:
                                # adding setting when there is no setting and need to enable certapps
                                logger.info('Adding setting of pref.js file...')
                                fw.write('user_pref("devtools.debugger.forbid-certified-apps", {});\n'.format(is_forbid))
            if need_restart:
                B2GHelper.stop_b2g(serial=serial)
                try:
                    logger.info('Pushing prefs.js file...')
                    AdbWrapper.adb_push(dest_file, device_src_file, serial=serial)
                except:
                    raise Exception('Error pushing prefs.js file.')
        finally:
            if need_restart:
                B2GHelper.start_b2g(serial=serial)
            shutil.rmtree(tmp_dir)
 def restore_sdcard(self, local_dir, serial=None):
     logger.info('Restoring SD card...')
     target_dir = os.path.join(local_dir, self._LOCAL_DIR_SDCARD)
     if os.path.isdir(target_dir):
         logger.info('Restore: {0} to {1}'.format(target_dir, self._REMOTE_DIR_SDCARD))
         try:
             AdbWrapper.adb_push(target_dir, self._REMOTE_DIR_SDCARD, serial=serial)
         except:
             logger.warning('Can not push files from {0} to {1}'.format(target_dir, self._REMOTE_DIR_SDCARD))
     else:
         logger.info('{0}: No such file or directory'.format(target_dir))
         return
     logger.info('Restore SD card done.')
Exemplo n.º 3
0
 def _push_gecko(self, source_dir):
     # push into device
     logger.info('Pushing Gecko: Start')
     gecko_dir = os.path.join(source_dir, 'b2g')
     # push
     target_path = '/system/b2g/'
     logger.debug('adb push {} to {}'.format(gecko_dir, target_path))
     AdbWrapper.adb_push(gecko_dir, target_path, serial=self.serial)
     # set excutable
     source_files = os.listdir(gecko_dir)
     executable_files = [os.path.join('/system/b2g/', f) for f in source_files if os.access(os.path.join(gecko_dir, f), os.X_OK)]
     logger.debug('Add executed permission on device: {}'.format(executable_files))
     for file in executable_files:
         AdbWrapper.adb_shell('chmod 777 {}'.format(file), serial=self.serial)
     logger.info('Pushing Gecko: Done')
 def restore_sdcard(self, local_dir, serial=None):
     logger.info('Restoring SD card...')
     target_dir = os.path.join(local_dir, self._LOCAL_DIR_SDCARD)
     if os.path.isdir(target_dir):
         logger.info('Restore: {0} to {1}'.format(target_dir,
                                                  self._REMOTE_DIR_SDCARD))
         try:
             AdbWrapper.adb_push(target_dir,
                                 self._REMOTE_DIR_SDCARD,
                                 serial=serial)
         except:
             logger.warning('Can not push files from {0} to {1}'.format(
                 target_dir, self._REMOTE_DIR_SDCARD))
     else:
         logger.info('{0}: No such file or directory'.format(target_dir))
         return
     logger.info('Restore SD card done.')
Exemplo n.º 5
0
    def restore_sdcard(self, local_dir, serial=None):
        '''
        Restore data from local folder to device's SDCard.

        @param local_dir: the source local folder, will get data from this folder and than restore to device's SDCard.
        '''
        logger.info('Restoring SD card...')
        target_dir = os.path.join(local_dir, self._LOCAL_DIR_SDCARD)
        if os.path.isdir(target_dir):
            logger.info('Restore: {0} to {1}'.format(target_dir, self._REMOTE_DIR_SDCARD))
            try:
                AdbWrapper.adb_push(target_dir, self._REMOTE_DIR_SDCARD, serial=serial)
            except:
                logger.error('Can not push files from {0} to {1}'.format(target_dir, self._REMOTE_DIR_SDCARD))
            logger.info('Restore SD card done.')
        else:
            logger.info('{0}: No such file or directory'.format(target_dir))
Exemplo n.º 6
0
 def _push_gecko(self, source_dir):
     # push into device
     logger.info('Pushing Gecko: Start')
     gecko_dir = os.path.join(source_dir, 'b2g')
     # push
     target_path = '/system/b2g/'
     logger.debug('adb push {} to {}'.format(gecko_dir, target_path))
     AdbWrapper.adb_push(gecko_dir, target_path, serial=self.serial)
     # set excutable
     source_files = os.listdir(gecko_dir)
     executable_files = [
         os.path.join('/system/b2g/', f) for f in source_files
         if os.access(os.path.join(gecko_dir, f), os.X_OK)
     ]
     logger.debug(
         'Add executed permission on device: {}'.format(executable_files))
     for file in executable_files:
         AdbWrapper.adb_shell('chmod 777 {}'.format(file),
                              serial=self.serial)
     logger.info('Pushing Gecko: Done')
 def restore_profile(self, local_dir, serial=None):
     logger.info('Restoring profile...')
     if os.path.isdir(local_dir):
         # Restore Wifi
         wifi_file = os.path.join(local_dir, self._LOCAL_FILE_WIFI)
         if os.path.isfile(wifi_file):
             logger.info('Restoring Wifi information...')
             try:
                 AdbWrapper.adb_push(wifi_file, self._REMOTE_FILE_WIFI, serial=serial)
             except:
                 logger.warning('If you don\'t have root permission, you cannot restore Wifi information.')
             AdbWrapper.adb_shell('chown {0} {1}'.format(self._REMOTE_FILE_WIFI_OWNER, self._REMOTE_FILE_WIFI))
         # Restore profile
         b2g_mozilla_dir = os.path.join(local_dir, self._LOCAL_DIR_B2G)
         if os.path.isdir(b2g_mozilla_dir):
             logger.info('Restore from {0} to {1} ...'.format(b2g_mozilla_dir, self._REMOTE_DIR_B2G))
             AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_B2G))
             try:
                 AdbWrapper.adb_push(b2g_mozilla_dir, self._REMOTE_DIR_B2G, serial=serial)
             except:
                 logger.warning('Can not push files from {0} to {1}'.format(b2g_mozilla_dir, self._REMOTE_DIR_B2G))
         # Restore data/local
         datalocal_dir = os.path.join(local_dir, self._LOCAL_DIR_DATA)
         if os.path.isdir(datalocal_dir):
             logger.info('Restore from {0} to {1} ...'.format(datalocal_dir, self._REMOTE_DIR_DATA))
             AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_DATA))
             try:
                 AdbWrapper.adb_push(datalocal_dir, self._REMOTE_DIR_DATA, serial=serial)
             except:
                 logger.warning('Can not push files from {0} to {1}'.format(datalocal_dir, self._REMOTE_DIR_DATA))
         logger.info('Restore profile done.')
     else:
         logger.info('{0}: No such file or directory'.format(local_dir))
         return
Exemplo n.º 8
0
    def _push_gaia(self, source_dir):
        # push into device
        logger.info('Pushing Gaia: Start')
        unziped_gaia_dir = os.path.join(source_dir, 'gaia')

        # push user.js
        source_user_pref_path = os.path.join(unziped_gaia_dir, 'profile', 'user.js')
        user_pref_path = os.path.join(source_dir, 'user.js')
        # prepare the user.js
        logger.debug('Prepare user.js file')
        with open(source_user_pref_path, 'r') as fin:
            with open(user_pref_path, 'w') as fout:
                for line in fin:
                    fout.write(line.replace('user_pref', 'pref'))
        user_pref_target_path = '/system/b2g/defaults/pref/'
        logger.info('push user.js...')
        logger.debug('adb push {} to {}'.format(user_pref_path, user_pref_target_path))
        AdbWrapper.adb_push(user_pref_path, user_pref_target_path, serial=self.serial)

        # push webapps
        webapps_path = os.path.join(unziped_gaia_dir, 'profile', 'webapps')
        webapps_target_path = '/system/b2g/webapps'
        logger.info('push webapps...')
        logger.debug('adb push {} to {}'.format(webapps_path, webapps_target_path))
        AdbWrapper.adb_push(webapps_path, webapps_target_path, serial=self.serial)

        # push settings.json
        settings_path = os.path.join(unziped_gaia_dir, 'profile', 'settings.json')
        settings_target_path = '/system/b2g/defaults/'
        logger.info('push settings.json...')
        logger.debug('adb push {} to {}'.format(settings_path, settings_target_path))
        AdbWrapper.adb_push(settings_path, settings_target_path, serial=self.serial)
        logger.info('Pushing Gaia: Done')
    def restore_profile(self, local_dir, serial=None):
        """
        Restore B2G user profile from local folder to device.

        @param local_dir: the source local folder, the backup data will restore from this folder.
        @param serial: device serial number. (optional)
        """
        logger.info('Restoring profile...')
        if os.path.isdir(local_dir):
            # Restore Wifi
            wifi_file = os.path.join(local_dir, self._LOCAL_FILE_WIFI)
            if os.path.isfile(wifi_file):
                logger.info('Restoring Wifi information...')
                try:
                    AdbWrapper.adb_push(wifi_file,
                                        self._REMOTE_FILE_WIFI,
                                        serial=serial)
                except Exception as e:
                    logger.debug(e)
                    logger.error(
                        'If you don\'t have root permission, you cannot restore Wifi information.'
                    )
                AdbWrapper.adb_shell('chown {0} {1}'.format(
                    self._REMOTE_FILE_WIFI_OWNER, self._REMOTE_FILE_WIFI))
            # Restore profile
            b2g_mozilla_dir = os.path.join(local_dir, self._LOCAL_DIR_B2G)
            if os.path.isdir(b2g_mozilla_dir):
                logger.info('Restore from {0} to {1} ...'.format(
                    b2g_mozilla_dir, self._REMOTE_DIR_B2G))
                AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_B2G))
                try:
                    AdbWrapper.adb_push(b2g_mozilla_dir,
                                        self._REMOTE_DIR_B2G,
                                        serial=serial)
                except Exception as e:
                    logger.debug(e)
                    logger.error('Can not push files from {0} to {1}'.format(
                        b2g_mozilla_dir, self._REMOTE_DIR_B2G))
            # Restore data/local
            datalocal_dir = os.path.join(local_dir, self._LOCAL_DIR_DATA)
            if os.path.isdir(datalocal_dir):
                logger.info('Restore from {0} to {1} ...'.format(
                    datalocal_dir, self._REMOTE_DIR_DATA))
                AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_DATA))
                try:
                    AdbWrapper.adb_push(datalocal_dir,
                                        self._REMOTE_DIR_DATA,
                                        serial=serial)
                except Exception as e:
                    logger.debug(e)
                    logger.error('Can not push files from {0} to {1}'.format(
                        datalocal_dir, self._REMOTE_DIR_DATA))
            logger.info('Restore profile done.')
        else:
            logger.info('{0}: No such file or directory'.format(local_dir))
 def restore_profile(self, local_dir, serial=None):
     logger.info('Restoring profile...')
     if os.path.isdir(local_dir):
         # Restore Wifi
         wifi_file = os.path.join(local_dir, self._LOCAL_FILE_WIFI)
         if os.path.isfile(wifi_file):
             logger.info('Restoring Wifi information...')
             try:
                 AdbWrapper.adb_push(wifi_file,
                                     self._REMOTE_FILE_WIFI,
                                     serial=serial)
             except:
                 logger.warning(
                     'If you don\'t have root permission, you cannot restore Wifi information.'
                 )
             AdbWrapper.adb_shell('chown {0} {1}'.format(
                 self._REMOTE_FILE_WIFI_OWNER, self._REMOTE_FILE_WIFI))
         # Restore profile
         b2g_mozilla_dir = os.path.join(local_dir, self._LOCAL_DIR_B2G)
         if os.path.isdir(b2g_mozilla_dir):
             logger.info('Restore from {0} to {1} ...'.format(
                 b2g_mozilla_dir, self._REMOTE_DIR_B2G))
             AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_B2G))
             try:
                 AdbWrapper.adb_push(b2g_mozilla_dir,
                                     self._REMOTE_DIR_B2G,
                                     serial=serial)
             except:
                 logger.warning('Can not push files from {0} to {1}'.format(
                     b2g_mozilla_dir, self._REMOTE_DIR_B2G))
         # Restore data/local
         datalocal_dir = os.path.join(local_dir, self._LOCAL_DIR_DATA)
         if os.path.isdir(datalocal_dir):
             logger.info('Restore from {0} to {1} ...'.format(
                 datalocal_dir, self._REMOTE_DIR_DATA))
             AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_DATA))
             try:
                 AdbWrapper.adb_push(datalocal_dir,
                                     self._REMOTE_DIR_DATA,
                                     serial=serial)
             except:
                 logger.warning('Can not push files from {0} to {1}'.format(
                     datalocal_dir, self._REMOTE_DIR_DATA))
         logger.info('Restore profile done.')
     else:
         logger.info('{0}: No such file or directory'.format(local_dir))
         return
Exemplo n.º 11
0
    def _push_gaia(self, source_dir):
        # push into device
        logger.info('Pushing Gaia: Start')
        unziped_gaia_dir = os.path.join(source_dir, 'gaia')

        # push user.js
        source_user_pref_path = os.path.join(unziped_gaia_dir, 'profile',
                                             'user.js')
        user_pref_path = os.path.join(source_dir, 'user.js')
        # prepare the user.js
        logger.debug('Prepare user.js file')
        with open(source_user_pref_path, 'r') as fin:
            with open(user_pref_path, 'w') as fout:
                for line in fin:
                    fout.write(line.replace('user_pref', 'pref'))
        user_pref_target_path = '/system/b2g/defaults/pref/'
        logger.info('push user.js...')
        logger.debug('adb push {} to {}'.format(user_pref_path,
                                                user_pref_target_path))
        AdbWrapper.adb_push(user_pref_path,
                            user_pref_target_path,
                            serial=self.serial)

        # push webapps
        webapps_path = os.path.join(unziped_gaia_dir, 'profile', 'webapps')
        webapps_target_path = '/system/b2g/webapps'
        logger.info('push webapps...')
        logger.debug('adb push {} to {}'.format(webapps_path,
                                                webapps_target_path))
        AdbWrapper.adb_push(webapps_path,
                            webapps_target_path,
                            serial=self.serial)

        # push settings.json
        settings_path = os.path.join(unziped_gaia_dir, 'profile',
                                     'settings.json')
        settings_target_path = '/system/b2g/defaults/'
        logger.info('push settings.json...')
        logger.debug('adb push {} to {}'.format(settings_path,
                                                settings_target_path))
        AdbWrapper.adb_push(settings_path,
                            settings_target_path,
                            serial=self.serial)
        logger.info('Pushing Gaia: Done')
    def restore_profile(self, local_dir, serial=None):
        """
        Restore B2G user profile from local folder to device.

        @param local_dir: the source local folder, the backup data will restore from this folder.
        @param serial: device serial number. (optional)
        """
        logger.info('Restoring profile...')
        if os.path.isdir(local_dir):
            # Restore Wifi
            wifi_file = os.path.join(local_dir, self._LOCAL_FILE_WIFI)
            if os.path.isfile(wifi_file):
                logger.info('Restoring Wifi information...')
                try:
                    AdbWrapper.adb_push(wifi_file, self._REMOTE_FILE_WIFI, serial=serial)
                except Exception as e:
                    logger.debug(e)
                    logger.error('If you don\'t have root permission, you cannot restore Wifi information.')
                AdbWrapper.adb_shell('chown {0} {1}'.format(self._REMOTE_FILE_WIFI_OWNER, self._REMOTE_FILE_WIFI))
            # Restore profile
            b2g_mozilla_dir = os.path.join(local_dir, self._LOCAL_DIR_B2G)
            if os.path.isdir(b2g_mozilla_dir):
                logger.info('Restore from {0} to {1} ...'.format(b2g_mozilla_dir, self._REMOTE_DIR_B2G))
                AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_B2G))
                try:
                    AdbWrapper.adb_push(b2g_mozilla_dir, self._REMOTE_DIR_B2G, serial=serial)
                except Exception as e:
                    logger.debug(e)
                    logger.error('Can not push files from {0} to {1}'.format(b2g_mozilla_dir, self._REMOTE_DIR_B2G))
            # Restore data/local
            datalocal_dir = os.path.join(local_dir, self._LOCAL_DIR_DATA)
            if os.path.isdir(datalocal_dir):
                logger.info('Restore from {0} to {1} ...'.format(datalocal_dir, self._REMOTE_DIR_DATA))
                AdbWrapper.adb_shell('rm -r {0}'.format(self._REMOTE_DIR_DATA))
                try:
                    AdbWrapper.adb_push(datalocal_dir, self._REMOTE_DIR_DATA, serial=serial)
                except Exception as e:
                    logger.debug(e)
                    logger.error('Can not push files from {0} to {1}'.format(datalocal_dir, self._REMOTE_DIR_DATA))
            logger.info('Restore profile done.')
        else:
            logger.info('{0}: No such file or directory'.format(local_dir))
Exemplo n.º 13
0
    def set_certapps(self, enable=True, serial=None):
        '''
        Set the devtools permission for certapps.
        @param enable: True will turn on the permission. False will turn off the permission.
        @param serial: device serial number. (optional)
        @raise exception: When it cannot pulling/pushing the pref.js file of device.
        '''
        AdbWrapper.adb_root(serial=serial)
        logger.info('{} Full Privilege for WebIDE...'.format(
            'Enabling' if enable else 'Disabling'))

        need_restart = True
        try:
            tmp_dir = tempfile.mkdtemp(prefix='enablecertapps_')
            # get profile folder name xxx.default under /data/b2g/mozilla/
            profile_dir_name, retcode = AdbWrapper.adb_shell(
                'ls /data/b2g/mozilla/ | grep default', serial=serial)
            device_src_file = os.path.join('/data/b2g/mozilla/',
                                           profile_dir_name, 'prefs.js')
            dest_temp_file = os.path.join(tmp_dir, 'prefs.js.origin')
            try:
                logger.info('Pulling prefs.js file...')
                AdbWrapper.adb_pull(device_src_file,
                                    dest_temp_file,
                                    serial=serial)
            except:
                raise Exception('Error pulling prefs.js file.')

            dest_file = os.path.join(tmp_dir, 'prefs.js')
            with open(dest_temp_file, 'r') as fr:
                with open(dest_file, 'w') as fw:
                    match = False
                    is_forbid = 'false' if enable else 'true'
                    logger.debug('is_forbid: [{}]'.format(is_forbid))
                    for line in fr:
                        if 'devtools.debugger.forbid-certified-apps' in line:
                            logger.debug('line: [{}] to [{}]'.format(
                                line, is_forbid))
                            if is_forbid in line:
                                # do not need to restart if the setting isn't changed
                                logger.info(
                                    'The full privilege is already {}.'.format(
                                        'enabled' if enable else 'disabled'))
                                need_restart = False
                                break
                            else:
                                logger.info(
                                    'Changing setting of pref.js file...')
                                fw.write(
                                    'user_pref("devtools.debugger.forbid-certified-apps", {});\n'
                                    .format(is_forbid))
                            match = True
                        else:
                            fw.write(line)
                    if not match:
                        if not enable:
                            # the forbid is true when there is no setting
                            logger.info(
                                'The full privilege is already disabled.')
                            need_restart = False
                        else:
                            if need_restart:
                                # adding setting when there is no setting and need to enable certapps
                                logger.info(
                                    'Adding setting of pref.js file...')
                                fw.write(
                                    'user_pref("devtools.debugger.forbid-certified-apps", {});\n'
                                    .format(is_forbid))
            if need_restart:
                B2GHelper.stop_b2g(serial=serial)
                try:
                    logger.info('Pushing prefs.js file...')
                    AdbWrapper.adb_push(dest_file,
                                        device_src_file,
                                        serial=serial)
                except:
                    raise Exception('Error pushing prefs.js file.')
        finally:
            if need_restart:
                B2GHelper.start_b2g(serial=serial)
            shutil.rmtree(tmp_dir)