diff options
-rw-r--r-- | chrome/browser/resources/translate.js | 16 | ||||
-rw-r--r-- | chrome/browser/translate/translate_script.cc | 43 | ||||
-rw-r--r-- | chrome/browser/translate/translate_script.h | 26 | ||||
-rw-r--r-- | chrome/browser/translate/translate_script_unittest.cc | 115 | ||||
-rw-r--r-- | chrome/chrome_tests_unit.gypi | 1 | ||||
-rw-r--r-- | chrome/common/translate/translate_util.cc | 15 | ||||
-rw-r--r-- | chrome/common/translate/translate_util.h | 10 | ||||
-rw-r--r-- | chrome/common/translate/translate_util_unittest.cc | 15 | ||||
-rw-r--r-- | chrome/renderer/translate/translate_helper.cc | 15 |
9 files changed, 36 insertions, 220 deletions
diff --git a/chrome/browser/resources/translate.js b/chrome/browser/resources/translate.js index 90e5a54..06a4637 100644 --- a/chrome/browser/resources/translate.js +++ b/chrome/browser/resources/translate.js @@ -194,14 +194,7 @@ cr.googleTranslate = (function() { if (!libReady) return false; startTime = performance.now(); - try { - lib.translatePage(originalLang, targetLang, onTranslateProgress); - } catch (err) { - console.error('Translate: ' + err); - // TODO(toyoshim): Check if it shows an error notification. - error = true; - return false; - } + lib.translatePage(originalLang, targetLang, onTranslateProgress); return true; }, @@ -256,13 +249,8 @@ cr.googleTranslate = (function() { * @param {string} url URL of an external JavaScript to load. */ onLoadJavascript: function(url) { - // securityOrigin is predefined by translate_script.cc. - if (url.indexOf(securityOrigin) != 0) { - // TODO(toyoshim): Handle this error to show an error notification. - console.error('Translate: ' + url + ' is not allowed to load.'); - error = true; + if (url.indexOf('https://') != 0) return; - } var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function() { diff --git a/chrome/browser/translate/translate_script.cc b/chrome/browser/translate/translate_script.cc index 2f1d681..8e638b4 100644 --- a/chrome/browser/translate/translate_script.cc +++ b/chrome/browser/translate/translate_script.cc @@ -14,7 +14,6 @@ #include "chrome/browser/translate/translate_url_fetcher.h" #include "chrome/browser/translate/translate_url_util.h" #include "chrome/common/chrome_switches.h" -#include "chrome/common/translate/translate_util.h" #include "google_apis/google_api_keys.h" #include "grit/browser_resources.h" #include "net/base/escape.h" @@ -25,24 +24,31 @@ namespace { const int kExpirationDelayDays = 1; -} // namespace - -const char TranslateScript::kScriptURL[] = +const char kScriptURL[] = "https://translate.google.com/translate_a/element.js"; -const char TranslateScript::kRequestHeader[] = - "Google-Translate-Element-Mode: library"; -const char TranslateScript::kAlwaysUseSslQueryName[] = "aus"; -const char TranslateScript::kAlwaysUseSslQueryValue[] = "true"; -const char TranslateScript::kCallbackQueryName[] = "cb"; -const char TranslateScript::kCallbackQueryValue[] = +const char kRequestHeader[] = "Google-Translate-Element-Mode: library"; + +// Used in kTranslateScriptURL to specify a callback function name. +const char kCallbackQueryName[] = "cb"; +const char kCallbackQueryValue[] = "cr.googleTranslate.onTranslateElementLoad"; -const char TranslateScript::kCssLoaderCallbackQueryName[] = "clc"; -const char TranslateScript::kCssLoaderCallbackQueryValue[] = - "cr.googleTranslate.onLoadCSS"; -const char TranslateScript::kJavascriptLoaderCallbackQueryName[] = "jlc"; -const char TranslateScript::kJavascriptLoaderCallbackQueryValue[] = + +// Used in kTranslateScriptURL to specify using always ssl to load resources. +const char kAlwaysUseSslQueryName[] = "aus"; +const char kAlwaysUseSslQueryValue[] = "true"; + +// Used in kTranslateScriptURL to specify a CSS loader callback function name. +const char kCssLoaderCallbackQueryName[] = "clc"; +const char kCssLoaderCallbackQueryValue[] = "cr.googleTranslate.onLoadCSS"; + +// Used in kTranslateScriptURL to specify a JavaScript loader callback function +// name. +const char kJavascriptLoaderCallbackQueryName[] = "jlc"; +const char kJavascriptLoaderCallbackQueryValue[] = "cr.googleTranslate.onLoadJavascript"; +} // namespace + TranslateScript::TranslateScript() : weak_method_factory_(this), expiration_delay_(base::TimeDelta::FromDays(kExpirationDelayDays)) { @@ -119,15 +125,8 @@ void TranslateScript::OnScriptFetchComplete( if (success) { DCHECK(data_.empty()); - // Insert variable definitions on API Key and security origin. data_ = base::StringPrintf("var translateApiKey = '%s';\n", google_apis::GetAPIKey().c_str()); - - GURL security_origin = TranslateUtil::GetTranslateSecurityOrigin(); - base::StringAppendF( - &data_, "var securityOrigin = '%s';", security_origin.spec().c_str()); - - // Append embedded translate.js and a remote element library. base::StringPiece str = ResourceBundle::GetSharedInstance(). GetRawDataResource(IDR_TRANSLATE_JS); str.AppendToString(&data_); diff --git a/chrome/browser/translate/translate_script.h b/chrome/browser/translate/translate_script.h index ebc07d5..e303243 100644 --- a/chrome/browser/translate/translate_script.h +++ b/chrome/browser/translate/translate_script.h @@ -8,12 +8,10 @@ #include <string> #include "base/callback.h" -#include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" -class TranslateScriptTest; class TranslateURLFetcher; class TranslateScript { @@ -46,30 +44,6 @@ class TranslateScript { bool HasPendingRequest() const { return fetcher_.get() != NULL; } private: - friend class TranslateScriptTest; - FRIEND_TEST_ALL_PREFIXES(TranslateScriptTest, CheckScriptParameters); - FRIEND_TEST_ALL_PREFIXES(TranslateScriptTest, CheckScriptURL); - - static const char kScriptURL[]; - static const char kRequestHeader[]; - - // Used in kTranslateScriptURL to specify using always ssl to load resources. - static const char kAlwaysUseSslQueryName[]; - static const char kAlwaysUseSslQueryValue[]; - - // Used in kTranslateScriptURL to specify a callback function name. - static const char kCallbackQueryName[]; - static const char kCallbackQueryValue[]; - - // Used in kTranslateScriptURL to specify a CSS loader callback function name. - static const char kCssLoaderCallbackQueryName[]; - static const char kCssLoaderCallbackQueryValue[]; - - // Used in kTranslateScriptURL to specify a JavaScript loader callback - // function name. - static const char kJavascriptLoaderCallbackQueryName[]; - static const char kJavascriptLoaderCallbackQueryValue[]; - // The callback when the script is fetched or a server error occured. void OnScriptFetchComplete(int id, bool success, const std::string& data); diff --git a/chrome/browser/translate/translate_script_unittest.cc b/chrome/browser/translate/translate_script_unittest.cc deleted file mode 100644 index 991f9de..0000000 --- a/chrome/browser/translate/translate_script_unittest.cc +++ /dev/null @@ -1,115 +0,0 @@ -// 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. - -#include "chrome/browser/translate/translate_script.h" - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/strings/stringprintf.h" -#include "chrome/common/chrome_switches.h" -#include "net/base/load_flags.h" -#include "net/base/url_util.h" -#include "net/http/http_request_headers.h" -#include "net/url_request/test_url_fetcher_factory.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -class TranslateScriptTest : public testing::Test { - public: - TranslateScriptTest() : testing::Test() {} - - protected: - virtual void SetUp() { - script_.reset(new TranslateScript); - DCHECK(script_.get()); - } - - virtual void TearDown() { - script_.reset(); - } - - void Request() { - script_->Request( - base::Bind(&TranslateScriptTest::OnComplete, base::Unretained(this))); - } - - net::TestURLFetcher* GetTestURLFetcher() { - return url_fetcher_factory_.GetFetcherByID(TranslateScript::kFetcherId); - } - - private: - void OnComplete(bool success, const std::string& script) { - } - - scoped_ptr<TranslateScript> script_; - net::TestURLFetcherFactory url_fetcher_factory_; - - DISALLOW_COPY_AND_ASSIGN(TranslateScriptTest); -}; - -TEST_F(TranslateScriptTest, CheckScriptParameters) { - Request(); - net::TestURLFetcher* fetcher = GetTestURLFetcher(); - ASSERT_TRUE(fetcher); - - GURL expected_url(TranslateScript::kScriptURL); - GURL url = fetcher->GetOriginalURL(); - EXPECT_TRUE(url.is_valid()); - EXPECT_EQ(expected_url.GetOrigin().spec(), url.GetOrigin().spec()); - EXPECT_EQ(expected_url.path(), url.path()); - - int load_flags = fetcher->GetLoadFlags(); - EXPECT_EQ(net::LOAD_DO_NOT_SEND_COOKIES, - load_flags & net::LOAD_DO_NOT_SEND_COOKIES); - EXPECT_EQ(net::LOAD_DO_NOT_SAVE_COOKIES, - load_flags & net::LOAD_DO_NOT_SAVE_COOKIES); - - std::string expected_extra_headers = - base::StringPrintf("%s\r\n\r\n", TranslateScript::kRequestHeader); - net::HttpRequestHeaders extra_headers; - fetcher->GetExtraRequestHeaders(&extra_headers); - EXPECT_EQ(expected_extra_headers, extra_headers.ToString()); - - std::string always_use_ssl; - net::GetValueForKeyInQuery( - url, TranslateScript::kAlwaysUseSslQueryName, &always_use_ssl); - EXPECT_EQ(std::string(TranslateScript::kAlwaysUseSslQueryValue), - always_use_ssl); - - std::string callback; - net::GetValueForKeyInQuery( - url, TranslateScript::kCallbackQueryName, &callback); - EXPECT_EQ(std::string(TranslateScript::kCallbackQueryValue), callback); - - std::string css_loader_callback; - net::GetValueForKeyInQuery( - url, TranslateScript::kCssLoaderCallbackQueryName, &css_loader_callback); - EXPECT_EQ(std::string(TranslateScript::kCssLoaderCallbackQueryValue), - css_loader_callback); - - std::string javascript_loader_callback; - net::GetValueForKeyInQuery( - url, - TranslateScript::kJavascriptLoaderCallbackQueryName, - &javascript_loader_callback); - EXPECT_EQ(std::string(TranslateScript::kJavascriptLoaderCallbackQueryValue), - javascript_loader_callback); -} - -TEST_F(TranslateScriptTest, CheckScriptURL) { - const std::string script_url("http://www.tamurayukari.com/mero-n.js"); - CommandLine* command_line = CommandLine::ForCurrentProcess(); - command_line->AppendSwitchASCII(switches::kTranslateScriptURL, - script_url); - - Request(); - net::TestURLFetcher* fetcher = GetTestURLFetcher(); - ASSERT_TRUE(fetcher); - - GURL expected_url(script_url); - GURL url = fetcher->GetOriginalURL(); - EXPECT_TRUE(url.is_valid()); - EXPECT_EQ(expected_url.GetOrigin().spec(), url.GetOrigin().spec()); - EXPECT_EQ(expected_url.path(), url.path()); -} diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi index 075c1ea..0eb4569 100644 --- a/chrome/chrome_tests_unit.gypi +++ b/chrome/chrome_tests_unit.gypi @@ -1351,7 +1351,6 @@ 'browser/translate/translate_browser_metrics_unittest.cc', 'browser/translate/translate_manager_unittest.cc', 'browser/translate/translate_prefs_unittest.cc', - 'browser/translate/translate_script_unittest.cc', 'browser/ui/android/tab_model/tab_model_unittest.cc', 'browser/ui/ash/event_rewriter_unittest.cc', 'browser/ui/ash/ime_controller_chromeos_unittest.cc', diff --git a/chrome/common/translate/translate_util.cc b/chrome/common/translate/translate_util.cc index 4391870..994e7ea 100644 --- a/chrome/common/translate/translate_util.cc +++ b/chrome/common/translate/translate_util.cc @@ -5,9 +5,6 @@ #include "chrome/common/translate/translate_util.h" #include "base/basictypes.h" -#include "base/command_line.h" -#include "chrome/common/chrome_switches.h" -#include "url/gurl.h" namespace TranslateUtil { @@ -30,8 +27,6 @@ const LanguageCodeSynonym kLanguageCodeSynonyms[] = { {"tl", "fil"}, }; -const char kSecurityOrigin[] = "https://translate.googleapis.com/"; - void ToTranslateLanguageSynonym(std::string* language) { // Apply liner search here because number of items in the list is just four. for (size_t i = 0; i < arraysize(kLanguageCodeSynonyms); ++i) { @@ -52,14 +47,4 @@ void ToChromeLanguageSynonym(std::string* language) { } } -GURL GetTranslateSecurityOrigin() { - std::string security_origin(kSecurityOrigin); - CommandLine* command_line = CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(switches::kTranslateSecurityOrigin)) { - security_origin = - command_line->GetSwitchValueASCII(switches::kTranslateSecurityOrigin); - } - return GURL(security_origin); -} - } // namespace TranslateUtil diff --git a/chrome/common/translate/translate_util.h b/chrome/common/translate/translate_util.h index 60a84b8..be58a61 100644 --- a/chrome/common/translate/translate_util.h +++ b/chrome/common/translate/translate_util.h @@ -7,22 +7,14 @@ #include <string> -class GURL; - namespace TranslateUtil { -// Isolated world sets following security-origin by default. -extern const char kSecurityOrigin[]; - // Converts language code synonym to use at Translate server. void ToTranslateLanguageSynonym(std::string* language); // Converts language code synonym to use at Chrome internal. void ToChromeLanguageSynonym(std::string* language); -// Get Security origin with which Translate runs. -GURL GetTranslateSecurityOrigin(); - -} // namespace TranslateUtil +} // namapace TranslateUtil #endif // CHROME_COMMON_TRANSLATE_TRANSLATE_UTIL_H_ diff --git a/chrome/common/translate/translate_util_unittest.cc b/chrome/common/translate/translate_util_unittest.cc index 67f7192..be710bd 100644 --- a/chrome/common/translate/translate_util_unittest.cc +++ b/chrome/common/translate/translate_util_unittest.cc @@ -4,10 +4,7 @@ #include "chrome/common/translate/translate_util.h" -#include "base/command_line.h" -#include "chrome/common/chrome_switches.h" #include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" typedef testing::Test TranslateUtilTest; @@ -52,15 +49,3 @@ TEST_F(TranslateUtilTest, ToChromeLanguageSynonym) { TranslateUtil::ToChromeLanguageSynonym(&language); EXPECT_EQ("fil", language); } - -TEST_F(TranslateUtilTest, SecurityOrigin) { - GURL origin = TranslateUtil::GetTranslateSecurityOrigin(); - EXPECT_EQ(std::string(TranslateUtil::kSecurityOrigin), origin.spec()); - - const std::string running_origin("http://www.tamurayukari.com/"); - CommandLine* command_line = CommandLine::ForCurrentProcess(); - command_line->AppendSwitchASCII(switches::kTranslateSecurityOrigin, - running_origin); - GURL modified_origin = TranslateUtil::GetTranslateSecurityOrigin(); - EXPECT_EQ(running_origin, modified_origin.spec()); -} diff --git a/chrome/renderer/translate/translate_helper.cc b/chrome/renderer/translate/translate_helper.cc index ee73f02..d4c5415 100644 --- a/chrome/renderer/translate/translate_helper.cc +++ b/chrome/renderer/translate/translate_helper.cc @@ -5,6 +5,7 @@ #include "chrome/renderer/translate/translate_helper.h" #include "base/bind.h" +#include "base/command_line.h" #include "base/compiler_specific.h" #include "base/logging.h" #include "base/message_loop/message_loop.h" @@ -12,10 +13,10 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "chrome/common/chrome_constants.h" +#include "chrome/common/chrome_switches.h" #include "chrome/common/render_messages.h" #include "chrome/common/translate/language_detection_util.h" #include "chrome/common/translate/translate_common_metrics.h" -#include "chrome/common/translate/translate_util.h" #include "chrome/renderer/extensions/extension_groups.h" #include "chrome/renderer/isolated_world_ids.h" #include "content/public/renderer/render_view.h" @@ -61,6 +62,9 @@ const char kAutoDetectionLanguage[] = "auto"; // Isolated world sets following content-security-policy. const char kContentSecurityPolicy[] = "script-src 'self' 'unsafe-eval'"; +// Isolated world sets following security-origin by default. +const char kSecurityOrigin[] = "https://translate.googleapis.com"; + } // namespace //////////////////////////////////////////////////////////////////////////////// @@ -353,10 +357,15 @@ void TranslateHelper::OnTranslatePage(int page_id, chrome::ISOLATED_WORLD_ID_TRANSLATE, WebString::fromUTF8(kContentSecurityPolicy)); - GURL security_origin = TranslateUtil::GetTranslateSecurityOrigin(); + std::string security_origin(kSecurityOrigin); + CommandLine* command_line = CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(switches::kTranslateSecurityOrigin)) { + security_origin = + command_line->GetSwitchValueASCII(switches::kTranslateSecurityOrigin); + } frame->setIsolatedWorldSecurityOrigin( chrome::ISOLATED_WORLD_ID_TRANSLATE, - WebSecurityOrigin::create(security_origin)); + WebSecurityOrigin::create(GURL(security_origin))); } if (!IsTranslateLibAvailable()) { |