When GDI chooses a font in a font family and a weight is specified on the logfont (FW_XXX) it appears to pick the closest matching font which does not exceed the requested weight (OS/2::usWeightClass). Since most fonts come in 400 (normal) and 700 (bold) a request for 600 normally resolves to the 400 version. The issue is that if the requested weight exceeds the actual weight by 200 or more, GDI applies its own fake bold. The larger issue with this is that GDI's fake bold is both wider and much heavier. In the case of 'Times New Roman', requesting bold (700) gives an actual bold, but requesting 600 gives 400 with fake bold which is both heavier and wider than the actual bold.
This is particularly bad on some very light fonts, since they may come in a single face marked as having a weight of 200. When such fonts are requested with normal (400) weight then GDI will fake bold them.
Since Skia can do its own fake bold and also allows the user to control when fake bold may be applicable, it would be best to control this behavior. We could, for instance, try to create the font with the requested weight, then attempt to determine the actual weight of the font and re-request with that weight.
Firefox currently only selects local fonts through the system enumeration, so it never asks for a weight which isn't present (unless it needs a bold and there is no bold, in which case it asks for 700 and allows the system to do fake bold). This is similar to having Blink use our new FontMgr. For webfonts Firefox uses 700 if bold is actually desired and lets the system figure out what to do, and uses 200 otherwise so that the lightest (and only) version of the font will be used without fake bold.
See also https://code.google.com/p/chromium/issues/detail?id=55281 and https://bugzilla.mozilla.org/show_bug.cgi?id=551871 .