The ninth Chromium: Xiaomi

This week I finally gathered the courage to run the media query test suite I wrote over a year ago in the latest crop of mobile browsers. The results are moderately interesting, especially when it comes to Chromium-based browsers. I discovered a new one: Xiaomi Chromium. It’s the ninth I identified, and the first one I had to work really hard on in order to get a version number.

As I have been saying for ages, and found some evidence for last week, a browser that identifies itself as Chrome isn’t necessarily Google Chrome. However, what I was not prepared for is finding a Chromium-based browser that does not identify itself as Chrome. And that’s exactly what happened.

While running the Android WebKit tests I noticed that the one on the Xiaomi M2 behaved quite differently from the rest. I started to get suspicions, which bloomed into certainty when it turned out it supports the pointer media query, something only Chromium browsers on Android do. (No, desktop Chromes don’t.) I concluded the Xiaomi default browser is a Chromium, and not an Android WebKit.


It’s the ninth Chromium I know of, so it’s time to make a list:

  1. Google Chrome; Chromium 37; desktop and mobile. Tested.
  2. Opera; Chromium 37; desktop and mobile. Tested.
  3. Yandex; Chromium 36; desktop. Tested.
  4. Xiaomi; Chromium 34 or 35; mobile. Tested.
  5. Cyanogen; Chromium 33; mobile. Tested.
  6. Puffin; Chromium 30; mobile. Tested.
  7. Samsung; Chromium 28; mobile. Tested.
  8. Amazon Silk; unknown version; tablet. Not tested.
  9. Nokia X; unknown version; mobile. Not tested.

I think there are a few more desktop browsers that run Chromium (Maxthon, for instance), but I don’t follow them, so I’m not sure. The mobile/tablet list is complete, as far as I know.

And no, Chrome on iOS is not on the list. It doesn’t use Chromium for a rendering engine, but the Apple WebView. That’s because Apple does not allow anyone to install rendering engines on iOS.

Detective work

The problem with the Xiaomi Chromium that it doesn’t identify itself as such. Its UA string is the following, and note that the keyword Chrome is absent:

Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; MI 2 Build/JRO03L)
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 
Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.0.1

The absence of Chrome means that every single browser detect out there will misidentify it. It also means I don’t know which Chromium version it is.

Fortunately there are compatibility patterns that give a clue as to its version. For ages I tested four media queries that were created by Apple in 2008 and thus found their way into WebKit: -webkit-animation, -webkit-transform-2d, -webkit-transform-3d, and -webkit-transition. I thought they would become important. They didn’t, to the point where Chromium is in the process of removing them.

Fortunately this process is slow, which is why the four media queries can serve as a tracer for Chromium versions. Chromium 33 supported all of them, while Chrome 37 only supports -webkit-transform-3d. (Why? Apparently because it’s widely used (see first comment).)

The Xiaomi Chromium does not support transition, but it supports the other three. So it would seem Xiaomi Chromium falls somewhere between 33 and 37.

Can we pinpoint the version further? It turns out we have one more clue. The Yandex 14 browser, which uses Chromium 35, has exactly the same compatibility pattern as Xiaomi: no transition, but the other three are supported.

Then I got really lucky. After writing the previous paragraph I decided to see if there’s an update for Yandex. Turns out there is, and it updates to Chrome 36, which supports only transform-3d.

Thus, we have now ascertained that the Xiaomi Chromium version is higher than 33 and lower than 36. 34 or 35, in other words.

Google, please help

This kind of detective work is fun if you have to do it occasionally, and if a vital tracer such as these four media queries is available. I wouldn’t like to do this for every unidentified Chromium I encounter, though.

That’s why I’d like to ask Google to help me out a bit. I would need one of the following two, and preferably both:

  1. An archive of old Chrome on Android versions, with automatic updates disabled. I could use them to run my own comparisons.
  2. A log file of changes from version to version. High-level only; it just needs to consist of features added and removed, such as the media queries I talked about earlier.

This would greatly help me, and other web developers as well, I suppose, to make sense of the increasingly complicated Chromium world.

This is the blog of Peter-Paul Koch, web developer, consultant, and trainer. You can also follow him on Twitter or Mastodon.
Atom RSS

If you like this blog, why not donate a little bit of money to help me pay my bills?