The preference key 'browser.newtab.url' is only supported for the browser,
and undefined on all other targets; such as mobile or b2g. For those targets
the function 'nsDocShell::ShouldAddToSessionHistory' warns about the missing
key.
This patch silences this warning by making Gecko return a default value of
'true' if the key is not present in the preferences.
There were a couple of things wrong here:
1 - The whole recursive frame load waiting thing was totally unnecessary. Load
doesn't fire on the window until all descendant iframes have loaded.
2 - The chrome event handler wasn't filtering by target, which it should. This
is probably to blame for the intermittent orange.
3 - Setting window.location during document load actually invokes
window.location.replace.
4 - Session history navigation seems to have weird behavior when called from
an onload handler. I wanted to investigate this further, but I've already spent
too much time on this. SimpleTest.executeSoon() seems to do the trick here.
The main bug fixed here is that in half of our interfaces, we use "is browser frame/element" to mean "browser or app", and in the other half, we use it to mean "is browser not app".
There's a related, functional bug also fixed here, which is that a browser process doesn't inherit its parent's app-id. This causes problems e.g. for IndexedDB: If a browser inside an app uses IndexedDB, the DB should have the app's app-id.
I also modified Tab{Parent,Child} and nsFrameLoader to call "app" "ownOrContainingApp", to emphasize that we might have inherited the app from a parent process. I left nsIDocShell::appId alone, because changing that would have necessitated changing nsILoadGroup and therefore a /lot/ of users in Necko; it's also not clear it would have clarified anything in those cases.
The main bug fixed here is that in half of our interfaces, we use "is browser frame/element" to mean "browser or app", and in the other half, we use it to mean "is browser not app".
There's a related, functional bug also fixed here, which is that a browser process doesn't inherit its parent's app-id. This causes problems e.g. for IndexedDB: If a browser inside an app uses IndexedDB, the DB should have the app's app-id.
I also modified Tab{Parent,Child} and nsFrameLoader to call "app" "ownOrContainingApp", to emphasize that we might have inherited the app from a parent process. I left nsIDocShell::appId alone, because changing that would have necessitated changing nsILoadGroup and therefore a /lot/ of users in Necko; it's also not clear it would have clarified anything in those cases.