Hi All,

We've debated various forms of making FirefoxOS more webby and less
app focused. The new security model is one example of that. The
pinning proposals from Ben is another.

I have several goals with this:

First off, I think creating something more webby means providing a
significant differentiator to Android/iOS. We can create something
which cause people to not just count the number of apps that we have,
but instead look at other differences.

Second, I think the web model provides substantial benefits. All
modern operating systems, desktop and mobile alike, use an application
model. But this model came about due to engineering reasons, not for
UX reasons. On desktop the web model has proven remarkably popular and
successful, and I see no reason why it couldn't on mobile too.

Third, by creating something more webby, I think we'll make better use
of the content that we have. I.e. it'll make better use of the web as
it is and as it will be for the near term future.


So what does "more webby" mean. I'd like to take inspiration for how
desktop browsers work.

On a desktop browser we separate "browser UI", aka "chrome", from "web
content", aka "content".
We generally render the content front and center and let it take up
the majority of the window.

The chrome provides two things: A navigation UI which sits around the
edges of the window, as well as various pages, like about:home and
about:preferences which is rendered in the area where we otherwise
render content.

An important part of the navigation UI is session management, which on
desktop is done in the form of tabs. Tabs let you create any number of
sessions and let you quickly switch between them.

The chrome always surround the area where we render content. But
sometimes we also display chrome in the area normally used by content,
for example for about:home and about:preferences.


So we could do the same thing for FirefoxOS. Lets treat Gaia as
"chrome" from a user point of view, i.e. as "Phone UI" (or "TV UI" or
whatever product that we're building). This doesn't mean that we
should give it with Gecko chrome privileges though, I think there's
still good reasons not to.

This UI should provide both navigation UI, as well as UI for home
screen, phone calls, text messages, camera, and whatever other
functionality that we think built-in UI should have.


So, starting with the navigation UI, I think we should follow
desktop's lead and leave session management up to the user. So like
how we don't open bookmarks in new tabs on desktop, I don't think we
should open icons on the homepage in a new window.

So by default I think there is only a single window. This window
starts with the homescreen, and when the user clicks an icon, this
window is navigated to whatever URL that icon represents.

This includes if the icon that was clicked is for the dialer or some
other Gaia content. It even includes clicking the "home" button. The
home simply acts like a bookmark which navigates the user to the
homescreen.

To enable the user to open a second session, we should have an
explicit UI action which opens a new window, similar to how desktop
has a UI action for opening a new tab. The user then stays in this
tab, no matter which links are clicked or websites are navigated to.

Any background window is unaffected by what the user does in the
foreground window. This might mean that the user has the same gaia
content open in two sessions at once. Even the homescreen might be
open in multiple sessions at once.

We can then enable the user to quickly switch between open sessions,
or close any session. If the user close the last open session we can
create a new session open at the homescreen.

This means that the the current "task manager" UI becomes a "session
manager" rather than a "app manager". We might also want to make
bigger changes to that UI given that its primary use-case changes. But
I'll leave that to a separate discussion.

It also means that we more clearly always have something to go "back"
to. I.e. the previous page that you visited in the current session.
This means that we could hook up edge gestures to perform
back/forward, or we could even include back/forward hardware keys if
we want.

Note that session management can be orthogonal to which content runs
in which process. So just because the user stays within the same
window when navigating between gaia and non-gaia content, or between
different gaia content, doesn't mean that we need to stay within the
same OS process.


This also greatly changes what we can do with the rest of Gaia. Since
it's all just part of the "phone UI" that this means that we don't
have to have separate "apps" for the phone UI, text message UI,
camera, etc. Its all just "phone UI" to the user, the same way that
about:preferences and about:home is part of the browser UI on desktop.

We might still want to separate various pieces of Gaia into separate
origins or cookie jars for security reasons. And we might still want
to use separate processes in order to prevent OOMs in one area of the
UI from bringing down other UI.

But by simply treating all of Gaia as "Phone UI" it means that we can
make process and origin decisions independently from UX decisions. So
for example dialer, messaging and contacts could be put into the same
gaia package which means that they share IndexedDB and localStorage
data.

In fact, the only really strong reason to split different parts of
gaia up is to security-wise separate some parts from others, just in
case something gets hacked. So for example the email app deals with a
lot of untrusted 3rd-party content which makes it more prone to get
hacked, and so makes sense to separate from most other content. The
same might be true for the media apps.


There are of course a lot of details to iron out. Such as what happens
if a webpage call window.open() or uses <a href="..."
target="_blank">. On desktop that creates a new session in the form of
a new window or tab. Do we want to do that here too even though we're
saying that users are in charge of sessions?

And when do we hide/compress the URL bar? Does it
appears/disappear/compress/decompress when you navigate between
gaia/pinned/unpinned content?

We also need some way to go back to content which you have previously
visited, but which you didn't save in a dedicated session. Something
like the rocketbar or even a dedicated history UI could help here.

These are clearly things we need to figure out, but I hope these
things can be reasonably solved.


So, in summary, the idea is to:
* Don't use separate windows for separate "apps"
* Enable platform-wide "tabs" which can be navigated to any URL,
including gaia URLs.
* The same URL can be open in multiple tabs at once, including gaia
URLs. Even including the homescreen.
* Icons on the homescreen are just like links and just navigates the
current tab.
* The homebutton simply navigates the current tab to the homescreen URL.

Thoughts?

/ Jonas
_______________________________________________
dev-b2g mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-b2g

Reply via email to