Test for 'interactive' readyState during app bootstrap

The 'loaded' readyState was apparently dropped from the standard,
and the closest equivalent before 'complete' would be 'interactive'.
This could help make apps start earlier, by not waiting for
external resources to finish loading ('complete' readyState).
Note that 'loaded' is still tested, for backwards compatibility,
just in case.

Bug: #9534
Bug-Link: https://github.com/gwtproject/gwt/issues/9534
Change-Id: I456d9184ab9753cc0787aa966fbaf26d66404a2e
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js b/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js
index a4954ef..8c51f39 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js
@@ -37,7 +37,7 @@
     __MAIN__
   };
 
-  if (/loaded|complete/.test($doc.readyState)) {
+  if (/loaded|interactive|complete/.test($doc.readyState)) {
     executeMain();
   } else {
     //defer app script insertion until the body is ready
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/stub.nocache.js b/dev/codeserver/java/com/google/gwt/dev/codeserver/stub.nocache.js
index 4f90b6b..ffad3a5 100755
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/stub.nocache.js
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/stub.nocache.js
@@ -54,7 +54,7 @@
     $head.insertBefore(devModeScript, $head.firstElementChild || $head.children[0]);
   };
 
-  if (/loaded|complete/.test($doc.readyState)) {
+  if (/loaded|interactive|complete/.test($doc.readyState)) {
     injectScriptTag();
   } else {
     //defer app script insertion until the body is ready
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js b/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js
index 33f3696..439342f 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/HostedModeTemplate.js
@@ -440,7 +440,7 @@
 
   // Fallback. If onBodyDone() gets fired twice, it's not a big deal.
   var onBodyDoneTimerId = setInterval(function() {
-    if (/loaded|complete/.test($doc.readyState)) {
+    if (/loaded|interactive|complete/.test($doc.readyState)) {
       maybeInjectFrame();
       onBodyDone();
     }
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoaded.js b/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoaded.js
index 2c3ce26..8b05eb8 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoaded.js
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoaded.js
@@ -8,5 +8,5 @@
     // in isBodyLoadedFf35Fix.js
     return (typeof $doc.body != "undefined" && $doc.body != null);
   }
-  return (/loaded|complete/.test($doc.readyState));
+  return (/loaded|interactive|complete/.test($doc.readyState));
 }
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoadedFF35Fix.js b/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoadedFF35Fix.js
index d87a282..6811da9 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoadedFF35Fix.js
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/isBodyLoadedFF35Fix.js
@@ -12,5 +12,5 @@
     // the body is loaded.
     return false;
   }
-  return (/loaded|complete/.test($doc.readyState));
+  return (/loaded|interactive|complete/.test($doc.readyState));
 }
\ No newline at end of file
diff --git a/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js b/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js
index 713ef8c..5be11ae 100644
--- a/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js
+++ b/dev/core/src/com/google/gwt/core/linker/IFrameTemplate.js
@@ -311,7 +311,7 @@
 
   // Fallback. If onBodyDone() gets fired twice, it's not a big deal.
   var onBodyDoneTimerId = setInterval(function() {
-    if (/loaded|complete/.test($doc.readyState)) {
+    if (/loaded|interactive|complete/.test($doc.readyState)) {
       maybeInjectFrame();
       onBodyDone();
     }
diff --git a/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js b/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js
index 53d168d..825801e 100644
--- a/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js
+++ b/dev/core/src/com/google/gwt/core/linker/SingleScriptTemplate.js
@@ -322,7 +322,7 @@
 
   // Fallback. If onBodyDone() gets fired twice, it's not a big deal.
   var onBodyDoneTimerId = setInterval(function() {
-    if (/loaded|complete/.test($doc.readyState)) {
+    if (/loaded|interactive|complete/.test($doc.readyState)) {
       onBodyDone();
     }
   }, 50);
diff --git a/dev/core/src/com/google/gwt/core/linker/XSTemplate.js b/dev/core/src/com/google/gwt/core/linker/XSTemplate.js
index 32ed4cd..cd005ba 100644
--- a/dev/core/src/com/google/gwt/core/linker/XSTemplate.js
+++ b/dev/core/src/com/google/gwt/core/linker/XSTemplate.js
@@ -240,7 +240,7 @@
 
   // Fallback. If onBodyDone() gets fired twice, it's not a big deal.
   var onBodyDoneTimerId = setInterval(function() {
-    if (/loaded|complete/.test($doc.readyState)) {
+    if (/loaded|interactive|complete/.test($doc.readyState)) {
       onBodyDone();
     }
   }, 50);