@@ -137,7 +139,7 @@

{{ _('Listen') }}

{% trans %} - During his Tuesday keynote, Mozilla CEO Gary Kovacs will talk about + During his Tuesday keynote, Mozilla CEO Gary Kovacs will talk about reaching the next billion people to come online. {% endtrans %}
See our schedule of events

@@ -173,7 +175,7 @@ phones to meet the specific needs of their target markets and to own and manage the relationship with their customers themselves. {% endtrans %} -
Learn more +
Learn more

@@ -251,9 +253,9 @@

{{ _('Apps Panel: Evolving Ecosystems') }}

- +
-
{{ _('Speaker:') }}
+
{{ _('Speaker:') }}
Jay Sullivan, {{ _('VP of Products') }}, Mozilla
{{ _('Time:') }}
@@ -264,8 +266,8 @@

{% trans %} - Experts from across the board will discuss the current state of the - apps industry and consider how the roles and responsibilities within + Experts from across the board will discuss the current state of the + apps industry and consider how the roles and responsibilities within it are adapting as the apps market evolves. {% endtrans %}

@@ -273,11 +275,11 @@

- +

{{ _('Mozilla Keynote') }}

- +
-
{{ _('Speaker:') }}
+
{{ _('Speaker:') }}
Gary Kovacs, {{ _('CEO') }}, Mozilla
{{ _('Time:') }}
@@ -288,8 +290,8 @@

{% trans %} - Mozilla CEO Gary Kovacs will discuss the benefits of an Open Web device - in markets around the world and how Firefox OS will help operators, phone manufacturers + Mozilla CEO Gary Kovacs will discuss the benefits of an Open Web device + in markets around the world and how Firefox OS will help operators, phone manufacturers and developers reach the next billion Web users. {% endtrans %}

@@ -297,15 +299,15 @@

- +

{{ _('Check back for schedule additions and updates.') }}

- +

{{ _('WIPJam') }}

- +
{{ _('Time:') }}
diff --git a/apps/firefox/templates/firefox/partners/partners-base.html b/apps/firefox/templates/firefox/partners/partners-base.html index e5708e83e9..f91045a456 100644 --- a/apps/firefox/templates/firefox/partners/partners-base.html +++ b/apps/firefox/templates/firefox/partners/partners-base.html @@ -14,6 +14,8 @@ {{ js('mozorg-resp') }} {% endblock %} +{% block mwc_badge %}{% endblock %} + {% block site_header %}
{{ _('Mozilla') }} diff --git a/apps/firefox/tests.py b/apps/firefox/tests.py index 74c0901bd8..1fecb75118 100644 --- a/apps/firefox/tests.py +++ b/apps/firefox/tests.py @@ -3,6 +3,7 @@ # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +import json import os from urlparse import parse_qs, urlparse @@ -12,7 +13,7 @@ from django.test.client import Client from django.utils import unittest from funfactory.urlresolvers import reverse -from mock import patch +from mock import ANY, Mock, patch from mozorg.tests import TestCase from nose.tools import eq_, ok_ from platforms import load_devices @@ -90,6 +91,89 @@ class TestFirefoxAll(TestCase): eq_(len(doc('tr[data-search]')), num_builds) +class TestFirefoxPartners(TestCase): + def setUp(self): + self.client = Client() + + @patch('firefox.views.settings.DEBUG', True) + def test_js_bundle_files_debug_true(self): + """ + When DEBUG is on the bundle should return the individual files + with the MEDIA_URL. + """ + bundle = 'partners_desktop' + files = settings.MINIFY_BUNDLES['js'][bundle] + files = [settings.MEDIA_URL + f for f in files] + self.assertEqual(files, + json.loads(fx_views.get_js_bundle_files(bundle))) + + @patch('firefox.views.settings.DEBUG', False) + def test_js_bundle_files_debug_false(self): + """ + When DEBUG is off the bundle should return a single minified filename. + """ + bundle = 'partners_desktop' + filename = '%sjs/%s-min.js?build=' % (settings.MEDIA_URL, bundle) + bundle_file = json.loads(fx_views.get_js_bundle_files(bundle)) + self.assertEqual(len(bundle_file), 1) + self.assertTrue(bundle_file[0].startswith(filename)) + + @patch('firefox.views.requests.post') + def test_sf_form_proxy_error_response(self, post_patch): + """An error response from SF should be returned.""" + new_mock = Mock() + new_mock.status_code = 400 + post_patch.return_value = new_mock + with self.activate('en-US'): + url = reverse('firefox.partners.contact-bizdev') + resp = self.client.post(url) + self.assertEqual(resp.status_code, 400) + self.assertEqual(resp.content, 'bad_request') + self.assertTrue(post_patch.called) + + @patch('firefox.views.requests.post') + def test_sf_form_proxy_invalid_form(self, post_patch): + """A form error should result in a 400 response.""" + with self.activate('en-US'): + url = reverse('firefox.partners.contact-bizdev') + resp = self.client.post(url, { + 'first_name': 'Dude' * 20, + }) + self.assertEqual(resp.status_code, 400) + self.assertEqual(resp.content, 'Form invalid') + self.assertFalse(post_patch.called) + + @patch('firefox.views.requests.post') + def test_sf_form_proxy(self, post_patch): + new_mock = Mock() + new_mock.status_code = 200 + post_patch.return_value = new_mock + with self.activate('en-US'): + url = reverse('firefox.partners.contact-bizdev') + resp = self.client.post(url, { + 'first_name': 'The', + 'last_name': 'Dude', + 'title': 'Abider of things', + }) + self.assertEqual(resp.status_code, 200) + self.assertEqual(resp.content, 'ok') + post_patch.assert_called_once_with(ANY, { + 'first_name': u'The', + 'last_name': u'Dude', + 'description': u'', + 'retURL': 'http://www.mozilla.org/en-US/about/' + 'partnerships?success=1', + 'title': u'Abider of things', + 'URL': u'', + 'company': u'', + 'oid': '00DU0000000IrgO', + 'phone': u'', + 'mobile': u'', + '00NU0000002pDJr': [], + 'email': u'', + }) + + class TestLoadDevices(unittest.TestCase): def file(self): diff --git a/apps/firefox/urls.py b/apps/firefox/urls.py index 10b37d4e3c..b5e140be50 100644 --- a/apps/firefox/urls.py +++ b/apps/firefox/urls.py @@ -4,6 +4,7 @@ from django.conf.urls.defaults import * from django.conf import settings + from product_details import product_details from firefox import version_re @@ -16,6 +17,7 @@ latest_re = r'^firefox(?:/(%s))?/%s/$' firstrun_re = latest_re % (version_re, 'firstrun') whatsnew_re = latest_re % (version_re, 'whatsnew') + urlpatterns = patterns('', url(r'^firefox/all/$', views.all_downloads, name='firefox.all'), page('firefox/central', 'firefox/central.html'), @@ -61,5 +63,8 @@ urlpatterns = patterns('', url(whatsnew_re, views.latest_fx_redirect, name='firefox.whatsnew', kwargs={'template_name': 'firefox/whatsnew.html'}), - page('firefox/partners', 'firefox/partners/landing.html'), + url(r'^firefox/partners/$', views.firefox_partners, + name='firefox.partners.index'), + url(r'^firefox/partners/contact-bizdev/$', views.contact_bizdev, + name='firefox.partners.contact-bizdev'), ) diff --git a/apps/firefox/views.py b/apps/firefox/views.py index 957a760f0a..83900a8ee6 100644 --- a/apps/firefox/views.py +++ b/apps/firefox/views.py @@ -2,26 +2,83 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +import json import re from django.conf import settings -from django.http import HttpResponsePermanentRedirect, HttpResponseRedirect +from django.http import (HttpResponse, HttpResponsePermanentRedirect, + HttpResponseRedirect) from django.views.decorators.csrf import csrf_exempt +from django.views.decorators.http import require_POST from django.views.decorators.vary import vary_on_headers import basket +import requests +from jingo_minify.helpers import BUILD_ID_JS, BUNDLE_HASHES from product_details import product_details from product_details.version_compare import Version from funfactory.urlresolvers import reverse import l10n_utils from firefox import version_re -from firefox.forms import SMSSendForm +from firefox.forms import SMSSendForm, WebToLeadForm from firefox.platforms import load_devices from firefox.firefox_details import firefox_details from l10n_utils.dotlang import _ +LOCALE_OS_URLS = { + 'en-US': 'http://blog.mozilla.org/press/2013/02/firefox-os-expansion', + 'de': 'http://blog.mozilla.org/press-de/?p=760', + 'it': 'http://blog.mozilla.org/press-it/?p=347', + 'pl': 'http://blog.mozilla.org/press-pl/?p=407', + 'fr': 'http://blog.mozilla.org/press-fr/?p=366', + 'es-ES': 'http://blog.mozilla.org/press-es/?p=340', + 'en-GB': 'http://blog.mozilla.org/press-uk/?p=471' +} + + +def get_js_bundle_files(bundle): + """ + Return a JSON string of the list of file names for lazy loaded + javascript. + """ + # mostly stolen from jingo_minify.helpers.js + if settings.DEBUG: + items = settings.MINIFY_BUNDLES['js'][bundle] + else: + build_id = BUILD_ID_JS + bundle_full = "js:%s" % bundle + if bundle_full in BUNDLE_HASHES: + build_id = BUNDLE_HASHES[bundle_full] + items = ("js/%s-min.js?build=%s" % (bundle, build_id,),) + return json.dumps([settings.MEDIA_URL + i for i in items]) + + +JS_COMMON = get_js_bundle_files('partners_common') +JS_MOBILE = get_js_bundle_files('partners_mobile') +JS_DESKTOP = get_js_bundle_files('partners_desktop') + + +@csrf_exempt +@require_POST +def contact_bizdev(request): + form = WebToLeadForm(request.POST) + if form.is_valid(): + data = form.cleaned_data.copy() + interest = data.pop('interest') + data['00NU0000002pDJr'] = interest + data['oid'] = '00DU0000000IrgO' + data['retURL'] = ('http://www.mozilla.org/en-US/about/' + 'partnerships?success=1') + r = requests.post('https://www.salesforce.com/servlet/' + 'servlet.WebToLead?encoding=UTF-8', data) + msg = requests.status_codes._codes.get(r.status_code, ['error'])[0] + return HttpResponse(msg, status=r.status_code) + + return HttpResponse('Form invalid', status=400) + + @csrf_exempt def sms_send(request): form = SMSSendForm(request.POST or None) @@ -133,3 +190,15 @@ def all_downloads(request): 'test_builds': firefox_details.get_filtered_test_builds(version, query), 'query': query, }) + + +def firefox_partners(request): + # If the current locale isn't in our list, return the en-US value + locale_os_url = LOCALE_OS_URLS.get(request.locale, LOCALE_OS_URLS['en-US']) + + return l10n_utils.render(request, 'firefox/partners/index.html', { + 'locale_os_url': locale_os_url, + 'js_common': JS_COMMON, + 'js_mobile': JS_MOBILE, + 'js_desktop': JS_DESKTOP, + }) diff --git a/apps/firefoxos/__init__.py b/apps/firefoxos/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/apps/firefoxos/models.py b/apps/firefoxos/models.py deleted file mode 100644 index 3d2dade135..0000000000 --- a/apps/firefoxos/models.py +++ /dev/null @@ -1,7 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -from django.db import models - -# Create your models here. diff --git a/apps/firefoxos/templates/firefoxos/faq.html b/apps/firefoxos/templates/firefoxos/faq.html deleted file mode 100644 index 998ab41c15..0000000000 --- a/apps/firefoxos/templates/firefoxos/faq.html +++ /dev/null @@ -1,104 +0,0 @@ -{# This Source Code Form is subject to the terms of the Mozilla Public - # License, v. 2.0. If a copy of the MPL was not distributed with this - # file, You can obtain one at http://mozilla.org/MPL/2.0/. #} - -{% extends "firefoxos/firefoxos-base.html" %} - -{% block page_title %}Firefox OS FAQ{% endblock %} -{% block body_id %}firefoxos-faq{% endblock %} - -{% block content %} - -
- -

Firefox OS FAQ

- -
-
What is Firefox OS?
-
-

The project is an implementation of new Web standards that bring the power of the Open Web to mobile devices, unencumbered by the rules and restrictions of existing proprietary platforms.

-
- -
What is the overall aim of the project? What problems are you solving?
-
-

We believe that the next frontier for Web applications is full device integration, so that web developers have the same capabilities as those building for OS-specific stacks. Boot to Gecko is intended to identify those missing device capabilities and other application needs, and design standardized solutions for app developers to use.

-
- -
What is the size of the team working on this project?
-
-

More than 20 engineers were working full-time on specific parts of the system (telephony, messaging, system-level phone integration). In addition, Mozilla contributors and engineers from operators partners are working jointly with us on the project.

-

We are also leaning heavily on the existing Gecko and Firefox mobile work and the team of hundreds of engineers building those products. 95% of the code in the Boot to Gecko project is shared with Firefox.

-
- -
What does the project mean for your relationships with Apple, Google and Microsoft?
-
-

We don’t expect that it will affect our relationships with other organizations.

-
- -
Does this replace work that’s already being done on Web APIs for desktop and mobile?
-
-

We are already pushing hard on new Web APIs and will continue to implement and standardize new APIs for Web content while the project ramps up.

-
- -
How is this different than the Webian Shell project?
-
-

The Webian Shell project is an impressive project even in its early stages. Where Webian is focused on a Web-centric desktop experience, we’re focused on extending the Web to include more of what is traditionally the domain of OS-specific code. We think we can work together on a bunch of things, and we’re looking forward to it.

-
- -
How is this different from Chrome OS?
-
-

We’re aiming at mobile/tablet devices rather than a notebook form factor. This is an early-stage project to expose all device capabilities such that infrastructure like phone dialers can be built with Web APIs, and not only “high level” apps like word processors and presentation software.

-

We will of course be happy to work with the Chrome OS team on standards activities, and indeed to share source code where appropriate.

-
- -
Do you see this project as competing with other mobile operating systems?
-
-

We believe the Web is the platform. Ideally, the technology pioneered or refined in the Boot to Gecko project will make its way into all mobile browsers, so that enhanced Web applications can be great regardless of operating system or device. We look forward to working with other OS and browser developers on standards activities and even implementations.

-
- -
Are OEMs interested in the project?
-
-

- Currently B2G is still a project without a firm product schedule. We are working on Qualcomm chipset based hardware platform for our development and discussing with OEMs /carriers on B2G deployment plans. We will announce a product schedule and launch partners once we reach that stage. -

-
- -
Whose hardware will you support?
-
-

- We are currently using off-the shelf developer hardware (Samsung Galaxy S 2), because the device is commercially available to Mozilla employees and community members. We are working on Qualcomm chipset based hardware platform right now and optimizing B2G to this reference platform. As we mentioned above, we are in process of finalization of lead OEM partners for shipping commercial B2G devices. That reference platform will likely be very different than the Samsung Galaxy S 2. -

-
- -
Is this going to be yet another platform for developers to code for?
-
-

No: the project is extending what developers can do with the Web, especially in the context of mobile devices, and to do so in a way that leads to interoperable standards.

-

Just as with HTML5, ES5, CSS3 and other Web technology it will reach different browsers and operating systems at different times, but the pace of Web platform development gives us confidence that good Web technology can reach a lot of people pretty quickly.

-

We don’t want this work to lead to applications that only run atop one platform, or only run in Firefox. That’s an important difference between what we’re doing and proprietary mobile stacks today: we don’t seek a competitive advantage for Mozilla, we seek a competitive advantage for the Web.

-
- -
How do you think you’ll get the mobile manufacturers and operators on board with this?
-
-

The Boot to Gecko project is designed to build on the success of the Web, and given the early stage of the project it could reach users in many forms. We’re working with ODMs, OEMs, operators and others who share our vision of even greater success for Web-based applications.

-
- -
What does the Boot to Gecko project offer mobile users that HTML5 doesn’t?
-
-

The project offers mobile users all the power of HTML5, extended with device capabilities like Bluetooth and SMS, a richer capability model for interaction with the filesystem, and a way to tie native HTML5 apps together. The intent is to lead to improved capabilities for the Web platform, not to replace HTML5 or related technology in any way. Many of these new capabilities will also make sense in desktop browsers, and we look forward to seeing them there as well.

-
- -
Will this mean a Firefox Phone?
-
-

We don’t have any plans to build or distribute a custom device.

-
- -
I am a web developer. How will I deploy my web application to this platform?
-
-

You don’t. By default, your web app will be accessible from the phone just like any other website. If you want to make it installable to the homescreen, you may consider adding an open web app manifest to your app. However, the install API is not complete yet as of February 2012.

-
- -
- -
- -{% endblock %} diff --git a/apps/firefoxos/templates/firefoxos/firefoxos-base.html b/apps/firefoxos/templates/firefoxos/firefoxos-base.html deleted file mode 100644 index 608abcecac..0000000000 --- a/apps/firefoxos/templates/firefoxos/firefoxos-base.html +++ /dev/null @@ -1,43 +0,0 @@ -{# This Source Code Form is subject to the terms of the Mozilla Public - # License, v. 2.0. If a copy of the MPL was not distributed with this - # file, You can obtain one at http://mozilla.org/MPL/2.0/. #} - -{% extends "base-resp.html" %} - -{% block body_class %}sand{% endblock %} - -{% block extrahead %} - {{ css('firefoxos') }} -{% endblock %} - -{% block site_js %} - {{ js('mozorg-resp') }} -{% endblock %} - -{% block site_header %} -
- {{ _('Mozilla') }} - - {% block site_header_nav %} - - {% endblock %} - -
-{% endblock %} - - -{% block content %}{% endblock %} - -{% block email_form %}{% endblock %} diff --git a/apps/firefoxos/templates/firefoxos/firefoxos.html b/apps/firefoxos/templates/firefoxos/firefoxos.html deleted file mode 100644 index 159df8aa6f..0000000000 --- a/apps/firefoxos/templates/firefoxos/firefoxos.html +++ /dev/null @@ -1,69 +0,0 @@ -{# This Source Code Form is subject to the terms of the Mozilla Public - # License, v. 2.0. If a copy of the MPL was not distributed with this - # file, You can obtain one at http://mozilla.org/MPL/2.0/. #} - -{% extends "firefoxos/firefoxos-base.html" %} - -{% block page_title %}Firefox OS{% endblock %} -{% block body_id %}firefoxos{% endblock %} - -{% block content %} - -
-

Firefox OS

-

{{ _('Bringing the Open Web to mobile devices') }}

-
- -
-

{{ _('Welcome to a new, open and powerful mobile world!') }}

-

{{ _('Firefox OS enables the Open Web as a platform for mobile devices. We’re making innovation possible by driving the development of new Web standards.') }}

- -
- -
- -
-
- -
-

{{ _('New Web standards') }}

-

{{ _('Firefox OS will produce an implementation of these new Web standards to free mobile platforms from the encumbrances of the rules and restrictions of existing proprietary platforms.') }}

- -

{{ _('Freedom from proprietary mobile platforms') }}

-

{{ _('We’re collaborating with OEMs and carriers directly, giving them more influence to meet the specific needs of their users and market. Users and developers aren’t locked in to one platform, so they can access their info and use apps across multiple devices.') }}

-
- -
-
- - -
-

{{ _('Customization for OEMs and operators')}}

-

{{ _('OEMs and operators will be able to provide content and services across their entire device portfolio, regardless of OS. And they will be able to customize user experiences, manage app distribution and retain customer attention, loyalty and billing relationships.') }}

-
- -
-
- -
-

{{ _('Opportunities for developers') }}

-

{{ _('Using HTML5 and the new Mozilla-proposed standard APIs, developers everywhere will be able to create amazing experiences and apps. Developers will no longer need to learn and develop against platform-specific native APIs.') }}

-
- -
-
- - -
-

{{ _('Consumer freedom') }}

-

{{ _('Consumers who use devices powered by Firefox OS won’t be locked into one specific platform giving them more choice, flexibility and freedom. With Firefox OS, the Web is the platform.') }}

-
- -
- - -{% endblock %} - -{% block site_js %} - {{ js('mozorg-resp') }} -{% endblock %} diff --git a/apps/firefoxos/urls.py b/apps/firefoxos/urls.py deleted file mode 100644 index 712878eea9..0000000000 --- a/apps/firefoxos/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -from django.conf.urls.defaults import * -from mozorg.util import page - - -urlpatterns = patterns('', - page('', 'firefoxos/firefoxos.html'), -) diff --git a/apps/marketplace/templates/marketplace/marketplace.html b/apps/marketplace/templates/marketplace/marketplace.html index efc09a2dde..6c1211523d 100644 --- a/apps/marketplace/templates/marketplace/marketplace.html +++ b/apps/marketplace/templates/marketplace/marketplace.html @@ -40,23 +40,7 @@

{{_('The first Aurora release of Firefox Marketplace is available on Firefox Aurora for Android, giving developers a means to get feedback on their apps as the Marketplace grows and progresses.')}}

- + @@ -182,9 +166,6 @@ {% endblock %} {% block js %} - - {{ js('box2d') }} - {{ js('marketplace') }} {% endblock %} diff --git a/apps/mozorg/templates/mozorg/download_buttons/mobile_small_landing.html b/apps/mozorg/templates/mozorg/download_buttons/mobile_small_landing.html new file mode 100644 index 0000000000..04238f8d7d --- /dev/null +++ b/apps/mozorg/templates/mozorg/download_buttons/mobile_small_landing.html @@ -0,0 +1,19 @@ +{# This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. #} + +{% extends "mozorg/download_buttons/mobile_base.html" %} + +{% block class %}download-button-mobile-small{% endblock %} + +{% block title %}{{ _('Get Firefox for Android »') }} + + {{ _('Free from the Google Play Store') }} + +{% endblock %} + +{% block subtitle %}{% endblock %} + +{% block small_print %}{% endblock %} + +{% block download_info %}{% endblock %} diff --git a/apps/mozorg/templates/mozorg/home.html b/apps/mozorg/templates/mozorg/home.html index 848e537c9b..9695227fe1 100644 --- a/apps/mozorg/templates/mozorg/home.html +++ b/apps/mozorg/templates/mozorg/home.html @@ -57,15 +57,15 @@
-
+
- - + +
-

{{_('The Web is the platform')}}

-

{{_('Last year at Mobile World Congress, Mozilla made a promise: to deliver the Web as the platform for mobile devices. Now we’re coming back with the proof.')}}

+

{{_('Introducing Firefox OS')}}

+

{{_('The Open Web makes its debut as the platform for mobile devices at Mobile World Congress to help bring the next billion smartphone users online.')}}

{{_('Learn More')}}

@@ -123,27 +123,27 @@ {% l10n home, 20130515 %}
-

In the news

+

{{ _('In the news') }}

- See all news » + {{ _('See all news »') }}
{% endl10n %}
-

In the know

+

{{ _('In the know') }}

  • -

    {{_('Firefox OS')}}

    +

    {{_('Firefox OS')}}

    {{_('See what’s next for the mobile Web.')}}

  • diff --git a/apps/mozorg/templates/mozorg/mobile.html b/apps/mozorg/templates/mozorg/mobile.html index e1992abdef..e80912cc95 100644 --- a/apps/mozorg/templates/mozorg/mobile.html +++ b/apps/mozorg/templates/mozorg/mobile.html @@ -31,43 +31,43 @@

    Firefox OS

    -

    We created Firefox OS to build the Web as the platform for - mobile devices. That includes implementing new Web standards - that aren't restricted by the rules of existing proprietary - platforms. As with all Mozilla projects, Firefox OS is based - entirely on open standards and the source code is accessible +

    We created Firefox OS to build the Web as the platform for + mobile devices. That includes implementing new Web standards + that aren't restricted by the rules of existing proprietary + platforms. As with all Mozilla projects, Firefox OS is based + entirely on open standards and the source code is accessible to all.

    - -

    Learn more about Firefox OS

    + +

    Learn more about Firefox OS

    - +

    Firefox for Android

    -

    Based on the same principles and technologies as our desktop - browser, Firefox for Android is fast, smart, safe and full - of innovations that let you type less, browse more and get - to the Web quickly and easily. Our latest version includes - improved performance, the latest privacy and security features +

    Based on the same principles and technologies as our desktop + browser, Firefox for Android is fast, smart, safe and full + of innovations that let you type less, browse more and get + to the Web quickly and easily. Our latest version includes + improved performance, the latest privacy and security features and a redesigned look and feel.

    - +

    Learn more about Firefox for Android
    Get Firefox for Android at the Google Play Store

    - +

    Apps on the Web

    -

    We're bringing our core values – openness, freedom, user - choice – to the world of apps and giving developers with - full control over content, functionality and how apps are - distributed, including access to hundreds of millions of Firefox +

    We're bringing our core values – openness, freedom, user + choice – to the world of apps and giving developers with + full control over content, functionality and how apps are + distributed, including access to hundreds of millions of Firefox users through the Mozilla Marketplace.

    - +

    Learn more about apps and the Mozilla Marketplace

- +