Index: chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc |
diff --git a/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc b/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f7123ad524824d8bdd29b872c329118b9aaf6dac |
--- /dev/null |
+++ b/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc |
@@ -0,0 +1,153 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/autocomplete/keyword_extensions_delegate_impl.h" |
+ |
+#include "base/memory/ref_counted.h" |
+#include "base/path_service.h" |
+#include "chrome/browser/extensions/extension_service.h" |
+#include "chrome/browser/extensions/extension_service_test_base.h" |
+#include "chrome/browser/extensions/extension_util.h" |
+#include "chrome/browser/extensions/test_extension_system.h" |
+#include "chrome/browser/extensions/unpacked_installer.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/common/chrome_paths.h" |
+#include "components/omnibox/keyword_provider.h" |
+#include "components/search_engines/template_url_service.h" |
+#include "extensions/browser/extension_registry.h" |
+#include "extensions/browser/extension_registry_observer.h" |
+#include "extensions/common/extension.h" |
+ |
+namespace extensions { |
+ |
+namespace { |
+ |
+class ExtensionLoadObserver : public ExtensionRegistryObserver { |
Yoyo Zhou
2014/09/05 16:21:33
Consider making this a ScopedExtensionLoadObserver
Lei Zhang
2014/09/05 19:35:08
Done.
|
+ public: |
+ explicit ExtensionLoadObserver(const base::Closure& quit_closure); |
+ virtual ~ExtensionLoadObserver() {} |
+ |
+ private: |
+ virtual void OnExtensionInstalled(content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ bool is_update) OVERRIDE; |
+ |
+ base::Closure quit_closure_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ExtensionLoadObserver); |
+}; |
+ |
+ExtensionLoadObserver::ExtensionLoadObserver(const base::Closure& quit_closure) |
+ : quit_closure_(quit_closure) { |
+} |
+ |
+void ExtensionLoadObserver::OnExtensionInstalled( |
+ content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ bool is_update) { |
+ quit_closure_.Run(); |
+} |
+ |
+class KeywordExtensionsDelegateImplTest : public ExtensionServiceTestBase { |
+ public: |
+ KeywordExtensionsDelegateImplTest() {} |
+ virtual ~KeywordExtensionsDelegateImplTest() {} |
+ |
+ protected: |
+ virtual void SetUp() OVERRIDE; |
+ virtual void TearDown() OVERRIDE; |
+ |
+ void RunTest(bool incognito); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(KeywordExtensionsDelegateImplTest); |
+}; |
+ |
+void KeywordExtensionsDelegateImplTest::SetUp() { |
+ ExtensionServiceTestBase::SetUp(); |
+ InitializeExtensionService(CreateDefaultInitParams()); |
+ |
+ TestExtensionSystem* extension_system = |
+ static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile())); |
+ extension_system->CreateProcessManager(); |
Yoyo Zhou
2014/09/05 16:21:33
This is all just InitializeProcessManager()
Lei Zhang
2014/09/05 19:35:08
Done.
|
+ |
+ TestExtensionSystem* incognito_extension_system = |
+ static_cast<TestExtensionSystem*>( |
+ ExtensionSystem::Get(profile()->GetOffTheRecordProfile())); |
+ incognito_extension_system->SetExtensionService( |
+ service(), false /* does not take ownership */); |
+} |
+ |
+void KeywordExtensionsDelegateImplTest::TearDown() { |
+ TestExtensionSystem* incognito_extension_system = |
+ static_cast<TestExtensionSystem*>( |
+ ExtensionSystem::Get(profile()->GetOffTheRecordProfile())); |
+ incognito_extension_system->SetExtensionService( |
+ NULL, false /* does not take ownership */); |
+} |
+ |
+void KeywordExtensionsDelegateImplTest::RunTest(bool incognito) { |
+ TemplateURLService empty_model(NULL, 0); |
+ scoped_refptr<KeywordProvider> keyword_provider = |
+ new KeywordProvider(NULL, &empty_model); |
+ |
+ // Load an extension. |
+ { |
+ base::FilePath path; |
+ ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
+ path = path.AppendASCII("extensions").AppendASCII("good_unpacked"); |
+ |
+ base::RunLoop run_loop; |
+ ExtensionLoadObserver load_observer(run_loop.QuitClosure()); |
+ registry()->AddObserver(&load_observer); |
+ |
+ scoped_refptr<UnpackedInstaller> installer( |
+ UnpackedInstaller::Create(service())); |
+ installer->Load(path); |
+ |
+ run_loop.Run(); |
+ registry()->RemoveObserver(&load_observer); |
+ } |
+ |
+ ASSERT_EQ(1U, registry()->enabled_extensions().size()); |
+ scoped_refptr<const Extension> extension = |
+ *(registry()->enabled_extensions().begin()); |
+ ASSERT_FALSE(util::IsIncognitoEnabled(extension->id(), profile())); |
+ |
+ Profile* profile_to_use = incognito ? |
+ profile()->GetOffTheRecordProfile() : profile(); |
+ KeywordExtensionsDelegateImpl delegate_impl(profile_to_use, |
Yoyo Zhou
2014/09/05 16:21:33
Here's a suggestion. We could use dependency injec
Lei Zhang
2014/09/05 19:35:08
Better yet, I'm just going to take this portion of
|
+ keyword_provider.get()); |
+ KeywordExtensionsDelegate* delegate = &delegate_impl; |
+ EXPECT_NE(incognito, delegate->IsEnabledExtension(extension->id())); |
+ |
+ // Enable the extension in incognito mode, which requires a reload. |
+ { |
+ base::RunLoop run_loop; |
+ ExtensionLoadObserver load_observer(run_loop.QuitClosure()); |
+ registry()->AddObserver(&load_observer); |
+ |
+ util::SetIsIncognitoEnabled(extension->id(), profile(), true); |
+ |
+ run_loop.Run(); |
+ registry()->RemoveObserver(&load_observer); |
+ } |
+ |
+ ASSERT_EQ(1U, registry()->enabled_extensions().size()); |
+ extension = *(registry()->enabled_extensions().begin()); |
+ ASSERT_TRUE(util::IsIncognitoEnabled(extension->id(), profile())); |
+ EXPECT_TRUE(delegate->IsEnabledExtension(extension->id())); |
+} |
+ |
+TEST_F(KeywordExtensionsDelegateImplTest, IsEnabledExtension) { |
+ RunTest(false); |
+} |
+ |
+TEST_F(KeywordExtensionsDelegateImplTest, IsEnabledExtensionIncognito) { |
+ RunTest(true); |
+} |
+ |
+} // namespace |
+ |
+} // namespace extensions |