Index: chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc |
diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc b/chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..80e80329f4f26a67a3d9ce502389bd7a57adec57 |
--- /dev/null |
+++ b/chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc |
@@ -0,0 +1,114 @@ |
+// Copyright 2015 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 "base/strings/stringprintf.h" |
+#include "chrome/browser/search_engines/template_url_service_factory.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "chrome/test/base/in_process_browser_test.h" |
+#include "chrome/test/base/ui_test_utils.h" |
+#include "components/search_engines/template_url.h" |
+#include "components/search_engines/template_url_service.h" |
+#include "net/test/embedded_test_server/embedded_test_server.h" |
+#include "net/test/embedded_test_server/http_request.h" |
+#include "net/test/embedded_test_server/http_response.h" |
+ |
+using net::test_server::BasicHttpResponse; |
+using net::test_server::EmbeddedTestServer; |
+using net::test_server::HttpRequest; |
+using net::test_server::HttpResponse; |
+ |
+namespace { |
+ |
+class TemplateURLServiceObserver { |
+ public: |
+ TemplateURLServiceObserver(TemplateURLService* service, base::RunLoop* loop) |
+ : runner_(loop) { |
+ DCHECK(loop); |
+ template_url_sub_ = service->RegisterOnLoadedCallback(base::Bind( |
+ &TemplateURLServiceObserver::StopLoop, base::Unretained(this))); |
+ service->Load(); |
+ } |
+ ~TemplateURLServiceObserver() {} |
+ |
+ private: |
+ void StopLoop() { runner_->Quit(); } |
+ base::RunLoop* runner_; |
+ scoped_ptr<TemplateURLService::Subscription> template_url_sub_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceObserver); |
+}; |
+ |
+testing::AssertionResult VerifyTemplateURLServiceLoad( |
+ TemplateURLService* service) { |
+ if (service->loaded()) |
+ return testing::AssertionSuccess(); |
+ base::RunLoop runner; |
+ TemplateURLServiceObserver observer(service, &runner); |
+ runner.Run(); |
+ if (service->loaded()) |
+ return testing::AssertionSuccess(); |
+ return testing::AssertionFailure() << "TemplateURLService isn't loaded"; |
+} |
+ |
+} // namespace |
+ |
+class SearchEngineTabHelperBrowserTest : public InProcessBrowserTest { |
+ public: |
+ SearchEngineTabHelperBrowserTest() {} |
+ ~SearchEngineTabHelperBrowserTest() override {} |
+ |
+ private: |
+ scoped_ptr<HttpResponse> HandleRequest(const GURL& osdd_xml_url, |
+ const HttpRequest& request) { |
+ std::string html = base::StringPrintf( |
+ "<html>" |
+ "<head>" |
+ " <link rel='search' type='application/opensearchdescription+xml'" |
+ " href='%s'" |
+ " title='ExampleSearch'>" |
+ "</head>" |
+ "</html>", |
+ osdd_xml_url.spec().c_str()); |
+ |
+ scoped_ptr<BasicHttpResponse> http_response(new BasicHttpResponse()); |
+ http_response->set_code(net::HTTP_OK); |
+ http_response->set_content(html); |
+ http_response->set_content_type("text/html"); |
+ return http_response.Pass(); |
+ } |
+ |
+ // Starts a test server that serves a page pointing to a opensearch descriptor |
+ // from a file:// url. |
+ bool StartTestServer() { |
+ GURL file_url = ui_test_utils::GetTestUrl( |
+ base::FilePath(), |
+ base::FilePath().AppendASCII("simple_open_search.xml")); |
+ embedded_test_server()->RegisterRequestHandler( |
+ base::Bind(&SearchEngineTabHelperBrowserTest::HandleRequest, |
+ base::Unretained(this), file_url)); |
+ return embedded_test_server()->InitializeAndWaitUntilReady(); |
+ } |
+ |
+ void SetUpOnMainThread() override { ASSERT_TRUE(StartTestServer()); } |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SearchEngineTabHelperBrowserTest); |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(SearchEngineTabHelperBrowserTest, |
+ IgnoreSearchDescriptionsFromFileURLs) { |
+ TemplateURLService* url_service = |
+ TemplateURLServiceFactory::GetForProfile(browser()->profile()); |
+ ASSERT_TRUE(url_service); |
+ VerifyTemplateURLServiceLoad(url_service); |
+ TemplateURLService::TemplateURLVector template_urls = |
+ url_service->GetTemplateURLs(); |
+ // Navigate to a page with a search descriptor. Path doesn't matter as the |
+ // test server always serves the same HTML. |
+ GURL url(embedded_test_server()->GetURL("/")); |
+ ui_test_utils::NavigateToURL(browser(), url); |
+ // No new search engines should be added. |
+ EXPECT_EQ(template_urls, url_service->GetTemplateURLs()); |
+} |