[go: nahoru, domu]

blob: 7e63dd90be8e8932a47da27725e9ea84163a7221 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_ACCESSIBILITY_DICTATION_TEST_UTILS_H_
#define CHROME_BROWSER_ASH_ACCESSIBILITY_DICTATION_TEST_UTILS_H_
#include <memory>
#include <string>
#include "base/memory/raw_ptr.h"
#include "chrome/browser/speech/speech_recognition_test_helper.h"
class GURL;
class Profile;
namespace speech {
enum class SpeechRecognitionType;
} // namespace speech
namespace ui {
namespace test {
class EventGenerator;
} // namespace test
} // namespace ui
namespace ash {
class AutomationTestUtils;
class ExtensionConsoleErrorObserver;
class MockIMEInputContextHandler;
// A class that can be used to exercise Dictation in browsertests.
class DictationTestUtils {
public:
// The type of editable field to use in Dictation tests.
enum class EditableType {
kContentEditable,
kFormattedContentEditable,
kInput,
kTextArea
};
DictationTestUtils(speech::SpeechRecognitionType speech_recognition_type,
EditableType editable_type);
~DictationTestUtils();
DictationTestUtils(const DictationTestUtils&) = delete;
DictationTestUtils& operator=(const DictationTestUtils&) = delete;
// Enables and sets up Dictation.
void EnableDictation(Profile* profile,
base::OnceCallback<void(const GURL&)> navigate_to_url);
// Toggles Dictation on or off depending on Dictation's current state.
void ToggleDictationWithKeystroke();
// Convenience methods for faking speech and waiting for a condition.
void SendFinalResultAndWaitForEditableValue(
const std::string& result,
const std::string& value);
void SendFinalResultAndWaitForSelection(const std::string& result,
int start,
int end);
void SendFinalResultAndWaitForClipboardChanged(const std::string& result);
// Routers to SpeechRecognitionTestHelper methods.
void WaitForRecognitionStarted();
void WaitForRecognitionStopped();
void SendInterimResultAndWait(const std::string& transcript);
void SendFinalResultAndWait(const std::string& transcript);
void SendErrorAndWait();
std::vector<base::test::FeatureRef> GetEnabledFeatures();
std::vector<base::test::FeatureRef> GetDisabledFeatures();
// Script-related methods.
void ExecuteAccessibilityCommonScript(const std::string& script);
void DisablePumpkin();
std::string GetUrlForEditableType();
// Methods for interacting with the editable.
std::string GetEditableValue();
void WaitForEditableValue(const std::string& value);
void WaitForSelection(int start, int end);
// IME-related methods.
void InstallMockInputContextHandler();
// Retrieves the number of times commit text is updated.
int GetCommitTextCallCount();
void WaitForCommitText(const std::u16string& value);
// TODO(b:259352600): Instead of disabling the observer, change this to
// allow specific messages.
void DisableConsoleObserver() { console_observer_.reset(); }
// Sets whether or not we should wait for the accessibility common extension
// to load when enabling Dictation. This should be true in almost all cases.
// However, there are times when we don't want to wait for accessibility
// common to load (e.g. if it's already loaded because another accessibility
// common extension is active). This only has an effect if EnableDictation()
// hasn't been called yet.
void set_wait_for_accessibility_common_extension_load_(bool wait) {
wait_for_accessibility_common_extension_load_ = wait;
}
AutomationTestUtils* automation_test_utils() {
return automation_test_utils_.get();
}
ui::test::EventGenerator* generator() { return generator_.get(); }
private:
// Set up helper methods.
void SetUpPumpkinDir();
void SetUpTestSupport();
void WaitForDictationJSReady();
void WaitForEditableFocus();
void WaitForPumpkinTaggerReady();
void WaitForFocusHandler();
bool wait_for_accessibility_common_extension_load_;
speech::SpeechRecognitionType speech_recognition_type_;
EditableType editable_type_;
raw_ptr<Profile, DanglingUntriaged> profile_;
std::unique_ptr<AutomationTestUtils> automation_test_utils_;
std::unique_ptr<SpeechRecognitionTestHelper> test_helper_;
std::unique_ptr<ExtensionConsoleErrorObserver> console_observer_;
std::unique_ptr<ui::test::EventGenerator> generator_;
std::unique_ptr<MockIMEInputContextHandler> input_context_handler_;
};
} // namespace ash
#endif // CHROME_BROWSER_ASH_ACCESSIBILITY_DICTATION_TEST_UTILS_H_