summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/resources/translate.js79
-rw-r--r--chrome/browser/translate/translate_browsertest.cc4
-rw-r--r--chrome/browser/translate/translate_script.cc26
-rw-r--r--chrome/test/data/translate/pseudo_main.js5
4 files changed, 58 insertions, 56 deletions
diff --git a/chrome/browser/resources/translate.js b/chrome/browser/resources/translate.js
index 66584067..eba4d80 100644
--- a/chrome/browser/resources/translate.js
+++ b/chrome/browser/resources/translate.js
@@ -78,55 +78,6 @@ cr.googleTranslate = (function() {
*/
var endTime = 0.0;
- // Create another call point for appendChild.
- var head = document.head;
- head._appendChild = head.appendChild;
-
- // TODO(toyoshim): This is temporary solution and will be removed once server
- // side fixed to use https always. See also, http://crbug.com/164584 .
- function forceToHttps(url) {
- if (url.indexOf('http:') == 0)
- return url.replace('http', 'https');
-
- return url;
- }
-
- /**
- * Inserts CSS element into the main world.
- * @param {Object} child Link element for CSS.
- */
- function insertCSS(child) {
- child.href = forceToHttps(child.href);
- head._appendChild(child);
- }
-
- /**
- * Inserts JavaScript into the isolated world.
- * @param {string} src JavaScript URL.
- */
- function insertJS(src) {
- var xhr = new XMLHttpRequest();
- xhr.open('GET', forceToHttps(src), true);
- xhr.onreadystatechange = function() {
- if (this.readyState != this.DONE || this.status != 200)
- return;
- eval(this.responseText);
- }
- xhr.send();
- }
-
- /**
- * Alternate implementation of appendChild. In the isolated world, appendChild
- * for the first head element is replaced with this function in order to make
- * CSS link tag and script tag injection work fine like the main world.
- */
- head.appendChild = function(child) {
- if (child.type == 'text/css')
- insertCSS(child);
- else
- insertJS(child.src);
- };
-
function checkLibReady() {
if (lib.isAvailable()) {
readyTime = performance.now();
@@ -276,6 +227,36 @@ cr.googleTranslate = (function() {
// The TranslateService is not available immediately as it needs to start
// Flash. Let's wait until it is ready.
checkLibReady();
+ },
+
+ /**
+ * Entry point called by the Translate Element when it want to load an
+ * external CSS resource into the page.
+ * @param {string} url URL of an external CSS resource to load.
+ */
+ onLoadCSS: function(url) {
+ var element = document.createElement('link');
+ element.type = 'text/css';
+ element.rel = 'stylesheet';
+ element.charset = 'UTF-8';
+ element.href = url;
+ document.head.appendChild(element);
+ },
+
+ /**
+ * Entry point called by the Translate Element when it want to load and run
+ * an external JavaScript on the page.
+ * @param {string} url URL of an external JavaScript to load.
+ */
+ onLoadJavascript: function(url) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, true);
+ xhr.onreadystatechange = function() {
+ if (this.readyState != this.DONE || this.status != 200)
+ return;
+ eval(this.responseText);
+ }
+ xhr.send();
}
};
})();
diff --git a/chrome/browser/translate/translate_browsertest.cc b/chrome/browser/translate/translate_browsertest.cc
index 35581cd..61b13e6 100644
--- a/chrome/browser/translate/translate_browsertest.cc
+++ b/chrome/browser/translate/translate_browsertest.cc
@@ -162,9 +162,7 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, TranslateInIsolatedWorld) {
element_js +=
"google = { 'translate' : { 'TranslateService' : function() { return {\n"
" isAvailable: function() {\n"
- " var script = document.createElement('script');\n"
- " script.src = main_script_url;\n"
- " document.getElementsByTagName('head')[0].appendChild(script);\n"
+ " cr.googleTranslate.onLoadJavascript(main_script_url);\n"
" return true;\n"
" },\n"
" translatePage: function(sl, tl, cb) {\n"
diff --git a/chrome/browser/translate/translate_script.cc b/chrome/browser/translate/translate_script.cc
index d2af738..8e638b4 100644
--- a/chrome/browser/translate/translate_script.cc
+++ b/chrome/browser/translate/translate_script.cc
@@ -33,6 +33,20 @@ const char kCallbackQueryName[] = "cb";
const char kCallbackQueryValue[] =
"cr.googleTranslate.onTranslateElementLoad";
+// 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()
@@ -76,6 +90,18 @@ void TranslateScript::Request(const Callback& callback) {
translate_script_url,
kCallbackQueryName,
kCallbackQueryValue);
+ translate_script_url = net::AppendQueryParameter(
+ translate_script_url,
+ kAlwaysUseSslQueryName,
+ kAlwaysUseSslQueryValue);
+ translate_script_url = net::AppendQueryParameter(
+ translate_script_url,
+ kCssLoaderCallbackQueryName,
+ kCssLoaderCallbackQueryValue);
+ translate_script_url = net::AppendQueryParameter(
+ translate_script_url,
+ kJavascriptLoaderCallbackQueryName,
+ kJavascriptLoaderCallbackQueryValue);
translate_script_url =
TranslateURLUtil::AddHostLocaleToUrl(translate_script_url);
diff --git a/chrome/test/data/translate/pseudo_main.js b/chrome/test/data/translate/pseudo_main.js
index 7da6442..cab4309 100644
--- a/chrome/test/data/translate/pseudo_main.js
+++ b/chrome/test/data/translate/pseudo_main.js
@@ -15,7 +15,4 @@ if (typeof world != 'undefined') {
}
div_log('The first script pseudo_main.js is loaded');
div_log('Loading the second script pseudo_element_main.js ...');
-var head = document.getElementsByTagName('head')[0];
-var script = document.createElement('script');
-script.src = element_main_script_url;
-head.appendChild(script);
+cr.googleTranslate.onLoadJavascript(element_main_script_url);