Closed Bug 713680 Opened 12 years ago Closed 2 years ago

Use Consolas as the default monospace font on Windows

Categories

(Core :: Layout: Text and Fonts, enhancement, P3)

All
Windows
enhancement

Tracking

()

RESOLVED DUPLICATE of bug 1607913
Tracking Status
firefox51 --- wontfix
firefox52 --- wontfix
firefox-esr52 --- wontfix
firefox53 --- wontfix
firefox54 --- wontfix
firefox55 --- wontfix
firefox57 --- wontfix
firefox58 --- wontfix
firefox59 --- wontfix
firefox60 --- wontfix
firefox61 --- affected

People

(Reporter: dao, Unassigned)

References

Details

(Keywords: parity-edge, Whiteboard: [qx])

Attachments

(3 files, 2 obsolete files)

Attached patch patch (obsolete) — Splinter Review
      No description provided.
Attachment #584454 - Flags: review?(roc)
Does this involve XP if Consolas is installed?
Keywords: dev-doc-needed
(In reply to j.j. from comment #1)
> Does this involve XP if Consolas is installed?

Yes.

What needs to be documented here?
Is it ok to put a list of names in the font.name.* preferences (as opposed to the font.name-list.* preferences)?
Unless you force ClearType on for Consolas, I'd recommend against this. Consolas looks terrible without ClearType.
(In reply to David Baron [:dbaron] from comment #3)
> Is it ok to put a list of names in the font.name.* preferences (as opposed
> to the font.name-list.* preferences)?

I haven't looked at the code, but the Courier New fallback appears to work fine.

(In reply to Siddharth Agarwal [:sid0] from comment #4)
> Unless you force ClearType on for Consolas, I'd recommend against this.
> Consolas looks terrible without ClearType.

It's on by default on Windows Vista and 7 and Consolas doesn't exist by default on XP, so I'm not too worried about this. I don't know what it would take to force ClearType on for Consolas, but it sounds like this would be a good followup bug.
(In reply to Dão Gottwald [:dao] from comment #5)
> Consolas doesn't exist by
> default on XP

Everyone who installs Microsoft Office 2007 or above, or one of the free Office viewers, gets Consolas. That is going to be a sizable number of people. Expect plenty of gnashing and/or bugs filed.

What I'd recommend instead is something like bug 465633, where you only switch to Consolas if you're on Vista/7. (Disclosure: I wrote that code.)
(In reply to Siddharth Agarwal [:sid0] from comment #6)
> (In reply to Dão Gottwald [:dao] from comment #5)
> > Consolas doesn't exist by default on XP
> 
> Everyone who installs Microsoft Office 2007 or above, or one of the free
> Office viewers, gets Consolas. That is going to be a sizable number of
> people. Expect plenty of gnashing and/or bugs filed.

The prospect of bugs being filed doesn't scare me. ;) I'd be more interested in estimations as to how many users are going to be affected.

> What I'd recommend instead is something like bug 465633, where you only
> switch to Consolas if you're on Vista/7. (Disclosure: I wrote that code.)

If core developers want something like that, I'm all ears. It surely doesn't look like it belongs in front-end code and forcing ClearType on for Consolas sounds like a cleaner solution to me.

Note that the aliased rendering is already a problem in places that hard-code Consolas, such as our own devtools stylesheets: http://mxr.mozilla.org/mozilla-central/search?string=consolas&find=devtools
Attachment #584454 - Flags: review?(roc) → review?(jfkthame)
(In reply to Dão Gottwald [:dao] from comment #7)
> If core developers want something like that, I'm all ears. It surely doesn't
> look like it belongs in front-end code and forcing ClearType on for Consolas
> sounds like a cleaner solution to me.

Definitely; I don't disagree that it's a hack. I do think that the outcome's going to be better if you don't do that though.

> 
> Note that the aliased rendering is already a problem in places that
> hard-code Consolas, such as our own devtools stylesheets:
> http://mxr.mozilla.org/mozilla-central/search?string=consolas&find=devtools

I think that's a bug, though, and should just be monospace.
(In reply to Siddharth Agarwal [:sid0] from comment #8)
> (In reply to Dão Gottwald [:dao] from comment #7)
> > Note that the aliased rendering is already a problem in places that
> > hard-code Consolas, such as our own devtools stylesheets:
> > http://mxr.mozilla.org/mozilla-central/search?string=consolas&find=devtools
> 
> I think that's a bug, though, and should just be monospace.

That's why this one blocks bug 706047.
(In reply to Siddharth Agarwal [:sid0] from comment #8)
> Definitely; I don't disagree that it's a hack. I do think that the outcome's
> going to be better if you don't do that though.

Er, I mean "going to be better THAN if you don't do that". The best way is definitely to force ClearType on for Consolas. The second-best way is to make this dependent on the OS ClearType setting.
> What needs to be documented here?

Web developers should know that default appearance of monospaced elements like <pre>, <code>, <tt> etc. and CSS "font-family:monospace" changes.
Worth a note in
https://developer.mozilla.org/en/Firefox_12_for_developers
(In reply to Dão Gottwald [:dao] from comment #7)
> The prospect of bugs being filed doesn't scare me. ;)

This is unacceptable misbehaviour against people who care about and take time to file bugs as well as people who care and take time to track bugs.
(In reply to j.j. from comment #11)
> > What needs to be documented here?
> 
> Web developers should know that default appearance of monospaced elements
> like <pre>, <code>, <tt> etc. and CSS "font-family:monospace" changes.
> Worth a note in
> https://developer.mozilla.org/en/Firefox_12_for_developers

This would make sense if we ever set the expectation or guaranteed that Courier New was the default font. But it's already OS- and language-dependent and user configurable.

(In reply to j.j. from comment #12)
> (In reply to Dão Gottwald [:dao] from comment #7)
> > The prospect of bugs being filed doesn't scare me. ;)
> 
> This is unacceptable misbehaviour against people who care about and take
> time to file bugs as well as people who care and take time to track bugs.

No, it's not, unless you're saying I'm expected to be scared.
> This would make sense if we ever set the expectation or guaranteed that
> Courier New was the default font. But it's already OS- and language-dependent
> and user configurable.

A large subset of web developer has wrong expectations an only works on Windows with default font settings.
It's not a big deal but there is nothing wrong to inform them that the default font changes the first time since 1994.
(In reply to j.j. from comment #14)
> > This would make sense if we ever set the expectation or guaranteed that
> > Courier New was the default font. But it's already OS- and language-dependent
> > and user configurable.
> 
> A large subset of web developer has wrong expectations an only works on
> Windows with default font settings.
> It's not a big deal but there is nothing wrong to inform them that the
> default font changes the first time since 1994.

There's a risk of setting a wrong expectation here by saying Consolas would be the new default font, while it remains OS- and language-dependent and user configurable. So whoever documents this needs to word things very carefully, otherwise it's better not to document anything.
Comment on attachment 584454 [details] [diff] [review]
patch

While I don't have an issue with changing the default to Consolas for Vista and later systems, I'm a little more hesitant about imposing this change on XP, where it wasn't a standard system font, and where it's perhaps more likely that there are significant numbers of users who run without ClearType, or indeed without any antialiasing. So I'm not entirely happy with making the change for all Windows users, rather than having a version-dependent default.

(And I'd be opposed to unilaterally forcing ClearType on for Consolas.)

More importantly, though, assuming we do want to make the change, this is the wrong way to do it. The font.name.* prefs were designed to take a single font name; the fact that putting a list of fonts in there happens to work for "fallback" is an accident of the current implementation, IMO - it could even be considered a bug - and probably not something we should rely on.

But the real show-stopper here is that these prefs are exposed in the Firefox UI, and that UI doesn't have the capability to either display or set a list of fonts, rather than a single name. Therefore, doing things this way would mean that (a) users will see an incorrect value if they try to look at their font preferences throguh the browser UI; and (b) if they make any change there, they would be unable to restore the original setting via that same UI. I don't think that's acceptable.
Attachment #584454 - Flags: review?(jfkthame) → review-
Assignee: dao → nobody
Woudn't be "Lucida Console" better anyhow? It contains more characters.

A quick incomplete list of code points included in WGL4 and Lucida Console, but not in Consolas:

203e    ‾ overline
207f    ⁿ superscript n
2320    ⌠ integral
2321    ⌡ integral

2500-256c (complete box-drawing?)
─│┌┐└┘├┤┬┴┼═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬

2580-2593 (some of block elements)
▀▄█▌▐░▒▓
  
25a0-25e6 (some of geometric shapes)
■▬▲►▼◄◊○◘◙
All those work fine for me. (Unless some sort magic fallback is happening?)

What version of Consolas are you using? I have 5.22 - Windows 7 SP1 + Office 2010 SP1.
> All those work fine for me. (Unless some sort magic fallback is happening?)

To avoid fallback I tested with BableMap
http://www.babelstone.co.uk/Software/BabelMap.html

> What version of Consolas are you using? I have 5.22 - Windows 7 SP1 + Office
> 2010 SP1.

Hmm, it's version 1.00. Microsoft provides a download until today here:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17879

Seems v5.22 from Windows 7 has much more glyphs than 5.0, which shipped with Vista
http://www.microsoft.com/typography/fonts/font.aspx?FMID=1723
Attached patch PatchSplinter Review
Here it is again.

If Consolas is not present on the user's system, they will get Courier New.

The issue of Consolas looking bad without antialiasing is really a separate bug, and should be looked at regardless of what happens here.
Assignee: nobody → at.light
Attachment #584454 - Attachment is obsolete: true
Attachment #8351680 - Flags: review?(dbaron)
Comment on attachment 8351680 [details] [diff] [review]
Patch

Sorry, should have transferred this request sooner.
Attachment #8351680 - Flags: review?(dbaron) → review?(jfkthame)
Comment on attachment 8351680 [details] [diff] [review]
Patch

Review of attachment 8351680 [details] [diff] [review]:
-----------------------------------------------------------------

I'm still concerned about the impact on users who have ClearType (or indeed -all- font smoothing) disabled, given the claims here that Consolas looks terrible in that scenario. I just tried it on an XP VM here, and agree that it's a pretty bad visual regression on such a configuration.

We still have lots of users on XP; I don't have any actual data, but I think it's a fair guess that many (the majority?) of them will not have tweaked any system settings so as to enable CT, and also that many of them have a version of Consolas installed (thanks to MS Office or other products that bundled it). They may never actually -use- that Consolas font themselves, e.g. in their Word docs, but this patch will nevertheless make it suddenly appear on lots of web sites.

(I'm less bothered about the Vista-or-later users who have deliberately disabled ClearType; if they feel strongly enough about font rendering to change the system's default settings, they can also reconfigure their default fonts as desired.)

This bug was originally filed as "Use Consolas ... on Windows Vista & 7", but the patch will negatively affect many XP users. As such, I don't think I can r+ this as it stands.

A few possibilities we could consider:

(a) A migration script that updates the default font prefs for users on Vista and later, but not on XP, as suggested in comment 6.

(b) Rather than Consolas, consider Lucida Console, which I believe is available on XP as well, and which renders much better (IMO) than Consolas on non-ClearType systems. I haven't compared it under CT on newer Windows versions, though; perhaps it's inferior there.

(c) Implement a platform-specific function to get the system's default monospaced font, and use this to resolve the CSS generic "monospace" value. For Windows GDI, this would probably be based on GetStockObject(ANSI_FIXED_FONT), I guess. But this would involve core code changes, and I haven't really thought about how it'd interact with the font prefs UI.

I haven't seen any compelling argument that there's an urgent need to update the defaults here. In the absence of a better solution, perhaps this should just wait until we have dropped XP support altogether.
Attachment #8351680 - Flags: review?(jfkthame) → review-
(In reply to Jonathan Kew (:jfkthame) from comment #22)
 
> A few possibilities we could consider:
> 
> (a) A migration script that updates the default font prefs for users on
> Vista and later, but not on XP, as suggested in comment 6.
> 
> (b) Rather than Consolas, consider Lucida Console, which I believe is
> available on XP as well, 

sure, it is

> and which renders much better (IMO) than Consolas
> on non-ClearType systems. I haven't compared it under CT on newer Windows
> versions, though; perhaps it's inferior there.
> 
> (c) Implement a platform-specific function to get the system's default
> monospaced font, and use this to resolve the CSS generic "monospace" value.
> For Windows GDI, this would probably be based on
> GetStockObject(ANSI_FIXED_FONT), I guess. But this would involve core code
> changes, and I haven't really thought about how it'd interact with the font
> prefs UI.
> 

Can't we keep it just simple and use Lucida Console on XP and Consolas on later systems?
(See also comment 17, lack of some glyphs in early versions of Consolas)
(In reply to j.j. (mostly inactive) from comment #23)

> Can't we keep it just simple and use Lucida Console on XP and Consolas on
> later systems?

And how would we do that? Currently, the code implementing the font prefs doesn't distinguish between versions of Windows.
> In the absence of a better solution, perhaps this should just wait until we have dropped XP support altogether.

Is there a meta bug for this?
Blocks: xp-eol
We still have >14% users on XP even though Microsoft has dropped support a while ago. Since it doesn't seem to be going anywhere, we should just move to Consolas by default for Windows Vista and up. Is it possible to make that distinction in the code?
Whiteboard: [qx]
Blocks: 1248735
No longer blocks: fx-qx
No longer blocks: xp-eol
Depends on: xp-eol
Jonathan, what do you think of the following worse-is-better suggestion?

Use Lucida Console on 32-bit Firefox and Consolas on 64-bit Firefox. Of course, 64-bit has nothing to do with font support, but we only support 64-bit on Windows 7+ and we can conveniently check #ifdef _WIN64 at compile-time (thus avoid run-time checks for OS version to rewrite the monospace prefs). Thus we would use Lucida Console on XP, Vista, and 32-bit Windows 7+ and Consolas for 64-bit Windows 7+.

I assume using Consolas for some users is better than for none. Once XP support is dropped (bug 1130266), we can use Consolas for Windows versions.
Flags: needinfo?(jfkthame)
OS: Windows 7 → Windows
Well... it'd be possible, but I'm hesitant. That would give us a situation where Win7/8/10 users get a different configuration depending which build they happen to have installed -- and I suspect that a large proportion of users would be unaware of the issue. It sounds like a potential support nightmare...

It's one thing if users on WinXP and users on Win7+ see pages somewhat differently; I think most people understand that they're different systems, and the entire UI looks different in all sorts of ways. But if someone has two machines, both running Win10, and both running up-to-date Firefox, yet they render pages differently, that'll be much more confusing.

If we want to do something here (prior to dropping XP support altogether), I think a better way forward would be to add something to the profile-migration code. IIRC, we have the ability to run custom code as a one-time operation when updating the profile for a new Firefox release. At that point, we could check whether the user is on a Windows version where we want to make this change, and if so, iterate over the monospace font prefs making the update. The only case where this would have a bad result is if the user then takes such a profile back to use on a WinXP system (with Consolas installed, and ClearType turned off), but that seems pretty far-fetched.
Flags: needinfo?(jfkthame)
As of Firefox 53, we no longer support Windows XP or Vista.

Here is a mostly green Try run. The failures on Linux and Mac are not related.

https://treeherder.mozilla.org/#/jobs?repo=try&revision=787d53d6fcc0c3bd8c87992cc27c101124ee9363
Assignee: at.light → cpeterson
For reference, here are the reftest images from the reftest that needed fuzz to accommodate the pixel differences when changing Windows' default monospace font from Courier New to Consolas:

REFTEST TEST-UNEXPECTED-FAIL | file:///C:/slave/test/build/tests/reftest/tests/layout/reftests/forms/input/text/size-1.html == file:///C:/slave/test/build/tests/reftest/tests/layout/reftests/forms/input/text/size-1-ref.html | image comparison, max difference: 24, number of differing pixels: 1

REFTEST IMAGE 1 (TEST):

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5qxAAAV2klEQVR4nO3dMW7bSABAUd6SR+JRWCy2ShmkSaNDbOHAASIoMLAuDKScLZzEsazYjmF/Adz3ADYaDUWw+xgONQ0AAIDIdO4LAAAA/j8ECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABA5skAufh0Od5/+Dj++vvdWY73Hz6Oi0+Xxb0AAADe2JMBcvn56zhcXRfXctLh6nr8c/HlbL8PAAC8nmcFyLkJEAAA2AYBAgAAZAQIAACQESAAAEBGgAAAAJkXBMh+rPM0pmkay+54aB3zdDs2TfNY93dDu+XH5w/H7qbPJ88rQAAAYBv+MEB2Y5nmse5vI+R+KOzHOi/jx0f7dR7TvI4TnXF6bLeMaV7G8uC8AgQAALbihY9gnQqQI7tlTNNdkNybvc5jujf5sbARIAAAsBVvFiCnI+P7I1hHqx+7ZRrzuv/teQUIAABsw9sEyCOrHw/Gd8svoSJAAABgy149QG43kj8SH2OM40eu7jan/3LM689vCxAAANiGVw2Q58XH+L7h/NQGdSsgAACwZS94C9bD1YplN45ewXs0djzvN2/HEiAAALBt/ogQAADICBAAACAjQAAAgIwAAQAAMs8KkMPVdXEtJx2urgUIAABsxJMBcnPzbXw+/HvW4+bmW3EvAACAN/ZkgAAAALwWAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkBEgAABARoAAAAAZAQIAAGQECAAAkPkPcycaOQaH0nUAAAAASUVORK5CYII=

REFTEST IMAGE 2 (REFERENCE):

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5qxAAAV2ElEQVR4nO3dsWrcSACAYb2lHkmPouJIlTKkSbMPkcLBgVv2MJwLQ8pJ4QTb643tM/a/oPs+UKNhtELdz2i00wAAAIhM574BAADg/0OAAAAAGQECAABkBAgAAJARIAAAQEaAAAAAGQECAABkng2Qi2+X49PnL+OvDx/Pcnz6/GVcfLssngUAAPDOng2Qy+//jMPVdXEvJx2ursfXi7/P9vsAAMDbeVGAnJsAAQCAbRAgAABARoAAAAAZAQIAAGQECAAAkHlFgOzHOk9jmqax7I6H1jFPt2PTNI91fze0W36ffzx2N30+eV0BAgAA2/AfA2Q3lmke6/42Qh6Gwn6s8zJ+n9qv85jmdZzojNNju2VM8zKWR9cVIAAAsBWvfAXrVIAc2S1jmu6C5MHsdR7Tg8lPhY0AAQCArXi3ADkdGb9ewTpa/dgt05jX/R+vK0AAAGAb3idAnlj9eDS+W+6FigABAIAte/MAud1I/kR8jDGOX7m625x+77i3SiJAAABgG940QF4WH+PXhvNTG9StgAAAwJa94itYj1crlt04+gTv0djxvD98HUuAAADAtvkjQgAAICNAAACAjAABAAAyAgQAAMi8KEAOV9fFvZx0uLoWIAAAsBHPBsjNzY/x/fDvWY+bmx/FswAAAN7ZswECAADwVgQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEBGgAAAABkBAgAAZAQIAACQESAAAEDmJ3KsGiGrC/zDAAAAAElFTkSuQmCC
Comment on attachment 8840302 [details]
Bug 713680 - Part 2: Fix editor tests to accommodate narrower Consolas monospace font.

https://reviewboard.mozilla.org/r/114804/#review116264

I hope that this patch does not change any meaning of the tests, though (especially test_continuous_wheel_events.html).

I wonder, specifying font-family might be safer than this patch, but fine if you like this better.
Attachment #8840302 - Flags: review?(masayuki) → review+
(In reply to Masayuki Nakano [:masayuki] from comment #33)
> I hope that this patch does not change any meaning of the tests, though
> (especially test_continuous_wheel_events.html).

I don't think it does. I just changed the horizontal scroll increment for these test cases. I wasn't able to fix these test cases by setting line-height, as you suggested in email a few months ago, because the particular test cases only fail for horizontal scrolling.

The queryCaretRectWin.html and selectAtPoint.html test changes removed special case code where Windows previously had different expected results than Mac and Linux.

> I wonder, specifying font-family might be safer than this patch, but fine if
> you like this better.

Specifying font-family how? If you prefer a different approach than what I have proposed here, please just let me know.
(In reply to Chris Peterson [:cpeterson] from comment #34)
> (In reply to Masayuki Nakano [:masayuki] from comment #33)
> > I wonder, specifying font-family might be safer than this patch, but fine if
> > you like this better.
> 
> Specifying font-family how? If you prefer a different approach than what I
> have proposed here, please just let me know.

Cannot specify the old font ("Courier New"?) instead of "monospace"?
(In reply to Masayuki Nakano [:masayuki] from comment #35)
> (In reply to Chris Peterson [:cpeterson] from comment #34)
> > (In reply to Masayuki Nakano [:masayuki] from comment #33)
> > > I wonder, specifying font-family might be safer than this patch, but fine if
> > > you like this better.
> > 
> > Specifying font-family how? If you prefer a different approach than what I
> > have proposed here, please just let me know.
> 
> Cannot specify the old font ("Courier New"?) instead of "monospace"?

I see what you mean. I'll test specifying "Courier New", though I don't know whether a font with that name exists on Mac and Linux or has the same font metrics as on Windows.
FWIW, "Courier New" should be present on Mac OS, though we may have been using "Courier" previously so it's possible the change will affect tests in some way. (Character widths will match, I think, but font ascent/descent may not, so line height could change.)

On Linux, "Courier New" won't usually be present, but I'd expect fontconfig to alias it to the system's default monospace font on most configurations.
Comment on attachment 8840301 [details]
Bug 713680 - Change default Windows monospace font from Courier New to Consolas.

https://reviewboard.mozilla.org/r/114802/#review116320

I guess this should be fine, in principle. I'm a little nervous because the change in metrics could lead to layout changes that may catch people by surprise (e.g. a text area with a size specified in characters becomes narrower, affecting placement of other elements), but given that things like that have never been consistent across browsers and platforms anyway, it's probably not too big a risk.
Attachment #8840301 - Flags: review?(jfkthame) → review+
(In reply to Jonathan Kew (:jfkthame) from comment #38)
> I guess this should be fine, in principle. I'm a little nervous because the
> change in metrics could lead to layout changes that may catch people by
> surprise (e.g. a text area with a size specified in characters becomes
> narrower, affecting placement of other elements), but given that things like
> that have never been consistent across browsers and platforms anyway, it's
> probably not too big a risk.

The Nightly 55 dev cycle begins in a little over one week. I can wait until Nightly 55 begins to land this change so we have a full six weeks of Nightly 'bake time' instead of riding from Nightly 54 to Aurora after just one week.

Kohei, can you please announce this change on fxsitecompat.com after I land this change in 55? Thank you!

I will also request a release note for 55.
Flags: needinfo?(kohei.yoshino)
Release Note Request (optional, but appreciated)
[Why is this notable]: Firefox 55 will change our default monospace font on Windows from the venerable "Courier New" to the nicer-looking "Consolas".
[Affects Firefox for Android]: No. This change only affects Windows.
[Suggested wording]: Changed default monospace font on Windows from "Courier New" to "Consolas".
[Links (documentation, blog post, etc)]: Nothing to link other than this bug.
(In reply to Chris Peterson [:cpeterson] from comment #39)
> Kohei, can you please announce this change on fxsitecompat.com after I land
> this change in 55? Thank you!

Sure thing.
Attachment #8840302 - Attachment is obsolete: true
Comment on attachment 8840301 [details]
Bug 713680 - Change default Windows monospace font from Courier New to Consolas.

https://reviewboard.mozilla.org/r/114802/#review116686
Attachment #8840301 - Flags: review?(masayuki) → review+
Blocks: 1344750
Flags: needinfo?(kohei.yoshino)
Pushed by cpeterson@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/da035ac87fe4
Change default Windows monospace font from Courier New to Consolas. r=jfkthame r=masayuki
Backout by ihsiao@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/f50437ed4599
Backed out changeset da035ac87fe4 for reftest failures
Here are links to the reftest analyzers showing the differences on Windows 7 VM without GPU:

1. For test layout/reftests/bidi/brackets-3b-rtl.html, there is a subpixel alignment difference in one of the Arabic characters:

https://hg.mozilla.org/mozilla-central/raw-file/tip/layout/tools/reftest/reftest-analyzer.xhtml#logurl=https://archive.mozilla.org/pub/firefox/try-builds/cpeterson@mozilla.com-454605bcafd18a74067a0a975c154377d8e839b0/try-win64/try_win8_64_test-reftest-no-accel-bm110-tests1-windows-build5.txt.gz&only_show_unexpected=1

2. For test layout/reftests/css-break/box-decoration-break-with-outset-box-shadow-1.html, there are some tiny differences in two of the rounded rectangles' curves:

https://hg.mozilla.org/mozilla-central/raw-file/tip/layout/tools/reftest/reftest-analyzer.xhtml#logurl=https://archive.mozilla.org/pub/firefox/try-builds/cpeterson@mozilla.com-20caef0e840bb75fccbd5e59a86bc17193741dd0/try-win64-debug/try_win8_64-debug_test-reftest-e10s-1-bm112-tests1-windows-build65.txt.gz&only_show_unexpected=1

3. For test layout/reftests/forms/input/text/size-1.html, the test image has monochromatic text, but reference image has blue/red artifacts from ClearText anti-aliasing:

https://hg.mozilla.org/mozilla-central/raw-file/tip/layout/tools/reftest/reftest-analyzer.xhtml#logurl=https://archive.mozilla.org/pub/firefox/try-builds/cpeterson@mozilla.com-454605bcafd18a74067a0a975c154377d8e839b0/try-win32/try_win7_vm_gfx_test-reftest-gpu-e10s-bm139-tests1-windows-build225.txt.gz&only_show_unexpected=1
Flags: needinfo?(cpeterson)
Comment on attachment 8851195 [details]
Bug 713680 - Part 2: Add fuzz to some layout reftests to accommodate subpixel differences from ClearText anti-aliasing on Windows 7 VM without GPU.

https://reviewboard.mozilla.org/r/123566/#review126174

Although, why you requested to review to me.
Attachment #8851195 - Flags: review?(masayuki) → review+
Thanks. I had requested your review for these test patches because you had reviewed part of the original Consolas patch. And you had a shorter review queue than jfkthame. :)
Pushed by cpeterson@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/e4ecf720b3a1
Change default Windows monospace font from Courier New to Consolas. r=jfkthame r=masayuki
https://hg.mozilla.org/mozilla-central/rev/e4ecf720b3a1
Status: ASSIGNED → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla55
Backed out for crashing in dom/tests/mochitest/chrome/test_xray_event_constructor.xul on Windows 7 debug:

https://hg.mozilla.org/integration/mozilla-inbound/rev/389ff5662e9ce4a1b91bb815326773c020fb41ea

Push with failure: https://treeherder.mozilla.org/#/jobs?repo=mozilla-inbound&revision=e4ecf720b3a1cad1629a7552a559bdb0eed64650&filter-resultStatus=testfailed&filter-resultStatus=busted&filter-resultStatus=exception&filter-resultStatus=retry&filter-resultStatus=usercancel&filter-resultStatus=runnable&filter-resultStatus=success&filter-searchStr=windows+debug+M(c2)
Failure log: https://treeherder.mozilla.org/logviewer.html#?job_id=87191113&repo=mozilla-inbound

23:55:45     INFO - GECKO(792) | Assertion failure: IsIdle(oldState), at c:\builds\moz2_slave\m-in-w32-d-0000000000000000000\build\src\xpcom\ds\PLDHashTable.h:132
23:55:45     INFO - GECKO(792) | #01: ???[C:\slave\test\build\application\firefox\xul.dll +0x48fd80]
23:55:45     INFO - GECKO(792) | #02: PrintJSStack[C:\slave\test\build\application\firefox\xul.dll +0xee3444]
23:55:45     INFO - GECKO(792) | #03: PrintJSStack[C:\slave\test\build\application\firefox\xul.dll +0xe947ce]
23:55:45     INFO - GECKO(792) | #04: PrintJSStack[C:\slave\test\build\application\firefox\xul.dll +0xe94826]
23:55:45     INFO - GECKO(792) | #05: PrintJSStack[C:\slave\test\build\application\firefox\xul.dll +0xedf85c]
23:55:45     INFO - GECKO(792) | #06: PrintJSStack[C:\slave\test\build\application\firefox\xul.dll +0xecfb98]
23:55:45     INFO - GECKO(792) | #07: ???[C:\slave\test\build\application\firefox\xul.dll +0x493d29]
23:55:45     INFO - GECKO(792) | #08: ???[C:\slave\test\build\application\firefox\xul.dll +0x493e1f]
23:55:45     INFO - GECKO(792) | #09: workerlz4_maxCompressedSize[C:\slave\test\build\application\firefox\xul.dll +0x2babac1]
23:55:45     INFO - GECKO(792) | #10: ???[C:\slave\test\build\application\firefox\xul.dll +0x4e4067]
23:55:45     INFO - GECKO(792) | #11: soundtouch::SoundTouch::operator=[C:\slave\test\build\application\firefox\xul.dll +0xc002dc]
23:55:45     INFO - GECKO(792) | #12: soundtouch::SoundTouch::operator=[C:\slave\test\build\application\firefox\xul.dll +0xbf5371]
23:55:45     INFO - GECKO(792) | #13: soundtouch::SoundTouch::operator=[C:\slave\test\build\application\firefox\xul.dll +0xc06559]
23:55:45     INFO - GECKO(792) | #14: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x32db7c3]
23:55:45     INFO - GECKO(792) | #15: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x32e1143]
23:55:45     INFO - GECKO(792) | #16: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x32e0e89]
23:55:45     INFO - GECKO(792) | #17: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x33e7a44]
23:55:45     INFO - GECKO(792) | #18: ??? (???:???)
23:55:45     INFO - GECKO(792) | #19: ??? (???:???)
23:55:45     INFO - GECKO(792) | #20: ??? (???:???)
23:55:45     INFO - GECKO(792) | #21: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x33eb6aa]
23:55:45     INFO - GECKO(792) | #22: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x33ebf0f]
23:55:45     INFO - GECKO(792) | #23: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x32ec035]
23:55:45     INFO - GECKO(792) | #24: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x32e11b2]
23:55:45     INFO - GECKO(792) | #25: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x32e0e89]
23:55:45     INFO - GECKO(792) | #26: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x32db5a5]
23:55:45     INFO - GECKO(792) | #27: XRE_GetBootstrap[C:\slave\test\build\application\firefox\xul.dll +0x2d7ffa4]
23:55:45     INFO - GECKO(792) | #28: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0xfaabca]
23:55:45     INFO - GECKO(792) | #29: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0xfaaefa]
23:55:45     INFO - GECKO(792) | #30: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0xfaaefa]
23:55:45     INFO - GECKO(792) | #31: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0xfaaefa]
23:55:45     INFO - GECKO(792) | #32: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0xfab2c2]
23:55:45     INFO - GECKO(792) | #33: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0x10bfdff]
23:55:45     INFO - GECKO(792) | #34: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0x103d002]
23:55:45     INFO - GECKO(792) | #35: ???[C:\slave\test\build\application\firefox\xul.dll +0x4dcab8]
23:55:45     INFO - GECKO(792) | #36: ???[C:\slave\test\build\application\firefox\xul.dll +0x4dc0c1]
23:55:46     INFO - GECKO(792) | #37: soundtouch::SoundTouch::operator=[C:\slave\test\build\application\firefox\xul.dll +0x89b24f]
23:55:46     INFO - GECKO(792) | #38: ???[C:\slave\test\build\application\firefox\xul.dll +0x873c55]
23:55:46     INFO - GECKO(792) | #39: ???[C:\slave\test\build\application\firefox\xul.dll +0x873c0d]
23:55:46     INFO - GECKO(792) | #40: ???[C:\slave\test\build\application\firefox\xul.dll +0x87396c]
23:55:46     INFO - GECKO(792) | #41: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0x1ea3b1b]
23:55:46     INFO - GECKO(792) | #42: mozilla_dump_image[C:\slave\test\build\application\firefox\xul.dll +0x1ef73d4]
23:55:46     INFO - GECKO(792) | #43: workerlz4_maxCompressedSize[C:\slave\test\build\application\firefox\xul.dll +0x2babd1b]
23:55:46     INFO - GECKO(792) | #44: workerlz4_maxCompressedSize[C:\slave\test\build\application\firefox\xul.dll +0x2c19adc]
23:55:46     INFO - GECKO(792) | #45: workerlz4_maxCompressedSize[C:\slave\test\build\application\firefox\xul.dll +0x2c17d07]
23:55:46     INFO - GECKO(792) | #46: workerlz4_maxCompressedSize[C:\slave\test\build\application\firefox\xul.dll +0x2c177d3]
23:55:46     INFO - GECKO(792) | #47: workerlz4_maxCompressedSize[C:\slave\test\build\application\firefox\xul.dll +0x2c2455f]
23:55:46     INFO - GECKO(792) | #48: ???[C:\slave\test\build\application\firefox\firefox.exe +0x174c]
23:55:46     INFO - GECKO(792) | #49: ???[C:\slave\test\build\application\firefox\firefox.exe +0x13b6]
23:55:46     INFO - GECKO(792) | #50: ???[C:\slave\test\build\application\firefox\firefox.exe +0x1a89]
23:55:46     INFO - GECKO(792) | #51: TargetNtUnmapViewOfSection[C:\slave\test\build\application\firefox\firefox.exe +0x32eb9]
23:55:46     INFO - GECKO(792) | #52: BaseThreadInitThunk[C:\windows\system32\kernel32.dll +0x53c45]
23:55:46     INFO - GECKO(792) | #53: RtlInitializeExceptionChain[C:\windows\SYSTEM32\ntdll.dll +0x637f5]
23:55:46     INFO - GECKO(792) | #54: RtlInitializeExceptionChain[C:\windows\SYSTEM32\ntdll.dll +0x637c8]
23:55:46     INFO - TEST-INFO | Main app process: exit 1
23:55:46     INFO - Buffered messages finished
23:55:46    ERROR - TEST-UNEXPECTED-FAIL | dom/tests/mochitest/chrome/test_xray_event_constructor.xul | application terminated with exit code 1
23:55:46     INFO - runtests.py | Application ran for: 0:00:53.516000
23:55:46     INFO - zombiecheck | Reading PID log: c:\users\cltbld\appdata\local\temp\tmpgbbzwbpidlog
23:55:46     INFO - mozcrash Copy/paste: C:\slave\test\build\win32-minidump_stackwalk.exe c:\users\cltbld\appdata\local\temp\tmpyuejzx.mozrunner\minidumps\4d7e9c85-c9b1-43b1-919d-32d8b10f0911.dmp C:\slave\test\build\symbols
23:55:57     INFO - mozcrash Saved minidump as C:\slave\test\build\blobber_upload_dir\4d7e9c85-c9b1-43b1-919d-32d8b10f0911.dmp
23:55:57     INFO - mozcrash Saved app info as C:\slave\test\build\blobber_upload_dir\4d7e9c85-c9b1-43b1-919d-32d8b10f0911.extra
23:55:57     INFO - PROCESS-CRASH | dom/tests/mochitest/chrome/test_xray_event_constructor.xul | application crashed [@ Checker::StartWriteOp()]
23:55:57     INFO - Crash dump filename: c:\users\cltbld\appdata\local\temp\tmpyuejzx.mozrunner\minidumps\4d7e9c85-c9b1-43b1-919d-32d8b10f0911.dmp
23:55:57     INFO - Operating system: Windows NT
23:55:57     INFO -                   6.1.7601 Service Pack 1
23:55:57     INFO - CPU: x86
23:55:57     INFO -      GenuineIntel family 6 model 30 stepping 5
23:55:57     INFO -      8 CPUs
23:55:57     INFO - 
23:55:57     INFO - GPU: UNKNOWN
23:55:57     INFO - 
23:55:57     INFO - Crash reason:  EXCEPTION_BREAKPOINT
23:55:57     INFO - Crash address: 0x5e046a3b
23:55:57     INFO - Process uptime: 53 seconds
23:55:57     INFO - 
23:55:57     INFO - Thread 0 (crashed)
23:55:57     INFO -  0  xul.dll!Checker::StartWriteOp() [PLDHashTable.h:e4ecf720b3a1 : 130 + 0x18]
23:55:57     INFO -     eip = 0x5e046a3b   esp = 0x001ddbcc   ebp = 0x001ddbe0   ebx = 0x00000001
23:55:57     INFO -     esi = 0x00000084   edi = 0x27df9460   eax = 0x00000000   ecx = 0x68f906ef
23:55:57     INFO -     edx = 0x00000060   efl = 0x00000206
23:55:57     INFO -     Found by: given as instruction pointer in context
23:55:57     INFO -  1  xul.dll!PLDHashTable::Add(void const *,mozilla::fallible_t const &) [PLDHashTable.cpp:e4ecf720b3a1 : 531 + 0xa]
23:55:57     INFO -     eip = 0x5e03fddd   esp = 0x001ddbd4   ebp = 0x001ddbe0
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  2  xul.dll!PLDHashTable::Add(void const *) [PLDHashTable.cpp:e4ecf720b3a1 : 591 + 0xf]
23:55:57     INFO -     eip = 0x5e03fd80   esp = 0x001ddbe8   ebp = 0x001ddbf8
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  3  xul.dll!gfxPlatformFontList::FindAndAddFamilies(nsAString const &,nsTArray<gfxFontFamily *> *,gfxFontStyle *,double) [gfxPlatformFontList.cpp:e4ecf720b3a1 : 719 + 0x15]
23:55:57     INFO -     eip = 0x5ea93444   esp = 0x001ddc00   ebp = 0x001ddcb4
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  4  xul.dll!gfxGDIFontList::FindAndAddFamilies(nsAString const &,nsTArray<gfxFontFamily *> *,gfxFontStyle *,double) [gfxGDIFontList.cpp:e4ecf720b3a1 : 890 + 0x20]
23:55:57     INFO -     eip = 0x5ea447ce   esp = 0x001ddcbc   ebp = 0x001ddd84
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  5  xul.dll!gfxPlatformFontList::FindFamily(nsAString const &,gfxFontStyle *,double) [gfxPlatformFontList.h:e4ecf720b3a1 : 278 + 0x1d]
23:55:57     INFO -     eip = 0x5ea44826   esp = 0x001ddd8c   ebp = 0x001dddb4
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  6  xul.dll!gfxPlatformFontList::CleanupLoader() [gfxPlatformFontList.cpp:e4ecf720b3a1 : 1507 + 0x24]
23:55:57     INFO -     eip = 0x5ea8f85c   esp = 0x001dddbc   ebp = 0x001dddfc
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  7  xul.dll!gfxFontInfoLoader::ShutdownObserver::Observe(nsISupports *,char const *,char16_t const *) [gfxFontInfoLoader.cpp:e4ecf720b3a1 : 125 + 0xb]
23:55:57     INFO -     eip = 0x5ea7fb98   esp = 0x001dde04   ebp = 0x001dde04
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  8  xul.dll!nsObserverList::NotifyObservers(nsISupports *,char const *,char16_t const *) [nsObserverList.cpp:e4ecf720b3a1 : 112 + 0x1a]
23:55:57     INFO -     eip = 0x5e043d29   esp = 0x001dde0c   ebp = 0x001dde24
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO -  9  xul.dll!nsObserverService::NotifyObservers(nsISupports *,char const *,char16_t const *) [nsObserverService.cpp:e4ecf720b3a1 : 281 + 0xe]
23:55:57     INFO -     eip = 0x5e043e1f   esp = 0x001dde2c   ebp = 0x001dde40
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 10  xul.dll!nsAppStartup::Quit(unsigned int) [nsAppStartup.cpp:e4ecf720b3a1 : 461 + 0x2c]
23:55:57     INFO -     eip = 0x6075bac1   esp = 0x001dde48   ebp = 0x001dde80
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 11  xul.dll!NS_InvokeByIndex + 0x27
23:55:57     INFO -     eip = 0x5e094067   esp = 0x001dde88   ebp = 0x001dde94
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 12  xul.dll!CallMethodHelper::Invoke() [XPCWrappedNative.cpp:e4ecf720b3a1 : 2010 + 0xf]
23:55:57     INFO -     eip = 0x5e7b02dc   esp = 0x001dde9c   ebp = 0x001ddec8
23:55:57     INFO -     Found by: previous frame's frame pointer
23:55:57     INFO - 13  xul.dll!CallMethodHelper::Call() [XPCWrappedNative.cpp:e4ecf720b3a1 : 1329 + 0x7]
23:55:57     INFO -     eip = 0x5e7a52dc   esp = 0x001ddeb0   ebp = 0x001ddec8
23:55:57     INFO -     Found by: call frame info with scanning
23:55:57     INFO - 14  xul.dll!XPCWrappedNative::CallMethod(XPCCallContext &,XPCWrappedNative::CallMode) [XPCWrappedNative.cpp:e4ecf720b3a1 : 1296 + 0x12]
23:55:57     INFO -     eip = 0x5e7a5371   esp = 0x001dded0   ebp = 0x001ddec8
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 15  xul.dll!XPCWrappedNative::CallMethod(XPCCallContext &,XPCWrappedNative::CallMode) [XPCWrappedNative.cpp:e4ecf720b3a1 : 1296 + 0x12]
23:55:57     INFO -     eip = 0x5e7a5371   esp = 0x001dded8   ebp = 0x001ddfa8
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 16  xul.dll!js::jit::TryAttachCallStub [BaselineIC.cpp:e4ecf720b3a1 : 2005 + 0x8]
23:55:57     INFO -     eip = 0x60fa0006   esp = 0x001ddf18   ebp = 0x001ddfa8
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 17  xul.dll!js::jit::TryAttachCallStub [BaselineIC.cpp:e4ecf720b3a1 : 2217 + 0x20]
23:55:57     INFO -     eip = 0x60fa0840   esp = 0x001ddf28   ebp = 0x001ddf3c
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 18  nss3.dll!_MD_CURRENT_THREAD [w95thred.c:e4ecf720b3a1 : 317 + 0xc]
23:55:57     INFO -     eip = 0x68e27748   esp = 0x001ddf30   ebp = 0x001ddf7c
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 19  xul.dll!XPCNativeInterface::AddRef() [xpcprivate.h:e4ecf720b3a1 : 1203 + 0x35]
23:55:57     INFO -     eip = 0x5e7832e4   esp = 0x001ddf64   ebp = 0x001ddf7c
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 20  xul.dll!RefPtr<XPCNativeInterface>::assign_with_AddRef(XPCNativeInterface *) [RefPtr.h:e4ecf720b3a1 : 54 + 0x6]
23:55:57     INFO -     eip = 0x5e79cbd4   esp = 0x001ddf84   ebp = 0x001ddf90
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 21  xul.dll!XPCCallContext::SetCallInfo(XPCNativeInterface *,XPCNativeMember *,bool) [XPCCallContext.cpp:e4ecf720b3a1 : 135 + 0x9]
23:55:57     INFO -     eip = 0x5e799872   esp = 0x001ddf98   ebp = 0x001de210
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 22  xul.dll!XPC_WN_CallMethod(JSContext *,unsigned int,JS::Value *) [XPCWrappedNativeJSOps.cpp:e4ecf720b3a1 : 983 + 0xd]
23:55:57     INFO -     eip = 0x5e7b6559   esp = 0x001ddfb0   ebp = 0x001de058
23:55:57     INFO -     Found by: call frame info with scanning
23:55:57     INFO - 23  xul.dll!js::jit::DebugModeOSRVolatileStub<js::jit::ICCompare_Fallback *>::operator->() [BaselineDebugModeOSR.h:e4ecf720b3a1 : 74 + 0xe0]
23:55:57     INFO -     eip = 0x60ffd000   esp = 0x001de008   ebp = 0x001de058
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 24  xul.dll!js::CompartmentChecker::check(JS::CallArgs const &) [jscntxtinlines.h:e4ecf720b3a1 : 155 + 0x14]
23:55:57     INFO -     eip = 0x60cd5d4a   esp = 0x001de050   ebp = 0x001de058
23:55:57     INFO -     Found by: call frame info with scanning
23:55:57     INFO - 25  xul.dll!js::CallJSNative(JSContext *,bool (*)(JSContext *,unsigned int,JS::Value *),JS::CallArgs const &) [jscntxtinlines.h:e4ecf720b3a1 : 282 + 0xe]
23:55:57     INFO -     eip = 0x60e8b7c3   esp = 0x001de060   ebp = 0x001de084
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 26  xul.dll!js::InternalCallOrConstruct(JSContext *,JS::CallArgs const &,js::MaybeConstruct) [Interpreter.cpp:e4ecf720b3a1 : 454 + 0x1d]
23:55:57     INFO -     eip = 0x60e91143   esp = 0x001de08c   ebp = 0x001de0dc
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 27  xul.dll!InternalCall [Interpreter.cpp:e4ecf720b3a1 : 499 + 0xb]
23:55:57     INFO -     eip = 0x60e90e89   esp = 0x001de0e4   ebp = 0x001de100
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 28  xul.dll!XPCWrappedNative_Trace(JSTracer *,JSObject *) [XPCWrappedNativeJSOps.cpp:e4ecf720b3a1 : 597 + 0x5]
23:55:57     INFO -     eip = 0x5e7b63d5   esp = 0x001de0ec   ebp = 0x001de100
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 29  xul.dll!js::jit::DoCallFallback [BaselineIC.cpp:e4ecf720b3a1 : 2354 + 0xa]
23:55:57     INFO -     eip = 0x60f97a44   esp = 0x001de108   ebp = 0x001de1a8
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 30  xul.dll!js::jit::DoCallFallback [BaselineIC.cpp:e4ecf720b3a1 : 2354 + 0xa]
23:55:57     INFO -     eip = 0x60f97a44   esp = 0x001de110   ebp = 0x001de1a8
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 31  0x16247af1
23:55:57     INFO -     eip = 0x16247af1   esp = 0x001de1b0   ebp = 0x001de218
23:55:57     INFO -     Found by: previous frame's frame pointer
23:55:57     INFO - 32  0x22337808
23:55:57     INFO -     eip = 0x22337808   esp = 0x001de220   ebp = 0x001de27c
23:55:57     INFO -     Found by: previous frame's frame pointer
23:55:57     INFO - 33  0x16240c55
23:55:57     INFO -     eip = 0x16240c55   esp = 0x001de284   ebp = 0x001de2b0
23:55:57     INFO -     Found by: previous frame's frame pointer
23:55:57     INFO - 34  xul.dll!EnterBaseline [BaselineJIT.cpp:e4ecf720b3a1 : 160 + 0x1e]
23:55:57     INFO -     eip = 0x60f9b6aa   esp = 0x001de2b8   ebp = 0x001de448
23:55:57     INFO -     Found by: previous frame's frame pointer
23:55:57     INFO - 35  xul.dll!js::jit::OptimizationInfo::compilerWarmUpThreshold(JSScript *,unsigned char *) [IonOptimizationLevels.cpp:e4ecf720b3a1 : 90 + 0x5]
23:55:57     INFO -     eip = 0x61157dab   esp = 0x001de2d4   ebp = 0x001de448
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 36  xul.dll!js::jit::EnterBaselineMethod(JSContext *,js::RunState &) [BaselineJIT.cpp:e4ecf720b3a1 : 200 + 0xd]
23:55:57     INFO -     eip = 0x60f9bf0f   esp = 0x001de450   ebp = 0x001de4f0
23:55:57     INFO -     Found by: call frame info
23:55:57     INFO - 37  xul.dll!js::jit::EnterBaselineMethod(JSContext *,js::RunState &) [BaselineJIT.cpp:e4ecf720b3a1 : 200 + 0xd]
23:55:57     INFO -     eip = 0x60f9bf0f   esp = 0x001de458   ebp = 0x001de6d8
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 38  xul.dll!js::jit::OptimizationInfo::compilerWarmUpThreshold(JSScript *,unsigned char *) [IonOptimizationLevels.cpp:e4ecf720b3a1 : 90 + 0x5]
23:55:57     INFO -     eip = 0x61157dab   esp = 0x001de484   ebp = 0x001de6d8
23:55:57     INFO -     Found by: stack scanning
23:55:57     INFO - 39  xul.dll!JS::GCVector<JS::Value,0,js::TempAllocPolicy>::trace(JSTracer *) [GCVector.h:e4ecf720b3a1 : 134 + 0x23]
23:55:57     INFO -     eip = 0x609e8f70   esp = 0x001de4b4   ebp = 0x001de400
23:55:57     INFO -     Found by: call frame info with scanning
Status: RESOLVED → REOPENED
Flags: needinfo?(cpeterson)
Resolution: FIXED → ---
I ported this change to TB (bug 1351721) and now this got backed out :-(
Jonathan, this PLDHashTable assertion fails during application shutdown because gfxPlatformFontList::FindAndAddFamilies() is inserting into hash table mOtherNamesMissed, while, earlier in the stack, gfxPlatformFontList::CleanupLoader() is already enumerating/reading mOtherNamesMissed. Do you have any suggestions why changing Windows' default monospace font from Courier New to Consolas would suddenly cause problems in this old code path (from bug 752394)? Is Consolas a localized font family name while Courier New is not?

During application shutdown, gfxPlatformFontList::CleanupLoader() enumerates mOtherNamesMissed:

  http://searchfox.org/mozilla-central/source/gfx/thebes/gfxPlatformFontList.cpp#1528

then calls gfxPlatformFontList::FindFamily(), which calls gfxPlatformFontList::FindAndAddFamilies(), thinks mOtherFamilyNamesInitialized is false, and then tries to mOtherNamesMissed->PutEntry():

  http://searchfox.org/mozilla-central/source/gfx/thebes/gfxPlatformFontList.cpp#719

Here is a better stack trace for the PLDHashTable assertion failure during the mochitest chrome tests:

https://treeherder.mozilla.org/logviewer.html#?job_id=91175543&repo=try&lineNumber=7768

22:12:42     INFO - GECKO(3532) | Assertion failure: IsIdle(oldState), at c:\builds\moz2_slave\try-w32-d-00000000000000000000\build\src\xpcom\ds\PLDHashTable.h:132
22:12:56     INFO - GECKO(3532) | #01: PLDHashTable::Add(void const *) [xpcom/ds/PLDHashTable.cpp:589]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #02: gfxPlatformFontList::FindAndAddFamilies(nsAString const &,nsTArray<gfxFontFamily *> *,gfxFontStyle *,double) [gfx/thebes/gfxPlatformFontList.cpp:723]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #03: gfxGDIFontList::FindAndAddFamilies(nsAString const &,nsTArray<gfxFontFamily *> *,gfxFontStyle *,double) [gfx/thebes/gfxGDIFontList.cpp:931]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #04: gfxPlatformFontList::FindFamily(nsAString const &,gfxFontStyle *,double) [gfx/thebes/gfxPlatformFontList.h:328]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #05: gfxPlatformFontList::CleanupLoader() [gfx/thebes/gfxPlatformFontList.cpp:1529]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #06: gfxFontInfoLoader::ShutdownObserver::Observe(nsISupports *,char const *,char16_t const *) [gfx/thebes/gfxFontInfoLoader.cpp:126]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #07: nsObserverList::NotifyObservers(nsISupports *,char const *,char16_t const *) [xpcom/ds/nsObserverList.cpp:112]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #08: nsObserverService::NotifyObservers(nsISupports *,char const *,char16_t const *) [xpcom/ds/nsObserverService.cpp:285]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #09: nsAppStartup::Quit(unsigned int) [toolkit/components/startup/nsAppStartup.cpp:465]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #10: NS_InvokeByIndex
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #11: CallMethodHelper::Invoke() [js/xpconnect/src/XPCWrappedNative.cpp:2010]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #12: XPCWrappedNative::CallMethod(XPCCallContext &,XPCWrappedNative::CallMode) [js/xpconnect/src/XPCWrappedNative.cpp:1296]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #13: XPC_WN_CallMethod(JSContext *,unsigned int,JS::Value *) [js/xpconnect/src/XPCWrappedNativeJSOps.cpp:983]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #14: js::CallJSNative(JSContext *,bool (*)(JSContext *,unsigned int,JS::Value *),JS::CallArgs const &) [js/src/jscntxtinlines.h:291]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #15: js::InternalCallOrConstruct(JSContext *,JS::CallArgs const &,js::MaybeConstruct) [js/src/vm/Interpreter.cpp:455]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #16: InternalCall [js/src/vm/Interpreter.cpp:500]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #17: Interpret [js/src/vm/Interpreter.cpp:2997]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #18: js::RunScript(JSContext *,js::RunState &) [js/src/vm/Interpreter.cpp:395]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #19: js::InternalCallOrConstruct(JSContext *,JS::CallArgs const &,js::MaybeConstruct) [js/src/vm/Interpreter.cpp:473]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #20: InternalCall [js/src/vm/Interpreter.cpp:500]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #21: js::Call(JSContext *,JS::Handle<JS::Value>,JS::Handle<JS::Value>,js::AnyInvokeArgs const &,JS::MutableHandle<JS::Value>) [js/src/vm/Interpreter.cpp:519]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #22: JS_CallFunctionValue(JSContext *,JS::Handle<JSObject *>,JS::Handle<JS::Value>,JS::HandleValueArray const &,JS::MutableHandle<JS::Value>) [js/src/jsapi.cpp:2826]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #23: nsFrameMessageManager::ReceiveMessage(nsISupports *,nsIFrameLoader *,bool,nsAString const &,bool,mozilla::dom::ipc::StructuredCloneData *,mozilla::jsipc::CpowHolder *,nsIPrincipal *,nsTArray<mozilla::dom::ipc::StructuredCloneData> *) [dom/base/nsFrameMessageManager.cpp:1108]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #24: nsFrameMessageManager::ReceiveMessage(nsISupports *,nsIFrameLoader *,bool,nsAString const &,bool,mozilla::dom::ipc::StructuredCloneData *,mozilla::jsipc::CpowHolder *,nsIPrincipal *,nsTArray<mozilla::dom::ipc::StructuredCloneData> *) [dom/base/nsFrameMessageManager.cpp:1138]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #25: nsFrameMessageManager::ReceiveMessage(nsISupports *,nsIFrameLoader *,bool,nsAString const &,bool,mozilla::dom::ipc::StructuredCloneData *,mozilla::jsipc::CpowHolder *,nsIPrincipal *,nsTArray<mozilla::dom::ipc::StructuredCloneData> *) [dom/base/nsFrameMessageManager.cpp:1138]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #26: nsFrameMessageManager::ReceiveMessage(nsISupports *,nsIFrameLoader *,bool,nsAString const &,bool,mozilla::dom::ipc::StructuredCloneData *,mozilla::jsipc::CpowHolder *,nsIPrincipal *,nsTArray<mozilla::dom::ipc::StructuredCloneData> *) [dom/base/nsFrameMessageManager.cpp:1138]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #27: nsSameProcessAsyncMessageBase::ReceiveMessage(nsISupports *,nsIFrameLoader *,nsFrameMessageManager *) [dom/base/nsFrameMessageManager.cpp:2076]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #28: nsAsyncMessageToParent::HandleMessage() [dom/base/nsInProcessTabChildGlobal.cpp:63]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #29: mozilla::dom::SameProcessMessageQueue::Runnable::Run() [dom/base/SameProcessMessageQueue.cpp:73]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #30: nsThread::ProcessNextEvent(bool,bool *) [xpcom/threads/nsThread.cpp:1270]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #31: NS_ProcessNextEvent(nsIThread *,bool) [xpcom/threads/nsThreadUtils.cpp:389]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #32: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate *) [ipc/glue/MessagePump.cpp:96]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #33: MessageLoop::RunInternal() [ipc/chromium/src/base/message_loop.cc:238]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #34: MessageLoop::RunHandler() [ipc/chromium/src/base/message_loop.cc:232]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #35: MessageLoop::Run() [ipc/chromium/src/base/message_loop.cc:212]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #36: nsBaseAppShell::Run() [widget/nsBaseAppShell.cpp:158]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #37: nsAppShell::Run() [widget/windows/nsAppShell.cpp:271]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #38: nsAppStartup::Run() [toolkit/components/startup/nsAppStartup.cpp:284]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #39: XREMain::XRE_mainRun() [toolkit/xre/nsAppRunner.cpp:4538]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #40: XREMain::XRE_main(int,char * * const,mozilla::BootstrapConfig const &) [toolkit/xre/nsAppRunner.cpp:4718]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #41: XRE_main(int,char * * const,mozilla::BootstrapConfig const &) [toolkit/xre/nsAppRunner.cpp:4811]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #42: mozilla::BootstrapImpl::XRE_main(int,char * * const,mozilla::BootstrapConfig const &) [toolkit/xre/Bootstrap.cpp:45]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #43: do_main [browser/app/nsBrowserApp.cpp:237]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #44: NS_internal_main(int,char * *,char * *) [browser/app/nsBrowserApp.cpp:307]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #45: wmain [toolkit/xre/nsWindowsWMain.cpp:118]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #46: __scrt_common_main_seh [f:/dd/vctools/crt/vcstartup/src/startup/exe_common.inl:253]
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #47: kernel32.dll + 0x53c45
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #48: ntdll.dll + 0x637f5
22:12:56     INFO - 
22:12:56     INFO - GECKO(3532) | #49: ntdll.dll + 0x637c8
Flags: needinfo?(cpeterson) → needinfo?(jfkthame)
This got backed out of 55 AIUI, updating status flag.
Bug 1354004 is going to land in 57. Time to go ahead along with Bug 1342741 to give a fresh look?
(In reply to Kohei Yoshino [:kohei] from comment #60)
> Bug 1354004 is going to land in 57. Time to go ahead along with Bug 1342741
> to give a fresh look?

I can try again. The challenge with changing the default monospace font is that each operating system's monospace fonts have different dimensions and many layout reftests are tuned to work the current fonts.

Changing Windows' default monospace font to Consolas or Lucida Console triggered some hashtable reentrancy assertion failures during shutdown, as detailed in comment 58.
Looks like this will not land for 57, but we could still consider it for 59 or maybe even 58. 
I'll go ahead and track for 59.
I don't think we should track this for 59. I'm not actively working on it. I can change the fonts and fix the tests, but the Try tests hit some hashtable reentrancy assertion failures that I don't understand.
Alias: Consolas
Assignee: cpeterson → nobody
Summary: Use Consolas as the default monospace font on Windows Vista & 7 → Use Consolas as the default monospace font on Windows
OK, thanks. I'll remove it from the release note triage as well. But if we ever fix this, a release note would be nice.
relnote-firefox: ? → ---
I filed this yesterday ( https://bugzilla.mozilla.org/show_bug.cgi?id=1454196 ) I really hope someone can start working on this because Firefox has built a reputation for having better text rendering than Chrome (text is often too thin/low weight in Chrome), I'm even seeing it mentioned in articles and blog posts. This is one of the major exceptions where Chrome renders text at a more reasonable weight than Firefox. I don't think it has to be Consolas but it really needs to be thicker/"heavier" than the current, please see the attached screenshot in 1454196
Thanks for the link, Will. I have a patch to use Consolas in Firefox, but it breaks some Firefox tests. I haven't gotten around to fixing all the tests yet because they are finicky and I don't think many websites use `font-family: monospace` for their body text. But apparently the Chromium bug tracker does. :)

Consolas density is closer to density of normal fonts like Arial, and much more readable, especially on HiDPI (e.g. 4K@200%) displays where Courier New is horribly thin and barely readable like in paper books. And if for sites, the font can at least be changed via userstyles with extensions like Stylus, userstyles apparently cannot help with user interface of such addons themselves.

Consolas is built into Windows Vista+, so it’s now basically always available under Windows.

I suspect this improvement could be done by a simple change in the Firefox default stylesheet.

See the demo page for a live comparison and screenshots.

Keywords: parity-edge
See Also: → Consolas
Status: REOPENED → RESOLVED
Closed: 7 years ago2 years ago
Resolution: --- → DUPLICATE
See Also: Consolas
Alias: Consolas
Target Milestone: mozilla55 → ---
No longer blocks: 1454196
No longer blocks: 468169, 706047, 1344750
No longer depends on: xp-eol
Flags: needinfo?(jfkthame)
See Also: → 1351721
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: