List items
Items from the current list are shown below.
Gecko
26 Jul 2024 : Day 300 #
Over the last few days I've been working through the testing tasks in Issue #1053 on the sailfish-browser issue tracker on GitHub. Yesterday I got to the end of the list, with the result that 17 out of 22 tests passed (feels pretty good), but with five tests failing. In addition quite a few of the tests generated error output.
Here are the five failing cases that need looking in to:
As with much of the other functionality, Jolla has a handy login test page. There's no backend functionality to the page, but it allows you to enter fake credentials which, if things are working, the browser should pick up and offer to store for future reuse.
On ESR 78 this works correctly, but on ESR 91 it fails with the following error message:
The reason for this quickly becomes apparent when I check the ESR 78 patches. Patch 0082 has the title "Allow LoginManagerPrompter to find its window" and comes with the following description:
That very first line "so that the embedlite-components version can be used instead" is crucial. Without this patch the upstream login manager will be used. We want our Sailfish-specific login manager to be used instead, which means tweaking the guts of gecko to allow it.
Checking the ESR 91 source clearly shows that this patch hasn't yet been applied, so now would be the time to do this.
Attempting to apply the patch directly fails, but brilliantly, attempting a 3-way merge succeeds:
[...]
The build went through successfully, but when I try to use the login manager I now get the following error:
I'm going to call it a day. Tomorrow I'll look at the failing "Automatic dark/light theme switching".
If you'd like to read any of my other gecko diary entries, they're all available on my Gecko-dev Diary page.
Here are the five failing cases that need looking in to:
- Video rendering and controls: total fail.
- Audio output and controls: partial fail.
- Password storage: total fail.
- Automatic dark/light theme switching: partial fail.
- Everything on the browser test page: fails: single select widget; external links; full screen; double-tap.
// Print to PDF JavaScript error: resource://gre/actors/BrowserElementParent.jsm, line 24: TypeError: browser is null // Exiting the browser JavaScript error: file:///usr/lib64/mozembedlite/components/ EmbedLiteChromeManager.js, line 170: TypeError: chromeListener is undefined // Saving a downloaded file JavaScript error: resource://gre/modules/pdfjs.js, line 29: NS_ERROR_NOT_AVAILABLE: // Login manager JavaScript error: resource://gre/modules/LoginHelper.jsm, line 1734: TypeError: browser is nullSo that's a quick summary of the things that need to be fixed. Today I'm going to start looking at the password storage and login manager, which seems to be the biggest failure right now (some may argue video is more important, but that also falls further outside my area of expertise).
As with much of the other functionality, Jolla has a handy login test page. There's no backend functionality to the page, but it allows you to enter fake credentials which, if things are working, the browser should pick up and offer to store for future reuse.
On ESR 78 this works correctly, but on ESR 91 it fails with the following error message:
JavaScript error: resource://gre/modules/LoginHelper.jsm, line 1734: TypeError: browser is nullAn error message is an error message, but what's odd about this one is that probably the LoginHelper.jsm functionality shouldn't be being queried at all. To corroborate this I put some debug output inside the getBrowserForPrompt() method on ESR 78 and checked whether it got printed when saving a password. It didn't.
The reason for this quickly becomes apparent when I check the ESR 78 patches. Patch 0082 has the title "Allow LoginManagerPrompter to find its window" and comes with the following description:
This patch blocks loading of gecko's LoginManagerAuthPrompter.jsm so that the embedlite-components version can be used instead.
It also patches the nsILoginManagerPrompter interface to allow a reference to the window to be passed through, to allow the embedlite component to understand its context.
Finally it patches ParentChannelListener to pass the correct window object through to the nsILoginManagerAuthPrompter component.
It also patches the nsILoginManagerPrompter interface to allow a reference to the window to be passed through, to allow the embedlite component to understand its context.
Finally it patches ParentChannelListener to pass the correct window object through to the nsILoginManagerAuthPrompter component.
That very first line "so that the embedlite-components version can be used instead" is crucial. Without this patch the upstream login manager will be used. We want our Sailfish-specific login manager to be used instead, which means tweaking the guts of gecko to allow it.
Checking the ESR 91 source clearly shows that this patch hasn't yet been applied, so now would be the time to do this.
Attempting to apply the patch directly fails, but brilliantly, attempting a 3-way merge succeeds:
$ git am ../rpm/0082-sailfishos-gecko-Allow-LoginManagerPrompter-to-find-.patch Applying: Allow LoginManagerPrompter to find its window. JB#55760, OMP#JOLLA-418 error: patch failed: toolkit/components/passwordmgr/nsILoginManagerPrompter.idl: 29 error: toolkit/components/passwordmgr/nsILoginManagerPrompter.idl: patch does not apply Patch failed at 0001 Allow LoginManagerPrompter to find its window. JB#55760, OMP#JOLLA-418 hint: Use 'git am --show-current-patch=diff' to see the failed patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". $ git am --abort
$ git am --3way ../rpm/ 0082-sailfishos-gecko-Allow-LoginManagerPrompter-to-find-.patch Applying: Allow LoginManagerPrompter to find its window. JB#55760, OMP#JOLLA-418 Using index info to reconstruct a base tree... M netwerk/protocol/http/ParentChannelListener.cpp M toolkit/components/passwordmgr/LoginManagerParent.jsm M toolkit/components/passwordmgr/components.conf M toolkit/components/passwordmgr/nsILoginManagerPrompter.idl Falling back to patching base and 3-way merge... Auto-merging toolkit/components/passwordmgr/nsILoginManagerPrompter.idl Auto-merging toolkit/components/passwordmgr/components.conf Auto-merging toolkit/components/passwordmgr/LoginManagerParent.jsm Auto-merging netwerk/protocol/http/ParentChannelListener.cppMost of the changes here are to the JavaScript, so could potentially be applied dynamically for testing. However there's also a change to an interface IDL file, plus it's the start of my working day so I won't be able to return to this for the next eight hours anyway, so I may as well kick off a build. When I return, if things have gone well, I'll be able to test out this change.
[...]
The build went through successfully, but when I try to use the login manager I now get the following error:
JavaScript error: file:///usr/lib64/mozembedlite/components/ LoginManagerPrompter.js, line 1530: ReferenceError: ComponentUtils is not defined JavaScript error: resource://gre/modules/XPCOMUtils.jsm, line 161: NS_ERROR_XPC_GS_RETURNED_FAILURE: ServiceManager::GetService returned failure code:For the first of these errors it looks like I'll just need to add the following line to the top of the LoginManagerPrompter.js file (see for example the changes made by Raine in embedlite-components Issue #99)
const { ComponentUtils } = ChromeUtils.import("resource://gre/modules/ ComponentUtils.jsm");The good news is that in addition to making this change in the package source, I can also make it directly on my device for immediate testing.
devel-su vim /usr/lib64/mozembedlite/components/LoginManagerPrompter.js [...]With this line added, both errors are now fixed and the login manager prompter is working correctly! That means I've also now finally been able to test clearing of the password data as well. All is working correctly and without error messages.
I'm going to call it a day. Tomorrow I'll look at the failing "Automatic dark/light theme switching".
If you'd like to read any of my other gecko diary entries, they're all available on my Gecko-dev Diary page.
Comments
Uncover Disqus comments