15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/command_line.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service.h" 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/api/hotword_private/hotword_private_api.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/search/hotword_client.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/search/hotword_service.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/search/hotword_service_factory.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/pref_names.h" 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/common/switches.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const char kHotwordTestExtensionId[] = "cpfhkdbjfdgdebcjlifoldbijinjfifp"; 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MockHotwordService : public HotwordService { 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit MockHotwordService(Profile* profile) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : HotwordService(profile), service_available_(true) {}; 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~MockHotwordService() {} 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsServiceAvailable() OVERRIDE { 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return service_available_; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void setServiceAvailable(bool available) { 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service_available_ = available; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static KeyedService* Build(content::BrowserContext* profile) { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return new MockHotwordService(static_cast<Profile*>(profile)); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual LaunchMode GetHotwordAudioVerificationLaunchMode() OVERRIDE { 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return launch_mode_; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetHotwordAudioVerificationLaunchMode(const LaunchMode& launch_mode) { 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci launch_mode_ = launch_mode; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool service_available_; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LaunchMode launch_mode_; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockHotwordService); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class MockHotwordClient : public HotwordClient { 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) MockHotwordClient() 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : last_enabled_(false), 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_changed_count_(0), 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recognized_count_(0) { 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~MockHotwordClient() {} 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void OnHotwordStateChanged(bool enabled) OVERRIDE { 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) last_enabled_ = enabled; 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) state_changed_count_++; 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void OnHotwordRecognized() OVERRIDE { 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recognized_count_++; 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool last_enabled() const { return last_enabled_; } 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int state_changed_count() const { return state_changed_count_; } 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int recognized_count() const { return recognized_count_; } 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private: 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool last_enabled_; 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int state_changed_count_; 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int recognized_count_; 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockHotwordClient); 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class HotwordPrivateApiTest : public ExtensionApiTest { 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HotwordPrivateApiTest() {} 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~HotwordPrivateApiTest() {} 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { 9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ExtensionApiTest::SetUpCommandLine(command_line); 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Whitelist the test extensions (which all share a common ID) to use 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // private APIs. 9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) command_line->AppendSwitchASCII( 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) extensions::switches::kWhitelistedExtensionID, kHotwordTestExtensionId); 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionApiTest::SetUpOnMainThread(); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_data_dir_ = test_data_dir_.AppendASCII("hotword_private"); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service_ = static_cast<MockHotwordService*>( 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HotwordServiceFactory::GetInstance()->SetTestingFactoryAndUse( 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile(), MockHotwordService::Build)); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MockHotwordService* service() { 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return service_; 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MockHotwordService* service_; 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HotwordPrivateApiTest); 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // anonymous namespace 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, SetEnabled) { 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener listenerTrue("ready", false); 127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("setEnabledTrue")) << message_; 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(listenerTrue.WaitUntilSatisfied()); 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(profile()->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener listenerFalse("ready", false); 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("setEnabledFalse")) << message_; 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(listenerFalse.WaitUntilSatisfied()); 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(profile()->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)); 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 137effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, SetAudioLoggingEnabled) { 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(service()->IsOptedIntoAudioLogging()); 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(profile()->GetPrefs()->GetBoolean( 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch prefs::kHotwordAudioLoggingEnabled)); 141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ExtensionTestMessageListener listenerTrue("ready", false); 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("setAudioLoggingEnableTrue")) 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) << message_; 145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(listenerTrue.WaitUntilSatisfied()); 146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(profile()->GetPrefs()->GetBoolean( 147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch prefs::kHotwordAudioLoggingEnabled)); 148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(service()->IsOptedIntoAudioLogging()); 149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ExtensionTestMessageListener listenerFalse("ready", false); 151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("setAudioLoggingEnableFalse")) 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) << message_; 153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(listenerFalse.WaitUntilSatisfied()); 154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(profile()->GetPrefs()->GetBoolean( 155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch prefs::kHotwordAudioLoggingEnabled)); 156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(service()->IsOptedIntoAudioLogging()); 157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, SetHotwordAlwaysOnSearchEnabled) { 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(profile()->GetPrefs()->GetBoolean( 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prefs::kHotwordAlwaysOnSearchEnabled)); 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionTestMessageListener listener("ready", false); 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunComponentExtensionTest("setHotwordAlwaysOnSearchEnableTrue")) 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << message_; 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(listener.WaitUntilSatisfied()); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(profile()->GetPrefs()->GetBoolean( 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prefs::kHotwordAlwaysOnSearchEnabled)); 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci listener.Reset(); 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunComponentExtensionTest("setHotwordAlwaysOnSearchEnableFalse")) 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << message_; 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(listener.WaitUntilSatisfied()); 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(profile()->GetPrefs()->GetBoolean( 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prefs::kHotwordAlwaysOnSearchEnabled)); 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, GetStatus) { 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("getEnabled")) << message_; 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, IsAvailableTrue) { 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service()->setServiceAvailable(true); 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener listener("available: true", false); 185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("isAvailable")) << message_; 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(listener.WaitUntilSatisfied()); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, IsAvailableFalse) { 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) service()->setServiceAvailable(false); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener listener("available: false", false); 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("isAvailable")) << message_; 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(listener.WaitUntilSatisfied()); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, AlwaysOnEnabled) { 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionTestMessageListener listener("alwaysOnEnabled: false", 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunComponentExtensionTest("alwaysOnEnabled")) 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << message_; 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(listener.WaitUntilSatisfied()); 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile()->GetPrefs()->SetBoolean(prefs::kHotwordAlwaysOnSearchEnabled, true); 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionTestMessageListener listener("alwaysOnEnabled: true", 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunComponentExtensionTest("alwaysOnEnabled")) 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << message_; 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(listener.WaitUntilSatisfied()); 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, ExperimentalHotwordEnabled) { 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Disabled by default. 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionTestMessageListener listener("experimentalHotwordEnabled: false", 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) false); 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("experimentalHotwordEnabled")) 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) << message_; 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(listener.WaitUntilSatisfied()); 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, 2256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ExperimentalHotwordEnabled_Enabled) { 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::CommandLine::ForCurrentProcess()->AppendSwitch( 2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switches::kEnableExperimentalHotwording); 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionTestMessageListener listener("experimentalHotwordEnabled: true", 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) false); 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(RunComponentExtensionTest("experimentalHotwordEnabled")) 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) << message_; 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(listener.WaitUntilSatisfied()); 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, OnEnabledChanged) { 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Trigger the pref registrar. 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::HotwordPrivateEventService::GetFactoryInstance(); 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener listener("ready", false); 239010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ASSERT_TRUE( 240010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LoadExtensionAsComponent(test_data_dir_.AppendASCII("onEnabledChanged"))); 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(listener.WaitUntilSatisfied()); 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionTestMessageListener listenerNotification("notification", false); 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile()->GetPrefs()->SetBoolean(prefs::kHotwordSearchEnabled, true); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(listenerNotification.WaitUntilSatisfied()); 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci listenerNotification.Reset(); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile()->GetPrefs()->SetBoolean(prefs::kHotwordAlwaysOnSearchEnabled, 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci true); 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(listenerNotification.WaitUntilSatisfied()); 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 252010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 253010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, HotwordSession) { 254010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) extensions::HotwordPrivateEventService::GetFactoryInstance(); 255010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExtensionTestMessageListener listener("ready", false); 256010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LoadExtensionAsComponent( 257010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) test_data_dir_.AppendASCII("hotwordSession")); 258010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(listener.WaitUntilSatisfied()); 259010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 260010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExtensionTestMessageListener listenerStopReady("stopReady", false); 261010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ExtensionTestMessageListener listenerStopped("stopped", false); 262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) MockHotwordClient client; 263010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) service()->RequestHotwordSession(&client); 264010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(listenerStopReady.WaitUntilSatisfied()); 265010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) service()->StopHotwordSession(&client); 266010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(listenerStopped.WaitUntilSatisfied()); 267010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 268010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(client.last_enabled()); 269010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(1, client.state_changed_count()); 270010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(1, client.recognized_count()); 271010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, GetLaunchStateHotwordOnly) { 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service()->SetHotwordAudioVerificationLaunchMode( 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HotwordService::HOTWORD_ONLY); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionTestMessageListener listener("launchMode: 1", false); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunComponentExtensionTest("getLaunchState")) << message_; 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(listener.WaitUntilSatisfied()); 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(HotwordPrivateApiTest, 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetLaunchStateHotwordAudioHistory) { 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service()->SetHotwordAudioVerificationLaunchMode( 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HotwordService::HOTWORD_AND_AUDIO_HISTORY); 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionTestMessageListener listener("launchMode: 2", false); 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunComponentExtensionTest("getLaunchState")) << message_; 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(listener.WaitUntilSatisfied()); 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 289