11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/autocomplete/keyword_extensions_delegate_impl.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/path_service.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/extension_service.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/extension_service_test_base.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/extension_util.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/test_extension_system.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/unpacked_installer.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/profiles/profile.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/chrome_paths.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/omnibox/keyword_provider.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/search_engines/template_url_service.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/extension_registry.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/extension_registry_observer.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/extension.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace extensions { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ScopedExtensionLoadObserver : public ExtensionRegistryObserver { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScopedExtensionLoadObserver(ExtensionRegistry* registry, 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Closure& quit_closure); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ScopedExtensionLoadObserver(); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnExtensionInstalled(content::BrowserContext* browser_context, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Extension* extension, 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_update) OVERRIDE; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionRegistry* registry_; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure quit_closure_; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ScopedExtensionLoadObserver); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciScopedExtensionLoadObserver::ScopedExtensionLoadObserver( 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionRegistry* registry, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Closure& quit_closure) 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : registry_(registry), 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci quit_closure_(quit_closure) { 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registry_->AddObserver(this); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciScopedExtensionLoadObserver::~ScopedExtensionLoadObserver() { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registry_->RemoveObserver(this); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ScopedExtensionLoadObserver::OnExtensionInstalled( 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserContext* browser_context, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Extension* extension, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_update) { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci quit_closure_.Run(); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass KeywordExtensionsDelegateImplTest : public ExtensionServiceTestBase { 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KeywordExtensionsDelegateImplTest() {} 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~KeywordExtensionsDelegateImplTest() {} 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void RunTest(bool incognito); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(KeywordExtensionsDelegateImplTest); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid KeywordExtensionsDelegateImplTest::SetUp() { 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionServiceTestBase::SetUp(); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitializeExtensionService(CreateDefaultInitParams()); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitializeProcessManager(); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid KeywordExtensionsDelegateImplTest::RunTest(bool incognito) { 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TemplateURLService empty_model(NULL, 0); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<KeywordProvider> keyword_provider = 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new KeywordProvider(NULL, &empty_model); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Load an extension. 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path; 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci path = path.AppendASCII("extensions").AppendASCII("good_unpacked"); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop run_loop; 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScopedExtensionLoadObserver load_observer(registry(), 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci run_loop.QuitClosure()); 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<UnpackedInstaller> installer( 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UnpackedInstaller::Create(service())); 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci installer->Load(path); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci run_loop.Run(); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, registry()->enabled_extensions().size()); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<const Extension> extension = 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *(registry()->enabled_extensions().begin()); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(util::IsIncognitoEnabled(extension->id(), profile())); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Profile* profile_to_use = incognito ? 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile()->GetOffTheRecordProfile() : profile(); 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KeywordExtensionsDelegateImpl delegate_impl(profile_to_use, 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci keyword_provider.get()); 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KeywordExtensionsDelegate* delegate = &delegate_impl; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_NE(incognito, delegate->IsEnabledExtension(extension->id())); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Enable the extension in incognito mode, which requires a reload. 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop run_loop; 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScopedExtensionLoadObserver load_observer(registry(), 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci run_loop.QuitClosure()); 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci util::SetIsIncognitoEnabled(extension->id(), profile(), true); 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci run_loop.Run(); 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, registry()->enabled_extensions().size()); 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension = *(registry()->enabled_extensions().begin()); 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(util::IsIncognitoEnabled(extension->id(), profile())); 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(delegate->IsEnabledExtension(extension->id())); 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(KeywordExtensionsDelegateImplTest, IsEnabledExtension) { 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RunTest(false); 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(KeywordExtensionsDelegateImplTest, IsEnabledExtensionIncognito) { 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RunTest(true); 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace extensions 144