Closed Bug 1189748 Opened 5 years ago Closed 4 years ago

The values of a google 3d graph can't be modified

Categories

(Core :: DOM: Events, defect)

defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 1057858

People

(Reporter: cbadau, Unassigned)

References

()

Details

(Whiteboard: gfx-noted)

Attachments

(2 files)

Reproducible on Firefox 40 Beta 9 (BuildID: 20150730171029)
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0

Steps to reproduce:
1. Launch Firefox.
2. Open http://goo.gl/zz1rox . 
3. Try to change the value of the X,Y or Z by clicking on the fields.  

Expected results: The values can be successfully modified. 

Actual results: The values can't be modified. The fields with the values are not editable. 

Notes:
1. The issue is reproducible also on Windows 8 32bit and Ubuntu 14.04 x64.
2. The issue is reproducible also on Firefox 38.0.5 and Firefox 36.
I confirm this in Windows 10 with Firefox Nightly. I suspect this is a webcompat issue for Google to fix but perhaps this requires something we've not yet implemented. I'll need someone more knowledgeable than I to take a look at this.
Flags: needinfo?(milan)
Version: 40 Branch → Trunk
Doubt this has anything to do with WebGL.


I managed to get this error once, on this page, though I can't figure out what I've done:
Query failed: TypeError: this._searchSuggestionController is null
*************************
A coding exception was thrown in a Promise resolution callback.
See https://developer.mozilla.org/Mozilla/JavaScript_code_modules/Promise.jsm/Promise

Full message: TypeError: this._searchSuggestionController is null
Full stack: _matchSearchSuggestions/promise<@resource://gre/components/UnifiedComplete.js:944:1
Handler.prototype.process@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:934:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:813:7
Promise*this.PromiseWalker.scheduleWalkerLoop@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:744:11
this.PromiseWalker.schedulePromise@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:776:7
this.PromiseWalker.completePromise@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:711:7
this.SearchSuggestionController.prototype._fetchRemote/<@resource://gre/modules/SearchSuggestionController.jsm:250:54
this.SearchSuggestionController.prototype.stop@resource://gre/modules/SearchSuggestionController.jsm:172:7
stop@resource://gre/modules/PlacesSearchAutocompleteProvider.jsm:181:5
stop@resource://gre/components/UnifiedComplete.js:782:7
UnifiedComplete.prototype.stopSearch@resource://gre/components/UnifiedComplete.js:1785:7
onInput@chrome://browser/content/urlbarBindings.xml:858:13
onxblinput@chrome://global/content/bindings/autocomplete.xml:581:9

*************************
*************************
A coding exception was thrown and uncaught in a Task.

Full message: TypeError: this._searchSuggestionController is null
Full stack: _matchSearchSuggestions/promise<@resource://gre/components/UnifiedComplete.js:944:1
Handler.prototype.process@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:934:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:813:7
Promise*this.PromiseWalker.scheduleWalkerLoop@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:744:11
this.PromiseWalker.schedulePromise@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:776:7
this.PromiseWalker.completePromise@resource://gre/modules/Promise.jsm -> resource://gre/modules/Promise-backend.js:711:7
this.SearchSuggestionController.prototype._fetchRemote/<@resource://gre/modules/SearchSuggestionController.jsm:250:54
this.SearchSuggestionController.prototype.stop@resource://gre/modules/SearchSuggestionController.jsm:172:7
stop@resource://gre/modules/PlacesSearchAutocompleteProvider.jsm:181:5
stop@resource://gre/components/UnifiedComplete.js:782:7
UnifiedComplete.prototype.stopSearch@resource://gre/components/UnifiedComplete.js:1785:7
onInput@chrome://browser/content/urlbarBindings.xml:858:13
onxblinput@chrome://global/content/bindings/autocomplete.xml:581:9

*************************
Query failed: TypeError: this._searchSuggestionController is null
2015-07-31 15:49:29.077 firefox[52225:303] Set intl.ime.nstextinput.enable to true in about:config to fix input.
*************************
No errors or extra messages with MOZ_GL_SPEW set.
Flags: needinfo?(milan)
Whiteboard: gfx-noted
It works in Edge, too.
So the fields aren't editable in Firefox, but you can change the values fine by zooming in and out. This means it's almost certainly not a WebGL issue. Probably something in DOM.
This is either a web-compat issue with the site or a bug in our code somewhere, probably in DOM somewhere.
Component: Canvas: WebGL → DOM
Summary: WebGL animations - The values of a Graph can't be modified → The values of a google 3d graph can't be modified
Something is weird here.  If I breakpoint in our debugger on all click event listeners in the page, then this works.  I can click the number, and I get an editable number input for it.  But only if the devtools are in a separate window.

So I tried breakpointing on blur handlers instead.  Now what I see, with devtools in the _same_ window, even, is that we do switch to the number input, then fire a blur event.  The blur event handler switches the input back to a non-editable cell.

So I guess the question is why we're firing a blur event during that click...
Component: DOM → DOM: Events
Flags: needinfo?(bugs)
Because an ancestor of the element you click has a tabindex=0 attribute and therefore gains focus by the mousedown and looses focus when the input is focused?
Flags: needinfo?(bugs)
As ever so often, once you've found the apparent cause of something what's left to explain is why this doesn't cause the same effect in other browsers..

In IE, the unselectable=on attribute on the children means the element with tabindex doesn't gain focus after all.

Although the site does apply -webkit-user-select:none, it has no such effect in a minimised test case so I'm not yet sure why Chrome&co manage to avoid triggering (or ignore) that blur event.
I'm pretty sure I tried removing that "tabindex=0" using the devtools while testing stuff for comment 7 and the behavior did not change....  So there's something else going on too, as far as I can tell.

That's assuming you mean the tabindex=0 on the <div aria-labelledby="graph_heading">, at least.
Flags: needinfo?(bugs)
You're right. We fire another blur event for a different reason and I haven't figured out why yet. Still looking at it, but Olli might find it faster..
The real reason: it's a type=number input. For some reason a blur event gets fired when input type=number gets focused by JS..
It's even more interesting than that - seems there needs to be some "instability" in the DOM to cause this effect - like the element being newly appended or the DOM not fully built. If I take this minimal TC and put the select() call inside onload it seems to pass fine. ,-o

Over to you, Olli!
Status: NEW → RESOLVED
Closed: 4 years ago
Resolution: --- → DUPLICATE
Duplicate of bug: 1057858
Flags: needinfo?(bugs)
You need to log in before you can comment on or make changes to this bug.