Closed Bug 1381938 Opened 7 years ago Closed 4 years ago

Switch to non-native theming of widgets for content on Windows, disabled by default behind widget.disable-native-theme-for-content pref

Categories

(Core :: Widget: Win32, enhancement, P1)

Unspecified
Windows
enhancement

Tracking

()

RESOLVED FIXED
mozilla75
Tracking Status
firefox75 --- fixed

People

(Reporter: Alex_Gaynor, Assigned: spohl)

References

(Blocks 2 open bugs)

Details

Attachments

(1 file, 6 obsolete files)

nsNativeThemeWin makes heavy use of the win32k APIs, so this is a blocker for the win32k lockdown effort.

https://docs.google.com/document/d/1d21-ff2mlNlNYX1CW0G9yRNNqSjMkjXRo9-MOXe1krs/edit?ts=596d1880#heading=h.xq1rtm3jj9o1 has a full set of stack traces, but a few example ones:

    win32u!NtUserGetWindowDC
    UxTheme!CImageFile::SelectCorrectImageFile+0x2cc
    UxTheme!CImageFile::GetScaledContentMargins+0x36
    UxTheme!CImageFile::GetBackgroundContentRect+0x36
    UxTheme!GetThemeBackgroundContentRect+0x127
    xul!nsNativeThemeWin::GetWidgetBorder+0x16b
    xul!nsBox::GetXULBorder+0x9d
    xul!nsIFrame::GetXULBorderAndPadding+0x22


    win32u!NtGdiDrawStream
    gdi32full!GdiDrawStream+0x5c
    UxTheme!CImageFile::DrawBackgroundDS+0x289
    UxTheme!CImageFile::DrawImageInfo+0x26c
    UxTheme!CImageFile::DrawBackground+0x66
    UxTheme!DrawThemeBackground+0x23c
    xul!nsNativeThemeWin::DrawWidgetBackground+0xb55
    xul!nsDisplayThemedBackground::PaintInternal+0xb0
    xul!nsDisplayThemedBackground::Paint+0x13
Component: Security: Process Sandboxing → Widget: Win32
Whiteboard: sb+
Blocks: 1151941
Priority: -- → P3
Assignee: nobody → jmathies
Priority: P3 → P1
Attached patch wip (obsolete) — Splinter Review
This is turning out to be a bit tricky, but not impossible on Windows. I'm unsure about GTK and OSX. 

First nsITheme supports a pretty short and well contained liost of apis. A few of these apis are easily remoted without much work. Then there is a subset that rely on various UX queues to make decisions, all of which rely on a presentation context object and an nsIFrame pointer for information. On Windows the use of these two pointers can be factored out.

The last api that presents a large hurdle is nsITheme's DrawThemeBackground. On Windows this api takes a gfxContext which wraps a DrawTarget and surface. This object gets handed to an old wrapper called gfxWindowsNativeDrawing which facilitates painting to the target, and in some cases facilitates alpha blending using alpha extraction.

Pretty sure we can create a fresh gfxContext + gfxWindowsNativeDrawing which interacts with a DrawTarget that is backed by a shared memory segment of some sort. Not sure if something like this exists though.. need to dig a bit more.

Not sure if I want to pursue this on all platforms.. we still have non-native theming in the works. TBD as I do more research.
Whiteboard: sb+ → [fingerprinting][sb+]
Blocks: linux-nnt
Priority: P1 → P2
Whiteboard: [fingerprinting][sb+] → [fingerprinting][sb+][overhead:noted]
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → WONTFIX
Reopening this for win32 theming work.
Assignee: jmathies → nobody
Status: RESOLVED → REOPENED
Resolution: WONTFIX → ---
Summary: Move nsNativeThemeWin calls out of the content process → Switch to css based theming of widgets for content
Summary: Switch to css based theming of widgets for content → Switch to css based theming of widgets for content on Windows
So, uhm, is the intention here to stop supporting platform-themed form controls?
This seems like a rather fundamental change that should be discussed on dev.platform
but I can't find any posts about it there.
Flags: needinfo?(jmathies)
(In reply to Mats Palmgren (:mats) from comment #5)
> So, uhm, is the intention here to stop supporting platform-themed form
> controls?
> This seems like a rather fundamental change that should be discussed on
> dev.platform
> but I can't find any posts about it there.

Native theming is already a mess on windows. Check out https://developer.microsoft.com/en-us/microsoft-edge/tools/screenshots/?url=http%3A%2F%2Fnativeformelements.com%2F?

We would still be using platformed-themed controls for Chrome.

What about this change worries you?
Flags: needinfo?(mats)
(In reply to Mats Palmgren (:mats) from comment #5)
> So, uhm, is the intention here to stop supporting platform-themed form
> controls?
> This seems like a rather fundamental change that should be discussed on
> dev.platform
> but I can't find any posts about it there.

We discussed this with Product but haven't posted on dev.plat. Our motivation here is security related: turning on os level security features on Windows which protects against kernel exploits. Due to this implementing these changes isn't really open for discussion.

That said understand your concern, I'll make sure the dev who works on this gives dev.platform a heads up seeking feedback.
Flags: needinfo?(jmathies)
> Native theming is already a mess on windows.

I don't see any "mess" there.  What are you referring to?

> We would still be using platformed-themed controls for Chrome.

Well, that's even worse.  Making buttons look different in "UI"
and web pages is... yikes.

> What about this change worries you?

See bug 1411425 comment 36, and dbaron's comments in bug 997190.

And even /if/ it can be implemented correctly, I consider platform-themed
form controls a feature, not a bug.  It certainly needs to be widely
discussed before a feature like this is removed.
Flags: needinfo?(mats)
(In reply to Mats Palmgren (:mats) from comment #8)
> > Native theming is already a mess on windows.
> 
> I don't see any "mess" there.  What are you referring to?

All of the browsers draw platformed-themed controls differently. Even Microsoft is not consistent between Edge and IE 11.

As I understand it, we're the only browser on Windows 10 that's using the DrawThemeBackground API to draw our controls. I believe all of the other browsers just draw controls the same way as any other element. Continuing to use DrawThemeBackground as is, is not possible because it's not allowed when we remove win32k access from the content process.

If we did want to use DrawThemeBackground we'd need to come up with some kind of remoting strategy.

Do you have a suggestion for an alternative way to proceed here?
Flags: needinfo?(mats)
Fetching theme values from a remote process that has win32 access and
caching the values in the content process could work.

Alternatively, storing all the values we need upfront in the content
process and then dropping access to win32 APIs before any untrusted
content is processed might work - depending on what sandboxing
techniques you plan to use.  (like OpenBSD's "pledge" model)
Flags: needinfo?(mats)
win32k dropping is enabled at process creation time, so it'd need to be fetched it a remote process and passed down, not at startup.
(In reply to Mats Palmgren (:mats) from comment #10)
> Fetching theme values from a remote process that has win32 access and
> caching the values in the content process could work.

There aren't theme values. The Windows API that we're using (DrawThemeBackground) is more like draw a widget of this type and this size to this DC. Using a sync IPC to do this would make our already bad widget drawing performance much worse.
Flags: needinfo?(mats)
I'm just spitballing here, but Android's NinePatch format comes to mind.
(For the unfamiliar, see https://developer.android.com/guide/topics/graphics/drawables#nine-patch)

My thought here is that in the chrome process we could use DrawThemeBackground to create and cache a bunch of small images that we then interpret as "NinePatch" images that can be stretched to fit the widgets as appropriate.
(Of course, I suppose the tricky part is figuring out which parts of the cached image are stretchable, but hopefully we could pull enough attributes via the Theming API that we could possibly compute that)
(In reply to Jeff Muizelaar [:jrmuizel] from comment #12)

Well, I'm not an expert on Win32 so you shouldn't ask me for solutions.
I'm just saying that I find it questionable to remove features that
affect how web content looks without a wider discussion first.
(I still haven't seen any post to dev.platform, BTW.)
Flags: needinfo?(mats)
(In reply to Alex Gaynor [:Alex_Gaynor] from comment #11)
> win32k dropping is enabled at process creation time, so it'd need to be
> fetched it a remote process and passed down, not at startup.

I'm pretty sure it can be enabled after start-up.
Slightly irrelevant because as jrmuizel points out, without some caching plus sizing scheme we need to call the actual API.

I also think mats is right in that we should post to dev.platform about this.
Whiteboard: [fingerprinting][sb+][overhead:noted] → [fingerprinting][sb+][overhead:noted][fp-triaged]
Assignee: nobody → spohl.mozilla.bugs
Attachment #9049340 - Attachment is obsolete: true
No longer blocks: linux-nnt
Whiteboard: [fingerprinting][sb+][overhead:noted][fp-triaged]
Priority: P2 → P1
No longer blocks: linux-nnt
Attachment #9049348 - Attachment is obsolete: true
Blocks: 1381022

I don't know how you plan to use content-common.css, but if this is going to be used in forms.css, it's going to create web compat issues, since we're changing the default UA styles of HTML elements. Also, using this in the Firefox UI will likely cause regressions to specificity issues (this is fixable, but the first issue isn't).

Can't we use Chrome's approach of defining their own "native" widget appearance on Windows? So instead of making -moz-appearance: button render the native Windows button appearance, it would paint an image that we would create ourselves as the background. This avoids the need of having to refactor CSS and having to deal with web compat problems.

I don't know much about this code, but I guess that would mean rewriting widget/windows/nsNativeThemeWin.cpp to get rid of the native theme calls.

Or if we still want to keep native theme calls for the parent process, we could have a brand new widget/nsBasicTheme.cpp and make nsPresContext::GetTheme() return the theme conditionally from widget/windows/nsNativeThemeWin.cpp or widget/nsBasicTheme.cpp.

(In reply to Tim Nguyen :ntim from comment #21)

I don't know how you plan to use content-common.css, but if this is going to be used in forms.css, it's going to create web compat issues, since we're changing the default UA styles of HTML elements. Also, using this in the Firefox UI will likely cause regressions to specificity issues (this is fixable, but the first issue isn't).

The current idea isn't so much to use content-common.css in forms.css, but rather in addition to forms.css, with the rules in content-common.css taking precedence over forms.css.

In terms of web compat, can you give specific examples?

content-common.css uses a lot of the same CSS that is used by the Firefox UI, but is not itself expected to be used by the Firefox UI. This may get refactored at some point and consolidated, but we are not trying to do this here.

Flags: needinfo?(ntim.bugs)

In terms of web compat, can you give specific examples?

Mats mentioned the concerns in comment 8, it doesn't sound like the scope of the current patch will let us avoid those.

If I understand correctly the current patches, basically every property that is set by content-common.css but not set by forms.css will basically cause compat issues: one example is the box-shadow/outline on focused inputs, buttons, which is something websites will now have to override with box-shadow: none if they define their own input border/background styles.

That's just one of many issues that could arise from changing the web content default UA CSS.

Since content-common.css would not be able to set more properties than forms.css, then it sort of makes content-common.css useless, since forms.css styles would take precedence over content-common.css all the time, meaning that just changing the different -moz-appearance values to none in forms.css would have the same effect as this patch.

I think a more safe approach here is to implement a new fake "native" theme for -moz-appearance: button, textfield, etc. that doesn't involve any platform API calls using C++, so the default UA styles don't need to change at all. That's basically what Blink is doing at the moment on Windows.

It would also give you more flexibility in regards of what default appearance you can apply, which is beneficial if you need to implement extra default styling for accessibility.

Flags: needinfo?(ntim.bugs)

(In reply to Tim Nguyen :ntim from comment #25)

I think a more safe approach here is to implement a new fake "native" theme for -moz-appearance: button, textfield, etc. that doesn't involve any platform API calls using C++, so the default UA styles don't need to change at all.

I agree, Tim's suggestion is the better approach.

The corresponding Android bug for using C++ theming instead of CSS overrides is bug 958999.

(In reply to Markus Stange [:mstange] from comment #26)

(In reply to Tim Nguyen :ntim from comment #25)

I think a more safe approach here is to implement a new fake "native" theme for -moz-appearance: button, textfield, etc. that doesn't involve any platform API calls using C++, so the default UA styles don't need to change at all.

I agree, Tim's suggestion is the better approach.

To confirm my understanding: You both prefer an approach along the lines of what was mentioned in comment 13 and comment 14 due to the nature of the API as explained in comment 12, correct? The difficulty here has always been that the Windows API isn't just returning a set of values.

What if we only changed the properties that are currently set by forms.css? This would restyle the "Moz Unstyled Inputs" on the left side of http://stephenhorlander.com/form-controls.html. This wouldn't allow us to mirror the existing UX on our about: pages as we intended, but it may be an acceptable compromise. This would require some exploration to see how far we can take our styling and whether or not the result is acceptable.

Flags: needinfo?(ntim.bugs)
Flags: needinfo?(mstange)

(In reply to Stephen A Pohl [:spohl] from comment #28)

(In reply to Markus Stange [:mstange] from comment #26)

(In reply to Tim Nguyen :ntim from comment #25)

I think a more safe approach here is to implement a new fake "native" theme for -moz-appearance: button, textfield, etc. that doesn't involve any platform API calls using C++, so the default UA styles don't need to change at all.

I agree, Tim's suggestion is the better approach.

To confirm my understanding: You both prefer an approach along the lines of what was mentioned in comment 13 and comment 14 due to the nature of the API as explained in comment 12, correct? The difficulty here has always been that the Windows API isn't just returning a set of values.

No, I was suggesting more simple than comment 13 and comment 14, we could create a basic C++ stub theme that doesn't look native at all. This is what Google Chrome is doing.

Flags: needinfo?(ntim.bugs)
Attachment #9053311 - Attachment is obsolete: true
Attachment #9053310 - Attachment is obsolete: true

Changing bug title to more accurately reflect the current approach.

Summary: Switch to css based theming of widgets for content on Windows → Switch to non-native theming of widgets for content on Windows
Attachment #8977091 - Attachment is obsolete: true
Attachment #9069019 - Attachment description: Bug 1381938: Add native theme for Windows that avoids native system calls. → Bug 1381938: Add native theme for Windows that avoids native system calls. r=mstange
Attachment #9102612 - Attachment is obsolete: true
Blocks: Consolas
Pushed by spohl@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/3e2d9328d59b
Add native theme for Windows that avoids native system calls. r=mstange,dbaron

FYI, This probably blocks "Bug 1534333 - radio and checkbox need vector graphics" as well...which is likely a dup of 649948.

This is currently disabled by default behind the widget.disable-native-theme-for-content pref. I will be filing several followup bugs in the coming days, including a bug to turn this on by default.

Flags: needinfo?(mstange)
Summary: Switch to non-native theming of widgets for content on Windows → Switch to non-native theming of widgets for content on Windows, disabled by default behind widget.disable-native-theme-for-content pref

FWIW, if you're in the mood to innovate a bit, a unique appearance for indeterminate radios (disabled and not) would be a nice addition.
Currently, they can't be visually distinguished from unchecked radios...in Chromium, Edgium, current FF implementations, or with aforementioned pref set.

Status: REOPENED → RESOLVED
Closed: 6 years ago4 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla75

(In reply to Cristina Coroiu [:ccoroiu] from comment #39)

https://hg.mozilla.org/mozilla-central/rev/3e2d9328d59b

\o/ Woot!

Depends on: 1615038
Depends on: 1615057
Depends on: 1615092
Depends on: 1615095
Depends on: 1615096
Depends on: 1615100
Depends on: 1615101
Depends on: 1615103
Depends on: 1615105

Some feedback on the designs (not knowing a better place to put this at present), beyond things covered by bugs newly created:

  • The increase from 13px to 17px for checkboxes and radio buttons while sticking with vertical-align: baseline harms the layout of the vast majority of uses of checkboxes. I’m immediately seeing all kinds of ugliness all over the place, in addon preference pages, in websites, everywhere that doesn’t basically replace checkboxes.

  • That you can’t reduce the width of checkboxes and radio buttons below 17px can prevent sites from fixing that, too, and I suspect it may also harm some (though not most) “replace the checkbox widget” styles due to the control-made-invisible being larger than desired and unshrinkable.

  • Making buttons largely indistinguishable from text boxes is extremely bad. (At a casual glance, until hover or focus, the difference is only the side padding of buttons.) They need to be styled visibly differently.

    • The buttons don’t look like buttons in any way. They should.
  • <select> now lacks any visible focus indicator.

  • In its hover behaviour, <select> is now styled more like a button than a textbox, which is contrary to how Windows has always (literally always; I can think of no counterexamples ever) treated them (though in line with most of macOS, where the distinction is fairly subtle, and in line with GTK, where the difference is huge and quite obnoxious).

  • I believe the filled blue colouring for radio buttons and checkboxes is a mistake—it’s too opinionated, and clashes with existing site designs in a way that the old non-filled black style seldom did. (Related, blue border around a white centre feels not right for Windows, which has always had a border, then a white ring, then a filled centre; though it doesn’t feel as not-right as I thought it would.)

  • Parts of the borders seem to be drawn outside the bounding box, which causes trouble with overflow, as seen at https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input. <input type=file> is a particularly severe example, being visually broken always unless you add padding: 1px or similar.

  • Borders are also drawn on subpixels, which is undesirable.

  • Unchecked checkbox and radio having a much thicker border than other controls feels weird, though I can understand why you’d do it. But for reference, Windows’ now-recommended styles use that sort of thicker border on all controls. But doing it everywhere would probably harm layout and appearance much more.

  • I’m not sold on the border radius for checkboxes. It’s definitely not Windows’ way, and subjectively feels a tad more opinionated than not. I could say similar about text inputs (with which the checkbox radius is broadly consistent), but it doesn’t feel so significant for them, despite definitely not being the Windows way.

  • The default invalid form field box-shadow clashes with the checkbox and radio button appearance.

  • On <input type=range>, the hit boxes for the up/down arrows don’t extend to the right edge of the control, and they should.

For checkbox and radio button styles, I feel their appearance in about:preferences is closer to Windows’ conventions and a bit more neutral, though I’d still consider its blue a tad dubious for general use.

I'm going to n-i :shorlander for the feedback in comment 41. Note that there are some things (such as the lack of focus rings/indicators, bug 1615095) that are filed as follow up bugs that need to be addressed before we can turn this on by default.

Flags: needinfo?(shorlander)

A few more notes from a solid day of using it now:

  • The indeterminate checkbox style is wonky—looks like it’s trying to draw a white dash, but didn’t replace the grey outline with the blue fill.

  • I’ve encountered genuine layout and clipping problems in a few more places from the drastic increase in the size (particularly height, from padding) of buttons and text boxes. Things like a textbox now overflowing its containers vertically.

  • The thicker borders on checkboxes and radio buttons are clashing visually all over the place—it’s normal for sites to style text boxes but not checkboxes and radio buttons, probably mostly because doing them is much more fiddly; so this matters. The more I use the web at large, the more I become convinced that 2px rather than 1px borders is a bad idea.

  • Most web designs have more or less depended on the idea that checkboxes and radio buttons are 13px×13px. Increasing it to 17px×17px is regularly breaking layouts by a few pixels and leaving things surprisingly ugly, occasionally causing content clipping (e.g. the “enable flair on this subreddit” checkbox and label on https://old.reddit.com/r/rust if you’re logged in) and regularly leaving controls badly misaligned with text, especially in apps that have gone for smaller font-sizes (remember that 16px is the default for web content, but desktop apps have historically used decidedly smaller font sizes for their chrome, and mostly still do), which are also the things more likely to have lots of form controls.

  • As an example of these last two points, the overly large checkboxes with their thick borders and rounded corners are comically out of place in Fastmail’s webmail in the list of emails, especially in the dark theme. (If it goes ahead as it is, it might be just enough for me to decide we should implement our own checkbox and radio button style on desktop. I don’t consider this a good thing.)

  • Within the current macOS-like style, if the radio button is made huge, I expect the thickness of the blue border to scale with the radio button. Currently it stays the same thickness while the middle white grows, which makes it less obviously an oversized radio button.

  • On the colour thing, I wonder whether there’s a way of letting the site specify colours to use, particularly for the primary blue. Simplest thing I can think of is defaulting to color: blue; (rather than color: inherit or similar), but that would be rather problematic. Not sure whether there’s active work in any standard that could sort this out. A custom property that the browser uses, a ::part(), I dunno.

I'd like to add to the feedback: When hovering a checkbox or radio button, the color appears to darken. Darker colors usually are used to show a pressed state, not a hover state, so this is a bit misleading to me. Generally, hover is indicated by a lighter color.

Depends on: 1617934
Depends on: 1617936
Depends on: 1617938
Depends on: 1617939
Depends on: 1617940

Filed several bugs to capture the feedback received so far (see individual bugs below). I've need-info'd :shorlander in the respective bugs, so removing it from this bug here:

(In reply to Chris Morgan from comment #41 and comment #43)

Some feedback on the designs (not knowing a better place to put this at present), beyond things covered by bugs newly created:

  • The increase from 13px to 17px for checkboxes and radio buttons while sticking with vertical-align: baseline harms the layout of the vast majority of uses of checkboxes. I’m immediately seeing all kinds of ugliness all over the place, in addon preference pages, in websites, everywhere that doesn’t basically replace checkboxes.

  • That you can’t reduce the width of checkboxes and radio buttons below 17px can prevent sites from fixing that, too, and I suspect it may also harm some (though not most) “replace the checkbox widget” styles due to the control-made-invisible being larger than desired and unshrinkable.

  • I believe the filled blue colouring for radio buttons and checkboxes is a mistake—it’s too opinionated, and clashes with existing site designs in a way that the old non-filled black style seldom did. (Related, blue border around a white centre feels not right for Windows, which has always had a border, then a white ring, then a filled centre; though it doesn’t feel as not-right as I thought it would.)

  • Unchecked checkbox and radio having a much thicker border than other controls feels weird, though I can understand why you’d do it. But for reference, Windows’ now-recommended styles use that sort of thicker border on all controls. But doing it everywhere would probably harm layout and appearance much more.

  • I’m not sold on the border radius for checkboxes. It’s definitely not Windows’ way, and subjectively feels a tad more opinionated than not. I could say similar about text inputs (with which the checkbox radius is broadly consistent), but it doesn’t feel so significant for them, despite definitely not being the Windows way.

  • The default invalid form field box-shadow clashes with the checkbox and radio button appearance.

For checkbox and radio button styles, I feel their appearance in about:preferences is closer to Windows’ conventions and a bit more neutral, though I’d still consider its blue a tad dubious for general use.

  • The indeterminate checkbox style is wonky—looks like it’s trying to draw a white dash, but didn’t replace the grey outline with the blue fill.

  • The thicker borders on checkboxes and radio buttons are clashing visually all over the place—it’s normal for sites to style text boxes but not checkboxes and radio buttons, probably mostly because doing them is much more fiddly; so this matters. The more I use the web at large, the more I become convinced that 2px rather than 1px borders is a bad idea.

  • Most web designs have more or less depended on the idea that checkboxes and radio buttons are 13px×13px. Increasing it to 17px×17px is regularly breaking layouts by a few pixels and leaving things surprisingly ugly, occasionally causing content clipping (e.g. the “enable flair on this subreddit” checkbox and label on https://old.reddit.com/r/rust if you’re logged in) and regularly leaving controls badly misaligned with text, especially in apps that have gone for smaller font-sizes (remember that 16px is the default for web content, but desktop apps have historically used decidedly smaller font sizes for their chrome, and mostly still do), which are also the things more likely to have lots of form controls.

  • As an example of these last two points, the overly large checkboxes with their thick borders and rounded corners are comically out of place in Fastmail’s webmail in the list of emails, especially in the dark theme. (If it goes ahead as it is, it might be just enough for me to decide we should implement our own checkbox and radio button style on desktop. I don’t consider this a good thing.)

  • Within the current macOS-like style, if the radio button is made huge, I expect the thickness of the blue border to scale with the radio button. Currently it stays the same thickness while the middle white grows, which makes it less obviously an oversized radio button.

  • On the colour thing, I wonder whether there’s a way of letting the site specify colours to use, particularly for the primary blue. Simplest thing I can think of is defaulting to color: blue; (rather than color: inherit or similar), but that would be rather problematic. Not sure whether there’s active work in any standard that could sort this out. A custom property that the browser uses, a ::part(), I dunno.

Bug 1617938

  • Making buttons largely indistinguishable from text boxes is extremely bad. (At a casual glance, until hover or focus, the difference is only the side padding of buttons.) They need to be styled visibly differently.

  • The buttons don’t look like buttons in any way. They should.

  • I’ve encountered genuine layout and clipping problems in a few more places from the drastic increase in the size (particularly height, from padding) of buttons and text boxes. Things like a textbox now overflowing its containers vertically.

Bug 1617939

  • <select> now lacks any visible focus indicator.

  • In its hover behaviour, <select> is now styled more like a button than a textbox, which is contrary to how Windows has always (literally always; I can think of no counterexamples ever) treated them (though in line with most of macOS, where the distinction is fairly subtle, and in line with GTK, where the difference is huge and quite obnoxious).

Bug 1617940

  • Parts of the borders seem to be drawn outside the bounding box, which causes trouble with overflow, as seen at https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input. <input type=file> is a particularly severe example, being visually broken always unless you add padding: 1px or similar.

  • Borders are also drawn on subpixels, which is undesirable.

Bug 1615026

  • On <input type=range>, the hit boxes for the up/down arrows don’t extend to the right edge of the control, and they should.

Bug 1615100

(In reply to Sam Johnson from comment #44)

I'd like to add to the feedback: When hovering a checkbox or radio button, the color appears to darken. Darker colors usually are used to show a pressed state, not a hover state, so this is a bit misleading to me. Generally, hover is indicated by a lighter color.

Bug 1617938

Flags: needinfo?(shorlander)

Should we maybe reshuffle some of these dependencies? Using a closed bug for tracking is a bit annoying.

(In reply to Tom Schuster [:evilpie] from comment #46)

Should we maybe reshuffle some of these dependencies? Using a closed bug for tracking is a bit annoying.

I agree.

Blocks: 1615105
Regressions: 1625716
Duplicate of this bug: 1288513
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: