Improve travis configuration
diff --git a/.travis.yml b/.travis.yml
index 0ceff2e..f680a49 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,19 +1,33 @@
 language: dart
 sudo: false
 dart:
-  - stable
   - dev
-  - 1.19.0
-  - 1.18.1
-  - 1.17.1
+  - stable
+  - 1.21.0
+  - 1.20.1
+  - 1.19.1
+with_content_shell: true
+env:
+  - TEST_PLATFORM=vm
+  - TEST_PLATFORM=content-shell
+  - TEST_PLATFORM=firefox
 cache:
   directories:
     - $HOME/.pub-cache
-with_content_shell: true
-addons:
-  firefox: "latest"
 before_script:
   - "export DISPLAY=:99.0"
   - "sh -e /etc/init.d/xvfb start"
   - 't=0; until (xdpyinfo -display :99 &> /dev/null || test $t -gt 10); do sleep 1; let t=$t+1; done'
 script: ./tool/travis.sh
+matrix:
+  allow_failures:
+    # Exclude SDKs before 1.22.0-dev.4 which are lacking fix
+    # https://github.com/dart-lang/sdk/commit/7c3c297a8ad907f12bf12b96a21777421067fd18
+    - dart: stable
+      env: TEST_PLATFORM=firefox
+    - dart: 1.21.0
+      env: TEST_PLATFORM=firefox
+    - dart: 1.20.1
+      env: TEST_PLATFORM=firefox
+    - dart: 1.19.1
+      env: TEST_PLATFORM=firefox
diff --git a/tool/travis.sh b/tool/travis.sh
index 6604af3..2c47a31 100755
--- a/tool/travis.sh
+++ b/tool/travis.sh
@@ -3,10 +3,17 @@
 # Fast fail the script on failures.
 set -e
 
-pub run test -p vm,content-shell,firefox -j 1
+THE_COMMAND="pub run test -p $TEST_PLATFORM"
+if [ $TEST_PLATFORM == 'firefox' ] || [ $TEST_PLATFORM == 'content-shell' ]; then
+    # browser tests don't run well on travis unless one-at-a-time
+    THE_COMMAND="$THE_COMMAND -j 1"
+fi
+
+echo $THE_COMMAND
+exec $THE_COMMAND
 
 # Install dart_coveralls; gather and send coverage data.
-if [ "$COVERALLS_TOKEN" ] && [ "$TRAVIS_DART_VERSION" = "stable" ]; then
+if [ $TEST_PLATFORM == 'vm' ] && [ "$COVERALLS_TOKEN" ] && [ "$TRAVIS_DART_VERSION" = "stable" ]; then
   pub global activate dart_coveralls
 
   pub global run dart_coveralls report \