This source file includes following definitions.
- infobar_service_
- SetUpOnMainThread
- SetUpCommandLine
- GetNonSecureURL
- GetSecureURL
- GetExistingTranslateInfoBarDelegate
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/infobars/infobar.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/translate/translate_infobar_delegate.h"
#include "chrome/browser/translate/translate_manager.h"
#include "chrome/browser/translate/translate_service.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/test_switches.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/translate/core/browser/translate_script.h"
#include "components/translate/core/common/translate_switches.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/embedded_test_server/embedded_test_server.h"
#include "net/test/spawned_test_server/spawned_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[] = "/translate/";
const char kSecurePrefix[] = "files/";
const char kFrenchTestPath[] = "fr_test.html";
const char kRefreshMetaTagTestPath[] = "refresh_meta_tag.html";
const char kRefreshMetaTagCaseInsensitiveTestPath[] =
"refresh_meta_tag_casei.html";
const char kRefreshMetaTagAtOnloadTestPath[] =
"refresh_meta_tag_at_onload.html";
const char kUpdateLocationTestPath[] = "update_location.html";
const char kUpdateLocationAtOnloadTestPath[] = "update_location_at_onload.html";
const char kMainScriptPath[] = "pseudo_main.js";
const char kElementMainScriptPath[] = "pseudo_element_main.js";
};
class TranslateBrowserTest : public InProcessBrowserTest {
public:
TranslateBrowserTest()
: https_server_(net::SpawnedTestServer::TYPE_HTTPS,
SSLOptions(SSLOptions::CERT_OK),
base::FilePath(kTranslateRoot)),
infobar_service_(NULL) {}
virtual void SetUpOnMainThread() OVERRIDE {
TranslateService::SetUseInfobar(true);
}
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
ASSERT_TRUE(https_server_.Start());
GURL base_url = GetSecureURL("");
command_line->AppendSwitchASCII(
translate::switches::kTranslateSecurityOrigin,
base_url.GetOrigin().spec());
}
protected:
GURL GetNonSecureURL(const std::string& path) const {
std::string prefix(kNonSecurePrefix);
return embedded_test_server()->GetURL(prefix + path);
}
GURL GetSecureURL(const std::string& path) const {
std::string prefix(kSecurePrefix);
return https_server_.GetURL(prefix + path);
}
TranslateInfoBarDelegate* GetExistingTranslateInfoBarDelegate() {
if (!infobar_service_) {
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
if (web_contents)
infobar_service_ = InfoBarService::FromWebContents(web_contents);
}
if (!infobar_service_) {
ADD_FAILURE() << "infobar service is not available";
return NULL;
}
TranslateInfoBarDelegate* delegate = NULL;
InfoBarManager* infobar_manager = infobar_service_->infobar_manager();
for (size_t i = 0; i < infobar_manager->infobar_count(); ++i) {
ConfirmInfoBarDelegate* confirm = infobar_manager->infobar_at(i)
->delegate()->AsConfirmInfoBarDelegate();
if (confirm)
continue;
TranslateInfoBarDelegate* translate = infobar_manager->infobar_at(i)
->delegate()->AsTranslateInfoBarDelegate();
if (translate) {
EXPECT_FALSE(delegate) << "multiple infobars are shown unexpectedly";
delegate = translate;
continue;
}
EXPECT_TRUE(delegate);
}
return delegate;
}
private:
net::SpawnedTestServer https_server_;
InfoBarService* infobar_service_;
typedef net::SpawnedTestServer::SSLOptions SSLOptions;
DISALLOW_COPY_AND_ASSIGN(TranslateBrowserTest);
};
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, TranslateInIsolatedWorld) {
#if defined(OS_WIN) && defined(USE_ASH)
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
net::TestURLFetcherFactory factory;
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
content::WindowedNotificationObserver infobar(
chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
content::NotificationService::AllSources());
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ASSERT_TRUE(web_contents);
content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS"));
watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL"));
ui_test_utils::NavigateToURL(browser(), GetNonSecureURL(kFrenchTestPath));
infobar.Wait();
translate = GetExistingTranslateInfoBarDelegate();
ASSERT_TRUE(translate);
translate->Translate();
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"
" cr.googleTranslate.onLoadJavascript(main_script_url);\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(TranslateScript::kFetcherId);
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);
const base::string16 result = watcher.WaitAndGetTitle();
EXPECT_EQ("PASS", base::UTF16ToASCII(result));
}
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTag) {
#if defined(OS_WIN) && defined(USE_ASH)
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ASSERT_TRUE(web_contents);
content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS"));
watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL"));
ui_test_utils::NavigateToURL(
browser(),
GetNonSecureURL(kRefreshMetaTagTestPath));
const base::string16 result = watcher.WaitAndGetTitle();
EXPECT_EQ("PASS", base::UTF16ToASCII(result));
translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
}
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest,
IgnoreRefreshMetaTagInCaseInsensitive) {
#if defined(OS_WIN) && defined(USE_ASH)
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ASSERT_TRUE(web_contents);
content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS"));
watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL"));
ui_test_utils::NavigateToURL(
browser(),
GetNonSecureURL(kRefreshMetaTagCaseInsensitiveTestPath));
const base::string16 result = watcher.WaitAndGetTitle();
EXPECT_EQ("PASS", base::UTF16ToASCII(result));
translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
}
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTagAtOnload) {
#if defined(OS_WIN) && defined(USE_ASH)
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ASSERT_TRUE(web_contents);
content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS"));
watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL"));
ui_test_utils::NavigateToURL(
browser(),
GetNonSecureURL(kRefreshMetaTagAtOnloadTestPath));
const base::string16 result = watcher.WaitAndGetTitle();
EXPECT_EQ("PASS", base::UTF16ToASCII(result));
translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
}
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocation) {
#if defined(OS_WIN) && defined(USE_ASH)
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ASSERT_TRUE(web_contents);
content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS"));
watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL"));
ui_test_utils::NavigateToURL(
browser(),
GetNonSecureURL(kUpdateLocationTestPath));
const base::string16 result = watcher.WaitAndGetTitle();
EXPECT_EQ("PASS", base::UTF16ToASCII(result));
translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
}
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocationAtOnload) {
#if defined(OS_WIN) && defined(USE_ASH)
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
return;
#endif
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
ASSERT_TRUE(web_contents);
content::TitleWatcher watcher(web_contents, base::ASCIIToUTF16("PASS"));
watcher.AlsoWaitForTitle(base::ASCIIToUTF16("FAIL"));
ui_test_utils::NavigateToURL(
browser(),
GetNonSecureURL(kUpdateLocationAtOnloadTestPath));
const base::string16 result = watcher.WaitAndGetTitle();
EXPECT_EQ("PASS", base::UTF16ToASCII(result));
translate = GetExistingTranslateInfoBarDelegate();
EXPECT_FALSE(translate);
}