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..7c0db8607d5ed3bb05b59d20cd99c9588266342a |
--- /dev/null |
+++ b/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc |
@@ -0,0 +1,143 @@ |
+// 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 ScopedExtensionLoadObserver : public ExtensionRegistryObserver { |
+ public: |
+ ScopedExtensionLoadObserver(ExtensionRegistry* registry, |
+ const base::Closure& quit_closure); |
+ virtual ~ScopedExtensionLoadObserver(); |
+ |
+ private: |
+ virtual void OnExtensionInstalled(content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ bool is_update) OVERRIDE; |
+ |
+ ExtensionRegistry* registry_; |
+ base::Closure quit_closure_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ScopedExtensionLoadObserver); |
+}; |
+ |
+ScopedExtensionLoadObserver::ScopedExtensionLoadObserver( |
+ ExtensionRegistry* registry, |
+ const base::Closure& quit_closure) |
+ : registry_(registry), |
+ quit_closure_(quit_closure) { |
+ registry_->AddObserver(this); |
+} |
+ |
+ScopedExtensionLoadObserver::~ScopedExtensionLoadObserver() { |
+ registry_->RemoveObserver(this); |
+} |
+ |
+void ScopedExtensionLoadObserver::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; |
+ |
+ void RunTest(bool incognito); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(KeywordExtensionsDelegateImplTest); |
+}; |
+ |
+void KeywordExtensionsDelegateImplTest::SetUp() { |
+ ExtensionServiceTestBase::SetUp(); |
+ InitializeExtensionService(CreateDefaultInitParams()); |
+ InitializeProcessManager(); |
+} |
+ |
+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; |
+ ScopedExtensionLoadObserver load_observer(registry(), |
+ run_loop.QuitClosure()); |
+ |
+ scoped_refptr<UnpackedInstaller> installer( |
+ UnpackedInstaller::Create(service())); |
+ installer->Load(path); |
+ |
+ run_loop.Run(); |
+ } |
+ |
+ 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, |
+ 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; |
+ ScopedExtensionLoadObserver load_observer(registry(), |
+ run_loop.QuitClosure()); |
+ |
+ util::SetIsIncognitoEnabled(extension->id(), profile(), true); |
+ |
+ run_loop.Run(); |
+ } |
+ |
+ 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 |