An overview of what the Firefox Mobile team has been working on and the future plans for Firefox Mobile (aka Fennec). Presented by Lucas Rocha and Chris Lord. The deck alternates between slides and speaker notes.
Mobile? Why is it important? As you know, a good part of our online interaction is happening through mobile devices these days. All market predictions point at a direction where most of the online access will be done from phones, tablets, etc. A big part of the online world is, of course, the Web and Mozilla should go where our the Web users are. So, it's not option, it's not nice-to-have product. Mozilla has to have a strong presence on the mobile space in order to stay relevant and be able to drive the open Web wherever it is.
the mobile space now. Firefox Mobile is one of them. But there's also Sync, which is not mobile-only but has a strong mobile side to it. B2G and Open Web Apps are a big deal as well. Pancake will most likely have a strong mobile focus as well.
brings responsiveness, especially on multicore devices. XUL allows us to share code with desktop Firefox and could potentially allow us to quickly port to other mobile platforms. Addons support is natural due to the familiar platform.
The current architecture makes ﬂash very hard to support and makes it even harder to do video fast. While we have support for Flash on Gingerbread and older, you'll notice that the experience is quite poor.
is a rather large library. This pretty much destroys startup time on devices with slow ﬁlesystems (e.g. Galaxy S). And because we use XUL for UI, the user can't really do anything until Gecko is up and running.Given that one of the main use cases for mobile browsers is to open links from other apps, we have to deliver a much better performance if we want to be competitive.
e10s gives us the opportunity to split user interface from content rendering and increase responsiveness, but it comes with the overhead of having to communicate everything over IPC, and there are hard-to-overcome limitations on what you can share between processes on android, such as texture memory.
Fennec's frontend. We've been working on the native UI of Fennec since October last year. The whole mobile team is focused on that right now. What is it about? Architecture-wise, the native UI removes Gecko from the critical startup path to allow us provide a usable UI immediatelly to our users. This means replacing XUL with native Android toolkit for UI development.
holding up the UI, we now use threads. We have three main threads in the application; One is Gecko, another is the main application, which does touch input handling, IME (input method) handling, bookmarking, history, etc. And the last thread is the rendering thread. This architecture lets us remain responsive at all times, as screen updates are almost never held up by Gecko, or anything else for that matter. To handle messaging between Gecko and the rest of the application, we inject events into Gecko's event queue. While there is a list of speciﬁc events, to remain ﬂexible, we have generic events that we can send between the Gecko browser object and the Java application, which we encapsulate in JSON.
easy for us to take advantage of GLES without breaking compatibility with devices. We use a similar system to that which the old Firefox Mobile used to provide asynchronous rendering, but we rather than relying on Gecko's layer-rendering code, we have our own layered compositor written in Java and GLES. So today, we have very smooth update. For the overwhelming majority of the time, we render at 60fps and we respond instantly to user input. There are still issues to resolve with checkerboarding, and we hope to have done that by the time we release.
system that stores your bookmarks and history on Desktop Firefox. Places runs inside Gecko and, as we said, one of the main points of native UI is to remove Gecko from the critical startup path. This means we can't wait for Gecko to be up and running to give access to history and bookmarks. For instance, We want users to start Fennec and be able to use the AwesomeBar straight away. We replaced Places with a native Android bookmarks and history store implemented as a ContentProvider.
been written from scratch as an Android sync adapter using the new bookmarks and history ContentProvider. The UX is much better as it's more integrated with Android, and this makes it possible to sync your data even when you're not using Fennec. Right now, it's possible to sync bookmarks and history Password sync will land soon. Tabs might not be in our ﬁrst native release.
Gecko is up. But, again, we don't want Gecko blocking UI interaction on startup. So, we implemented the start page in native android UI. This means we can show it immediately while Gecko is loading in background.
to streamline the UX of Firefox in diﬀerent devices (desktop, tablets, phones). As part of this eﬀort, they've come up with a new design for Fennec. It's inspired by the design work made for tablets—that has been released in Firefox 9.
our interface isn't written in XUL. Instead, we have prescribed APIs that add-ons can use that expose native functionality, such as menus and door-hanger dialogs. This is still work-in-progress, but having an API means we can make large changes to how the UI works and maintain add-on compatibility in the future.
released with Firefox 11. However, we'll consider delaying the release if necessary—given the amount new code is involved. It's important to have a solid ﬁrst native release to create momentum around the new UX. You can help us test everything we talked about here by installing either Aurora or Nightly. We don't have a Beta build yet as we'd like to ﬁx a few serious bugs and missing features before doing it.
We're obviously focused on getting the ﬁrst native release out right now. Design team is working on an improved design for tablets that will be implemented in the same fashion than our native UI for phones. A home screen widget to give you quick access to AwesomeBar data and more. And a reading mode and adapts the UI and content for a better reading experience.