You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.6 KiB
124 lines
4.6 KiB
# Copyright 2019 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
#
|
|
# assistant_util.py is supposed to be called from chrome.py for Assistant
|
|
# specific logic.
|
|
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.common_lib import utils
|
|
from telemetry.core import exceptions
|
|
|
|
|
|
def enable_assistant(autotest_ext):
|
|
"""Enables Google Assistant.
|
|
|
|
@param autotest_ext private autotest extension.
|
|
@raise error.TestFail if failed to start Assistant service within time.
|
|
"""
|
|
if autotest_ext is None:
|
|
raise error.TestFail('Could not start Assistant service because '
|
|
'autotest extension is not available.')
|
|
|
|
try:
|
|
autotest_ext.ExecuteJavaScript('''
|
|
window.__assistant_ready = 0;
|
|
chrome.autotestPrivate.setAssistantEnabled(true,
|
|
10 * 1000 /* timeout_ms */,
|
|
() => {
|
|
if (chrome.runtime.lastError) {
|
|
window.__assistant_ready = -1;
|
|
window.__assistant_error_msg =
|
|
chrome.runtime.lastError.message;
|
|
} else {
|
|
window.__assistant_ready = 1;
|
|
}
|
|
});
|
|
''')
|
|
except exceptions.EvaluateException as e:
|
|
raise error.TestFail('Could not start Assistant "%s".' % e)
|
|
|
|
ready = utils.poll_for_condition(
|
|
lambda: autotest_ext.EvaluateJavaScript(
|
|
'window.__assistant_ready'),
|
|
desc='Wait for the assistant running state to return.')
|
|
|
|
if ready == -1:
|
|
raise error.TestFail(
|
|
autotest_ext.EvaluateJavaScript(
|
|
'window.__assistant_error_msg'))
|
|
|
|
|
|
def enable_hotword(autotest_ext):
|
|
"""Enables hotword in Google Assistant.
|
|
|
|
@param autotest_ext private autotest extension.
|
|
@raise error.TestFail if failed to enable hotword feature within time.
|
|
"""
|
|
try:
|
|
autotest_ext.ExecuteJavaScript('''
|
|
window.__assistant_hotword_ready = 0;
|
|
chrome.autotestPrivate.setWhitelistedPref(
|
|
'settings.voice_interaction.hotword.enabled', true,
|
|
function(response) {
|
|
if (chrome.runtime.lastError) {
|
|
window.__assistant_hotword_ready = -1;
|
|
window.__assistant_hotword_error_msg =
|
|
chrome.runtime.lastError.message;
|
|
} else {
|
|
window.__assistant_hotword_ready = 1;
|
|
}
|
|
});
|
|
''')
|
|
except exceptions.EvaluateException as e:
|
|
raise error.TestFail('Could not enable Hotword "{}".'.format(e))
|
|
|
|
ready = utils.poll_for_condition(
|
|
lambda: autotest_ext.EvaluateJavaScript(
|
|
'window.__assistant_hotword_ready'),
|
|
desc='Wait for the hotword pref change event to return".')
|
|
|
|
if ready == -1:
|
|
raise error.TestFail(
|
|
autotest_ext.EvaluateJavaScript(
|
|
'window.__assistant_hotword_error_msg'))
|
|
|
|
|
|
def send_text_query(autotest_ext, text_query):
|
|
"""Sends text query to Assistant and returns response.
|
|
|
|
@param autotest_ext private autotest extension.
|
|
@param text_query text query.
|
|
@return dictionary containing the information of Assistant query
|
|
response, mapping from response type to content.
|
|
"""
|
|
try:
|
|
autotest_ext.ExecuteJavaScript('''
|
|
window.__assistant_response_ready = 0;
|
|
chrome.autotestPrivate.sendAssistantTextQuery('%s', 10 * 1000,
|
|
function(response) {
|
|
if (chrome.runtime.lastError) {
|
|
window.__assistant_response_ready = -1;
|
|
window.__assistant_error_msg =
|
|
chrome.runtime.lastError.message;
|
|
} else {
|
|
window.__assistant_response_ready = 1;
|
|
window.__query_response = response;
|
|
}
|
|
});
|
|
''' % text_query)
|
|
except exceptions.EvaluateException as e:
|
|
raise error.TestFail('Could not get Assistant response "%s".' % e)
|
|
|
|
is_ready = utils.poll_for_condition(
|
|
lambda: autotest_ext.EvaluateJavaScript(
|
|
'window.__assistant_response_ready'),
|
|
desc='Waiting for Assistant response.')
|
|
|
|
if is_ready == -1:
|
|
raise error.TestFail(
|
|
autotest_ext.EvaluateJavaScript(
|
|
'window.__assistant_error_msg'))
|
|
|
|
return autotest_ext.EvaluateJavaScript('window.__query_response')
|