Closed Bug 1325676 Opened 3 years ago Closed 3 years ago

Prevent touchscreens on Windows 8.x from instantiating accessibility

Categories

(Core :: Widget: Win32, defect)

Unspecified
Windows
defect
Not set

Tracking

()

VERIFIED FIXED
mozilla53
Tracking Status
firefox50 --- wontfix
firefox51 --- wontfix
firefox52 --- verified
firefox53 --- fixed

People

(Reporter: aklotz, Assigned: aklotz)

References

Details

(Whiteboard: aes+)

Attachments

(1 file, 1 obsolete file)

The patch in bug 1323521 doesn't work on Windows 8.x due to implementation differences.

We'll have to see what we can do about this case.
It turns out that the a11y hook function in tiptsf.dll is exported, so we can intercept it. \o/
Assignee: nobody → aklotz
Status: NEW → ASSIGNED
Comment on attachment 8822561 [details]
Bug 1325676: Prevent Windows 8 touchscreen support from instantiating a11y;

https://reviewboard.mozilla.org/r/101426/#review102016

sweet, thansk for working on this.
Attachment #8822561 - Flags: review?(jmathies) → review+
Pushed by aklotz@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/e3e129629026
Prevent Windows 8 touchscreen support from instantiating a11y; r=jimm
Backed out for asserting in nsWindow.cpp on Windows 8 x64 debug:

https://hg.mozilla.org/integration/autoland/rev/63e9089ecf8b8e5e05a83864c365e96b56c3f1ad

Push showing failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&revision=ddb344719745ea1785d86b468a1eca344373aa31
Failure log example: https://treeherder.mozilla.org/logviewer.html#?job_id=65931649&repo=autoland

12:10:30     INFO - TEST-INFO | started process Main app process
12:10:30     INFO - ### XPCOM_MEM_BLOAT_LOG defined -- logging bloat/leaks to c:\users\cltbld~1.t-w\appdata\local\temp\tmphq6yaz.mozrunner\runtests_leaks.log
12:10:30     INFO - [3148] WARNING: Failed to load startupcache file correctly, removing!: file c:/builds/moz2_slave/autoland-w64-d-000000000000000/build/src/startupcache/StartupCache.cpp, line 218
12:10:30     INFO - [3148] WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file c:/builds/moz2_slave/autoland-w64-d-000000000000000/build/src/xpcom/base/nsSystemInfo.cpp, line 116
12:10:30     INFO - [3148] WARNING: This method is lossy. Use GetCanonicalPath !: file c:/builds/moz2_slave/autoland-w64-d-000000000000000/build/src/xpcom/io/nsLocalFileWin.cpp, line 3576
12:10:33     INFO - 1483474233535	addons.xpi	WARN	Exception running bootstrap method install on shield-recipe-client@mozilla.org: [Exception... "Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPrefBranch.getBoolPref]"  nsresult: "0x8000ffff (NS_ERROR_UNEXPECTED)"  location: "JS frame :: resource://gre/modules/addons/XPIProvider.jsm -> jar:file:///C:/slave/test/build/application/firefox/browser/features/shield-recipe-client@mozilla.org.xpi!/bootstrap.js :: this.install :: line 38"  data: no] Stack trace: this.install()@resource://gre/modules/addons/XPIProvider.jsm -> jar:file:///C:/slave/test/build/application/firefox/browser/features/shield-recipe-client@mozilla.org.xpi!/bootstrap.js:38 < callBootstrapMethod()@resource://gre/modules/addons/XPIProvider.jsm:4901 < processFileChanges()@resource://gre/modules/addons/XPIProvider.jsm -> resource://gre/modules/addons/XPIProviderUtils.js:2060 < checkForChanges()@resource://gre/modules/addons/XPIProvider.jsm:3756 < startup()@resource://gre/modules/addons/XPIProvider.jsm:2789 < callProvider()@resource://gre/modules/AddonManager.jsm:260 < _startProvider()@resource://gre/modules/AddonManager.jsm:755 < startup()@resource://gre/modules/AddonManager.jsm:937 < startup()@resource://gre/modules/AddonManager.jsm:2886 < observe()@resource://gre/components/addonManager.js:65
12:10:34     INFO - Assertion failure: ok, at c:/builds/moz2_slave/autoland-w64-d-000000000000000/build/src/widget/windows/nsWindow.cpp:409
12:10:46     INFO - #01: mozilla::TIPMessageHandler::Initialize() [widget/windows/nsWindow.cpp:370]
12:10:46     INFO - 
12:10:46     INFO - #02: nsWindow::nsWindow() [widget/windows/nsWindow.cpp:611]
12:10:46     INFO - 
12:10:46     INFO - #03: WindowConstructor [widget/windows/nsWidgetFactory.cpp:66]
12:10:46     INFO - 
12:10:46     INFO - #04: nsComponentManagerImpl::CreateInstance(nsID const &,nsISupports *,nsID const &,void * *) [xpcom/components/nsComponentManager.cpp:1058]
12:10:46     INFO - 
12:10:46     INFO - #05: CallCreateInstance(nsID const &,nsISupports *,nsID const &,void * *) [xpcom/glue/nsComponentManagerUtils.cpp:137]
12:10:46     INFO - 
12:10:46     INFO - #06: nsCreateInstanceByCID::operator()(nsID const &,void * *) [xpcom/glue/nsComponentManagerUtils.cpp:184]
12:10:46     INFO - 
12:10:46     INFO - #07: nsCOMPtr<nsIWidget>::assign_from_helper(nsCOMPtr_helper const &,nsID const &) [obj-firefox/dist/include/nsCOMPtr.h:1191]
12:10:46     INFO - 
12:10:46     INFO - #08: nsWebShellWindow::Initialize(nsIXULWindow *,nsIXULWindow *,nsIURI *,int,int,bool,nsITabParent *,mozIDOMWindowProxy *,nsWidgetInitData &) [xpfe/appshell/nsWebShellWindow.cpp:152]
12:10:46     INFO - 
12:10:46     INFO - #09: nsAppShellService::JustCreateTopWindow(nsIXULWindow *,nsIURI *,unsigned int,int,int,bool,nsITabParent *,mozIDOMWindowProxy *,nsWebShellWindow * *) [xpfe/appshell/nsAppShellService.cpp:747]
12:10:46     INFO - 
12:10:46     INFO - #10: nsAppShellService::CreateTopLevelWindow(nsIXULWindow *,nsIURI *,unsigned int,int,int,nsITabParent *,mozIDOMWindowProxy *,nsIXULWindow * *) [xpfe/appshell/nsAppShellService.cpp:206]
12:10:46     INFO - 
12:10:46     INFO - #11: nsAppStartup::CreateChromeWindow2(nsIWebBrowserChrome *,unsigned int,nsITabParent *,mozIDOMWindowProxy *,bool *,nsIWebBrowserChrome * *) [toolkit/components/startup/nsAppStartup.cpp:671]
12:10:46     INFO - 
12:10:46     INFO - #12: nsWindowWatcher::CreateChromeWindow(nsACString_internal const &,nsIWebBrowserChrome *,unsigned int,nsITabParent *,mozIDOMWindowProxy *,nsIWebBrowserChrome * *) [embedding/components/windowwatcher/nsWindowWatcher.cpp:506]
12:10:46     INFO - 
12:10:46     INFO - #13: nsWindowWatcher::OpenWindowInternal(mozIDOMWindowProxy *,char const *,char const *,char const *,bool,bool,bool,nsIArray *,bool,bool,nsIDocShellLoadInfo *,mozIDOMWindowProxy * *) [embedding/components/windowwatcher/nsWindowWatcher.cpp:994]
12:10:46     INFO - 
12:10:46     INFO - #14: nsWindowWatcher::OpenWindow(mozIDOMWindowProxy *,char const *,char const *,char const *,nsISupports *,mozIDOMWindowProxy * *) [embedding/components/windowwatcher/nsWindowWatcher.cpp:353]
12:10:46     INFO - 
12:10:46     INFO - #15: XPTC__InvokebyIndex
12:10:46     INFO - 
12:10:46     INFO - #16: CallMethodHelper::Call() [js/xpconnect/src/XPCWrappedNative.cpp:1379]
12:10:46     INFO - 
12:10:46     INFO - #17: XPCWrappedNative::CallMethod(XPCCallContext &,XPCWrappedNative::CallMode) [js/xpconnect/src/XPCWrappedNative.cpp:1344]
12:10:46     INFO - 
12:10:46     INFO - #18: XPC_WN_CallMethod(JSContext *,unsigned int,JS::Value *) [js/xpconnect/src/XPCWrappedNativeJSOps.cpp:999]
12:10:46     INFO - 
12:10:46     INFO - #19: js::CallJSNative(JSContext *,bool (*)(JSContext *,unsigned int,JS::Value *),JS::CallArgs const &) [js/src/jscntxtinlines.h:239]
12:10:46     INFO - 
12:10:46     INFO - #20: js::InternalCallOrConstruct(JSContext *,JS::CallArgs const &,js::MaybeConstruct) [js/src/vm/Interpreter.cpp:457]
12:10:46     INFO - 
12:10:46     INFO - #21: Interpret [js/src/vm/Interpreter.cpp:2928]
12:10:46     INFO - 
12:10:46     INFO - #22: js::RunScript(JSContext *,js::RunState &) [js/src/vm/Interpreter.cpp:403]
12:10:46     INFO - 
12:10:46     INFO - #23: js::InternalCallOrConstruct(JSContext *,JS::CallArgs const &,js::MaybeConstruct) [js/src/vm/Interpreter.cpp:475]
12:10:46     INFO - 
12:10:46     INFO - #24: js::Call(JSContext *,JS::Handle<JS::Value>,JS::Handle<JS::Value>,js::AnyInvokeArgs const &,JS::MutableHandle<JS::Value>) [js/src/vm/Interpreter.cpp:521]
12:10:46     INFO - 
12:10:46     INFO - #25: JS_CallFunctionValue(JSContext *,JS::Handle<JSObject *>,JS::Handle<JS::Value>,JS::HandleValueArray const &,JS::MutableHandle<JS::Value>) [js/src/jsapi.cpp:2803]
12:10:46     INFO - 
12:10:46     INFO - #26: nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS *,unsigned short,XPTMethodDescriptor const *,nsXPTCMiniVariant *) [js/xpconnect/src/XPCWrappedJSClass.cpp:1214]
12:10:46     INFO - 
12:10:46     INFO - #27: nsXPCWrappedJS::CallMethod(unsigned short,XPTMethodDescriptor const *,nsXPTCMiniVariant *) [js/xpconnect/src/XPCWrappedJS.cpp:614]
12:10:46     INFO - 
12:10:46     INFO - #28: PrepareAndDispatch [xpcom/reflect/xptcall/md/win32/xptcstubs_x86_64.cpp:174]
12:10:46     INFO - 
12:10:46     INFO - #29: SharedStub
12:10:46     INFO - 
12:10:46     INFO - #30: NS_CreateServicesFromCategory(char const *,nsISupports *,char const *,char16_t const *) [xpcom/components/nsCategoryManager.cpp:823]
12:10:46     INFO - 
12:10:46     INFO - #31: nsXREDirProvider::DoStartup() [toolkit/xre/nsXREDirProvider.cpp:1174]
12:10:46     INFO - 
12:10:46     INFO - #32: XREMain::XRE_mainRun() [toolkit/xre/nsAppRunner.cpp:4318]
12:10:46     INFO - 
12:10:46     INFO - #33: XREMain::XRE_main(int,char * * const,mozilla::XREAppData const &) [toolkit/xre/nsAppRunner.cpp:4623]
12:10:46     INFO - 
12:10:46     INFO - #34: XRE_main [toolkit/xre/nsAppRunner.cpp:4714]
12:10:46     INFO - 
12:10:46     INFO - #35: do_main [browser/app/nsBrowserApp.cpp:319]
12:10:46     INFO - 
12:10:46     INFO - #36: NS_internal_main(int,char * *,char * *) [browser/app/nsBrowserApp.cpp:454]
12:10:46     INFO - 
12:10:46     INFO - #37: wmain [toolkit/xre/nsWindowsWMain.cpp:118]
12:10:46     INFO - 
12:10:46     INFO - #38: __scrt_common_main_seh [f:/dd/vctools/crt/vcstartup/src/startup/exe_common.inl:253]
12:10:46     INFO - 
12:10:46     INFO - #39: KERNEL32.DLL + 0x167e
12:10:46     INFO - 
12:10:46     INFO - #40: ntdll.dll + 0x1c3f1
12:10:46     INFO - 
12:12:31     INFO -  Traceback (most recent call last):
12:12:31     INFO -    File "C:\slave\test\build\tests\mochitest\runtests.py", line 2425, in doTests
12:12:31     INFO -      marionette_args=marionette_args,
12:12:31     INFO -    File "C:\slave\test\build\tests\mochitest\runtests.py", line 2008, in runApp
12:12:31     INFO -      self.marionette.start_session(timeout=port_timeout)
12:12:31     INFO -    File "C:\slave\test\build\venv\lib\site-packages\marionette_driver\decorators.py", line 28, in _
12:12:31     INFO -      m._handle_socket_failure()
12:12:31     INFO -    File "C:\slave\test\build\venv\lib\site-packages\marionette_driver\decorators.py", line 23, in _
12:12:31     INFO -      return func(*args, **kwargs)
12:12:31     INFO -    File "C:\slave\test\build\venv\lib\site-packages\marionette_driver\marionette.py", line 1280, in start_session
12:12:31     INFO -      self.protocol, _ = self.client.connect()
12:12:31     INFO -    File "C:\slave\test\build\venv\lib\site-packages\marionette_driver\transport.py", line 223, in connect
12:12:31     INFO -      self.sock.connect((self.addr, self.port))
12:12:31     INFO -    File "c:\mozilla-build\python27\Lib\socket.py", line 224, in meth
12:12:31     INFO -      return getattr(self._sock,name)(*args)
12:12:31     INFO -  error: [Errno 10061] No connection could be made because the target machine actively refused it
12:12:31    ERROR - Automation Error: Received unexpected exception while running application
Flags: needinfo?(aklotz)
Crap, I thought this had tested cleanly!

Anyway, this isn't landable at the moment because 64-bit tiptsf!ProcessCaretEvents contains an instruction with a RIP-relative displacement, which we do not currently support in the DLL interceptor.

Adding support for that is not a trivial patch.
Flags: needinfo?(aklotz)
Depends on: 1328996
Fx50 release stats for touch capable devices
--------------------------------------------
Windows 8.0 ADI 6day moving average = 1,540,953
Windows 8.1 ADI 6day moving average = 7,189,523
Total = 8,730,476
% of Windows 8.0 users with touch capable devices = 5.49%
% of Windows 8.1 users with touch capable devices = 8.61%

Touch devices on Windows 8.0: 1,540,953 * .0549 = 84,598
Touch devices on Windows 8.1: 7,189,523 * .0861 = 619,017

Total: 703K

Based on these stats I'd argue that this bug isn't a high priority compared to core aes+ work we have. We'll get e10s running for this batch of users once we have a11y stability and perf work complete.
Whiteboard: aes+
https://hg.mozilla.org/integration/mozilla-inbound/rev/6e6cb36f0e9bb299a68ed000b8e67fa868247599
Bug 1325676: Prevent Windows 8 touchscreen support from instantiating a11y; r=jimm
I have re-landed this as a 32-bit only patch. I'll file another bug for enabling on 64-bits.
Blocks: 1329616
https://hg.mozilla.org/mozilla-central/rev/6e6cb36f0e9b
Status: ASSIGNED → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla53
Blocks: 1330460
No longer depends on: 1328996
This is the patch as landed on central.
Attachment #8822561 - Attachment is obsolete: true
Attachment #8826362 - Flags: review+
Comment on attachment 8826362 [details] [diff] [review]
Patch (as landed)

Approval Request Comment
[Feature/Bug causing the regression]: Windows touchscreens on e10s
[User impact if declined]: No e10s touchscreens in 52
[Is this code covered by automated tests?]: Yes
[Has the fix been verified in Nightly?]: Yes
[Needs manual test from QE? If yes, steps to reproduce]: No
[List of other uplifts needed for the feature/fix]: None
[Is the change risky?]: No
[Why is the change risky/not risky?]: Simple patch
[String changes made/needed]: None
Attachment #8826362 - Flags: approval-mozilla-aurora?
Comment on attachment 8826362 [details] [diff] [review]
Patch (as landed)

avoid enabling a11y with touchscreens on 32bit win8, aurora52+
Attachment #8826362 - Flags: approval-mozilla-aurora? → approval-mozilla-aurora+
Flags: qe-verify?
Per Comment 14, it was noted there are no steps to reproduce to be able to verify. Yet a flag is saying to do such.

Aaron, are there any preferences we would need to set or any way to see in about:support whether or not we know a11y is working [or prevented in this case] as intended? Or do we just go over the touch screen functionality and ensure that's working at all? Thanks.
Flags: needinfo?(aklotz)
Probably the best thing to do is to go through the touch screen functionality, make sure it is working, as you said. But then after doing all of that touchscreen stuff, go to about:support and check the Accessibility section. "Activated" should be false.
Flags: needinfo?(aklotz)
Working as intended with the following user agent:
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.