Index: chrome/browser/autocomplete/shortcuts_provider_extension_unittest.cc |
diff --git a/chrome/browser/autocomplete/shortcuts_provider_extension_unittest.cc b/chrome/browser/autocomplete/shortcuts_provider_extension_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..204b43d7d69fb06bc37a98e8d6b1724d50a20a05 |
--- /dev/null |
+++ b/chrome/browser/autocomplete/shortcuts_provider_extension_unittest.cc |
@@ -0,0 +1,124 @@ |
+// Copyright (c) 2012 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 "components/omnibox/browser/shortcuts_provider.h" |
+ |
+#include <set> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/macros.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "chrome/browser/autocomplete/chrome_autocomplete_provider_client.h" |
+#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" |
+#include "chrome/browser/autocomplete/shortcuts_backend_factory.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "components/history/core/browser/history_service.h" |
+#include "components/omnibox/browser/autocomplete_input.h" |
+#include "components/omnibox/browser/autocomplete_match.h" |
+#include "components/omnibox/browser/autocomplete_result.h" |
+#include "components/omnibox/browser/shortcuts_backend.h" |
+#include "components/omnibox/browser/shortcuts_provider_test_util.h" |
+#include "content/public/browser/notification_service.h" |
+#include "content/public/test/test_browser_thread.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+#if defined(ENABLE_EXTENSIONS) |
+#include "extensions/browser/notification_types.h" |
+#include "extensions/common/extension.h" |
+#include "extensions/common/extension_builder.h" |
+#endif |
+ |
+using ExpectedURLs = std::vector<ExpectedURLAndAllowedToBeDefault>; |
+ |
+namespace { |
+ |
+struct TestShortcutData shortcut_test_db[] = { |
+ {"BD85DBA2-8C29-49F9-84AE-48E1E90880F1", "echo echo", "echo echo", |
+ "chrome-extension://cedabbhfglmiikkmdgcpjdkocfcmbkee/?q=echo", |
+ "Run Echo command: echo", "0,0", "Echo", "0,4", ui::PAGE_TRANSITION_TYPED, |
+ AutocompleteMatchType::EXTENSION_APP, "echo", 1, 1}, |
+}; |
+ |
+} // namespace |
+ |
+// ShortcutsProviderExtensionTest --------------------------------------------- |
+ |
+class ShortcutsProviderExtensionTest : public testing::Test { |
+ public: |
+ ShortcutsProviderExtensionTest(); |
+ |
+ protected: |
+ void SetUp() override; |
+ void TearDown() override; |
+ |
+ base::MessageLoopForUI message_loop_; |
+ content::TestBrowserThread ui_thread_; |
+ content::TestBrowserThread file_thread_; |
+ TestingProfile profile_; |
+ ChromeAutocompleteProviderClient client_; |
+ scoped_refptr<ShortcutsBackend> backend_; |
+ scoped_refptr<ShortcutsProvider> provider_; |
+}; |
+ |
+ShortcutsProviderExtensionTest::ShortcutsProviderExtensionTest() |
+ : ui_thread_(content::BrowserThread::UI, &message_loop_), |
+ file_thread_(content::BrowserThread::FILE, &message_loop_), |
+ client_(&profile_) {} |
+ |
+void ShortcutsProviderExtensionTest::SetUp() { |
+ ShortcutsBackendFactory::GetInstance()->SetTestingFactoryAndUse( |
+ &profile_, &ShortcutsBackendFactory::BuildProfileNoDatabaseForTesting); |
+ backend_ = ShortcutsBackendFactory::GetForProfile(&profile_); |
+ ASSERT_TRUE(backend_.get()); |
+ ASSERT_TRUE(profile_.CreateHistoryService(true, false)); |
+ provider_ = new ShortcutsProvider(&client_); |
+ PopulateShortcutsBackendWithTestData(client_.GetShortcutsBackend(), |
+ shortcut_test_db, |
+ arraysize(shortcut_test_db)); |
+} |
+ |
+void ShortcutsProviderExtensionTest::TearDown() { |
+ // Run all pending tasks or else some threads hold on to the message loop |
+ // and prevent it from being deleted. |
+ message_loop_.RunUntilIdle(); |
+ profile_.DestroyHistoryService(); |
+ provider_ = NULL; |
+} |
+ |
+// Actual tests --------------------------------------------------------------- |
+ |
+#if defined(ENABLE_EXTENSIONS) |
+TEST_F(ShortcutsProviderExtensionTest, Extension) { |
+ // Try an input string that matches an extension URL. |
+ base::string16 text(base::ASCIIToUTF16("echo")); |
+ std::string expected_url( |
+ "chrome-extension://cedabbhfglmiikkmdgcpjdkocfcmbkee/?q=echo"); |
+ ExpectedURLs expected_urls; |
+ expected_urls.push_back(ExpectedURLAndAllowedToBeDefault(expected_url, true)); |
+ RunShortcutsProviderTest(provider_, text, false, expected_urls, expected_url, |
+ base::ASCIIToUTF16(" echo")); |
+ |
+ // Claim the extension has been unloaded. |
+ scoped_refptr<const extensions::Extension> extension = |
+ extensions::ExtensionBuilder() |
+ .SetManifest(std::move(extensions::DictionaryBuilder() |
+ .Set("name", "Echo") |
+ .Set("version", "1.0"))) |
+ .SetID("cedabbhfglmiikkmdgcpjdkocfcmbkee") |
+ .Build(); |
+ extensions::UnloadedExtensionInfo details( |
+ extension.get(), extensions::UnloadedExtensionInfo::REASON_UNINSTALL); |
+ content::NotificationService::current()->Notify( |
+ extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
+ content::Source<Profile>(&profile_), |
+ content::Details<extensions::UnloadedExtensionInfo>(&details)); |
+ |
+ // Now the URL should have disappeared. |
+ RunShortcutsProviderTest(provider_, text, false, ExpectedURLs(), |
+ std::string(), base::string16()); |
+} |
+#endif |