OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSERTEST_H_ | |
6 #define CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSERTEST_H_ | |
7 | |
8 #include "base/string_util.h" | |
9 #include "base/utf_string_conversions.h" | |
10 #include "chrome/browser/infobars/infobar_service.h" | |
11 #include "chrome/browser/translate/translate_infobar_delegate.h" | |
12 #include "chrome/browser/ui/browser.h" | |
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" | |
14 #include "chrome/common/chrome_notification_types.h" | |
15 #include "chrome/common/chrome_switches.h" | |
16 #include "chrome/test/base/in_process_browser_test.h" | |
17 #include "chrome/test/base/ui_test_utils.h" | |
18 #include "content/public/browser/notification_service.h" | |
19 #include "content/public/test/browser_test_utils.h" | |
20 #include "net/http/http_status_code.h" | |
21 #include "net/test/test_server.h" | |
22 #include "net/url_request/test_url_fetcher_factory.h" | |
23 #include "net/url_request/url_fetcher_delegate.h" | |
24 | |
25 namespace { | |
26 | |
27 const char kTranslateRoot[] = "chrome/test/data/translate"; | |
28 const char kNonSecurePrefix[] = "files/translate/"; | |
29 const char kSecurePrefix[] = "files/"; | |
30 const char kTargetPath[] = "fr_test.html"; | |
31 const char kMainScriptPath[] = "pseudo_main.js"; | |
32 const char kElementMainScriptPath[] = "pseudo_element_main.js"; | |
33 | |
34 }; // namespace | |
35 | |
36 class TranslateBrowserTest : public InProcessBrowserTest { | |
37 public: | |
38 TranslateBrowserTest() | |
39 : https_server_(net::TestServer::TYPE_HTTPS, | |
40 SSLOptions(SSLOptions::CERT_OK), | |
41 base::FilePath(kTranslateRoot)) {} | |
42 | |
43 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | |
44 ASSERT_TRUE(https_server_.Start()); | |
45 } | |
46 | |
47 protected: | |
48 GURL GetNonSecureURL(const std::string& path) const { | |
49 std::string prefix(kNonSecurePrefix); | |
50 return test_server()->GetURL(prefix + path); | |
51 } | |
52 | |
53 GURL GetSecureURL(const std::string& path) const { | |
54 std::string prefix(kSecurePrefix); | |
55 return https_server_.GetURL(prefix + path); | |
56 } | |
57 | |
58 private: | |
59 net::TestServer https_server_; | |
60 | |
61 typedef net::TestServer::SSLOptions SSLOptions; | |
62 | |
63 DISALLOW_COPY_AND_ASSIGN(TranslateBrowserTest); | |
64 }; | |
65 | |
66 IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, Translate) { | |
67 ASSERT_TRUE(test_server()->Start()); | |
68 | |
69 content::WebContents* web_contents = | |
70 browser()->tab_strip_model()->GetActiveWebContents(); | |
71 ASSERT_TRUE(web_contents); | |
72 | |
73 net::TestURLFetcherFactory factory; | |
74 | |
75 // Setup infobar observer. | |
76 InfoBarService* infobar_service = | |
77 InfoBarService::FromWebContents(web_contents); | |
78 ASSERT_TRUE(infobar_service); | |
79 ASSERT_EQ(0U, infobar_service->infobar_count()); | |
Takashi Toyoshima
2013/04/25 14:44:07
Wow. method names are changed.
| |
80 content::WindowedNotificationObserver infobar( | |
81 chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, | |
82 content::NotificationService::AllSources()); | |
83 | |
84 // Setup page title observer. | |
85 content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); | |
86 watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); | |
87 | |
88 // Visit non-secure page which is going to be translated. | |
89 ui_test_utils::NavigateToURL(browser(), GetNonSecureURL(kTargetPath)); | |
90 | |
91 // Wait for Chrome Translate infobar. | |
92 infobar.Wait(); | |
93 | |
94 // Perform Chrome Translate. | |
95 InfoBarDelegate* delegate = infobar_service->infobar_at(0); | |
96 ASSERT_TRUE(delegate); | |
97 TranslateInfoBarDelegate* translate = delegate->AsTranslateInfoBarDelegate(); | |
98 ASSERT_TRUE(translate); | |
99 translate->Translate(); | |
100 | |
101 // Hook URLFetcher for element.js. | |
102 GURL script1_url = GetSecureURL(kMainScriptPath); | |
103 GURL script2_url = GetSecureURL(kElementMainScriptPath); | |
104 std::string element_js = "main_script_url = '" + script1_url.spec() + "';\n"; | |
105 element_js += "element_main_script_url = '" + script2_url.spec() + "';\n"; | |
106 element_js += | |
107 "google = { 'translate' : { 'TranslateService' : function() { return {\n" | |
108 " isAvailable: function() {\n" | |
109 " var script = document.createElement('script');\n" | |
110 " script.src = main_script_url;\n" | |
111 " document.getElementsByTagName('head')[0].appendChild(script);\n" | |
112 " return true;\n" | |
113 " },\n" | |
114 " translatePage: function(sl, tl, cb) {\n" | |
115 " cb(1, true);\n" | |
116 " }\n" | |
117 "} } } };\n" | |
118 "cr.googleTranslate.onTranslateElementLoad();\n"; | |
119 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); | |
120 ASSERT_TRUE(fetcher); | |
121 net::URLRequestStatus status; | |
122 status.set_status(net::URLRequestStatus::SUCCESS); | |
123 fetcher->set_status(status); | |
124 fetcher->set_url(fetcher->GetOriginalURL()); | |
125 fetcher->set_response_code(net::HTTP_OK); | |
126 fetcher->SetResponseString(element_js); | |
127 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
128 | |
129 // Wait for the page title is changed after the test finished. | |
130 const string16 result = watcher.WaitAndGetTitle(); | |
131 EXPECT_TRUE(EqualsASCII(result, "PASS")); | |
132 } | |
133 | |
134 #endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSERTEST_H_ | |
OLD | NEW |