Closed Bug 967331 Opened 10 years ago Closed 8 years ago

installing packaged app fails with "JSONException: Value undefined… cannot be converted to JSONObject"

Categories

(Firefox for Android Graveyard :: Web Apps (PWAs), defect, P3)

ARM
Android
defect

Tracking

(Not tracked)

RESOLVED WONTFIX

People

(Reporter: myk, Unassigned)

References

Details

(Whiteboard: [WebRuntime])

When I try to install the packaged app Cut The Rope from <http://dl.dropboxusercontent.com/u/171684/mwc-apk-test/index.html>, after the APK install completes, Fennec throws "org.json.JSONException: Value undefined of type java.lang.String cannot be converted to JSONObject" at InstallHelper.java line 92 <http://mxr.mozilla.org/mozilla-central/source/mobile/android/base/webapp/InstallHelper.java?rev=6638c6ade38c#92> with this misleading stack trace:

 14072   GeckoWebAppInstall..  E  mozApps.install failed
 14072   GeckoWebAppInstall..  E  org.json.JSONException: Value undefined of type java.lang.String cannot be converted to JSONObject
 14072   GeckoWebAppInstall..  E  at org.json.JSON.typeMismatch(JSON.java:111)
 14072   GeckoWebAppInstall..  E  at org.json.JSONObject.<init>(JSONObject.java:159)
 14072   GeckoWebAppInstall..  E  at org.json.JSONObject.<init>(JSONObject.java:172)
 14072   GeckoWebAppInstall..  E  at org.mozilla.gecko.webapp.InstallHelper.access$000(InstallHelper.java:29)
 14072   GeckoWebAppInstall..  E  at org.mozilla.gecko.webapp.InstallHelper$1.run(InstallHelper.java:59)
 14072   GeckoWebAppInstall..  E  at android.os.Handler.handleCallback(Handler.java:733)
 14072   GeckoWebAppInstall..  E  at android.os.Handler.dispatchMessage(Handler.java:95)
 14072   GeckoWebAppInstall..  E  at android.os.Looper.loop(Looper.java:136)
 14072   GeckoWebAppInstall..  E  at org.mozilla.gecko.util.GeckoBackgroundThread.run(GeckoBackgroundThread.java:32)

I haven't fully investigated yet, but I think "Value undefined" means the actual string "undefined" is being passed to the "new JSONObject" call.

The return value of that call is being passed to message.putOpt, which suggests the value is optional.  But the value is first passed to "new JSONObject", which requires it to be a value that can be turned into a JSON object and throws the exception when it isn't.

The APK in question <http://dapk.net/application.apk?manifestUrl=https%3A%2F%2Fmarketplace.firefox.com%2Fapp%2Fa22e0277-35bc-434d-9371-1568c75fc726%2Fmanifest.webapp> does not have a mini-manifest, which looks like it would live at res/raw/mini.json alongside res/raw/manifest.json.

So ApkResources.getMiniManifest should be returning a recognizably empty value like the null value rather than the string "undefined", and then InstallHelper should avoid passing that empty value to "new JSONObject".

But I also wonder if the mini-manifest is really optional for a packaged app APK.  If not, then there's also a bug in the APK Factory, which isn't including it in the APK.
> But I also wonder if the mini-manifest is really optional for a packaged app APK.  If not, then there's also a bug in the APK Factory, which isn't including it in the APK.

Good call, mini.json should be there now.
The implementation of the client relies on the existence of the mini-manifest. It could be derived by from the "manifestUrl", which in the case of packaged apps is the url of the mini-manifest, however, we put it in the APK to save another network call. 

Feasibly, we could do without the mini-manifest, but this would mean a huge change to the dom/webapps module.
It's a bug if mini.json isn't present with packaged apps.
(In reply to Austin King [:ozten] from comment #3)
> It's a bug if mini.json isn't present with packaged apps.

It's a bug in the APK!  But the client should do a better job of reporting and recovering from that bug.  So let's focus this bug on implementing that better job.
> It's a bug in the APK!

Which is fixed now, right? Or is the bug different then comment#1
(In reply to Austin King [:ozten] from comment #5)
> > It's a bug in the APK!
> 
> Which is fixed now, right? Or is the bug different then comment#1

Yes, it's fixed!
Priority: -- → P3
Whiteboard: [WebRuntime]
Per bug 1235869, we're going to disable the Android web runtime, so we won't fix this bug in it.

(This is part of a bulk resolution of bugs in the Firefox for Android::Web Apps component, from which I attempted to exclude bugs that are not specific to the runtime, but it's possible that I included one accidentally.  If so, I'm sorry, and please reopen the bug!)
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → WONTFIX
Product: Firefox for Android → Firefox for Android Graveyard
You need to log in before you can comment on or make changes to this bug.