external_extension_browsertest.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/url_constants.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct IsSearchProviderTestData { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSearchProviderTestData() : tab(NULL) {} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSearchProviderTestData(content::WebContents* t, std::string h, GURL url) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : tab(t), host(h), test_url(url) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* tab; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL test_url; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchProviderTest : public InProcessBrowserTest { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchProviderTest() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Map all hosts to our local server. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host_rule( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "MAP * " + test_server()->host_port_pair().ToString()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kHostRules, host_rule); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use no proxy or otherwise this test will fail on a machine that has a 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // proxy configured. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoProxyServer); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the url for the test page. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_provider_test_url_ = 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server()->GetURL("files/is_search_provider_installed.html"); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSearchProviderTestData StartIsSearchProviderInstalledTest( 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* host, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected_result) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL test_url(std::string("http://") + host + 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_provider_test_url_.path() + "#" + expected_result); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser, test_url, NEW_FOREGROUND_TAB, 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bundle up information needed to verify the result. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsSearchProviderTestData(tab, host, test_url); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FinishIsSearchProviderInstalledTest( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IsSearchProviderTestData& data) { 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title = data.tab->GetTitle(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title.empty()) { 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher title_watcher(data.tab, base::ASCIIToUTF16("OK")); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title = title_watcher.WaitAndGetTitle(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16("OK"), title); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL search_provider_test_url_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SearchProviderTest); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if 1 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Disabled - http://crbug.com/359727 (js has syntax errors which v8 hates) 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define MAYBE_TestIsSearchProviderInstalled \ 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DISABLED_TestIsSearchProviderInstalled 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#elif defined(OS_WIN) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is flaking on XP. See http://crbug.com/159530 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestIsSearchProviderInstalled \ 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_TestIsSearchProviderInstalled 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TestIsSearchProviderInstalled TestIsSearchProviderInstalled 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SearchProviderTest, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_TestIsSearchProviderInstalled) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the default search provider, other installed search provider, and 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one not installed as well. (Note that yahoo isn't tested because the 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // its host name varies a lot for different locales unlike Google and Bing, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which would make the test fail depending on the machine's locale.) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* test_hosts[] = { "www.google.com", 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "www.bing.com", 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "localhost" }; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected_results[] = { "2", 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "1", 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "0" }; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(test_hosts) == arraysize(expected_results), 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) there_should_be_a_result_for_each_host); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSearchProviderTestData test_data[2 * arraysize(test_hosts)]; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start results for the normal mode. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(test_hosts); ++i) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data[i] = StartIsSearchProviderInstalledTest( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), test_hosts[i], expected_results[i]); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishIsSearchProviderInstalledTest(test_data[i]); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start tests for incognito mode (and verify the result is 0). 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* incognito_browser = CreateIncognitoBrowser(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(test_hosts); ++i) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data[i + arraysize(test_hosts)] = StartIsSearchProviderInstalledTest( 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_browser, test_hosts[i], "0"); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishIsSearchProviderInstalledTest(test_data[i + arraysize(test_hosts)]); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following should be re-enabled. At the moment, there are problems with 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doing all of these queries in parallel -- see http://crbug.com/60043. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the calls to FinishIsSearchProviderInstalledTest above when 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // re-enabling this code. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do the verification. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(test_data); ++i) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishIsSearchProviderInstalledTest(test_data[i]); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SearchProviderTest, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestIsSearchProviderInstalledWithException) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change the url for the test page to one that throws an exception when 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // toString is called on the argument given to isSearchProviderInstalled. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_provider_test_url_ = test_server()->GetURL( 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "files/is_search_provider_installed_with_exception.html"); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FinishIsSearchProviderInstalledTest(StartIsSearchProviderInstalledTest( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), "www.google.com", "")); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 151