1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/translate/translate_service.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/test_switches.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/translate/core/browser/translate_infobar_delegate.h" 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "components/translate/core/browser/translate_manager.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/browser/translate_script.h" 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/common/translate_switches.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/http/http_status_code.h" 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const base::FilePath::CharType kTranslateRoot[] = 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FILE_PATH_LITERAL("chrome/test/data/translate"); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char kNonSecurePrefix[] = "/translate/"; 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kSecurePrefix[] = "files/"; 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kFrenchTestPath[] = "fr_test.html"; 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kRefreshMetaTagTestPath[] = "refresh_meta_tag.html"; 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kRefreshMetaTagCaseInsensitiveTestPath[] = 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "refresh_meta_tag_casei.html"; 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kRefreshMetaTagAtOnloadTestPath[] = 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "refresh_meta_tag_at_onload.html"; 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kUpdateLocationTestPath[] = "update_location.html"; 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const char kUpdateLocationAtOnloadTestPath[] = "update_location_at_onload.html"; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kMainScriptPath[] = "pseudo_main.js"; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kElementMainScriptPath[] = "pseudo_element_main.js"; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; // namespace 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TranslateBrowserTest : public InProcessBrowserTest { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TranslateBrowserTest() 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : https_server_(net::SpawnedTestServer::TYPE_HTTPS, 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SSLOptions(SSLOptions::CERT_OK), 543240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch base::FilePath(kTranslateRoot)), 553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch infobar_service_(NULL) {} 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(https_server_.Start()); 593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Setup alternate security origin for testing in order to allow XHR against 603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // local test server. Note that this flag shows a confirm infobar in tests. 613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch GURL base_url = GetSecureURL(""); 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) command_line->AppendSwitchASCII( 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) translate::switches::kTranslateSecurityOrigin, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base_url.GetOrigin().spec()); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL GetNonSecureURL(const std::string& path) const { 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string prefix(kNonSecurePrefix); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return embedded_test_server()->GetURL(prefix + path); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL GetSecureURL(const std::string& path) const { 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string prefix(kSecurePrefix); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return https_server_.GetURL(prefix + path); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* GetExistingTranslateInfoBarDelegate() { 793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (!infobar_service_) { 803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch content::WebContents* web_contents = 813240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 823240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (web_contents) 833240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch infobar_service_ = InfoBarService::FromWebContents(web_contents); 843240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 853240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (!infobar_service_) { 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ADD_FAILURE() << "infobar service is not available"; 873240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return NULL; 883240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 893240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* delegate = NULL; 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (size_t i = 0; i < infobar_service_->infobar_count(); ++i) { 923240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if the shown infobar is a confirm infobar coming from the 933240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // |kTranslateSecurityOrigin| flag specified in SetUpCommandLine(). 943240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // This infobar appears in all tests of TranslateBrowserTest and can be 953240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // ignored here. 96a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (infobar_service_->infobar_at(i)->delegate()-> 97a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AsConfirmInfoBarDelegate()) { 983240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch continue; 99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 1003240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* translate = 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) infobar_service_->infobar_at(i) 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->delegate() 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ->AsTranslateInfoBarDelegate(); 1053240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (translate) { 1063240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(delegate) << "multiple infobars are shown unexpectedly"; 1073240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch delegate = translate; 1083240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch continue; 1093240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1103240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 1113240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Other infobar should not be shown. 1123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_TRUE(delegate); 1133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1143240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return delegate; 1153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1163240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer https_server_; 1193240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch InfoBarService* infobar_service_; 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef net::SpawnedTestServer::SSLOptions SSLOptions; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TranslateBrowserTest); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1263240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochIN_PROC_BROWSER_TEST_F(TranslateBrowserTest, TranslateInIsolatedWorld) { 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 129558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 130558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 1313240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch net::TestURLFetcherFactory factory; 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* translate = 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetExistingTranslateInfoBarDelegate(); 1373240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup infobar observer. 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WindowedNotificationObserver infobar( 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup page title observer. 1453240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch content::WebContents* web_contents = 1463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch browser()->tab_strip_model()->GetActiveWebContents(); 1473240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch ASSERT_TRUE(web_contents); 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS")); 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Visit non-secure page which is going to be translated. 15290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GetNonSecureURL(kFrenchTestPath)); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Wait for Chrome Translate infobar. 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) infobar.Wait(); 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Perform Chrome Translate. 1583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch translate = GetExistingTranslateInfoBarDelegate(); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(translate); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) translate->Translate(); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Hook URLFetcher for element.js. 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL script1_url = GetSecureURL(kMainScriptPath); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL script2_url = GetSecureURL(kElementMainScriptPath); 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string element_js = "main_script_url = '" + script1_url.spec() + "';\n"; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) element_js += "element_main_script_url = '" + script2_url.spec() + "';\n"; 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) element_js += 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "google = { 'translate' : { 'TranslateService' : function() { return {\n" 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " isAvailable: function() {\n" 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) " cr.googleTranslate.onLoadJavascript(main_script_url);\n" 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " return true;\n" 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " },\n" 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " translatePage: function(sl, tl, cb) {\n" 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " cb(1, true);\n" 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " }\n" 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "} } } };\n" 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "cr.googleTranslate.onTranslateElementLoad();\n"; 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) net::TestURLFetcher* fetcher = 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) factory.GetFetcherByID(translate::TranslateScript::kFetcherId); 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(fetcher); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::URLRequestStatus status; 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status.set_status(net::URLRequestStatus::SUCCESS); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fetcher->set_status(status); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fetcher->set_url(fetcher->GetOriginalURL()); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fetcher->set_response_code(net::HTTP_OK); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fetcher->SetResponseString(element_js); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Wait for the page title is changed after the test finished. 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 result = watcher.WaitAndGetTitle(); 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ("PASS", base::UTF16ToASCII(result)); 19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 19390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTag) { 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 197558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 198558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* translate = 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetExistingTranslateInfoBarDelegate(); 2043240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 2053240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 2063240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Setup page title observer. 20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::WebContents* web_contents = 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(web_contents); 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS")); 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); 21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Visit a test page. 21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::NavigateToURL( 21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser(), 21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNonSecureURL(kRefreshMetaTagTestPath)); 21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 21890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for the page title is changed after the test finished. 219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 result = watcher.WaitAndGetTitle(); 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ("PASS", base::UTF16ToASCII(result)); 22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 2233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch translate = GetExistingTranslateInfoBarDelegate(); 2243240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) IgnoreRefreshMetaTagInCaseInsensitive) { 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 231558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 232558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 23490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2353240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* translate = 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetExistingTranslateInfoBarDelegate(); 2383240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 2393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 2403240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Setup page title observer. 24190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::WebContents* web_contents = 24290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(web_contents); 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS")); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); 24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 24790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Visit a test page. 24890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::NavigateToURL( 24990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser(), 25090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNonSecureURL(kRefreshMetaTagCaseInsensitiveTestPath)); 25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 25290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for the page title is changed after the test finished. 253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 result = watcher.WaitAndGetTitle(); 254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ("PASS", base::UTF16ToASCII(result)); 25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 2573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch translate = GetExistingTranslateInfoBarDelegate(); 2583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTagAtOnload) { 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 264558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 265558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 26790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2683240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* translate = 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetExistingTranslateInfoBarDelegate(); 2713240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 2723240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 2733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Setup page title observer. 27490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::WebContents* web_contents = 27590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 27690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(web_contents); 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS")); 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); 27990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 28090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Visit a test page. 28190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::NavigateToURL( 28290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser(), 28390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNonSecureURL(kRefreshMetaTagAtOnloadTestPath)); 28490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 28590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for the page title is changed after the test finished. 286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 result = watcher.WaitAndGetTitle(); 287a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ("PASS", base::UTF16ToASCII(result)); 28890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2893240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 2903240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch translate = GetExistingTranslateInfoBarDelegate(); 2913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 29290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 29390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocation) { 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 297558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 298558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 30090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* translate = 3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetExistingTranslateInfoBarDelegate(); 3043240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 3053240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 3063240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Setup page title observer. 30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::WebContents* web_contents = 30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(web_contents); 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS")); 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); 31290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 31390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Visit a test page. 31490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::NavigateToURL( 31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser(), 31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNonSecureURL(kUpdateLocationTestPath)); 31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 31890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for the page title is changed after the test finished. 319a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 result = watcher.WaitAndGetTitle(); 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ("PASS", base::UTF16ToASCII(result)); 32190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 3233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch translate = GetExistingTranslateInfoBarDelegate(); 3243240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 32590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 32690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 32790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocationAtOnload) { 328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(port): Test corresponding bubble translate UX: http://crbug.com/383235 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (TranslateService::IsTranslateBubbleEnabled()) 330558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 331558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::TranslateInfoBarDelegate* translate = 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetExistingTranslateInfoBarDelegate(); 3373240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 3383240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 3393240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Setup page title observer. 34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::WebContents* web_contents = 34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(web_contents); 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS")); 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL")); 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Visit a test page. 34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_test_utils::NavigateToURL( 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) browser(), 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNonSecureURL(kUpdateLocationAtOnloadTestPath)); 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Wait for the page title is changed after the test finished. 352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 result = watcher.WaitAndGetTitle(); 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ("PASS", base::UTF16ToASCII(result)); 35490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Check if there is no Translate infobar. 3563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch translate = GetExistingTranslateInfoBarDelegate(); 3573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch EXPECT_FALSE(translate); 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 359