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