Closed
Bug 976249
Opened 10 years ago
Closed 3 years ago
Reduce JSON exposed in our API
Categories
(Firefox for Android Graveyard :: General, defect)
Tracking
(Not tracked)
RESOLVED
INCOMPLETE
People
(Reporter: bnicholson, Unassigned)
Details
JSON is a data exchange format that's useful for communicating with Gecko. But once we've received JSON on the Java end, keeping the data in JSON form is not useful in most cases, and in fact is detrimental for several reasons: * Using JSON too eagerly can result in JSON building/parsing where it's not even needed; at [1], for example, we parse the JSON to read the result, but this JSON is built in Java right before executing that callback [2]. * Accepting JSON strings as parameters or returning JSON strings as results muddles our API; it's less clear what methods are expecting or returning. * If we decide to change how we communicate with Gecko, we should be able to confine those changes to just the communication points; if JSON is propogated across the API, however, these changes will require more effort. * It is ugly to build and parse JSON in Java (especially with checked JSONExceptions). Instead of having any methods that accept and return JSON, we should strongly consider using standard Java classes instead. Any necessary JSON parsing should be done immediately when received in handleMessage(); any JSON building should be done immediately before sending the event to Gecko. Perhaps we could even consider using another JSON library such as GSON [3], which automagically translates JSON strings to/from Java objects [4]. [1] http://hg.mozilla.org/mozilla-central/file/1422dfcd7fd8/mobile/android/base/BrowserApp.java#l2382 [2] http://mxr.mozilla.org/mozilla-central/source/mobile/android/base/prompts/Prompt.java#414 [3] https://code.google.com/p/google-gson/ [4] https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples
Comment 1•10 years ago
|
||
The prompt examples probably aren't the best. i.e. it shouldn't be hard to adapt those to return non-JSON, but for simplicity I've always just left it in. i.e. its not performance critical. I worry this would actually lead to us doing un-necessary parsing. i.e. we'd parse everything whether it was used or not. We'd have to start being (more) careful with what we sent across the bridge from js to make sure we went sending extraneous information... We talked at one point about using the JSApi to convert JS Objects to Java HashMaps via JNI. I think ckitching was working on that, but I never saw anything come out of it.
Reporter | ||
Comment 2•10 years ago
|
||
(In reply to Wesley Johnston (:wesj) from comment #1) > I worry this would actually lead to us doing un-necessary parsing. i.e. we'd > parse everything whether it was used or not. We'd have to start being (more) > careful with what we sent across the bridge from js to make sure we went > sending extraneous information... We should avoid sending extraneous data regardless. Just as we would want to avoid any unnecessary parsing on the Java end, we would also want to avoid unnecessary stringification on the JS end.
Comment 3•10 years ago
|
||
From a different perspective, it's hard to track JSON data flowing through the application. Parsing to POJOs and then tracking consumers of those instances is much easier... with an IDE.
Comment 4•3 years ago
|
||
We have completed our launch of our new Firefox on Android. The development of the new versions use GitHub for issue tracking. If the bug report still reproduces in a current version of [Firefox on Android nightly](https://play.google.com/store/apps/details?id=org.mozilla.fenix) an issue can be reported at the [Fenix GitHub project](https://github.com/mozilla-mobile/fenix/). If you want to discuss your report please use [Mozilla's chat](https://wiki.mozilla.org/Matrix#Connect_to_Matrix) server https://chat.mozilla.org and join the [#fenix](https://chat.mozilla.org/#/room/#fenix:mozilla.org) channel.
Status: NEW → RESOLVED
Closed: 3 years ago
Resolution: --- → INCOMPLETE
Assignee | ||
Updated•3 years ago
|
Product: Firefox for Android → Firefox for Android Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•