summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-21 22:08:05 +0000
committerjianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-21 22:08:05 +0000
commit1171442b83b8b2ca4a5c428ccb710ccffd3494dd (patch)
tree064af4366dff33a34031fdc56c2dd59f71d86f44
parent4aa884d3c4b23d8fad578cb051006844e4ca4e17 (diff)
downloadchromium_src-1171442b83b8b2ca4a5c428ccb710ccffd3494dd.zip
chromium_src-1171442b83b8b2ca4a5c428ccb710ccffd3494dd.tar.gz
chromium_src-1171442b83b8b2ca4a5c428ccb710ccffd3494dd.tar.bz2
Revert 218799 "Translate: add an origin check to the loader"
Spectulative revert to make chromium.webkit bots green. TranslationInfoBarTest.Instantiate has been crashing in the following bots: http://build.chromium.org/p/chromium.webkit/builders/Mac10.6%20Tests/builds/19779 > Translate: add an origin check to the loader > > This check isn't essential because third party scripts can not affect the > isolated world. > > Also, add some tests for recent changes around script parameters > for API key, secure connections, callbacks, and so on. > > BUG=268785 > > Review URL: https://chromiumcodereview.appspot.com/22865005 TBR=toyoshim@chromium.org Review URL: https://codereview.chromium.org/22875033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218842 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/resources/translate.js16
-rw-r--r--chrome/browser/translate/translate_script.cc43
-rw-r--r--chrome/browser/translate/translate_script.h26
-rw-r--r--chrome/browser/translate/translate_script_unittest.cc115
-rw-r--r--chrome/chrome_tests_unit.gypi1
-rw-r--r--chrome/common/translate/translate_util.cc15
-rw-r--r--chrome/common/translate/translate_util.h10
-rw-r--r--chrome/common/translate/translate_util_unittest.cc15
-rw-r--r--chrome/renderer/translate/translate_helper.cc15
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()) {