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