| 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());
|
| +}
|
|
|