Index: chrome/browser/translate/translate_browsertest.cc |
diff --git a/chrome/browser/translate/translate_browsertest.cc b/chrome/browser/translate/translate_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..204fd0db1a988363289475d600ca9d2b83c4a905 |
--- /dev/null |
+++ b/chrome/browser/translate/translate_browsertest.cc |
@@ -0,0 +1,136 @@ |
+// Copyright 2013 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. |
+ |
+#ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSERTEST_H_ |
+#define CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSERTEST_H_ |
+ |
+#include "base/files/file_path.h" |
+#include "base/string_util.h" |
+#include "base/utf_string_conversions.h" |
+#include "chrome/browser/infobars/infobar_service.h" |
+#include "chrome/browser/translate/translate_infobar_delegate.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "chrome/common/chrome_notification_types.h" |
+#include "chrome/common/chrome_switches.h" |
+#include "chrome/test/base/in_process_browser_test.h" |
+#include "chrome/test/base/ui_test_utils.h" |
+#include "content/public/browser/notification_service.h" |
+#include "content/public/test/browser_test_utils.h" |
+#include "net/http/http_status_code.h" |
+#include "net/test/test_server.h" |
+#include "net/url_request/test_url_fetcher_factory.h" |
+#include "net/url_request/url_fetcher_delegate.h" |
+ |
+namespace { |
+ |
+const base::FilePath::CharType kTranslateRoot[] = |
+ FILE_PATH_LITERAL("chrome/test/data/translate"); |
+const char kNonSecurePrefix[] = "files/translate/"; |
+const char kSecurePrefix[] = "files/"; |
+const char kTargetPath[] = "fr_test.html"; |
+const char kMainScriptPath[] = "pseudo_main.js"; |
+const char kElementMainScriptPath[] = "pseudo_element_main.js"; |
+ |
+}; // namespace |
+ |
+class TranslateBrowserTest : public InProcessBrowserTest { |
+ public: |
+ TranslateBrowserTest() |
+ : https_server_(net::TestServer::TYPE_HTTPS, |
+ SSLOptions(SSLOptions::CERT_OK), |
+ base::FilePath(kTranslateRoot)) {} |
+ |
+ virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
+ ASSERT_TRUE(https_server_.Start()); |
+ } |
+ |
+ protected: |
+ GURL GetNonSecureURL(const std::string& path) const { |
+ std::string prefix(kNonSecurePrefix); |
+ return test_server()->GetURL(prefix + path); |
+ } |
+ |
+ GURL GetSecureURL(const std::string& path) const { |
+ std::string prefix(kSecurePrefix); |
+ return https_server_.GetURL(prefix + path); |
+ } |
+ |
+ private: |
+ net::TestServer https_server_; |
+ |
+ typedef net::TestServer::SSLOptions SSLOptions; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TranslateBrowserTest); |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, Translate) { |
+ ASSERT_TRUE(test_server()->Start()); |
+ |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ ASSERT_TRUE(web_contents); |
+ |
+ net::TestURLFetcherFactory factory; |
+ |
+ // Setup infobar observer. |
+ InfoBarService* infobar_service = |
+ InfoBarService::FromWebContents(web_contents); |
+ ASSERT_TRUE(infobar_service); |
+ ASSERT_EQ(0U, infobar_service->infobar_count()); |
+ content::WindowedNotificationObserver infobar( |
+ chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, |
+ content::NotificationService::AllSources()); |
+ |
+ // Setup page title observer. |
+ content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); |
+ watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
+ |
+ // Visit non-secure page which is going to be translated. |
+ ui_test_utils::NavigateToURL(browser(), GetNonSecureURL(kTargetPath)); |
+ |
+ // Wait for Chrome Translate infobar. |
+ infobar.Wait(); |
+ |
+ // Perform Chrome Translate. |
+ InfoBarDelegate* delegate = infobar_service->infobar_at(0); |
+ ASSERT_TRUE(delegate); |
+ TranslateInfoBarDelegate* translate = delegate->AsTranslateInfoBarDelegate(); |
+ ASSERT_TRUE(translate); |
+ translate->Translate(); |
+ |
+ // Hook URLFetcher for element.js. |
+ GURL script1_url = GetSecureURL(kMainScriptPath); |
+ GURL script2_url = GetSecureURL(kElementMainScriptPath); |
+ std::string element_js = "main_script_url = '" + script1_url.spec() + "';\n"; |
+ element_js += "element_main_script_url = '" + script2_url.spec() + "';\n"; |
+ element_js += |
+ "google = { 'translate' : { 'TranslateService' : function() { return {\n" |
+ " isAvailable: function() {\n" |
+ " var script = document.createElement('script');\n" |
+ " script.src = main_script_url;\n" |
+ " document.getElementsByTagName('head')[0].appendChild(script);\n" |
+ " return true;\n" |
+ " },\n" |
+ " translatePage: function(sl, tl, cb) {\n" |
+ " cb(1, true);\n" |
+ " }\n" |
+ "} } } };\n" |
+ "cr.googleTranslate.onTranslateElementLoad();\n"; |
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
+ ASSERT_TRUE(fetcher); |
+ net::URLRequestStatus status; |
+ status.set_status(net::URLRequestStatus::SUCCESS); |
+ fetcher->set_status(status); |
+ fetcher->set_url(fetcher->GetOriginalURL()); |
+ fetcher->set_response_code(net::HTTP_OK); |
+ fetcher->SetResponseString(element_js); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ |
+ // Wait for the page title is changed after the test finished. |
+ const string16 result = watcher.WaitAndGetTitle(); |
+ EXPECT_TRUE(EqualsASCII(result, "PASS")); |
+} |
+ |
+#endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSERTEST_H_ |