15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/browser/translate_script.h" 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/bind.h" 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/command_line.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/strings/stringprintf.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/browser/translate_download_manager.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/common/translate_switches.h" 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/base/load_flags.h" 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/base/url_util.h" 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/http/http_request_headers.h" 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "url/gurl.h" 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace translate { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class TranslateScriptTest : public testing::Test { 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TranslateScriptTest() : testing::Test() {} 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) protected: 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void SetUp() { 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) script_.reset(new TranslateScript); 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(script_.get()); 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TranslateDownloadManager::GetInstance()->set_application_locale("en"); 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void TearDown() { 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) script_.reset(); 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void Request() { 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) script_->Request( 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::Bind(&TranslateScriptTest::OnComplete, base::Unretained(this))); 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::TestURLFetcher* GetTestURLFetcher() { 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return url_fetcher_factory_.GetFetcherByID(TranslateScript::kFetcherId); 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void OnComplete(bool success, const std::string& script) { 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<TranslateScript> script_; 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::TestURLFetcherFactory url_fetcher_factory_; 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TranslateScriptTest); 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(TranslateScriptTest, CheckScriptParameters) { 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Request(); 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::TestURLFetcher* fetcher = GetTestURLFetcher(); 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(fetcher); 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL expected_url(TranslateScript::kScriptURL); 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL url = fetcher->GetOriginalURL(); 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(url.is_valid()); 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(expected_url.GetOrigin().spec(), url.GetOrigin().spec()); 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(expected_url.path(), url.path()); 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int load_flags = fetcher->GetLoadFlags(); 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(net::LOAD_DO_NOT_SEND_COOKIES, 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) load_flags & net::LOAD_DO_NOT_SEND_COOKIES); 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(net::LOAD_DO_NOT_SAVE_COOKIES, 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) load_flags & net::LOAD_DO_NOT_SAVE_COOKIES); 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string expected_extra_headers = 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::StringPrintf("%s\r\n\r\n", TranslateScript::kRequestHeader); 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::HttpRequestHeaders extra_headers; 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) fetcher->GetExtraRequestHeaders(&extra_headers); 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(expected_extra_headers, extra_headers.ToString()); 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string always_use_ssl; 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::GetValueForKeyInQuery( 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) url, TranslateScript::kAlwaysUseSslQueryName, &always_use_ssl); 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(std::string(TranslateScript::kAlwaysUseSslQueryValue), 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) always_use_ssl); 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string callback; 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::GetValueForKeyInQuery( 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) url, TranslateScript::kCallbackQueryName, &callback); 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(std::string(TranslateScript::kCallbackQueryValue), callback); 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(OS_IOS) 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // iOS does not have specific loaders for the isolated world. 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string css_loader_callback; 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::GetValueForKeyInQuery( 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) url, TranslateScript::kCssLoaderCallbackQueryName, &css_loader_callback); 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(std::string(TranslateScript::kCssLoaderCallbackQueryValue), 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) css_loader_callback); 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string javascript_loader_callback; 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::GetValueForKeyInQuery( 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) url, 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TranslateScript::kJavascriptLoaderCallbackQueryName, 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) &javascript_loader_callback); 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(std::string(TranslateScript::kJavascriptLoaderCallbackQueryValue), 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) javascript_loader_callback); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // !defined(OS_IOS) 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(TranslateScriptTest, CheckScriptURL) { 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string script_url("http://www.tamurayukari.com/mero-n.js"); 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) command_line->AppendSwitchASCII(translate::switches::kTranslateScriptURL, 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) script_url); 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Request(); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::TestURLFetcher* fetcher = GetTestURLFetcher(); 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(fetcher); 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL expected_url(script_url); 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL url = fetcher->GetOriginalURL(); 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(url.is_valid()); 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(expected_url.GetOrigin().spec(), url.GetOrigin().spec()); 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(expected_url.path(), url.path()); 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace translate 125