diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml
index 9f89b4574051..a692e51ec89c 100644
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -12,7 +12,7 @@
-
+
@@ -91,7 +91,7 @@
-
+
diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml
index 48c3494a597a..f3952d90c940 100644
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml
index 9f89b4574051..a692e51ec89c 100644
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -12,7 +12,7 @@
-
+
@@ -91,7 +91,7 @@
-
+
diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json
index 8b1a888e0085..eadb15e4b312 100644
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,4 +1,4 @@
{
- "revision": "8d15cd3ac0d07cde9ff36ce611ae47e6ef30d9b0",
+ "revision": "a8b221aeef715c5d8159faa5b31f3ee15e5c3c5a",
"repo_path": "/integration/gaia-central"
}
diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml
index e23c51fd8549..22e99091ce11 100644
--- a/b2g/config/hamachi/sources.xml
+++ b/b2g/config/hamachi/sources.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml
index fb5df089ead5..75ce03d0f9a5 100644
--- a/b2g/config/helix/sources.xml
+++ b/b2g/config/helix/sources.xml
@@ -10,7 +10,7 @@
-
+
diff --git a/b2g/config/inari/sources.xml b/b2g/config/inari/sources.xml
index e29cafb03970..3f201cf29f9d 100644
--- a/b2g/config/inari/sources.xml
+++ b/b2g/config/inari/sources.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/b2g/config/leo/sources.xml b/b2g/config/leo/sources.xml
index eecebdf6777e..c7dee538c373 100644
--- a/b2g/config/leo/sources.xml
+++ b/b2g/config/leo/sources.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/b2g/config/mako/sources.xml b/b2g/config/mako/sources.xml
index d62639c8da4b..967a65db38a1 100644
--- a/b2g/config/mako/sources.xml
+++ b/b2g/config/mako/sources.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml
index ac814e185830..bba979c7edd4 100644
--- a/b2g/config/wasabi/sources.xml
+++ b/b2g/config/wasabi/sources.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index f9bdb18d5a95..0fd204cc1838 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -468,7 +468,6 @@ pref("browser.tabs.closeButtons", 1);
pref("browser.tabs.selectOwnerOnClose", true);
pref("browser.ctrlTab.previews", false);
-pref("browser.ctrlTab.recentlyUsedLimit", 7);
// By default, do not export HTML at shutdown.
// If true, at shutdown the bookmarks in your menu and toolbar will
@@ -1371,6 +1370,9 @@ pref("identity.fxaccounts.remote.uri", "https://accounts.firefox.com/?service=sy
// should be fetched. Must use HTTPS.
pref("identity.fxaccounts.remote.force_auth.uri", "https://accounts.firefox.com/force_auth?service=sync&context=fx_desktop_v1");
+// The remote content URL shown for signin in. Must use HTTPS.
+pref("identity.fxaccounts.remote.signin.uri", "https://accounts.firefox.com/signin?service=sync&context=fx_desktop_v1");
+
// The URL we take the user to when they opt to "manage" their Firefox Account.
// Note that this will always need to be in the same TLD as the
// "identity.fxaccounts.remote.uri" pref.
diff --git a/browser/base/content/aboutaccounts/aboutaccounts.js b/browser/base/content/aboutaccounts/aboutaccounts.js
index 63a0e32cf3fd..bf6fc6cf5157 100644
--- a/browser/base/content/aboutaccounts/aboutaccounts.js
+++ b/browser/base/content/aboutaccounts/aboutaccounts.js
@@ -250,6 +250,9 @@ function openPrefs() {
function init() {
if (window.location.href.contains("action=signin")) {
+ show("remote");
+ wrapper.init(fxAccounts.getAccountsSignInURI());
+ } else if (window.location.href.contains("action=signup")) {
show("remote");
wrapper.init();
} else if (window.location.href.contains("action=reauth")) {
diff --git a/browser/base/content/browser-tabPreviews.js b/browser/base/content/browser-tabPreviews.js
index eb2611b84100..1765511479b8 100644
--- a/browser/base/content/browser-tabPreviews.js
+++ b/browser/base/content/browser-tabPreviews.js
@@ -161,10 +161,6 @@ var ctrlTab = {
delete this.previews;
return this.previews = this.panel.getElementsByClassName("ctrlTab-preview");
},
- get recentlyUsedLimit () {
- delete this.recentlyUsedLimit;
- return this.recentlyUsedLimit = gPrefService.getIntPref("browser.ctrlTab.recentlyUsedLimit");
- },
get keys () {
var keys = {};
["close", "find", "selectAll"].forEach(function (key) {
@@ -187,31 +183,7 @@ var ctrlTab = {
get canvasHeight () Math.round(this.canvasWidth * tabPreviews.aspectRatio),
get tabList () {
- if (this._tabList)
- return this._tabList;
-
- // Using gBrowser.tabs instead of gBrowser.visibleTabs, as the latter
- // exlcudes closing tabs, breaking the following loop in case the the
- // selected tab is closing.
- let list = Array.filter(gBrowser.tabs, function (tab) !tab.hidden);
-
- // Rotate the list until the selected tab is first
- while (!list[0].selected)
- list.push(list.shift());
-
- list = list.filter(function (tab) !tab.closing);
-
- if (this.recentlyUsedLimit != 0) {
- let recentlyUsedTabs = this._recentlyUsedTabs;
- if (this.recentlyUsedLimit > 0)
- recentlyUsedTabs = this._recentlyUsedTabs.slice(0, this.recentlyUsedLimit);
- for (let i = recentlyUsedTabs.length - 1; i >= 0; i--) {
- list.splice(list.indexOf(recentlyUsedTabs[i]), 1);
- list.unshift(recentlyUsedTabs[i]);
- }
- }
-
- return this._tabList = list;
+ return this._recentlyUsedTabs;
},
init: function ctrlTab_init() {
@@ -340,6 +312,9 @@ var ctrlTab = {
},
attachTab: function ctrlTab_attachTab(aTab, aPos) {
+ if (aTab.closing)
+ return;
+
if (aPos == 0)
this._recentlyUsedTabs.unshift(aTab);
else if (aPos)
@@ -347,6 +322,7 @@ var ctrlTab = {
else
this._recentlyUsedTabs.push(aTab);
},
+
detachTab: function ctrlTab_detachTab(aTab) {
var i = this._recentlyUsedTabs.indexOf(aTab);
if (i >= 0)
@@ -417,8 +393,6 @@ var ctrlTab = {
Array.forEach(this.previews, function (preview) {
this.updatePreview(preview, null);
}, this);
-
- this._tabList = null;
},
onKeyPress: function ctrlTab_onKeyPress(event) {
@@ -472,7 +446,6 @@ var ctrlTab = {
return;
}
- this._tabList = null;
this.updatePreviews();
if (this.selected.hidden)
diff --git a/browser/components/preferences/connection.js b/browser/components/preferences/connection.js
index 65fe12ff48ed..c2638ccc6de0 100644
--- a/browser/components/preferences/connection.js
+++ b/browser/components/preferences/connection.js
@@ -46,7 +46,7 @@ var gConnectionsDialog = {
proxyTypeChanged: function ()
{
var proxyTypePref = document.getElementById("network.proxy.type");
-
+
// Update http
var httpProxyURLPref = document.getElementById("network.proxy.http");
httpProxyURLPref.disabled = proxyTypePref.value != 1;
@@ -58,10 +58,11 @@ var gConnectionsDialog = {
var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
shareProxiesPref.disabled = proxyTypePref.value != 1;
-
+ var autologinProxyPref = document.getElementById("signon.autologin.proxy");
+ autologinProxyPref.disabled = proxyTypePref.value == 0;
var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
noProxiesPref.disabled = proxyTypePref.value != 1;
-
+
var autoconfigURLPref = document.getElementById("network.proxy.autoconfig_url");
autoconfigURLPref.disabled = proxyTypePref.value != 2;
diff --git a/browser/components/preferences/connection.xul b/browser/components/preferences/connection.xul
index 389c7f20227c..7debc2bf801d 100644
--- a/browser/components/preferences/connection.xul
+++ b/browser/components/preferences/connection.xul
@@ -44,7 +44,10 @@
-
+
+
@@ -159,6 +162,13 @@
+
+
+
diff --git a/browser/components/preferences/sync.js b/browser/components/preferences/sync.js
index df6ac223813a..40c3cd417956 100644
--- a/browser/components/preferences/sync.js
+++ b/browser/components/preferences/sync.js
@@ -256,6 +256,10 @@ let gSyncPane = {
window.close();
},
+ signUp: function() {
+ this.openContentInBrowser("about:accounts?action=signup");
+ },
+
signIn: function() {
this.openContentInBrowser("about:accounts?action=signin");
},
diff --git a/browser/components/preferences/sync.xul b/browser/components/preferences/sync.xul
index 2f274968cf23..efe0fc863d1b 100644
--- a/browser/components/preferences/sync.xul
+++ b/browser/components/preferences/sync.xul
@@ -188,7 +188,7 @@
&welcome.description;
&projects.warning;
&projects.error;
-
+
+
+
&projects.hosted;
+
&projects.packaged;
diff --git a/browser/devtools/shared/widgets/Spectrum.js b/browser/devtools/shared/widgets/Spectrum.js
index 9222fece293e..fe861f31eaea 100644
--- a/browser/devtools/shared/widgets/Spectrum.js
+++ b/browser/devtools/shared/widgets/Spectrum.js
@@ -133,10 +133,11 @@ Spectrum.rgbToHsv = function(r, g, b, a) {
Spectrum.getOffset = function(el) {
let curleft = 0, curtop = 0;
if (el.offsetParent) {
- do {
+ while (el) {
curleft += el.offsetLeft;
curtop += el.offsetTop;
- } while (el = el.offsetParent);
+ el = el.offsetParent;
+ }
}
return {
left: curleft,
diff --git a/browser/locales/en-US/chrome/browser/devtools/app-manager.dtd b/browser/locales/en-US/chrome/browser/devtools/app-manager.dtd
index ebd6d03e77b2..2c11b371b609 100644
--- a/browser/locales/en-US/chrome/browser/devtools/app-manager.dtd
+++ b/browser/locales/en-US/chrome/browser/devtools/app-manager.dtd
@@ -83,6 +83,8 @@
+
+
diff --git a/browser/locales/en-US/chrome/browser/preferences/connection.dtd b/browser/locales/en-US/chrome/browser/preferences/connection.dtd
index b1d8d07b93c9..a4e2eea4500b 100644
--- a/browser/locales/en-US/chrome/browser/preferences/connection.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/connection.dtd
@@ -44,3 +44,6 @@
+
+
+
diff --git a/browser/metro/base/content/bindings/circularprogress.xml b/browser/metro/base/content/bindings/circularprogress.xml
index fc078a86b563..6665fc9fe5ca 100644
--- a/browser/metro/base/content/bindings/circularprogress.xml
+++ b/browser/metro/base/content/bindings/circularprogress.xml
@@ -15,15 +15,32 @@
-
-
-
+
+
+
+
+
+
+
- document.getAnonymousElementByAttribute(this, "anonid", "progressRing");
+ document.getAnonymousElementByAttribute(this, "anonid", "progressRing");
+
+
+ document.getAnonymousElementByAttribute(this, "anonid",
+ "progressNotification");
null
null
@@ -92,6 +109,26 @@
]]>