From ae326d8e37372504174a85d7b5a5605c187457f3 Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Thu, 5 Jun 2014 15:49:31 -0700 Subject: [PATCH 001/103] Bug 1014283 - Finish BrowserHealthRecorder initialization after distribution processing. r=margaret --- mobile/android/base/health/BrowserHealthRecorder.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mobile/android/base/health/BrowserHealthRecorder.java b/mobile/android/base/health/BrowserHealthRecorder.java index c2e9a081897..f4b9753fa73 100644 --- a/mobile/android/base/health/BrowserHealthRecorder.java +++ b/mobile/android/base/health/BrowserHealthRecorder.java @@ -525,16 +525,17 @@ public class BrowserHealthRecorder implements HealthRecorder, GeckoEventListener // Because the distribution lookup can take some time, do it at the end of // our background startup work, along with the Gecko snapshot fetch. - final GeckoEventListener self = this; - ThreadUtils.postToBackgroundThread(new Runnable() { + final Distribution distribution = Distribution.getInstance(context); + distribution.addOnDistributionReadyCallback(new Runnable() { @Override public void run() { - final DistributionDescriptor desc = new Distribution(context).getDescriptor(); + Log.d(LOG_TAG, "Running post-distribution task: health recorder."); + final DistributionDescriptor desc = distribution.getDescriptor(); if (desc != null && desc.valid) { profileCache.setDistributionString(desc.id, desc.version); } Log.d(LOG_TAG, "Requesting all add-ons and FHR prefs from Gecko."); - dispatcher.registerGeckoThreadListener(self, EVENT_SNAPSHOT); + dispatcher.registerGeckoThreadListener(BrowserHealthRecorder.this, EVENT_SNAPSHOT); GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("HealthReport:RequestSnapshot", null)); } }); From 53542c3bbeb14835d408289074664c886c9bf9b3 Mon Sep 17 00:00:00 2001 From: Erik Vold Date: Thu, 5 Jun 2014 16:22:03 -0700 Subject: [PATCH 002/103] Bug 1021280 - Uplift Add-on SDK to Firefox r=me --- .../source/examples/toolbar-api/package.json | 9 ++- addon-sdk/source/lib/sdk/addon/runner.js | 15 ++-- addon-sdk/source/lib/sdk/content/content.js | 29 +++++--- addon-sdk/source/lib/sdk/request.js | 14 +++- addon-sdk/source/lib/sdk/self.js | 25 +++++-- addon-sdk/source/lib/sdk/tabs/utils.js | 58 +-------------- addon-sdk/source/lib/toolkit/loader.js | 10 +-- .../source/python-lib/cuddlefish/__init__.py | 1 - .../python-lib/cuddlefish/tests/test_xpi.py | 6 +- .../test/addons/content-permissions/main.js | 2 +- .../test/addons/l10n-properties/main.js | 2 +- addon-sdk/source/test/addons/l10n/main.js | 2 +- .../source/test/addons/layout-change/main.js | 2 +- addon-sdk/source/test/addons/packed/main.js | 2 +- addon-sdk/source/test/addons/require/main.js | 2 +- .../test/addons/simple-prefs/lib/main.js | 2 +- addon-sdk/source/test/addons/unpacked/main.js | 2 +- addon-sdk/source/test/test-child_process.js | 3 + .../source/test/test-content-symbiont.js | 25 +++++++ addon-sdk/source/test/test-request.js | 71 +++++++++++++++++++ 20 files changed, 183 insertions(+), 99 deletions(-) diff --git a/addon-sdk/source/examples/toolbar-api/package.json b/addon-sdk/source/examples/toolbar-api/package.json index a883c1e4cba..dbceabb99f1 100644 --- a/addon-sdk/source/examples/toolbar-api/package.json +++ b/addon-sdk/source/examples/toolbar-api/package.json @@ -1,9 +1,12 @@ { "name": "toolbar-api", - "title": "toolbar-api", - "id": "toolbar-api", + "title": "Toolbar API", + "main": "./lib/main.js", "description": "a toolbar api example", "author": "", "license": "MPL 2.0", - "version": "0.1" + "version": "0.1", + "engines": { + "firefox": ">=27.0 <=30.0" + } } diff --git a/addon-sdk/source/lib/sdk/addon/runner.js b/addon-sdk/source/lib/sdk/addon/runner.js index 0cbde2bea5f..8ef3b3c8b61 100644 --- a/addon-sdk/source/lib/sdk/addon/runner.js +++ b/addon-sdk/source/lib/sdk/addon/runner.js @@ -12,11 +12,12 @@ const { once } = require('../system/events'); const { exit, env, staticArgs } = require('../system'); const { when: unload } = require('../system/unload'); const { loadReason } = require('../self'); -const { rootURI, metadata: { preferences } } = require("@loader/options"); +const { rootURI, metadata } = require("@loader/options"); const globals = require('../system/globals'); const xulApp = require('../system/xul-app'); const appShellService = Cc['@mozilla.org/appshell/appShellService;1']. getService(Ci.nsIAppShellService); +const { preferences } = metadata; const NAME2TOPIC = { 'Firefox': 'sessionstore-windows-restored', @@ -134,13 +135,13 @@ function run(options) { if (preferences && preferences.length > 0) { try { require('../preferences/native-options').enable(preferences); - } - catch (error) { - console.exception(error); } - } + catch (error) { + console.exception(error); + } + } else { - // keeping support for addons packaged with older SDK versions, + // keeping support for addons packaged with older SDK versions, // when cfx didn't include the 'preferences' key in @loader/options // Initialize inline options localization, without preventing addon to be @@ -158,7 +159,7 @@ function run(options) { // Only set if `prefsURI` specified try { setDefaultPrefs(options.prefsURI); - } + } catch (err) { // cfx bootstrap always passes prefsURI, even in addons without prefs } diff --git a/addon-sdk/source/lib/sdk/content/content.js b/addon-sdk/source/lib/sdk/content/content.js index 9de0f463d22..5bd98145c8c 100644 --- a/addon-sdk/source/lib/sdk/content/content.js +++ b/addon-sdk/source/lib/sdk/content/content.js @@ -7,13 +7,26 @@ module.metadata = { "stability": "deprecated" }; -const { deprecateFunction } = require('../util/deprecate'); +const { deprecateUsage } = require('../util/deprecate'); -exports.Loader = deprecateFunction(require('./loader').Loader, - '`sdk/content/content` is deprecated. Please use `sdk/content/loader` directly.'); -exports.Symbiont = deprecateFunction(require('../deprecated/symbiont').Symbiont, - 'Both `sdk/content/content` and `sdk/deprecated/symbiont` are deprecated. ' + - '`sdk/core/heritage` supersedes Symbiont for inheritance.'); -exports.Worker = deprecateFunction(require('./worker').Worker, - '`sdk/content/content` is deprecated. Please use `sdk/content/worker` directly.'); +Object.defineProperty(exports, "Loader", { + get: function() { + deprecateUsage('`sdk/content/content` is deprecated. Please use `sdk/content/loader` directly.'); + return require('./loader').Loader; + } +}); +Object.defineProperty(exports, "Symbiont", { + get: function() { + deprecateUsage('Both `sdk/content/content` and `sdk/deprecated/symbiont` are deprecated. ' + + '`sdk/core/heritage` supersedes Symbiont for inheritance.'); + return require('../deprecated/symbiont').Symbiont; + } +}); + +Object.defineProperty(exports, "Worker", { + get: function() { + deprecateUsage('`sdk/content/content` is deprecated. Please use `sdk/content/worker` directly.'); + return require('./worker').Worker; + } +}); diff --git a/addon-sdk/source/lib/sdk/request.js b/addon-sdk/source/lib/sdk/request.js index ccf9bfb0342..7c358ffd43c 100644 --- a/addon-sdk/source/lib/sdk/request.js +++ b/addon-sdk/source/lib/sdk/request.js @@ -44,6 +44,10 @@ const { validateOptions, validateSingleOption } = new OptionsValidator({ overrideMimeType: { map: function(v) v || null, is: ["string", "null"], + }, + anonymous: { + map: function(v) v || false, + is: ["boolean", "null"], } }); @@ -54,7 +58,7 @@ const REUSE_ERROR = "This request object has been used already. You must " + // request types function runRequest(mode, target) { let source = request(target) - let { xhr, url, content, contentType, headers, overrideMimeType } = source; + let { xhr, url, content, contentType, headers, overrideMimeType, anonymous } = source; let isGetOrHead = (mode == "GET" || mode == "HEAD"); @@ -63,7 +67,9 @@ function runRequest(mode, target) { if (xhr) throw new Error(REUSE_ERROR); - xhr = source.xhr = new XMLHttpRequest(); + xhr = source.xhr = new XMLHttpRequest({ + mozAnon: anonymous + }); // Build the data to be set. For GET or HEAD requests, we want to append that // to the URL before opening the request. @@ -129,6 +135,7 @@ const Request = Class({ set contentType(value) { request(this).contentType = validateSingleOption('contentType', value); }, + get anonymous() { return request(this).anonymous; }, get response() { return request(this).response; }, delete: function() { runRequest('DELETE', this); @@ -202,7 +209,8 @@ const Response = Class({ } }); return headers; - } + }, + get anonymous() response(this).request.mozAnon }); // apiUtils.validateOptions doesn't give the ability to easily validate single diff --git a/addon-sdk/source/lib/sdk/self.js b/addon-sdk/source/lib/sdk/self.js index c720be890b7..af093819b3b 100644 --- a/addon-sdk/source/lib/sdk/self.js +++ b/addon-sdk/source/lib/sdk/self.js @@ -8,12 +8,24 @@ module.metadata = { }; const { CC } = require('chrome'); -const { id, name, prefixURI, rootURI, metadata, - version, loadReason, preferencesBranch } = require('@loader/options'); +const options = require('@loader/options'); +const { get } = require("./preferences/service"); const { readURISync } = require('./net/url'); -const addonDataURI = prefixURI + name + '/data/'; +const id = options.id; + +const readPref = key => get("extensions." + id + ".sdk." + key); + +const name = readPref("name") || options.name; +const version = readPref("version") || options.version; +const loadReason = readPref("load.reason") || options.loadReason; +const rootURI = readPref("rootURI") || options.rootURI || ""; +const baseURI = readPref("baseURI") || options.prefixURI + name + "/"; +const addonDataURI = baseURI + "data/"; +const metadata = options.metadata || {}; +const permissions = metadata.permissions || {}; +const isPacked = rootURI && rootURI.indexOf("jar:") === 0; const uri = (path="") => path.contains(":") ? path : addonDataURI + path; @@ -24,16 +36,15 @@ const uri = (path="") => // associated unique URI string that can be used for that. exports.uri = 'addon:' + id; exports.id = id; -exports.preferencesBranch = preferencesBranch || id; +exports.preferencesBranch = options.preferencesBranch || id; exports.name = name; exports.loadReason = loadReason; exports.version = version; -// If `rootURI` is jar:file://...!/ than add-on is packed. -exports.packed = (rootURI || '').indexOf('jar:') === 0; +exports.packed = isPacked; exports.data = Object.freeze({ url: uri, load: function read(path) { return readURISync(uri(path)); } }); -exports.isPrivateBrowsingSupported = ((metadata || {}).permissions || {})['private-browsing'] === true; +exports.isPrivateBrowsingSupported = permissions['private-browsing'] === true; diff --git a/addon-sdk/source/lib/sdk/tabs/utils.js b/addon-sdk/source/lib/sdk/tabs/utils.js index b99533d0f9c..6909cce006d 100644 --- a/addon-sdk/source/lib/sdk/tabs/utils.js +++ b/addon-sdk/source/lib/sdk/tabs/utils.js @@ -61,7 +61,8 @@ function activateTab(tab, window) { exports.activateTab = activateTab; function getTabBrowser(window) { - return window.gBrowser; + // bug 1009938 - may be null in SeaMonkey + return window.gBrowser || window.getBrowser(); } exports.getTabBrowser = getTabBrowser; @@ -240,63 +241,10 @@ exports.getAllTabContentWindows = getAllTabContentWindows; // gets the tab containing the provided window function getTabForContentWindow(window) { - // Retrieve the topmost frame container. It can be either , - // or . But in our case, it should be xul:browser. - let browser; - try { - browser = window.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIWebNavigation) - .QueryInterface(Ci.nsIDocShell) - .chromeEventHandler; - } catch(e) { - // Bug 699450: The tab may already have been detached so that `window` is - // in a almost destroyed state and can't be queryinterfaced anymore. - } - - // Is null for toplevel documents - if (!browser) { - return null; - } - - // Retrieve the owner window, should be browser.xul one - let chromeWindow = browser.ownerDocument.defaultView; - - // Ensure that it is top-level browser window. - // We need extra checks because of Mac hidden window that has a broken - // `gBrowser` global attribute. - if ('gBrowser' in chromeWindow && chromeWindow.gBrowser && - 'browsers' in chromeWindow.gBrowser) { - // Looks like we are on Firefox Desktop - // Then search for the position in tabbrowser in order to get the tab object - let browsers = chromeWindow.gBrowser.browsers; - let i = browsers.indexOf(browser); - if (i !== -1) - return chromeWindow.gBrowser.tabs[i]; - return null; - } - // Fennec - else if ('BrowserApp' in chromeWindow) { - return getTabForWindow(window); - } - - return null; + return getTabs().find(tab => getTabContentWindow(tab) === window.top) || null; } exports.getTabForContentWindow = getTabForContentWindow; -// used on fennec -function getTabForWindow(window) { - for each (let { BrowserApp } in getWindows()) { - if (!BrowserApp) - continue; - - for each (let tab in BrowserApp.tabs) { - if (tab.browser.contentWindow == window.top) - return tab; - } - } - return null; -} - function getTabURL(tab) { if (tab.browser) // fennec return String(tab.browser.currentURI.spec); diff --git a/addon-sdk/source/lib/toolkit/loader.js b/addon-sdk/source/lib/toolkit/loader.js index 6a419e4e42b..c73c1ad5bde 100644 --- a/addon-sdk/source/lib/toolkit/loader.js +++ b/addon-sdk/source/lib/toolkit/loader.js @@ -384,13 +384,12 @@ exports.resolve = resolve; // algorithm. // `id` should already be resolved relatively at this point. // http://nodejs.org/api/modules.html#modules_all_together -const nodeResolve = iced(function nodeResolve(id, requirer, { manifest, rootURI }) { +const nodeResolve = iced(function nodeResolve(id, requirer, { rootURI }) { // Resolve again id = exports.resolve(id, requirer); // we assume that extensions are correct, i.e., a directory doesnt't have '.js' // and a js file isn't named 'file.json.js' - let fullId = join(rootURI, id); let resolvedPath; @@ -400,7 +399,7 @@ const nodeResolve = iced(function nodeResolve(id, requirer, { manifest, rootURI return stripBase(rootURI, resolvedPath); // If manifest has dependencies, attempt to look up node modules // in the `dependencies` list - else if (manifest.dependencies) { + else { let dirs = getNodeModulePaths(dirname(join(rootURI, requirer))).map(dir => join(dir, id)); for (let i = 0; i < dirs.length; i++) { if (resolvedPath = loadAsFile(dirs[i])) @@ -533,7 +532,6 @@ const Require = iced(function Require(loader, requirer) { // TODO should get native Firefox modules before doing node-style lookups // to save on loading time - if (isNative) { // If a requireMap is available from `generateMap`, use that to // immediately resolve the node-style mapping. @@ -693,7 +691,8 @@ const Loader = iced(function Loader(options) { }); let { - modules, globals, resolve, paths, rootURI, manifest, requireMap, isNative + modules, globals, resolve, paths, rootURI, + manifest, requireMap, isNative, metadata } = override({ paths: {}, modules: {}, @@ -748,6 +747,7 @@ const Loader = iced(function Loader(options) { mapping: { enumerable: false, value: mapping }, // Map of module objects indexed by module URIs. modules: { enumerable: false, value: modules }, + metadata: { enumerable: false, value: metadata }, // Map of module sandboxes indexed by module URIs. sandboxes: { enumerable: false, value: {} }, resolve: { enumerable: false, value: resolve }, diff --git a/addon-sdk/source/python-lib/cuddlefish/__init__.py b/addon-sdk/source/python-lib/cuddlefish/__init__.py index 69dfddb823d..17e2cd58ff3 100644 --- a/addon-sdk/source/python-lib/cuddlefish/__init__.py +++ b/addon-sdk/source/python-lib/cuddlefish/__init__.py @@ -5,7 +5,6 @@ import sys import os import optparse -import webbrowser import time from copy import copy diff --git a/addon-sdk/source/python-lib/cuddlefish/tests/test_xpi.py b/addon-sdk/source/python-lib/cuddlefish/tests/test_xpi.py index 7d0f2674bce..0b822a55f0c 100644 --- a/addon-sdk/source/python-lib/cuddlefish/tests/test_xpi.py +++ b/addon-sdk/source/python-lib/cuddlefish/tests/test_xpi.py @@ -148,12 +148,12 @@ class SmallXPI(unittest.TestCase): os.path.join("sdk", "core", "promise.js"), os.path.join("sdk", "net", "url.js"), os.path.join("sdk", "util", "object.js"), - os.path.join("sdk", "util", "array.js") + os.path.join("sdk", "util", "array.js"), + os.path.join("sdk", "preferences", "service.js") ]]) missing = set(expected) - set(used_files) extra = set(used_files) - set(expected) - self.failUnlessEqual(list(missing), []) self.failUnlessEqual(list(extra), []) used_deps = m.get_used_packages() @@ -190,6 +190,8 @@ class SmallXPI(unittest.TestCase): "resources/addon-sdk/lib/sdk/util/object.js", "resources/addon-sdk/lib/sdk/util/array.js", "resources/addon-sdk/lib/sdk/net/url.js", + "resources/addon-sdk/lib/sdk/preferences/", + "resources/addon-sdk/lib/sdk/preferences/service.js", "resources/three/", "resources/three/lib/", "resources/three/lib/main.js", diff --git a/addon-sdk/source/test/addons/content-permissions/main.js b/addon-sdk/source/test/addons/content-permissions/main.js index 79f81db21a2..cae65db4a1a 100644 --- a/addon-sdk/source/test/addons/content-permissions/main.js +++ b/addon-sdk/source/test/addons/content-permissions/main.js @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ "use strict"; diff --git a/addon-sdk/source/test/addons/l10n-properties/main.js b/addon-sdk/source/test/addons/l10n-properties/main.js index 430b1b03d7d..e65b7dc9e8e 100644 --- a/addon-sdk/source/test/addons/l10n-properties/main.js +++ b/addon-sdk/source/test/addons/l10n-properties/main.js @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ "use strict"; diff --git a/addon-sdk/source/test/addons/l10n/main.js b/addon-sdk/source/test/addons/l10n/main.js index 22226203960..5bc1b39764e 100644 --- a/addon-sdk/source/test/addons/l10n/main.js +++ b/addon-sdk/source/test/addons/l10n/main.js @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ "use strict"; diff --git a/addon-sdk/source/test/addons/layout-change/main.js b/addon-sdk/source/test/addons/layout-change/main.js index 24036a2a3ab..bce41020cfe 100644 --- a/addon-sdk/source/test/addons/layout-change/main.js +++ b/addon-sdk/source/test/addons/layout-change/main.js @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ diff --git a/addon-sdk/source/test/addons/packed/main.js b/addon-sdk/source/test/addons/packed/main.js index 3a7a813a720..9be0cc4b0b1 100644 --- a/addon-sdk/source/test/addons/packed/main.js +++ b/addon-sdk/source/test/addons/packed/main.js @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ "use strict"; diff --git a/addon-sdk/source/test/addons/require/main.js b/addon-sdk/source/test/addons/require/main.js index 03972abd247..7d30f2bb390 100644 --- a/addon-sdk/source/test/addons/require/main.js +++ b/addon-sdk/source/test/addons/require/main.js @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ "use strict"; diff --git a/addon-sdk/source/test/addons/simple-prefs/lib/main.js b/addon-sdk/source/test/addons/simple-prefs/lib/main.js index 5252ee732a9..46647025420 100644 --- a/addon-sdk/source/test/addons/simple-prefs/lib/main.js +++ b/addon-sdk/source/test/addons/simple-prefs/lib/main.js @@ -134,7 +134,7 @@ if (app.is('Firefox')) { }); } - // run it again, to test against inline options document caching + // run it again, to test against inline options document caching // and duplication of nodes upon re-entry to about:addons exports.testAgainstDocCaching = exports.testAOM; diff --git a/addon-sdk/source/test/addons/unpacked/main.js b/addon-sdk/source/test/addons/unpacked/main.js index a9caf7078af..903b94c5492 100644 --- a/addon-sdk/source/test/addons/unpacked/main.js +++ b/addon-sdk/source/test/addons/unpacked/main.js @@ -1,4 +1,4 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ "use strict"; diff --git a/addon-sdk/source/test/test-child_process.js b/addon-sdk/source/test/test-child_process.js index 55f2fc1be80..c132cdf3cfa 100644 --- a/addon-sdk/source/test/test-child_process.js +++ b/addon-sdk/source/test/test-child_process.js @@ -540,3 +540,6 @@ exports.testFork = function (assert) { after(exports, cleanUp); require("test").run(exports); + +// Test disabled because of bug 979675 +module.exports = {}; diff --git a/addon-sdk/source/test/test-content-symbiont.js b/addon-sdk/source/test/test-content-symbiont.js index b0eb9978531..2716d1e0836 100644 --- a/addon-sdk/source/test/test-content-symbiont.js +++ b/addon-sdk/source/test/test-content-symbiont.js @@ -9,6 +9,10 @@ const self = require('sdk/self'); const fixtures = require("./fixtures"); const { close } = require('sdk/window/helpers'); const app = require("sdk/system/xul-app"); +const { LoaderWithHookedConsole } = require('sdk/test/loader'); +const { set: setPref, get: getPref } = require("sdk/preferences/service"); + +const DEPRECATE_PREF = "devtools.errorconsole.deprecation_warnings"; function makeWindow() { let content = @@ -157,4 +161,25 @@ exports["test:document element present on 'start'"] = function(assert, done) { }); }; +exports["test:content/content deprecation"] = function(assert) { + let pref = getPref(DEPRECATE_PREF, false); + setPref(DEPRECATE_PREF, true); + + const { loader, messages } = LoaderWithHookedConsole(module); + const { Loader, Symbiont, Worker } = loader.require("sdk/content/content"); + + assert.equal(messages.length, 3, "Should see three warnings"); + + assert.strictEqual(Loader, loader.require('sdk/content/loader').Loader, + "Loader from content/content is the exact same object as the one from content/loader"); + + assert.strictEqual(Symbiont, loader.require('sdk/deprecated/symbiont').Symbiont, + "Symbiont from content/content is the exact same object as the one from deprecated/symbiont"); + + assert.strictEqual(Worker, loader.require('sdk/content/worker').Worker, + "Worker from content/content is the exact same object as the one from content/worker"); + + setPref(DEPRECATE_PREF, pref); +} + require("test").run(exports); diff --git a/addon-sdk/source/test/test-request.js b/addon-sdk/source/test/test-request.js index a18d86d9919..41892fbb413 100644 --- a/addon-sdk/source/test/test-request.js +++ b/addon-sdk/source/test/test-request.js @@ -43,6 +43,23 @@ exports.testOptionsValidator = function(assert) { }, /The option "url" is invalid/); // The url shouldn't have changed, so check that assert.equal(req.url, "http://playground.zpao.com/jetpack/request/text.php"); + + // Test default anonymous parameter value + assert.equal(req.anonymous, false); + // Test set anonymous parameter value + req = Request({ + url: "http://playground.zpao.com/jetpack/request/text.php", + anonymous: true, + onComplete: function () {} + }); + assert.equal(req.anonymous, true); + // Test wrong value as anonymous parameter value + assert.throws(function() { + Request({ + url: "http://playground.zpao.com/jetpack/request/text.php", + anonymous: "invalidvalue" + }); + }, /The option "anonymous" must be one of the following types/); }; exports.testContentValidator = function(assert, done) { @@ -183,6 +200,60 @@ exports.test3rdPartyCookies = function (assert, done) { }).get(); }; +// Test anonymous request behavior +exports.testAnonymousRequest = function(assert, done) { + let srv = startServerAsync(port, basePath); + let basename = "test-anonymous-request.sjs"; + let testUrl = "http://localhost:" + port + "/" + basename; + // Function to handle the requests in the server + let content = function handleRequest(request, response) { + // Request to store cookie + response.setHeader("Set-Cookie", "anonymousKey=anonymousValue;", "true"); + // Set response content type + response.setHeader("Content-Type", "application/json"); + // Check if cookie was send during request + var cookiePresent = request.hasHeader("Cookie"); + // Create server respone content + response.write(JSON.stringify({ "hasCookie": cookiePresent })); + }.toString(); + prepareFile(basename, content); + // Create request callbacks + var checkCookieCreated = function (response) { + // Check that the server created the cookie + assert.equal(response.headers['Set-Cookie'], 'anonymousKey=anonymousValue;'); + // Make an other request and check that the server this time got the cookie + Request({ + url: testUrl, + onComplete: checkCookieSend + }).get(); + }, + checkCookieSend = function (response) { + // Check the response sent headers and cookies + assert.equal(response.anonymous, false); + // Check the server got the created cookie + assert.equal(response.json.hasCookie, true); + // Make a anonymous request and check the server did not get the cookie + Request({ + url: testUrl, + anonymous: true, + onComplete: checkCookieNotSend + }).get(); + }, + checkCookieNotSend = function (response) { + // Check the response is anonymous + assert.equal(response.anonymous, true); + // Check the server did not get the cookie + assert.equal(response.json.hasCookie, false); + // Stop the server + srv.stop(done); + }; + // Make the first request to create cookie + Request({ + url: testUrl, + onComplete: checkCookieCreated + }).get(); +}; + exports.testSimpleJSON = function (assert, done) { let srv = startServerAsync(port, basePath); let json = { foo: "bar" }; From 67bcef909d4fe38e2f501b7e21fcb6937c5c4407 Mon Sep 17 00:00:00 2001 From: Robert Strong Date: Thu, 5 Jun 2014 18:10:17 -0700 Subject: [PATCH 003/103] Bug 1010999 - Change update notification to Weekly instead of Daily on Aurora. r=gavin.sharp --- browser/branding/aurora/pref/firefox-branding.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/branding/aurora/pref/firefox-branding.js b/browser/branding/aurora/pref/firefox-branding.js index 26aa01729b7..d847ce7be24 100644 --- a/browser/branding/aurora/pref/firefox-branding.js +++ b/browser/branding/aurora/pref/firefox-branding.js @@ -12,8 +12,8 @@ pref("app.update.interval", 28800); // 8 hours // The time interval between the downloading of mar file chunks in the // background (in seconds) pref("app.update.download.backgroundInterval", 60); -// Give the user x seconds to react before showing the big UI. default=24 hours -pref("app.update.promptWaitTime", 86400); +// Give the user x seconds to react before showing the big UI. default=168 hours +pref("app.update.promptWaitTime", 604800); // URL user can browse to manually if for some reason all update installation // attempts fail. pref("app.update.url.manual", "https://www.mozilla.org/firefox/aurora/"); From aeb48f97310169a4e6d65d1d5e523bdfcf9394f2 Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Thu, 5 Jun 2014 19:38:01 -0700 Subject: [PATCH 004/103] Bug 1021443 - java.lang.IllegalStateException: Already registered Webapps:Postinstall under a different type. r=jchen --- mobile/android/base/webapp/EventListener.java | 46 ++++++++----------- mobile/android/base/webapp/InstallHelper.java | 10 ++-- mobile/android/base/webapp/WebappImpl.java | 5 +- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/mobile/android/base/webapp/EventListener.java b/mobile/android/base/webapp/EventListener.java index 07537f21c0d..2312d1bd3a7 100644 --- a/mobile/android/base/webapp/EventListener.java +++ b/mobile/android/base/webapp/EventListener.java @@ -5,33 +5,6 @@ package org.mozilla.gecko.webapp; -import org.mozilla.gecko.ActivityHandlerHelper; -import org.mozilla.gecko.AppConstants; -import org.mozilla.gecko.GeckoAppShell; -import org.mozilla.gecko.GeckoEvent; -import org.mozilla.gecko.GeckoProfile; -import org.mozilla.gecko.favicons.decoders.FaviconDecoder; -import org.mozilla.gecko.gfx.BitmapUtils; -import org.mozilla.gecko.util.ActivityResultHandler; -import org.mozilla.gecko.EventDispatcher; -import org.mozilla.gecko.util.EventCallback; -import org.mozilla.gecko.util.NativeEventListener; -import org.mozilla.gecko.util.NativeJSObject; -import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.WebappAllocator; - -import android.app.Activity; -import android.app.ActivityManager; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.graphics.Bitmap; -import android.net.Uri; -import android.util.Log; - import java.io.File; import java.util.Arrays; import java.util.HashSet; @@ -40,6 +13,25 @@ import java.util.Set; import org.json.JSONException; import org.json.JSONObject; +import org.mozilla.gecko.ActivityHandlerHelper; +import org.mozilla.gecko.EventDispatcher; +import org.mozilla.gecko.GeckoAppShell; +import org.mozilla.gecko.GeckoProfile; +import org.mozilla.gecko.util.ActivityResultHandler; +import org.mozilla.gecko.util.EventCallback; +import org.mozilla.gecko.util.NativeEventListener; +import org.mozilla.gecko.util.NativeJSObject; +import org.mozilla.gecko.util.ThreadUtils; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.util.Log; public class EventListener implements NativeEventListener { diff --git a/mobile/android/base/webapp/InstallHelper.java b/mobile/android/base/webapp/InstallHelper.java index eda6d8b0ddd..8f60f5ea2d5 100644 --- a/mobile/android/base/webapp/InstallHelper.java +++ b/mobile/android/base/webapp/InstallHelper.java @@ -19,7 +19,9 @@ import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; import org.mozilla.gecko.GeckoProfile; import org.mozilla.gecko.gfx.BitmapUtils; -import org.mozilla.gecko.util.GeckoEventListener; +import org.mozilla.gecko.util.EventCallback; +import org.mozilla.gecko.util.NativeEventListener; +import org.mozilla.gecko.util.NativeJSObject; import org.mozilla.gecko.util.ThreadUtils; import android.content.Context; @@ -27,7 +29,7 @@ import android.graphics.Bitmap; import android.net.Uri; import android.util.Log; -public class InstallHelper implements GeckoEventListener { +public class InstallHelper implements NativeEventListener { private static final String LOGTAG = "GeckoWebappInstallHelper"; private static final String[] INSTALL_EVENT_NAMES = new String[] {"Webapps:Postinstall"}; private final Context mContext; @@ -36,7 +38,7 @@ public class InstallHelper implements GeckoEventListener { public static interface InstallCallback { // on the GeckoThread - void installCompleted(InstallHelper installHelper, String event, JSONObject message); + void installCompleted(InstallHelper installHelper, String event, NativeJSObject message); // on the GeckoBackgroundThread void installErrored(InstallHelper installHelper, Exception exception); @@ -162,7 +164,7 @@ public class InstallHelper implements GeckoEventListener { } @Override - public void handleMessage(String event, JSONObject message) { + public void handleMessage(String event, NativeJSObject message, EventCallback callback) { EventDispatcher.getInstance().unregisterGeckoThreadListener(this, INSTALL_EVENT_NAMES); if (mCallback != null) { diff --git a/mobile/android/base/webapp/WebappImpl.java b/mobile/android/base/webapp/WebappImpl.java index 5adc670b59f..7dceb19d940 100644 --- a/mobile/android/base/webapp/WebappImpl.java +++ b/mobile/android/base/webapp/WebappImpl.java @@ -18,6 +18,7 @@ import org.mozilla.gecko.GeckoThread; import org.mozilla.gecko.R; import org.mozilla.gecko.Tab; import org.mozilla.gecko.Tabs; +import org.mozilla.gecko.util.NativeJSObject; import org.mozilla.gecko.webapp.InstallHelper.InstallCallback; import android.content.Intent; @@ -325,13 +326,13 @@ public class WebappImpl extends GeckoApp implements InstallCallback { } @Override - public void installCompleted(InstallHelper installHelper, String event, JSONObject message) { + public void installCompleted(InstallHelper installHelper, String event, NativeJSObject message) { if (event == null) { return; } if (event.equals("Webapps:Postinstall")) { - String origin = message.optString("origin"); + String origin = message.optString("origin", null); launchWebapp(origin); } } From 8ed47e3fcdd99ccf50e999ba78a21eb02c81f63f Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Fri, 6 Jun 2014 12:01:51 +0800 Subject: [PATCH 005/103] Bug 1020972 - validate project if icon & name are unknown. r=dcamp --- browser/devtools/webide/content/webide.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/browser/devtools/webide/content/webide.js b/browser/devtools/webide/content/webide.js index ac270100504..49640624714 100644 --- a/browser/devtools/webide/content/webide.js +++ b/browser/devtools/webide/content/webide.js @@ -616,11 +616,10 @@ let Cmds = { projectsNode.appendChild(panelItemNode); panelItemNode.setAttribute("label", project.name || AppManager.DEFAULT_PROJECT_NAME); panelItemNode.setAttribute("image", project.icon || AppManager.DEFAULT_PROJECT_ICON); - if (!project.validationStatus) { - // The result of the validation process (storing names, icons, …) has never been - // stored in the IndexedDB database. This happens when the project has been created - // from the old app manager. We need to run the validation again and update the name - // and icon of the app + if (!project.name || !project.icon) { + // The result of the validation process (storing names, icons, …) is not stored in + // the IndexedDB database when App Manager v1 is used. + // We need to run the validation again and update the name and icon of the app. AppManager.validateProject(project).then(() => { panelItemNode.setAttribute("label", project.name); panelItemNode.setAttribute("image", project.icon); From 5a5655621286eeeae1ad5b29b62fce4b01bc1160 Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Fri, 6 Jun 2014 12:01:52 +0800 Subject: [PATCH 006/103] Bug 1007057 - build appmgr v2: remove configure option. r=mshal r=ochameau --- browser/app/profile/firefox.js | 6 +--- browser/devtools/moz.build | 4 +-- browser/devtools/webide/content/webide.js | 2 ++ browser/devtools/webide/test/head.js | 10 +++--- browser/devtools/webide/test/test_cli.html | 3 -- browser/devtools/webide/test/test_import.html | 3 ++ .../devtools/webide/test/test_runtime.html | 36 ++++++++----------- browser/installer/package-manifest.in | 2 -- configure.in | 13 ------- 9 files changed, 25 insertions(+), 54 deletions(-) diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index cb92730e3b1..52d71b4f0d7 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1237,12 +1237,8 @@ pref("devtools.appmanager.enabled", true); pref("devtools.appmanager.lastTab", "help"); pref("devtools.appmanager.manifestEditor.enabled", true); -// Enable devtools webide -#ifdef MOZ_DEVTOOLS_WEBIDE -pref("devtools.webide.enabled", true); -#else +// Disable devtools webide until bug 1007059 pref("devtools.webide.enabled", false); -#endif // Toolbox preferences pref("devtools.toolbox.footer.height", 250); diff --git a/browser/devtools/moz.build b/browser/devtools/moz.build index d09a23c79ef..b07ea014a21 100644 --- a/browser/devtools/moz.build +++ b/browser/devtools/moz.build @@ -28,11 +28,9 @@ DIRS += [ 'tilt', 'webaudioeditor', 'webconsole', + 'webide', ] -if CONFIG['MOZ_DEVTOOLS_WEBIDE']: - DIRS += ['webide'] - EXTRA_COMPONENTS += [ 'devtools-clhandler.js', 'devtools-clhandler.manifest', diff --git a/browser/devtools/webide/content/webide.js b/browser/devtools/webide/content/webide.js index 49640624714..af335c706f7 100644 --- a/browser/devtools/webide/content/webide.js +++ b/browser/devtools/webide/content/webide.js @@ -157,12 +157,14 @@ let UI = { unbusy: function() { document.querySelector("window").classList.remove("busy") this.updateCommands(); + this._busyPromise = null; }, busyUntil: function(promise, operationDescription) { // Freeze the UI until the promise is resolved. A 30s timeout // will unfreeze the UI, just in case the promise never gets // resolved. + this._busyPromise = promise; let timeout = setTimeout(() => { this.unbusy(); UI.reportError("error_operationTimeout", operationDescription); diff --git a/browser/devtools/webide/test/head.js b/browser/devtools/webide/test/head.js index 97797a95046..219675161c0 100644 --- a/browser/devtools/webide/test/head.js +++ b/browser/devtools/webide/test/head.js @@ -62,17 +62,15 @@ function closeWebIDE(win) { } function removeAllProjects() { - let deferred = promise.defer(); - AppProjects.load().then(() => { + return Task.spawn(function* () { + yield AppProjects.load(); let projects = AppProjects.store.object.projects; for (let i = 0; i < projects.length; i++) { - AppProjects.remove(projects[i].location); + yield AppProjects.remove(projects[i].location); } - deferred.resolve(); }); - - return deferred.promise; } + function nextTick() { let deferred = promise.defer(); SimpleTest.executeSoon(() => { diff --git a/browser/devtools/webide/test/test_cli.html b/browser/devtools/webide/test/test_cli.html index 124a0d2273c..3c192785e70 100644 --- a/browser/devtools/webide/test/test_cli.html +++ b/browser/devtools/webide/test/test_cli.html @@ -19,15 +19,12 @@ SimpleTest.waitForExplicitFinish(); Task.spawn(function* () { - let clClass = Components.classes["@mozilla.org/toolkit/command-line;1"].createInstance(); - Cu.import("resource://gre/modules/devtools/dbg-server.jsm"); DebuggerServer.init(function () { return true; }); DebuggerServer.addBrowserActors(); let win = yield openWebIDE(); - let packagedAppLocation = getTestFilePath("app"); let cli = "actions=addPackagedApp&location=" + packagedAppLocation; diff --git a/browser/devtools/webide/test/test_import.html b/browser/devtools/webide/test/test_import.html index 95f190d64f7..041870b4909 100644 --- a/browser/devtools/webide/test/test_import.html +++ b/browser/devtools/webide/test/test_import.html @@ -22,6 +22,9 @@ let win = yield openWebIDE(); let packagedAppLocation = getTestFilePath("app"); + yield win.AppProjects.load(); + is(win.AppProjects.store.object.projects.length, 0, "IDB is empty"); + yield win.Cmds.importPackagedApp(packagedAppLocation); let project = win.AppManager.selectedProject; diff --git a/browser/devtools/webide/test/test_runtime.html b/browser/devtools/webide/test/test_runtime.html index 3dba1fdf3c5..658fa6d8765 100644 --- a/browser/devtools/webide/test/test_runtime.html +++ b/browser/devtools/webide/test/test_runtime.html @@ -49,10 +49,9 @@ win.AppManager.update("runtimelist"); - let hostedAppManifest = TEST_BASE + "hosted_app.manifest"; - yield win.Cmds.importHostedApp(hostedAppManifest); + let packagedAppLocation = getTestFilePath("app"); - yield win.Cmds.showRuntimePanel(); + yield win.Cmds.importPackagedApp(packagedAppLocation); let panelNode = win.document.querySelector("#runtime-panel"); let items = panelNode.querySelectorAll(".runtime-panel-item-usb"); @@ -65,36 +64,27 @@ items[0].click(); - yield deferred.promise; + ok(win.document.querySelector("window").className, "busy", "UI is busy"); + yield win.UI._busyPromise; is(Object.keys(DebuggerServer._connections).length, 1, "Connected"); + ok(isPlayActive(), "play button is enabled 1"); + ok(!isStopActive(), "stop button is disabled 1"); + let oldProject = win.AppManager.selectedProject; + win.AppManager.selectedProject = null; + yield nextTick(); ok(!isPlayActive(), "play button is disabled 2"); ok(!isStopActive(), "stop button is disabled 2"); - - win.AppManager.selectedProject.errorsCount = 0; + win.AppManager._selectedProject = oldProject; win.UI.updateCommands(); yield nextTick(); ok(isPlayActive(), "play button is enabled 3"); ok(!isStopActive(), "stop button is disabled 3"); - let oldProject = win.AppManager.selectedProject; - win.AppManager.selectedProject = null; - - yield nextTick(); - - ok(!isPlayActive(), "play button is disabled 4"); - ok(!isStopActive(), "stop button is disabled 4"); - win.AppManager._selectedProject = oldProject; - win.UI.updateCommands(); - - yield nextTick(); - - ok(isPlayActive(), "play button is enabled 5"); - ok(!isStopActive(), "stop button is disabled 5"); yield win.Cmds.disconnectRuntime(); @@ -102,8 +92,8 @@ is(Object.keys(DebuggerServer._connections).length, 0, "Disconnected"); ok(win.AppManager.selectedProject, "A project is still selected"); - ok(!isPlayActive(), "play button is disabled 6"); - ok(!isStopActive(), "stop button is disabled 6"); + ok(!isPlayActive(), "play button is disabled 4"); + ok(!isStopActive(), "stop button is disabled 4"); deferred = promise.defer(); win.AppManager.connection.once( @@ -122,6 +112,8 @@ DebuggerServer.destroy(); + yield removeAllProjects(); + SimpleTest.finish(); }); diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index bd7ca8a40c2..79691e603aa 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -636,11 +636,9 @@ #endif ; [Webide Files] -#ifdef MOZ_DEVTOOLS_WEBIDE @BINPATH@/browser/chrome/webide@JAREXT@ @BINPATH@/browser/chrome/webide.manifest @BINPATH@/browser/@PREF_DIR@/webide-prefs.js -#endif ; shell icons #ifdef XP_UNIX diff --git a/configure.in b/configure.in index 970e25d9955..6da6b1e01db 100644 --- a/configure.in +++ b/configure.in @@ -7680,19 +7680,6 @@ if test "$MOZ_CHROME_FILE_FORMAT" != "jar" && AC_MSG_ERROR([--enable-chrome-format must be set to either jar, flat, or omni]) fi -dnl ======================================================== -dnl = Enable Support for devtools webide -dnl ======================================================== -MOZ_ARG_ENABLE_BOOL(devtools-webide, -[ --enable-devtools-webide Set compile flags necessary for compiling devtools webide ], -MOZ_DEVTOOLS_WEBIDE=1, -MOZ_DEVTOOLS_WEBIDE= ) - -if test -n "$MOZ_DEVTOOLS_WEBIDE"; then - AC_DEFINE(MOZ_DEVTOOLS_WEBIDE) -fi -AC_SUBST(MOZ_DEVTOOLS_WEBIDE) - dnl ========================================================= dnl Omnijar packaging (bug 552121) dnl ========================================================= From c5b89833a56166814acdbc14c5a53b22e202f19b Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Thu, 5 Jun 2014 21:07:56 -0700 Subject: [PATCH 007/103] Backed out changeset 1c4cdf7294f4 (bug 1021443) until its dependent refactoring lands. --- mobile/android/base/webapp/EventListener.java | 46 +++++++++++-------- mobile/android/base/webapp/InstallHelper.java | 10 ++-- mobile/android/base/webapp/WebappImpl.java | 5 +- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/mobile/android/base/webapp/EventListener.java b/mobile/android/base/webapp/EventListener.java index 2312d1bd3a7..07537f21c0d 100644 --- a/mobile/android/base/webapp/EventListener.java +++ b/mobile/android/base/webapp/EventListener.java @@ -5,6 +5,33 @@ package org.mozilla.gecko.webapp; +import org.mozilla.gecko.ActivityHandlerHelper; +import org.mozilla.gecko.AppConstants; +import org.mozilla.gecko.GeckoAppShell; +import org.mozilla.gecko.GeckoEvent; +import org.mozilla.gecko.GeckoProfile; +import org.mozilla.gecko.favicons.decoders.FaviconDecoder; +import org.mozilla.gecko.gfx.BitmapUtils; +import org.mozilla.gecko.util.ActivityResultHandler; +import org.mozilla.gecko.EventDispatcher; +import org.mozilla.gecko.util.EventCallback; +import org.mozilla.gecko.util.NativeEventListener; +import org.mozilla.gecko.util.NativeJSObject; +import org.mozilla.gecko.util.ThreadUtils; +import org.mozilla.gecko.WebappAllocator; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.graphics.Bitmap; +import android.net.Uri; +import android.util.Log; + import java.io.File; import java.util.Arrays; import java.util.HashSet; @@ -13,25 +40,6 @@ import java.util.Set; import org.json.JSONException; import org.json.JSONObject; -import org.mozilla.gecko.ActivityHandlerHelper; -import org.mozilla.gecko.EventDispatcher; -import org.mozilla.gecko.GeckoAppShell; -import org.mozilla.gecko.GeckoProfile; -import org.mozilla.gecko.util.ActivityResultHandler; -import org.mozilla.gecko.util.EventCallback; -import org.mozilla.gecko.util.NativeEventListener; -import org.mozilla.gecko.util.NativeJSObject; -import org.mozilla.gecko.util.ThreadUtils; - -import android.app.Activity; -import android.app.ActivityManager; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.util.Log; public class EventListener implements NativeEventListener { diff --git a/mobile/android/base/webapp/InstallHelper.java b/mobile/android/base/webapp/InstallHelper.java index 8f60f5ea2d5..eda6d8b0ddd 100644 --- a/mobile/android/base/webapp/InstallHelper.java +++ b/mobile/android/base/webapp/InstallHelper.java @@ -19,9 +19,7 @@ import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; import org.mozilla.gecko.GeckoProfile; import org.mozilla.gecko.gfx.BitmapUtils; -import org.mozilla.gecko.util.EventCallback; -import org.mozilla.gecko.util.NativeEventListener; -import org.mozilla.gecko.util.NativeJSObject; +import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.ThreadUtils; import android.content.Context; @@ -29,7 +27,7 @@ import android.graphics.Bitmap; import android.net.Uri; import android.util.Log; -public class InstallHelper implements NativeEventListener { +public class InstallHelper implements GeckoEventListener { private static final String LOGTAG = "GeckoWebappInstallHelper"; private static final String[] INSTALL_EVENT_NAMES = new String[] {"Webapps:Postinstall"}; private final Context mContext; @@ -38,7 +36,7 @@ public class InstallHelper implements NativeEventListener { public static interface InstallCallback { // on the GeckoThread - void installCompleted(InstallHelper installHelper, String event, NativeJSObject message); + void installCompleted(InstallHelper installHelper, String event, JSONObject message); // on the GeckoBackgroundThread void installErrored(InstallHelper installHelper, Exception exception); @@ -164,7 +162,7 @@ public class InstallHelper implements NativeEventListener { } @Override - public void handleMessage(String event, NativeJSObject message, EventCallback callback) { + public void handleMessage(String event, JSONObject message) { EventDispatcher.getInstance().unregisterGeckoThreadListener(this, INSTALL_EVENT_NAMES); if (mCallback != null) { diff --git a/mobile/android/base/webapp/WebappImpl.java b/mobile/android/base/webapp/WebappImpl.java index 7dceb19d940..5adc670b59f 100644 --- a/mobile/android/base/webapp/WebappImpl.java +++ b/mobile/android/base/webapp/WebappImpl.java @@ -18,7 +18,6 @@ import org.mozilla.gecko.GeckoThread; import org.mozilla.gecko.R; import org.mozilla.gecko.Tab; import org.mozilla.gecko.Tabs; -import org.mozilla.gecko.util.NativeJSObject; import org.mozilla.gecko.webapp.InstallHelper.InstallCallback; import android.content.Intent; @@ -326,13 +325,13 @@ public class WebappImpl extends GeckoApp implements InstallCallback { } @Override - public void installCompleted(InstallHelper installHelper, String event, NativeJSObject message) { + public void installCompleted(InstallHelper installHelper, String event, JSONObject message) { if (event == null) { return; } if (event.equals("Webapps:Postinstall")) { - String origin = message.optString("origin", null); + String origin = message.optString("origin"); launchWebapp(origin); } } From b822a12997735c64f7c9306ffba7a264cdb6fea8 Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Fri, 6 Jun 2014 12:46:44 +0800 Subject: [PATCH 008/103] Bug 1021504 - add a very simple template. r=dcamp --- browser/devtools/webide/webide-prefs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/devtools/webide/webide-prefs.js b/browser/devtools/webide/webide-prefs.js index 6fec54c1577..4a938bf73a5 100644 --- a/browser/devtools/webide/webide-prefs.js +++ b/browser/devtools/webide/webide-prefs.js @@ -4,6 +4,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. pref("devtools.webide.showProjectEditor", true); -pref("devtools.webide.templatesURL", "http://fixme/"); +pref("devtools.webide.templatesURL", "http://people.mozilla.org/~prouget/webidetemplates/template.json"); // See bug 1021504 pref("devtools.webide.lastprojectlocation", ""); pref("devtools.webide.enableLocalRuntime", false); From 075baf2ad14a16fff9db3d11d71ccc624a6bce19 Mon Sep 17 00:00:00 2001 From: Heather Arthur Date: Thu, 5 Jun 2014 23:02:23 -0700 Subject: [PATCH 009/103] Bug 1017248 - Show @media sidebar for original sources in style editor; r=bgrins --- .../devtools/styleeditor/StyleEditorUI.jsm | 81 ++++++++++++------- .../devtools/styleeditor/StyleSheetEditor.jsm | 38 +++++---- browser/devtools/styleeditor/test/browser.ini | 5 ++ .../test/browser_styleeditor_init.js | 2 +- ...er_styleeditor_media_sidebar_sourcemaps.js | 72 +++++++++++++++++ .../test/browser_styleeditor_reload.js | 8 +- .../browser_styleeditor_selectstylesheet.js | 7 +- .../test/browser_styleeditor_sourcemaps.js | 6 +- browser/devtools/styleeditor/test/head.js | 5 +- .../test/media-rules-sourcemaps.html | 12 +++ .../test/sourcemap-css/media-rules.css | 8 ++ .../test/sourcemap-css/media-rules.css.map | 6 ++ .../test/sourcemap-sass/media-rules.scss | 11 +++ 13 files changed, 208 insertions(+), 53 deletions(-) create mode 100644 browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js create mode 100644 browser/devtools/styleeditor/test/media-rules-sourcemaps.html create mode 100644 browser/devtools/styleeditor/test/sourcemap-css/media-rules.css create mode 100644 browser/devtools/styleeditor/test/sourcemap-css/media-rules.css.map create mode 100644 browser/devtools/styleeditor/test/sourcemap-sass/media-rules.scss diff --git a/browser/devtools/styleeditor/StyleEditorUI.jsm b/browser/devtools/styleeditor/StyleEditorUI.jsm index df28eea64c7..d1be563c46a 100644 --- a/browser/devtools/styleeditor/StyleEditorUI.jsm +++ b/browser/devtools/styleeditor/StyleEditorUI.jsm @@ -454,26 +454,23 @@ StyleEditorUI.prototype = { } }, false); - Task.spawn(function* () { - // autofocus if it's a new user-created stylesheet - if (editor.isNew) { - yield this._selectEditor(editor); - } + // autofocus if it's a new user-created stylesheet + if (editor.isNew) { + this._selectEditor(editor); + } - if (this._styleSheetToSelect - && this._styleSheetToSelect.stylesheet == editor.styleSheet.href) { - yield this.switchToSelectedSheet(); - } + if (this._styleSheetToSelect + && this._styleSheetToSelect.stylesheet == editor.styleSheet.href) { + this.switchToSelectedSheet(); + } - // If this is the first stylesheet and there is no pending request to - // select a particular style sheet, select this sheet. - if (!this.selectedEditor && !this._styleSheetBoundToSelect - && editor.styleSheet.styleSheetIndex == 0) { - yield this._selectEditor(editor); - } - - this.emit("editor-added", editor); - }.bind(this)).then(null, Cu.reportError); + // If this is the first stylesheet and there is no pending request to + // select a particular style sheet, select this sheet. + if (!this.selectedEditor && !this._styleSheetBoundToSelect + && editor.styleSheet.styleSheetIndex == 0) { + this._selectEditor(editor); + } + this.emit("editor-added", editor); }.bind(this), onShow: function(summary, details, data) { @@ -712,7 +709,8 @@ StyleEditorUI.prototype = { * Editor to update @media sidebar of */ _updateMediaList: function(editor) { - this.getEditorDetails(editor).then((details) => { + Task.spawn(function* () { + let details = yield this.getEditorDetails(editor); let list = details.querySelector(".stylesheet-media-list"); while (list.firstChild) { @@ -722,12 +720,31 @@ StyleEditorUI.prototype = { let rules = editor.mediaRules; let showSidebar = Services.prefs.getBoolPref(PREF_MEDIA_SIDEBAR); let sidebar = details.querySelector(".stylesheet-sidebar"); - sidebar.hidden = !showSidebar || !rules.length; + + let inSource = false; for (let rule of rules) { + let {line, column, parentStyleSheet} = rule; + + let location = { + line: line, + column: column, + source: editor.styleSheet.href, + styleSheet: parentStyleSheet + }; + if (editor.styleSheet.isOriginalSource) { + location = yield editor.cssSheet.getOriginalLocation(line, column); + } + + // this @media rule is from a different original source + if (location.source != editor.styleSheet.href) { + continue; + } + inSource = true; + let div = this._panelDoc.createElement("div"); div.className = "media-rule-label"; - div.addEventListener("click", this._jumpToMediaRule.bind(this, rule)); + div.addEventListener("click", this._jumpToLocation.bind(this, location)); let cond = this._panelDoc.createElement("div"); cond.textContent = rule.conditionText; @@ -737,25 +754,29 @@ StyleEditorUI.prototype = { } div.appendChild(cond); - let line = this._panelDoc.createElement("div"); - line.className = "media-rule-line theme-link"; - line.textContent = ":" + rule.line; - div.appendChild(line); + let link = this._panelDoc.createElement("div"); + link.className = "media-rule-line theme-link"; + link.textContent = ":" + location.line; + div.appendChild(link); list.appendChild(div); } + + sidebar.hidden = !showSidebar || !inSource; + this.emit("media-list-changed", editor); - }); + }.bind(this)).then(null, Cu.reportError); }, /** * Jump cursor to the editor for a stylesheet and line number for a rule. * - * @param {MediaRuleFront} rule - * Rule to jump to. + * @param {object} location + * Location object with 'line', 'column', and 'source' properties. */ - _jumpToMediaRule: function(rule) { - this.selectStyleSheet(rule.parentStyleSheet, rule.line - 1, rule.column - 1); + _jumpToLocation: function(location) { + let source = location.styleSheet || location.source; + this.selectStyleSheet(source, location.line - 1, location.column - 1); }, destroy: function() { diff --git a/browser/devtools/styleeditor/StyleSheetEditor.jsm b/browser/devtools/styleeditor/StyleSheetEditor.jsm index 715c65d14bf..784c11abe14 100644 --- a/browser/devtools/styleeditor/StyleSheetEditor.jsm +++ b/browser/devtools/styleeditor/StyleSheetEditor.jsm @@ -96,21 +96,14 @@ function StyleSheetEditor(styleSheet, win, file, isNew, walker) { this.checkLinkedFileForChanges = this.checkLinkedFileForChanges.bind(this); this.markLinkedFileBroken = this.markLinkedFileBroken.bind(this); - this.mediaRules = []; - if (this.styleSheet.getMediaRules) { - this.styleSheet.getMediaRules().then(this._onMediaRulesChanged); - } - this.styleSheet.on("media-rules-changed", this._onMediaRulesChanged); - this._focusOnSourceEditorReady = false; - - let relatedSheet = this.styleSheet.relatedStyleSheet; - if (relatedSheet) { - relatedSheet.on("property-change", this._onPropertyChange); - } - this.styleSheet.on("property-change", this._onPropertyChange); + this.cssSheet.on("property-change", this._onPropertyChange); this.styleSheet.on("error", this._onError); - + this.mediaRules = []; + if (this.cssSheet.getMediaRules) { + this.cssSheet.getMediaRules().then(this._onMediaRulesChanged); + } + this.cssSheet.on("media-rules-changed", this._onMediaRulesChanged); this.savedFile = file; this.linkCSSFile(); } @@ -131,6 +124,17 @@ StyleSheetEditor.prototype = { return this._isNew; }, + /** + * The style sheet or the generated style sheet for this source if it's an + * original source. + */ + get cssSheet() { + if (this.styleSheet.isOriginalSource) { + return this.styleSheet.relatedStyleSheet; + } + return this.styleSheet; + }, + get savedFile() { return this._savedFile; }, @@ -530,7 +534,9 @@ StyleSheetEditor.prototype = { this._friendlyName = null; this.savedFile = returnFile; - this.sourceEditor.setClean(); + if (this.sourceEditor) { + this.sourceEditor.setClean(); + } this.emit("property-change"); @@ -628,8 +634,8 @@ StyleSheetEditor.prototype = { if (this.sourceEditor) { this.sourceEditor.destroy(); } - this.styleSheet.off("media-rules-changed", this._onMediaRulesChanged); - this.styleSheet.off("property-change", this._onPropertyChange); + this.cssSheet.off("property-change", this._onPropertyChange); + this.cssSheet.off("media-rules-changed", this._onMediaRulesChanged); this.styleSheet.off("error", this._onError); } } diff --git a/browser/devtools/styleeditor/test/browser.ini b/browser/devtools/styleeditor/test/browser.ini index 51bdd54df35..d47bb0cc8f7 100644 --- a/browser/devtools/styleeditor/test/browser.ini +++ b/browser/devtools/styleeditor/test/browser.ini @@ -16,6 +16,7 @@ support-files = media.html media-rules.html media-rules.css + media-rules-sourcemaps.html minified.html nostyle.html pretty.css @@ -30,7 +31,10 @@ support-files = sourcemap-css/contained.css sourcemap-css/sourcemaps.css sourcemap-css/sourcemaps.css.map + sourcemap-css/media-rules.css + sourcemap-css/media-rules.css.map sourcemap-sass/sourcemaps.scss + sourcemap-sass/media-rules.scss sourcemaps.html test_private.css test_private.html @@ -49,6 +53,7 @@ skip-if = os == "linux" || "mac" # bug 949355 [browser_styleeditor_inline_friendly_names.js] [browser_styleeditor_loading.js] [browser_styleeditor_media_sidebar.js] +[browser_styleeditor_media_sidebar_sourcemaps.js] [browser_styleeditor_new.js] [browser_styleeditor_nostyle.js] [browser_styleeditor_pretty.js] diff --git a/browser/devtools/styleeditor/test/browser_styleeditor_init.js b/browser/devtools/styleeditor/test/browser_styleeditor_init.js index 488ea24a2e9..a4602bf9432 100644 --- a/browser/devtools/styleeditor/test/browser_styleeditor_init.js +++ b/browser/devtools/styleeditor/test/browser_styleeditor_init.js @@ -20,7 +20,7 @@ function testEditorAdded(aEditor) { if (aEditor.styleSheet.styleSheetIndex == 0) { gEditorAddedCount++; - testFirstStyleSheetEditor(aEditor); + gUI.editors[0].getSourceEditor().then(testFirstStyleSheetEditor); } if (aEditor.styleSheet.styleSheetIndex == 1) { gEditorAddedCount++; diff --git a/browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js b/browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js new file mode 100644 index 00000000000..dc3a07663da --- /dev/null +++ b/browser/devtools/styleeditor/test/browser_styleeditor_media_sidebar_sourcemaps.js @@ -0,0 +1,72 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// https rather than chrome to improve coverage +const TESTCASE_URI = TEST_BASE_HTTPS + "media-rules-sourcemaps.html"; +const MEDIA_PREF = "devtools.styleeditor.showMediaSidebar"; +const MAP_PREF = "devtools.styleeditor.source-maps-enabled"; + +const LABELS = ["screen and (max-width: 320px)", + "screen and (min-width: 1200px)"]; +const LINE_NOS = [4, 4]; + +waitForExplicitFinish(); + +let test = asyncTest(function*() { + Services.prefs.setBoolPref(MEDIA_PREF, true); + Services.prefs.setBoolPref(MAP_PREF, true); + + let {UI} = yield addTabAndOpenStyleEditors(2, null, TESTCASE_URI); + + yield listenForMediaChange(UI); + + is(UI.editors.length, 1, "correct number of editors"); + + // Test editor with @media rules + let mediaEditor = UI.editors[0]; + yield openEditor(mediaEditor); + testMediaEditor(mediaEditor); + + Services.prefs.clearUserPref(MEDIA_PREF); + Services.prefs.clearUserPref(MAP_PREF); +}); + +function testMediaEditor(editor) { + let sidebar = editor.details.querySelector(".stylesheet-sidebar"); + is(sidebar.hidden, false, "sidebar is showing on editor with @media"); + + let entries = [...sidebar.querySelectorAll(".media-rule-label")]; + is(entries.length, 2, "two @media rules displayed in sidebar"); + + testRule(entries[0], LABELS[0], LINE_NOS[0]); + testRule(entries[1], LABELS[1], LINE_NOS[1]); +} + +function testRule(rule, text, lineno) { + let cond = rule.querySelector(".media-rule-condition"); + is(cond.textContent, text, "media label is correct for " + text); + + let line = rule.querySelector(".media-rule-line"); + is(line.textContent, ":" + lineno, "correct line number shown"); +} + +/* Helpers */ + +function openEditor(editor) { + getLinkFor(editor).click(); + + return editor.getSourceEditor(); +} + +function listenForMediaChange(UI) { + let deferred = promise.defer(); + UI.once("media-list-changed", () => { + deferred.resolve(); + }) + return deferred.promise; +} + +function getLinkFor(editor) { + return editor.summary.querySelector(".stylesheet-name"); +} diff --git a/browser/devtools/styleeditor/test/browser_styleeditor_reload.js b/browser/devtools/styleeditor/test/browser_styleeditor_reload.js index 16e98ce2b69..94f14ba5b38 100644 --- a/browser/devtools/styleeditor/test/browser_styleeditor_reload.js +++ b/browser/devtools/styleeditor/test/browser_styleeditor_reload.js @@ -27,7 +27,11 @@ function test() function runTests() { let count = 0; - gUI.once("editor-selected", (event, editor) => { + gUI.on("editor-selected", function editorSelected(event, editor) { + if (editor.styleSheet != gUI.editors[1].styleSheet) { + return; + } + gUI.off("editor-selected", editorSelected); editor.getSourceEditor().then(() => { info("selected second editor, about to reload page"); reloadPage(); @@ -41,7 +45,7 @@ function runTests() }) }); }); - gUI.selectStyleSheet(gUI.editors[1].styleSheet.href, LINE_NO, COL_NO); + gUI.selectStyleSheet(gUI.editors[1].styleSheet, LINE_NO, COL_NO); } function testRemembered() diff --git a/browser/devtools/styleeditor/test/browser_styleeditor_selectstylesheet.js b/browser/devtools/styleeditor/test/browser_styleeditor_selectstylesheet.js index d613d4331b1..5ee8b3d189c 100644 --- a/browser/devtools/styleeditor/test/browser_styleeditor_selectstylesheet.js +++ b/browser/devtools/styleeditor/test/browser_styleeditor_selectstylesheet.js @@ -30,7 +30,12 @@ function runTests() // Make sure Editor doesn't go into an infinite loop when // column isn't passed. See bug 941018. - gUI.once("editor-selected", (event, editor) => { + gUI.on("editor-selected", function editorSelected(event, editor) { + if (editor.styleSheet != gUI.editors[1].styleSheet) { + return; + } + gUI.off("editor-selected", editorSelected); + editor.getSourceEditor().then(() => { is(gUI.selectedEditor, gUI.editors[1], "second editor is selected"); let {line, ch} = gUI.selectedEditor.sourceEditor.getCursor(); diff --git a/browser/devtools/styleeditor/test/browser_styleeditor_sourcemaps.js b/browser/devtools/styleeditor/test/browser_styleeditor_sourcemaps.js index 64181b9fc86..13bfab05a11 100644 --- a/browser/devtools/styleeditor/test/browser_styleeditor_sourcemaps.js +++ b/browser/devtools/styleeditor/test/browser_styleeditor_sourcemaps.js @@ -104,9 +104,13 @@ function togglePref(UI) { deferred.resolve(); } }) + let editorsPromise = deferred.promise; + + let selectedPromise = UI.once("editor-selected"); Services.prefs.setBoolPref(PREF, false); - return deferred.promise; + + return promise.all([editorsPromise, selectedPromise]); } function openEditor(editor) { diff --git a/browser/devtools/styleeditor/test/head.js b/browser/devtools/styleeditor/test/head.js index eeeb3789b1d..0cbb41ff6c2 100644 --- a/browser/devtools/styleeditor/test/head.js +++ b/browser/devtools/styleeditor/test/head.js @@ -45,9 +45,10 @@ function addTabAndOpenStyleEditors(count, callback, uri) { let deferred = promise.defer(); let currentCount = 0; let panel; - addTabAndCheckOnStyleEditorAdded(p => panel = p, function () { + addTabAndCheckOnStyleEditorAdded(p => panel = p, function (editor) { currentCount++; - info(currentCount + " of " + count + " editors opened"); + info(currentCount + " of " + count + " editors opened: " + + editor.styleSheet.href); if (currentCount == count) { if (callback) { callback(panel); diff --git a/browser/devtools/styleeditor/test/media-rules-sourcemaps.html b/browser/devtools/styleeditor/test/media-rules-sourcemaps.html new file mode 100644 index 00000000000..4876ef79595 --- /dev/null +++ b/browser/devtools/styleeditor/test/media-rules-sourcemaps.html @@ -0,0 +1,12 @@ + + + + + + +
+ Testing style editor media sidebar with source maps +
+ + \ No newline at end of file diff --git a/browser/devtools/styleeditor/test/sourcemap-css/media-rules.css b/browser/devtools/styleeditor/test/sourcemap-css/media-rules.css new file mode 100644 index 00000000000..fad540a9643 --- /dev/null +++ b/browser/devtools/styleeditor/test/sourcemap-css/media-rules.css @@ -0,0 +1,8 @@ +@media screen and (max-width: 320px) { + div { + width: 100px; } } +@media screen and (min-width: 1200px) { + div { + width: 400px; } } + +/*# sourceMappingURL=media-rules.css.map */ \ No newline at end of file diff --git a/browser/devtools/styleeditor/test/sourcemap-css/media-rules.css.map b/browser/devtools/styleeditor/test/sourcemap-css/media-rules.css.map new file mode 100644 index 00000000000..76cd48fe23f --- /dev/null +++ b/browser/devtools/styleeditor/test/sourcemap-css/media-rules.css.map @@ -0,0 +1,6 @@ +{ +"version": 3, +"mappings": "AAIE,oCAA4C;EAD9C,GAAI;IAEA,KAAK,EAAE,KAAK;AAEd,qCAA4C;EAJ9C,GAAI;IAKA,KAAK,EAAE,KAAK", +"sources": ["../sourcemap-sass/media-rules.scss"], +"file": "media-rules.css" +} diff --git a/browser/devtools/styleeditor/test/sourcemap-sass/media-rules.scss b/browser/devtools/styleeditor/test/sourcemap-sass/media-rules.scss new file mode 100644 index 00000000000..4f1c8f216fc --- /dev/null +++ b/browser/devtools/styleeditor/test/sourcemap-sass/media-rules.scss @@ -0,0 +1,11 @@ +$break-small: 320px; +$break-large: 1200px; + +div { + @media screen and (max-width: $break-small) { + width: 100px; + } + @media screen and (min-width: $break-large) { + width: 400px; + } +} From 5568c6a3353fa3edd09b2e203772379242b08969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Fri, 6 Jun 2014 08:53:35 +0200 Subject: [PATCH 010/103] Bug 1018582 - Get rid of #navigator-toolbox::before and #TabsToolbar::after on OS X. r=MattN --- browser/themes/osx/browser.css | 96 ++++++++++------------------------ 1 file changed, 28 insertions(+), 68 deletions(-) diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index 0cb35f81173..c9c40798ba1 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -109,12 +109,6 @@ toolbarseparator { background: url(chrome://browser/skin/Toolbar-background-noise.png) hsl(0,0%,83%); } -#TabsToolbar:not([collapsed="true"]) + #nav-bar { - /* Position the toolbar above the bottom of background tabs */ - position: relative; - z-index: 1; -} - #nav-bar { -moz-appearance: none; background: url(chrome://browser/skin/Toolbar-background-noise.png), @@ -138,6 +132,19 @@ toolbarseparator { } } +/* Draw the bottom border of the tabs toolbar when it's not using + -moz-appearance: toolbar. */ +#main-window:-moz-any([sizemode="fullscreen"],[customize-entered]) #TabsToolbar:not([collapsed="true"]) + #nav-bar, +#main-window:not([tabsintitlebar]) #TabsToolbar:not([collapsed="true"]) + #nav-bar, +#TabsToolbar:not([collapsed="true"]) + #nav-bar:-moz-lwtheme { + border-top: 1px solid hsla(0,0%,0%,.3); + background-clip: padding-box; + margin-top: -@tabToolbarNavbarOverlap@; + /* Position the toolbar above the bottom of background tabs */ + position: relative; + z-index: 1; +} + #nav-bar-customization-target { padding: 4px; } @@ -2770,33 +2777,14 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker { box-shadow: @focusRingShadow@; } -/* We want the titlebar to be unified, but we still want to be able - * to give #TabsToolbar a background. So we can't set -moz-appearance: - * toolbar on #TabsToolbar itself. Instead, we set it on a box of the - * right size which is put underneath #TabsToolbar. - * - * Because of Bug 941309, we make sure this pseudoelement always exists, - * but we only make it visible when we need it. - */ -#navigator-toolbox::before { - content: ''; - display: block; - -moz-appearance: toolbar; - height: @tabMinHeight@; - margin-bottom: -@tabMinHeight@; - visibility: hidden; -} - -#main-window:not([customizing]) #navigator-toolbox[inFullscreen]:not(:-moz-lwtheme)::before, -#main-window:not(:-moz-any([customizing],[tabsintitlebar])) #navigator-toolbox:not(:-moz-lwtheme)::before { - visibility: visible; -} - #TabsToolbar { - position: relative; -moz-appearance: none; - background-repeat: repeat-x; - margin-bottom: -@tabToolbarNavbarOverlap@; + margin-bottom: -1px; /* Overlap the inner highlight at the top of the nav-bar */ +} + +#main-window:not([customizing]) #navigator-toolbox[inFullscreen] > #TabsToolbar:not(:-moz-lwtheme), +#main-window:not(:-moz-any([customizing],[tabsintitlebar])) #navigator-toolbox > #TabsToolbar:not(:-moz-lwtheme) { + -moz-appearance: toolbar; } #TabsToolbar:not(:-moz-lwtheme) { @@ -2804,32 +2792,10 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker { text-shadow: @loweredShadow@; } -/* - * Draw the bottom border of the tabstrip when core doesn't do it for us. - * Because of Bug 941309, we make sure this pseudoelement always exists, - * but we only make it visible when we need it. - */ -#TabsToolbar::after { - content: ''; - /* Because we use placeholders for window controls etc. in the tabstrip, - * and position those with ordinal attributes, and because our layout code - * expects :before/:after nodes to come first/last in the frame list, - * we have to reorder this element to come last, hence the - * ordinal group value (see bug 853415). */ - -moz-box-ordinal-group: 1001; - position: absolute; - bottom: @tabToolbarNavbarOverlap@; - left: 0; - right: 0; - z-index: 0; - border-bottom: 1px solid hsla(0,0%,0%,.3); - visibility: hidden; -} - -#main-window:-moz-any([sizemode="fullscreen"],[customize-entered]) #TabsToolbar::after, -#main-window:not([tabsintitlebar]) #TabsToolbar::after, -#TabsToolbar:-moz-lwtheme::after { - visibility: visible; +@media (-moz-mac-lion-theme) { + #navigator-toolbox[inFullscreen] > #TabsToolbar { + padding-top: @spaceAboveTabbar@; + } } #tabbrowser-tabs { @@ -4058,17 +4024,6 @@ menulist.translate-infobar-element > .menulist-dropmarker { margin-left: 1em; } -/* Lion Fullscreen window styling */ -@media (-moz-mac-lion-theme) { - #navigator-toolbox[inFullscreen]::before { - /* Adjust by the full element height of #titlebar, since that element is - * not displayed in native full-screen. - * Also add the height of the tabs, since we're calculating the - * total height of this pseudo-element, not just the top-padding. */ - height: calc(@tabMinHeight@ + @spaceAboveTabbar@) !important; - } -} - #full-screen-warning-message { background-image: url("chrome://browser/skin/fullscreen-darknoise.png"); color: white; @@ -4421,6 +4376,11 @@ window > chatbox { border-bottom-width: 0; } +#main-window[customize-entered] #nav-bar { + border-top-left-radius: 2.5px; + border-top-right-radius: 2.5px; +} + /* Compensate for the border set above for this horizontal line. */ #main-window[customize-entered] #navigator-toolbox::after { margin-left: 3px; From 9fc79584da7ca3fe848975094f5ebe69f849af1a Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Fri, 6 Jun 2014 08:30:37 +0100 Subject: [PATCH 011/103] bug 1007629 - eliminate use of "embedded" fonts in about:preferences. r=gavin --- browser/themes/shared/incontentprefs/preferences.css | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/browser/themes/shared/incontentprefs/preferences.css b/browser/themes/shared/incontentprefs/preferences.css index 1874e0a5837..3d36afc0854 100644 --- a/browser/themes/shared/incontentprefs/preferences.css +++ b/browser/themes/shared/incontentprefs/preferences.css @@ -5,11 +5,6 @@ %endif @namespace html "http://www.w3.org/1999/xhtml"; -@font-face { - font-family: "Clear Sans"; - src: url("chrome://browser/content/fonts/ClearSans-Regular.woff") format('woff'); -} - page { -moz-appearance: none; background-color: white; @@ -39,7 +34,7 @@ caption > label { prefpane { max-width: 800px; padding: 0; - font-family: "Clear Sans", sans-serif; + font: message-box; font-size: 1.25rem; line-height: 22px; color: #424E5A; @@ -292,7 +287,6 @@ menulist > menupopup menuitem, button[type="menu"] > menupopup menu, button[type="menu"] > menupopup menuitem { -moz-appearance: none; - font-family: "Clear Sans", sans-serif; font-size: 1.25rem; line-height: 22px; height: 40px; @@ -488,7 +482,6 @@ radio[disabled="true"] > .radio-check { .category-name { line-height: 22px; - font-family: "Clear Sans", sans-serif; font-size: 1.25rem; padding-bottom: 2px; -moz-padding-start: 9px; @@ -694,7 +687,6 @@ filefield { #typeColumn, #actionColumn { -moz-appearance: none; - font-family: "Clear Sans", sans-serif; line-height: 20px; color: #333333; height: 36px; From a32cc70c4a8d1dc5b6d86d94d32285c8bad31d8c Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Fri, 6 Jun 2014 08:30:54 +0100 Subject: [PATCH 012/103] bug 1007639 - stop shipping .woff fonts as part of the desktop browser product. r=gavin --- .../base/content/fonts/ClearSans-Regular.woff | Bin 25376 -> 0 bytes browser/base/content/fonts/FiraSans-Light.woff | Bin 26440 -> 0 bytes .../base/content/fonts/FiraSans-Regular.woff | Bin 26228 -> 0 bytes browser/base/jar.mn | 3 --- 4 files changed, 3 deletions(-) delete mode 100644 browser/base/content/fonts/ClearSans-Regular.woff delete mode 100644 browser/base/content/fonts/FiraSans-Light.woff delete mode 100644 browser/base/content/fonts/FiraSans-Regular.woff diff --git a/browser/base/content/fonts/ClearSans-Regular.woff b/browser/base/content/fonts/ClearSans-Regular.woff deleted file mode 100644 index 00c279d2e9f4b95f230b58ef897dfe689e6c36cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25376 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 diff --git a/browser/base/content/fonts/FiraSans-Regular.woff b/browser/base/content/fonts/FiraSans-Regular.woff deleted file mode 100644 index 15605473f77ac5371ca3757e2a13a0e7c1427e5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26228 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 g Date: Thu, 5 Jun 2014 17:03:00 +0200 Subject: [PATCH 013/103] Bug 1018955 - Fix pause/resume button flicker when debugger first loads. r=fitzgen --- browser/devtools/debugger/debugger-controller.js | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/devtools/debugger/debugger-controller.js b/browser/devtools/debugger/debugger-controller.js index 8205d27b08a..498c7ef2011 100644 --- a/browser/devtools/debugger/debugger-controller.js +++ b/browser/devtools/debugger/debugger-controller.js @@ -444,7 +444,6 @@ ThreadState.prototype = { this.activeThread.addListener("resumed", this._update); this.activeThread.pauseOnExceptions(Prefs.pauseOnExceptions, Prefs.ignoreCaughtExceptions); - this.handleTabNavigation(); }, /** From 7622da763ab0fee5b65a9502836f88e9f3945a16 Mon Sep 17 00:00:00 2001 From: Axel Hecht Date: Fri, 30 May 2014 08:46:00 +0200 Subject: [PATCH 014/103] Bug 1018257 - drop metro from Firefox localization. r=gavin f=flod --- browser/locales/filter.py | 10 +++------- browser/locales/l10n.ini | 1 - 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/browser/locales/filter.py b/browser/locales/filter.py index f153141fac2..25ddf470eb7 100755 --- a/browser/locales/filter.py +++ b/browser/locales/filter.py @@ -6,14 +6,14 @@ def test(mod, path, entity = None): import re # ignore anything but Firefox if mod not in ("netwerk", "dom", "toolkit", "security/manager", - "browser", "browser/metro", "webapprt", + "browser", "webapprt", "extensions/reporter", "extensions/spellcheck", "other-licenses/branding/firefox", "browser/branding/official", "services/sync"): return "ignore" - if mod not in ("browser", "browser/metro", "extensions/spellcheck"): - # we only have exceptions for browser, metro and extensions/spellcheck + if mod not in ("browser", "extensions/spellcheck"): + # we only have exceptions for browser and extensions/spellcheck return "error" if not entity: # the only files to ignore are spell checkers and search @@ -35,8 +35,4 @@ def test(mod, path, entity = None): re.match(r"gecko\.handlerService\.schemes\.", entity) or re.match(r"gecko\.handlerService\.defaultHandlersVersion", entity)) else "error") - if mod == "browser/metro" and path == "chrome/region.properties": - return ("ignore" - if re.match(r"browser\.search\.order\.[1-9]", entity) - else "error") return "error" diff --git a/browser/locales/l10n.ini b/browser/locales/l10n.ini index 3a01b9677c7..5056b5ddc46 100644 --- a/browser/locales/l10n.ini +++ b/browser/locales/l10n.ini @@ -8,7 +8,6 @@ all = browser/locales/all-locales [compare] dirs = browser - browser/metro extensions/reporter other-licenses/branding/firefox browser/branding/official From 6cd5bee13dfdad6d51bf3d3227a89f7d470983d4 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Wed, 4 Jun 2014 17:37:54 +0100 Subject: [PATCH 015/103] Bug 761566 - add per-OS settings/options/preferences string, r=mak --- browser/base/content/abouthome/aboutHome.xhtml | 6 +++++- browser/base/jar.mn | 2 +- browser/locales/en-US/chrome/browser/aboutHome.dtd | 7 ++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/browser/base/content/abouthome/aboutHome.xhtml b/browser/base/content/abouthome/aboutHome.xhtml index 0e6c8fa59ce..3051452264b 100644 --- a/browser/base/content/abouthome/aboutHome.xhtml +++ b/browser/base/content/abouthome/aboutHome.xhtml @@ -62,7 +62,11 @@ - +#ifdef XP_WIN + +#else + +#endif
diff --git a/browser/base/jar.mn b/browser/base/jar.mn index 1a7c51e928d..ea01ce530e5 100644 --- a/browser/base/jar.mn +++ b/browser/base/jar.mn @@ -18,7 +18,7 @@ browser.jar: * content/browser/aboutDialog.js (content/aboutDialog.js) content/browser/aboutDialog.css (content/aboutDialog.css) content/browser/aboutRobots.xhtml (content/aboutRobots.xhtml) - content/browser/abouthome/aboutHome.xhtml (content/abouthome/aboutHome.xhtml) +* content/browser/abouthome/aboutHome.xhtml (content/abouthome/aboutHome.xhtml) content/browser/abouthome/aboutHome.js (content/abouthome/aboutHome.js) * content/browser/abouthome/aboutHome.css (content/abouthome/aboutHome.css) content/browser/abouthome/snippet1.png (content/abouthome/snippet1.png) diff --git a/browser/locales/en-US/chrome/browser/aboutHome.dtd b/browser/locales/en-US/chrome/browser/aboutHome.dtd index e84341f5400..7d25bebf997 100644 --- a/browser/locales/en-US/chrome/browser/aboutHome.dtd +++ b/browser/locales/en-US/chrome/browser/aboutHome.dtd @@ -26,7 +26,12 @@ - + + + + From 9dddfe29e92c96a8944b49abc35ad16418ba0c73 Mon Sep 17 00:00:00 2001 From: Connor Brem Date: Thu, 5 Jun 2014 16:12:00 -0400 Subject: [PATCH 016/103] Bug 1005909 - Make URLs in console strings clickable. r=rcampbell --- browser/devtools/webconsole/console-output.js | 125 ++++++++++++++++++ browser/devtools/webconsole/test/browser.ini | 1 + .../test/browser_webconsole_clickable_urls.js | 83 ++++++++++++ .../test/browser_webconsole_output_03.js | 2 + .../test/browser_webconsole_output_04.js | 13 +- browser/devtools/webconsole/test/head.js | 84 +++++++++--- 6 files changed, 285 insertions(+), 23 deletions(-) create mode 100644 browser/devtools/webconsole/test/browser_webconsole_clickable_urls.js diff --git a/browser/devtools/webconsole/console-output.js b/browser/devtools/webconsole/console-output.js index b14e22ae797..e5f3d7c1616 100644 --- a/browser/devtools/webconsole/console-output.js +++ b/browser/devtools/webconsole/console-output.js @@ -13,6 +13,7 @@ loader.lazyImporter(this, "gDevTools", "resource:///modules/devtools/gDevTools.j loader.lazyImporter(this, "Task","resource://gre/modules/Task.jsm"); const Heritage = require("sdk/core/heritage"); +const URI = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); const XHTML_NS = "http://www.w3.org/1999/xhtml"; const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; const STRINGS_URI = "chrome://browser/locale/devtools/webconsole.properties"; @@ -1081,6 +1082,11 @@ Messages.Extended.prototype = Heritage.extend(Messages.Simple.prototype, let result = this.document.createElementNS(XHTML_NS, "span"); if (isPrimitive) { + if (Widgets.URLString.prototype.containsURL.call(Widgets.URLString.prototype, grip)) { + let widget = new Widgets.URLString(this, grip, options).render(); + return widget.element; + } + let className = this.getClassNameForValueGrip(grip); if (className) { result.className = className; @@ -1757,6 +1763,125 @@ Widgets.MessageTimestamp.prototype = Heritage.extend(Widgets.BaseWidget.prototyp }); // Widgets.MessageTimestamp.prototype +/** + * The URLString widget, for rendering strings where at least one token is a + * URL. + * + * @constructor + * @param object message + * The owning message. + * @param string str + * The string, which contains at least one valid URL. + */ +Widgets.URLString = function(message, str) +{ + Widgets.BaseWidget.call(this, message); + this.str = str; +}; + +Widgets.URLString.prototype = Heritage.extend(Widgets.BaseWidget.prototype, +{ + /** + * The string to format, which contains at least one valid URL. + * @type string + */ + str: "", + + render: function() + { + if (this.element) { + return this; + } + + // The rendered URLString will be a containing a number of text + // for non-URL tokens and 's for URL tokens. + this.element = this.el("span", { + class: "console-string" + }); + this.element.appendChild(this._renderText("\"")); + + // As we walk through the tokens of the source string, we make sure to preserve + // the original whitespace that seperated the tokens. + let tokens = this.str.split(/\s+/); + let textStart = 0; + let tokenStart; + for (let token of tokens) { + tokenStart = this.str.indexOf(token, textStart); + if (this._isURL(token)) { + this.element.appendChild(this._renderText(this.str.slice(textStart, tokenStart))); + textStart = tokenStart + token.length; + this.element.appendChild(this._renderURL(token)); + } + } + + // Clean up any non-URL text at the end of the source string. + this.element.appendChild(this._renderText(this.str.slice(textStart, this.str.length))); + this.element.appendChild(this._renderText("\"")); + + return this; + }, + + /** + * Determines whether a grip is a string containing a URL. + * + * @param string grip + * The grip, which may contain a URL. + * @return boolean + * Whether the grip is a string containing a URL. + */ + containsURL: function(grip) + { + if (typeof grip != "string") { + return false; + } + + let tokens = grip.split(/\s+/); + return tokens.some(this._isURL); + }, + + /** + * Determines whether a string token is a valid URL. + * + * @param string token + * The token. + * @return boolean + * Whenther the token is a URL. + */ + _isURL: function(token) { + try { + let uri = URI.newURI(token, null, null); + let url = uri.QueryInterface(Ci.nsIURL); + return true; + } catch (e) { + return false; + } + }, + + /** + * Renders a string as a URL. + * + * @param string url + * The string to be rendered as a url. + * @return DOMElement + * An element containing the rendered string. + */ + _renderURL: function(url) + { + let result = this.el("a", { + class: "url", + title: url, + href: url, + draggable: false + }, url); + this.message._addLinkCallback(result); + return result; + }, + + _renderText: function(text) { + return this.el("span", text); + }, +}); // Widgets.URLString.prototype + /** * Widget used for displaying ObjectActors that have no specialised renderers. * diff --git a/browser/devtools/webconsole/test/browser.ini b/browser/devtools/webconsole/test/browser.ini index b87dd998474..6e5aadb5b8a 100644 --- a/browser/devtools/webconsole/test/browser.ini +++ b/browser/devtools/webconsole/test/browser.ini @@ -245,6 +245,7 @@ run-if = os == "mac" [browser_webconsole_cached_autocomplete.js] [browser_webconsole_change_font_size.js] [browser_webconsole_chrome.js] +[browser_webconsole_clickable_urls.js] [browser_webconsole_closure_inspection.js] [browser_webconsole_completion.js] [browser_webconsole_console_extras.js] diff --git a/browser/devtools/webconsole/test/browser_webconsole_clickable_urls.js b/browser/devtools/webconsole/test/browser_webconsole_clickable_urls.js new file mode 100644 index 00000000000..ebfbe5329d2 --- /dev/null +++ b/browser/devtools/webconsole/test/browser_webconsole_clickable_urls.js @@ -0,0 +1,83 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// When strings containing URLs are entered into the webconsole, +// check its output and ensure that the output can be clicked to open those URLs. + +const TEST_URI = "data:text/html;charset=utf8,Bug 1005909 - Clickable URLS"; + +let inputTests = [ + + // 0: URL opens page when clicked. + { + input: "'http://example.com'", + output: "http://example.com", + expectedTab: "http://example.com/", + }, + + // 1: URL opens page using https when clicked. + { + input: "'https://example.com'", + output: "https://example.com", + expectedTab: "https://example.com/", + }, + + // 2: URL with port opens page when clicked. + { + input: "'https://example.com:443'", + output: "https://example.com:443", + expectedTab: "https://example.com/", + }, + + // 3: URL containing non-empty path opens page when clicked. + { + input: "'http://example.com/foo'", + output: "http://example.com/foo", + expectedTab: "http://example.com/foo", + }, + + // 4: URL opens page when clicked, even when surrounded by non-URL tokens. + { + input: "'foo http://example.com bar'", + output: "foo http://example.com bar", + expectedTab: "http://example.com/", + }, + + // 5: URL opens page when clicked, and whitespace is be preserved. + { + input: "'foo\\nhttp://example.com\\nbar'", + output: "foo\nhttp://example.com\nbar", + expectedTab: "http://example.com/", + }, + + // 6: URL opens page when clicked when multiple links are present. + { + input: "'http://example.com http://example.com'", + output: "http://example.com http://example.com", + expectedTab: "http://example.com/", + }, + + // 7: URL without scheme does not open page when clicked. + { + input: "'example.com'", + output: "example.com", + }, + + // 8: URL with invalid scheme does not open page when clicked. + { + input: "'foo://example.com'", + output: "foo://example.com", + }, + +]; + +function test() { + Task.spawn(function*() { + let {tab} = yield loadTab(TEST_URI); + let hud = yield openConsole(tab); + yield checkOutputForInputs(hud, inputTests); + inputTests = null; + }).then(finishTest); +} diff --git a/browser/devtools/webconsole/test/browser_webconsole_output_03.js b/browser/devtools/webconsole/test/browser_webconsole_output_03.js index 5e430a058c1..afb40c49260 100644 --- a/browser/devtools/webconsole/test/browser_webconsole_output_03.js +++ b/browser/devtools/webconsole/test/browser_webconsole_output_03.js @@ -8,6 +8,7 @@ const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-console-output-03.html"; let inputTests = [ + // 0 { input: "document", @@ -57,6 +58,7 @@ let inputTests = [ { input: "window.location.href", output: '"' + TEST_URI + '"', + noClick: true, }, // 6 diff --git a/browser/devtools/webconsole/test/browser_webconsole_output_04.js b/browser/devtools/webconsole/test/browser_webconsole_output_04.js index eb6a525a3cf..d693ab2927f 100644 --- a/browser/devtools/webconsole/test/browser_webconsole_output_04.js +++ b/browser/devtools/webconsole/test/browser_webconsole_output_04.js @@ -110,11 +110,10 @@ let inputTests = [ ]; function test() { - addTab(TEST_URI); - browser.addEventListener("load", function onLoad() { - browser.removeEventListener("load", onLoad, true); - openConsole().then((hud) => { - return checkOutputForInputs(hud, inputTests); - }).then(finishTest); - }, true); + Task.spawn(function*() { + const {tab} = yield loadTab(TEST_URI); + const hud = yield openConsole(tab); + yield checkOutputForInputs(hud, inputTests); + inputTests = null; + }).then(finishTest); } diff --git a/browser/devtools/webconsole/test/head.js b/browser/devtools/webconsole/test/head.js index 32a6c612662..6b5004e2cf7 100644 --- a/browser/devtools/webconsole/test/head.js +++ b/browser/devtools/webconsole/test/head.js @@ -84,6 +84,32 @@ function loadTab(url) { return deferred.promise; } +function loadBrowser(browser) { + let deferred = promise.defer(); + + browser.addEventListener("load", function onLoad() { + browser.removeEventListener("load", onLoad, true); + deferred.resolve(null) + }, true); + + return deferred.promise; +} + +function closeTab(tab) { + let deferred = promise.defer(); + + let container = gBrowser.tabContainer; + + container.addEventListener("TabClose", function onTabClose() { + container.removeEventListener("TabClose", onTabClose, true); + deferred.resolve(null); + }, true); + + gBrowser.removeTab(tab); + + return deferred.promise; +} + function afterAllTabsLoaded(callback, win) { win = win || window; @@ -1382,10 +1408,14 @@ function whenDelayedStartupFinished(aWindow, aCallback) * - inspectorIcon: boolean, when true, the test runner expects the * result widget to contain an inspectorIcon element (className * open-inspector). + * + * - expectedTab: string, optional, the full URL of the new tab which must + * open. If this is not provided, any new tabs that open will cause a test + * failure. */ function checkOutputForInputs(hud, inputTests) { - let eventHandlers = new Set(); + let container = gBrowser.tabContainer; function* runner() { @@ -1393,10 +1423,7 @@ function checkOutputForInputs(hud, inputTests) info("checkInput(" + i + "): " + entry.input); yield checkInput(entry); } - - for (let fn of eventHandlers) { - hud.jsterm.off("variablesview-open", fn); - } + container = null; } function* checkInput(entry) @@ -1467,27 +1494,39 @@ function checkOutputForInputs(hud, inputTests) } } - function checkObjectClick(entry, msg) + function* checkObjectClick(entry, msg) { let body = msg.querySelector(".message-body a") || msg.querySelector(".message-body"); ok(body, "the message body"); - let deferred = promise.defer(); - - entry._onVariablesViewOpen = onVariablesViewOpen.bind(null, entry, deferred); + let deferredVariablesView = promise.defer(); + entry._onVariablesViewOpen = onVariablesViewOpen.bind(null, entry, deferredVariablesView); hud.jsterm.on("variablesview-open", entry._onVariablesViewOpen); - eventHandlers.add(entry._onVariablesViewOpen); + + let deferredTab = promise.defer(); + entry._onTabOpen = onTabOpen.bind(null, entry, deferredTab); + container.addEventListener("TabOpen", entry._onTabOpen, true); body.scrollIntoView(); EventUtils.synthesizeMouse(body, 2, 2, {}, hud.iframeWindow); if (entry.inspectable) { info("message body tagName '" + body.tagName + "' className '" + body.className + "'"); - return deferred.promise; // wait for the panel to open if we need to. + yield deferredVariablesView.promise; + } else { + hud.jsterm.off("variablesview-open", entry._onVariablesView); + entry._onVariablesView = null; } - return promise.resolve(null); + if (entry.expectedTab) { + yield deferredTab.promise; + } else { + container.removeEventListener("TabOpen", entry._onTabOpen, true); + entry._onTabOpen = null; + } + + yield promise.resolve(null); } function checkLinkToInspector(entry, msg) @@ -1513,7 +1552,7 @@ function checkOutputForInputs(hud, inputTests) }); } - function onVariablesViewOpen(entry, deferred, event, view, options) + function onVariablesViewOpen(entry, {resolve, reject}, event, view, options) { let label = entry.variablesViewLabel || entry.output; if (typeof label == "string" && options.label != label) { @@ -1524,12 +1563,25 @@ function checkOutputForInputs(hud, inputTests) } hud.jsterm.off("variablesview-open", entry._onVariablesViewOpen); - eventHandlers.delete(entry._onVariablesViewOpen); entry._onVariablesViewOpen = null; - ok(entry.inspectable, "variables view was shown"); - deferred.resolve(null); + resolve(null); + } + + function onTabOpen(entry, {resolve, reject}, event) + { + container.removeEventListener("TabOpen", entry._onTabOpen, true); + entry._onTabOpen = null; + + let tab = event.target; + let browser = gBrowser.getBrowserForTab(tab); + loadBrowser(browser).then(() => { + let uri = content.location.href; + ok(entry.expectedTab && entry.expectedTab == uri, + "opened tab '" + uri + "', expected tab '" + entry.expectedTab + "'"); + return closeTab(tab); + }).then(resolve, reject); } return Task.spawn(runner); From e0d2294003701aee40f0ad837c8fe8011104932a Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Thu, 5 Jun 2014 08:55:00 -0400 Subject: [PATCH 017/103] Bug 1012988 - Remove heritage dependency to packets.js. r=jimb --- toolkit/devtools/transport/packets.js | 308 +++++++++++++------------- 1 file changed, 157 insertions(+), 151 deletions(-) diff --git a/toolkit/devtools/transport/packets.js b/toolkit/devtools/transport/packets.js index f5b50afa46f..e09e9b5fc22 100644 --- a/toolkit/devtools/transport/packets.js +++ b/toolkit/devtools/transport/packets.js @@ -25,7 +25,6 @@ */ const { Cc, Ci, Cu } = require("chrome"); -const Heritage = require("sdk/core/heritage"); const DevToolsUtils = require("devtools/toolkit/DevToolsUtils"); const { dumpn, dumpv } = DevToolsUtils; const StreamUtils = require("devtools/toolkit/transport/stream-utils"); @@ -128,83 +127,85 @@ JSONPacket.fromHeader = function(header, transport) { JSONPacket.HEADER_PATTERN = /^(\d+):$/; -JSONPacket.prototype = Heritage.extend(Packet.prototype, { +JSONPacket.prototype = Object.create(Packet.prototype); +Object.defineProperty(JSONPacket.prototype, "object", { /** * Gets the object (not the serialized string) being read or written. */ - get object() { return this._object; }, + get: function() { return this._object; }, /** * Sets the object to be sent when write() is called. */ - set object(object) { + set: function(object) { this._object = object; let data = JSON.stringify(object); this._data = unicodeConverter.ConvertFromUnicode(data); this.length = this._data.length; - }, + } +}); - read: function(stream, scriptableStream) { - dumpv("Reading JSON packet"); +JSONPacket.prototype.read = function(stream, scriptableStream) { + dumpv("Reading JSON packet"); - // Read in more packet data. - this._readData(stream, scriptableStream); + // Read in more packet data. + this._readData(stream, scriptableStream); - if (!this.done) { - // Don't have a complete packet yet. - return; - } - - let json = this._data; - try { - json = unicodeConverter.ConvertToUnicode(json); - this._object = JSON.parse(json); - } catch(e) { - let msg = "Error parsing incoming packet: " + json + " (" + e + - " - " + e.stack + ")"; - if (Cu.reportError) { - Cu.reportError(msg); - } - dumpn(msg); - return; - } - - this._transport._onJSONObjectReady(this._object); - }, - - _readData: function(stream, scriptableStream) { - if (dumpv.wantVerbose) { - dumpv("Reading JSON data: _l: " + this.length + " dL: " + - this._data.length + " sA: " + stream.available()); - } - let bytesToRead = Math.min(this.length - this._data.length, - stream.available()); - this._data += scriptableStream.readBytes(bytesToRead); - this._done = this._data.length === this.length; - }, - - write: function(stream) { - dumpv("Writing JSON packet"); - - if (this._outgoing === undefined) { - // Format the serialized packet to a buffer - this._outgoing = this.length + ":" + this._data; - } - - let written = stream.write(this._outgoing, this._outgoing.length); - this._outgoing = this._outgoing.slice(written); - this._done = !this._outgoing.length; - }, - - get done() { return this._done; }, - - toString: function() { - return JSON.stringify(this._object, null, 2); + if (!this.done) { + // Don't have a complete packet yet. + return; } + let json = this._data; + try { + json = unicodeConverter.ConvertToUnicode(json); + this._object = JSON.parse(json); + } catch(e) { + let msg = "Error parsing incoming packet: " + json + " (" + e + + " - " + e.stack + ")"; + if (Cu.reportError) { + Cu.reportError(msg); + } + dumpn(msg); + return; + } + + this._transport._onJSONObjectReady(this._object); +} + +JSONPacket.prototype._readData = function(stream, scriptableStream) { + if (dumpv.wantVerbose) { + dumpv("Reading JSON data: _l: " + this.length + " dL: " + + this._data.length + " sA: " + stream.available()); + } + let bytesToRead = Math.min(this.length - this._data.length, + stream.available()); + this._data += scriptableStream.readBytes(bytesToRead); + this._done = this._data.length === this.length; +} + +JSONPacket.prototype.write = function(stream) { + dumpv("Writing JSON packet"); + + if (this._outgoing === undefined) { + // Format the serialized packet to a buffer + this._outgoing = this.length + ":" + this._data; + } + + let written = stream.write(this._outgoing, this._outgoing.length); + this._outgoing = this._outgoing.slice(written); + this._done = !this._outgoing.length; +} + +Object.defineProperty(JSONPacket.prototype, "done", { + get: function() { return this._done; } }); +JSONPacket.prototype.toString = function() { + return JSON.stringify(this._object, null, 2); +} + exports.JSONPacket = JSONPacket; /** @@ -257,96 +258,99 @@ BulkPacket.fromHeader = function(header, transport) { BulkPacket.HEADER_PATTERN = /^bulk ([^: ]+) ([^: ]+) (\d+):$/; -BulkPacket.prototype = Heritage.extend(Packet.prototype, { +BulkPacket.prototype = Object.create(Packet.prototype); - read: function(stream) { - dumpv("Reading bulk packet, handing off input stream"); +BulkPacket.prototype.read = function(stream) { + dumpv("Reading bulk packet, handing off input stream"); - // Temporarily pause monitoring of the input stream - this._transport.pauseIncoming(); + // Temporarily pause monitoring of the input stream + this._transport.pauseIncoming(); - let deferred = promise.defer(); + let deferred = promise.defer(); - this._transport._onBulkReadReady({ - actor: this.actor, - type: this.type, - length: this.length, - copyTo: (output) => { - dumpv("CT length: " + this.length); - deferred.resolve(StreamUtils.copyStream(stream, output, this.length)); - return deferred.promise; - }, - stream: stream, - done: deferred - }); + this._transport._onBulkReadReady({ + actor: this.actor, + type: this.type, + length: this.length, + copyTo: (output) => { + dumpv("CT length: " + this.length); + deferred.resolve(StreamUtils.copyStream(stream, output, this.length)); + return deferred.promise; + }, + stream: stream, + done: deferred + }); - // Await the result of reading from the stream - deferred.promise.then(() => { - dumpv("onReadDone called, ending bulk mode"); - this._done = true; - this._transport.resumeIncoming(); - }, this._transport.close); + // Await the result of reading from the stream + deferred.promise.then(() => { + dumpv("onReadDone called, ending bulk mode"); + this._done = true; + this._transport.resumeIncoming(); + }, this._transport.close); - // Ensure this is only done once - this.read = () => { - throw new Error("Tried to read() a BulkPacket's stream multiple times."); - }; - }, + // Ensure this is only done once + this.read = () => { + throw new Error("Tried to read() a BulkPacket's stream multiple times."); + }; +} - write: function(stream) { - dumpv("Writing bulk packet"); +BulkPacket.prototype.write = function(stream) { + dumpv("Writing bulk packet"); - if (this._outgoingHeader === undefined) { - dumpv("Serializing bulk packet header"); - // Format the serialized packet header to a buffer - this._outgoingHeader = "bulk " + this.actor + " " + this.type + " " + - this.length + ":"; - } + if (this._outgoingHeader === undefined) { + dumpv("Serializing bulk packet header"); + // Format the serialized packet header to a buffer + this._outgoingHeader = "bulk " + this.actor + " " + this.type + " " + + this.length + ":"; + } - // Write the header, or whatever's left of it to write. - if (this._outgoingHeader.length) { - dumpv("Writing bulk packet header"); - let written = stream.write(this._outgoingHeader, - this._outgoingHeader.length); - this._outgoingHeader = this._outgoingHeader.slice(written); - return; - } + // Write the header, or whatever's left of it to write. + if (this._outgoingHeader.length) { + dumpv("Writing bulk packet header"); + let written = stream.write(this._outgoingHeader, + this._outgoingHeader.length); + this._outgoingHeader = this._outgoingHeader.slice(written); + return; + } - dumpv("Handing off output stream"); + dumpv("Handing off output stream"); - // Temporarily pause the monitoring of the output stream - this._transport.pauseOutgoing(); + // Temporarily pause the monitoring of the output stream + this._transport.pauseOutgoing(); - let deferred = promise.defer(); + let deferred = promise.defer(); - this._readyForWriting.resolve({ - copyFrom: (input) => { - dumpv("CF length: " + this.length); - deferred.resolve(StreamUtils.copyStream(input, stream, this.length)); - return deferred.promise; - }, - stream: stream, - done: deferred - }); + this._readyForWriting.resolve({ + copyFrom: (input) => { + dumpv("CF length: " + this.length); + deferred.resolve(StreamUtils.copyStream(input, stream, this.length)); + return deferred.promise; + }, + stream: stream, + done: deferred + }); - // Await the result of writing to the stream - deferred.promise.then(() => { - dumpv("onWriteDone called, ending bulk mode"); - this._done = true; - this._transport.resumeOutgoing(); - }, this._transport.close); + // Await the result of writing to the stream + deferred.promise.then(() => { + dumpv("onWriteDone called, ending bulk mode"); + this._done = true; + this._transport.resumeOutgoing(); + }, this._transport.close); - // Ensure this is only done once - this.write = () => { - throw new Error("Tried to write() a BulkPacket's stream multiple times."); - }; - }, + // Ensure this is only done once + this.write = () => { + throw new Error("Tried to write() a BulkPacket's stream multiple times."); + }; +} - get streamReadyForWriting() { +Object.defineProperty(BulkPacket.prototype, "streamReadyForWriting", { + get: function() { return this._readyForWriting.promise; - }, + } +}); - get header() { +Object.defineProperty(BulkPacket.prototype, "header", { + get: function() { return { actor: this.actor, type: this.type, @@ -354,20 +358,22 @@ BulkPacket.prototype = Heritage.extend(Packet.prototype, { }; }, - set header(header) { + set: function(header) { this.actor = header.actor; this.type = header.type; this.length = header.length; }, - - get done() { return this._done; }, - - toString: function() { - return "Bulk: " + JSON.stringify(this.header, null, 2); - } - }); +Object.defineProperty(BulkPacket.prototype, "done", { + get: function() { return this._done; }, +}); + + +BulkPacket.prototype.toString = function() { + return "Bulk: " + JSON.stringify(this.header, null, 2); +} + exports.BulkPacket = BulkPacket; /** @@ -385,21 +391,21 @@ function RawPacket(transport, data) { this._done = false; } -RawPacket.prototype = Heritage.extend(Packet.prototype, { +RawPacket.prototype = Object.create(Packet.prototype); - read: function(stream) { - // This hasn't yet been needed for testing. - throw Error("Not implmented."); - }, +RawPacket.prototype.read = function(stream) { + // This hasn't yet been needed for testing. + throw Error("Not implmented."); +} - write: function(stream) { - let written = stream.write(this._data, this._data.length); - this._data = this._data.slice(written); - this._done = !this._data.length; - }, - - get done() { return this._done; } +RawPacket.prototype.write = function(stream) { + let written = stream.write(this._data, this._data.length); + this._data = this._data.slice(written); + this._done = !this._data.length; +} +Object.defineProperty(RawPacket.prototype, "done", { + get: function() { return this._done; } }); exports.RawPacket = RawPacket; From 5696b86f43d61b39973be0a35dd2001b7a8f2091 Mon Sep 17 00:00:00 2001 From: Brian Grinstead Date: Thu, 5 Jun 2014 13:38:00 -0400 Subject: [PATCH 018/103] Bug 1019676 - Project editor: Allow app header to be updated and add gear icon / status indicator. r=harth --- .../chrome/content/projecteditor-loader.js | 8 +- .../chrome/content/projecteditor.xul | 2 - .../lib/plugins/app-manager/plugin.js | 21 ++- browser/devtools/projecteditor/lib/project.js | 8 +- .../projecteditor/lib/projecteditor.js | 21 ++- browser/devtools/projecteditor/lib/tree.js | 9 +- .../devtools/projecteditor/test/browser.ini | 1 + .../test/browser_projecteditor_app_options.js | 102 +++++++++++++ .../test/browser_projecteditor_editing_01.js | 2 +- .../test/browser_projecteditor_stores.js | 6 +- .../browser_projecteditor_tree_selection.js | 2 +- .../devtools/projecteditor/projecteditor.css | 137 ++++++++++++------ 12 files changed, 250 insertions(+), 69 deletions(-) create mode 100644 browser/devtools/projecteditor/test/browser_projecteditor_app_options.js diff --git a/browser/devtools/projecteditor/chrome/content/projecteditor-loader.js b/browser/devtools/projecteditor/chrome/content/projecteditor-loader.js index 1f626aec6d9..2954d4cb24b 100644 --- a/browser/devtools/projecteditor/chrome/content/projecteditor-loader.js +++ b/browser/devtools/projecteditor/chrome/content/projecteditor-loader.js @@ -7,9 +7,9 @@ const promise = require("projecteditor/helpers/promise"); const ProjectEditor = require("projecteditor/projecteditor"); const SAMPLE_PATH = buildTempDirectoryStructure(); -const SAMPLE_NAME = "DevTools Content"; +const SAMPLE_NAME = "DevTools Content Application Name"; const SAMPLE_PROJECT_URL = "http://mozilla.org"; -const SAMPLE_ICON = "chrome://browser/skin/devtools/tool-options.svg"; +const SAMPLE_ICON = "chrome://browser/skin/devtools/tool-debugger.svg"; /** * Create a workspace for working on projecteditor, available at @@ -56,11 +56,13 @@ document.addEventListener("DOMContentLoaded", function onDOMReady(e) { projecteditor.setProjectToAppPath(SAMPLE_PATH, { name: SAMPLE_NAME, iconUrl: SAMPLE_ICON, - projectOverviewURL: SAMPLE_PROJECT_URL + projectOverviewURL: SAMPLE_PROJECT_URL, + validationStatus: "valid" }).then(() => { let allResources = projecteditor.project.allResources(); console.log("All resources have been loaded", allResources, allResources.map(r=>r.basename).join("|")); }); + }); }, false); diff --git a/browser/devtools/projecteditor/chrome/content/projecteditor.xul b/browser/devtools/projecteditor/chrome/content/projecteditor.xul index 9f5e59d4935..0ab13a74d4f 100644 --- a/browser/devtools/projecteditor/chrome/content/projecteditor.xul +++ b/browser/devtools/projecteditor/chrome/content/projecteditor.xul @@ -4,10 +4,8 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - diff --git a/browser/devtools/projecteditor/lib/plugins/app-manager/plugin.js b/browser/devtools/projecteditor/lib/plugins/app-manager/plugin.js index fc79ee3960e..d3979236de7 100644 --- a/browser/devtools/projecteditor/lib/plugins/app-manager/plugin.js +++ b/browser/devtools/projecteditor/lib/plugins/app-manager/plugin.js @@ -5,6 +5,7 @@ const { emit } = require("sdk/event/core"); const promise = require("projecteditor/helpers/promise"); var { registerPlugin, Plugin } = require("projecteditor/plugins/core"); const { AppProjectEditor } = require("./app-project-editor"); +const OPTION_URL = "chrome://browser/skin/devtools/tool-options.svg"; var AppManagerRenderer = Class({ extends: Plugin, @@ -25,20 +26,32 @@ var AppManagerRenderer = Class({ let {appManagerOpts} = this.host.project; let doc = elt.ownerDocument; let image = doc.createElement("image"); - let label = doc.createElement("label"); + let optionImage = doc.createElement("image"); + let flexElement = doc.createElement("div"); + let nameLabel = doc.createElement("span"); + let statusElement = doc.createElement("div"); - label.className = "project-name-label"; image.className = "project-image"; + optionImage.className = "project-options"; + nameLabel.className = "project-name-label"; + statusElement.className = "project-status"; + flexElement.className = "project-flex"; let name = appManagerOpts.name || resource.basename; let url = appManagerOpts.iconUrl || "icon-sample.png"; + let status = appManagerOpts.validationStatus || "unknown"; - label.textContent = name; + nameLabel.textContent = name; image.setAttribute("src", url); + optionImage.setAttribute("src", OPTION_URL); + statusElement.setAttribute("status", status) elt.innerHTML = ""; elt.appendChild(image); - elt.appendChild(label); + elt.appendChild(nameLabel); + elt.appendChild(flexElement); + elt.appendChild(statusElement); + elt.appendChild(optionImage); return true; } }); diff --git a/browser/devtools/projecteditor/lib/project.js b/browser/devtools/projecteditor/lib/project.js index 8b19117ae24..59d0dc513a6 100644 --- a/browser/devtools/projecteditor/lib/project.js +++ b/browser/devtools/projecteditor/lib/project.js @@ -136,13 +136,11 @@ var Project = Class({ /** * Get every file path used inside of the project. * - * @returns generator-iterator + * @returns Array * A list of all file paths */ - allPaths: function*() { - for (let [path, store] of this.localStores) { - yield path; - } + allPaths: function() { + return [path for (path of this.localStores.keys())]; }, /** diff --git a/browser/devtools/projecteditor/lib/projecteditor.js b/browser/devtools/projecteditor/lib/projecteditor.js index 2e3ca9653f8..d0e0efd5742 100644 --- a/browser/devtools/projecteditor/lib/projecteditor.js +++ b/browser/devtools/projecteditor/lib/projecteditor.js @@ -264,14 +264,29 @@ var ProjectEditor = Class({ * @param string path * The file path to set * @param Object opts - * Custom options used by the project. See plugins/app-manager. + * Custom options used by the project. + * - name: display name for project + * - iconUrl: path to icon for project + * - validationStatus: one of 'unknown|error|warning|valid' + * - projectOverviewURL: path to load for iframe when project + * is selected in the tree. * @param Promise * Promise that is resolved once the project is ready to be used. */ setProjectToAppPath: function(path, opts = {}) { this.project.appManagerOpts = opts; - this.project.removeAllStores(); - this.project.addPath(path); + + let existingPaths = this.project.allPaths(); + if (existingPaths.length !== 1 || existingPaths[0] !== path) { + // Only fully reset if this is a new path. + this.project.removeAllStores(); + this.project.addPath(path); + } else { + // Otherwise, just ask for the root to be redrawn + let rootResource = this.project.localStores.get(path).root; + emit(rootResource, "label-change", rootResource); + } + return this.project.refresh(); }, diff --git a/browser/devtools/projecteditor/lib/tree.js b/browser/devtools/projecteditor/lib/tree.js index 7edeeadd545..efe2b1a8866 100644 --- a/browser/devtools/projecteditor/lib/tree.js +++ b/browser/devtools/projecteditor/lib/tree.js @@ -39,7 +39,7 @@ var ResourceContainer = Class({ this.line = doc.createElementNS(HTML_NS, "div"); this.line.classList.add("child"); - this.line.classList.add("side-menu-widget-item"); + this.line.classList.add("entry"); this.line.setAttribute("theme", "dark"); this.line.setAttribute("tabindex", "0"); @@ -223,15 +223,14 @@ var TreeView = Class({ this.models = new Set(); this.roots = new Set(); this._containers = new Map(); - this.elt = document.createElement("vbox"); + this.elt = document.createElementNS(HTML_NS, "div"); this.elt.tree = this; - this.elt.className = "side-menu-widget-container sources-tree"; + this.elt.className = "sources-tree"; this.elt.setAttribute("with-arrows", "true"); this.elt.setAttribute("theme", "dark"); this.elt.setAttribute("flex", "1"); this.children = document.createElementNS(HTML_NS, "ul"); - this.children.setAttribute("flex", "1"); this.elt.appendChild(this.children); this.resourceChildrenChanged = this.resourceChildrenChanged.bind(this); @@ -315,7 +314,7 @@ var TreeView = Class({ return; } let container = this.importResource(root); - container.line.classList.add("side-menu-widget-group-title"); + container.line.classList.add("entry-group-title"); container.line.setAttribute("theme", "dark"); this.selectContainer(container); diff --git a/browser/devtools/projecteditor/test/browser.ini b/browser/devtools/projecteditor/test/browser.ini index 965ff56493e..a39efe1e5e4 100644 --- a/browser/devtools/projecteditor/test/browser.ini +++ b/browser/devtools/projecteditor/test/browser.ini @@ -5,6 +5,7 @@ support-files = head.js helper_homepage.html +[browser_projecteditor_app_options.js] [browser_projecteditor_delete_file.js] [browser_projecteditor_editing_01.js] [browser_projecteditor_immediate_destroy.js] diff --git a/browser/devtools/projecteditor/test/browser_projecteditor_app_options.js b/browser/devtools/projecteditor/test/browser_projecteditor_app_options.js new file mode 100644 index 00000000000..2141c19b033 --- /dev/null +++ b/browser/devtools/projecteditor/test/browser_projecteditor_app_options.js @@ -0,0 +1,102 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Test that options can be changed without resetting the whole +// editor. +let test = asyncTest(function*() { + + let TEMP_PATH = buildTempDirectoryStructure(); + let projecteditor = yield addProjectEditorTab(); + + let resourceBeenAdded = promise.defer(); + projecteditor.project.once("resource-added", () => { + info ("A resource has been added"); + resourceBeenAdded.resolve(); + }); + + info ("About to set project to: " + TEMP_PATH); + yield projecteditor.setProjectToAppPath(TEMP_PATH, { + name: "Test", + iconUrl: "chrome://browser/skin/devtools/tool-options.svg", + projectOverviewURL: SAMPLE_WEBAPP_URL + }); + + info ("Making sure a resource has been added before continuing"); + yield resourceBeenAdded.promise; + + info ("From now on, if a resource is added it should fail"); + projecteditor.project.on("resource-added", failIfResourceAdded); + + info ("Getting ahold and validating the project header DOM"); + let header = projecteditor.document.querySelector(".entry-group-title"); + let image = header.querySelector(".project-image"); + let nameLabel = header.querySelector(".project-name-label"); + let statusElement = header.querySelector(".project-status"); + is (statusElement.getAttribute("status"), "unknown", "The status starts out as unknown."); + is (nameLabel.textContent, "Test", "The name label has been set correctly"); + is (image.getAttribute("src"), "chrome://browser/skin/devtools/tool-options.svg", "The icon has been set correctly"); + + info ("About to set project with new options."); + yield projecteditor.setProjectToAppPath(TEMP_PATH, { + name: "Test2", + iconUrl: "chrome://browser/skin/devtools/tool-inspector.svg", + projectOverviewURL: SAMPLE_WEBAPP_URL, + validationStatus: "error" + }); + + ok (!nameLabel.parentNode, "The old elements have been removed"); + + info ("Getting ahold of and validating the project header DOM"); + let image = header.querySelector(".project-image"); + let nameLabel = header.querySelector(".project-name-label"); + let statusElement = header.querySelector(".project-status"); + is (statusElement.getAttribute("status"), "error", "The status has been set correctly."); + is (nameLabel.textContent, "Test2", "The name label has been set correctly"); + is (image.getAttribute("src"), "chrome://browser/skin/devtools/tool-inspector.svg", "The icon has been set correctly"); + + info ("About to set project with new options."); + yield projecteditor.setProjectToAppPath(TEMP_PATH, { + name: "Test3", + iconUrl: "chrome://browser/skin/devtools/tool-webconsole.svg", + projectOverviewURL: SAMPLE_WEBAPP_URL, + validationStatus: "warning" + }); + + ok (!nameLabel.parentNode, "The old elements have been removed"); + + info ("Getting ahold of and validating the project header DOM"); + let image = header.querySelector(".project-image"); + let nameLabel = header.querySelector(".project-name-label"); + let statusElement = header.querySelector(".project-status"); + is (statusElement.getAttribute("status"), "warning", "The status has been set correctly."); + is (nameLabel.textContent, "Test3", "The name label has been set correctly"); + is (image.getAttribute("src"), "chrome://browser/skin/devtools/tool-webconsole.svg", "The icon has been set correctly"); + + info ("About to set project with new options."); + yield projecteditor.setProjectToAppPath(TEMP_PATH, { + name: "Test4", + iconUrl: "chrome://browser/skin/devtools/tool-debugger.svg", + projectOverviewURL: SAMPLE_WEBAPP_URL, + validationStatus: "valid" + }); + + ok (!nameLabel.parentNode, "The old elements have been removed"); + + info ("Getting ahold of and validating the project header DOM"); + let image = header.querySelector(".project-image"); + let nameLabel = header.querySelector(".project-name-label"); + let statusElement = header.querySelector(".project-status"); + is (statusElement.getAttribute("status"), "valid", "The status has been set correctly."); + is (nameLabel.textContent, "Test4", "The name label has been set correctly"); + is (image.getAttribute("src"), "chrome://browser/skin/devtools/tool-debugger.svg", "The icon has been set correctly"); + + info ("Test finished, cleaning up"); + projecteditor.project.off("resource-added", failIfResourceAdded); +}); + +function failIfResourceAdded() { + ok (false, "A resource has been added, but it shouldn't have been"); +} diff --git a/browser/devtools/projecteditor/test/browser_projecteditor_editing_01.js b/browser/devtools/projecteditor/test/browser_projecteditor_editing_01.js index db8b5e2591b..b31d446012c 100644 --- a/browser/devtools/projecteditor/test/browser_projecteditor_editing_01.js +++ b/browser/devtools/projecteditor/test/browser_projecteditor_editing_01.js @@ -7,7 +7,7 @@ // Test ProjectEditor basic functionality let test = asyncTest(function*() { let projecteditor = yield addProjectEditorTabForTempDirectory(); - let TEMP_PATH = [...projecteditor.project.allPaths()][0]; + let TEMP_PATH = projecteditor.project.allPaths()[0]; is (getTempFile("").path, TEMP_PATH, "Temp path is set correctly."); diff --git a/browser/devtools/projecteditor/test/browser_projecteditor_stores.js b/browser/devtools/projecteditor/test/browser_projecteditor_stores.js index 08b356af73f..8c375ea8378 100644 --- a/browser/devtools/projecteditor/test/browser_projecteditor_stores.js +++ b/browser/devtools/projecteditor/test/browser_projecteditor_stores.js @@ -7,10 +7,10 @@ // Test ProjectEditor basic functionality let test = asyncTest(function*() { let projecteditor = yield addProjectEditorTabForTempDirectory(); - let TEMP_PATH = [...projecteditor.project.allPaths()][0]; + let TEMP_PATH = projecteditor.project.allPaths()[0]; is (getTempFile("").path, TEMP_PATH, "Temp path is set correctly."); - is ([...projecteditor.project.allPaths()].length, 1, "1 path is set"); + is (projecteditor.project.allPaths().length, 1, "1 path is set"); projecteditor.project.removeAllStores(); - is ([...projecteditor.project.allPaths()].length, 0, "No paths are remaining"); + is (projecteditor.project.allPaths().length, 0, "No paths are remaining"); }); diff --git a/browser/devtools/projecteditor/test/browser_projecteditor_tree_selection.js b/browser/devtools/projecteditor/test/browser_projecteditor_tree_selection.js index 3835fab0b72..9d23c979354 100644 --- a/browser/devtools/projecteditor/test/browser_projecteditor_tree_selection.js +++ b/browser/devtools/projecteditor/test/browser_projecteditor_tree_selection.js @@ -8,7 +8,7 @@ let test = asyncTest(function*() { let projecteditor = yield addProjectEditorTabForTempDirectory(); - let TEMP_PATH = [...projecteditor.project.allPaths()][0]; + let TEMP_PATH = projecteditor.project.allPaths()[0]; is (getTempFile("").path, TEMP_PATH, "Temp path is set correctly."); diff --git a/browser/themes/shared/devtools/projecteditor/projecteditor.css b/browser/themes/shared/devtools/projecteditor/projecteditor.css index 1d11f603bbe..6fa7fd43e03 100644 --- a/browser/themes/shared/devtools/projecteditor/projecteditor.css +++ b/browser/themes/shared/devtools/projecteditor/projecteditor.css @@ -11,6 +11,20 @@ display: none; } +.arrow { + -moz-appearance: treetwisty; + width: 20px; + height: 20px; +} + +.arrow[open] { + -moz-appearance: treetwistyopen; +} + +.arrow[invisible] { + visibility: hidden; +} + #projecteditor-menubar { /* XXX: Hide menu bar until we have option to add menu items to an existing one. */ @@ -27,7 +41,13 @@ .sources-tree { overflow:auto; + overflow-x: hidden; -moz-user-focus: normal; + + /* Allows this to expand inside of parent xul element, while + still supporting child flexbox elements, including ellipses. */ + -moz-box-flex: 1; + display: block; } .sources-tree input { @@ -37,94 +57,95 @@ #main-deck .sources-tree { background: rgb(225, 225, 225); - min-width: 50px; + min-width: 100px; } -#main-deck .sources-tree .side-menu-widget-item { +.entry { color: #18191A; + display: flex; + align-items: center; } -#main-deck .sources-tree .side-menu-widget-item .file-label { - vertical-align: middle; - display: inline-block; +.entry .file-label { + display: flex; + flex: 1; + align-items: center; } -#main-deck .sources-tree .side-menu-widget-item .file-icon { +.entry .file-icon { display: inline-block; background: url(file-icons-sheet@2x.png); background-size: 140px 15px; background-repeat: no-repeat; width: 20px; height: 15px; - vertical-align: middle; background-position: -40px 0; + flex-shrink: 0; } -#main-deck .sources-tree .side-menu-widget-item .file-icon.icon-none { +.entry .file-icon.icon-none { display: none; } -#main-deck .sources-tree .side-menu-widget-item .icon-css { +.entry .icon-css { background-position: 0 0; } -#main-deck .sources-tree .side-menu-widget-item .icon-js { +.entry .icon-js { background-position: -20px 0; } -#main-deck .sources-tree .side-menu-widget-item .icon-html { +.entry .icon-html { background-position: -40px 0; } -#main-deck .sources-tree .side-menu-widget-item .icon-file { +.entry .icon-file { background-position: -60px 0; } -#main-deck .sources-tree .side-menu-widget-item .icon-folder { +.entry .icon-folder { background-position: -80px 0; } -#main-deck .sources-tree .side-menu-widget-item .icon-img { +.entry .icon-img { background-position: -100px 0; } -#main-deck .sources-tree .side-menu-widget-item .icon-manifest { +.entry .icon-manifest { background-position: -120px 0; } -#main-deck .sources-tree .side-menu-widget-item:hover { - background: rgba(0, 0, 0, .05); +.entry { + border: none; + box-shadow: none; + white-space: nowrap; cursor: pointer; } -#main-deck .sources-tree .side-menu-widget-item { - border: none; - box-shadow: none; - line-height: 20px; - vertical-align: middle; - white-space: nowrap; +.entry:hover:not(.entry-group-title):not(.selected) { + background: rgba(0, 0, 0, .05); } -#main-deck .sources-tree .side-menu-widget-item.selected { - background: #3875D7; +.entry.selected { + background: rgba(56, 117, 215, 1); color: #F5F7FA; outline: none; } -#main-deck .sources-tree .side-menu-widget-group-title, -#main-deck .sources-tree .side-menu-widget-group-title:hover:not(.selected) { - background: #B4D7EB; - color: #222; +.entry-group-title { + background: rgba(56, 117, 215, 0.8); + color: #F5F7FA; font-weight: bold; font-size: 1.05em; - cursor: default; line-height: 35px; + padding: 0 10px; } -#main-deck .sources-tree li.child:only-child .side-menu-widget-group-title .expander { +.sources-tree .entry-group-title .expander { display: none; } -#main-deck .sources-tree .side-menu-widget-item .expander { + +.entry .expander { width: 16px; padding: 0; } @@ -143,30 +164,62 @@ padding: 0 3px; } +/* App Manager */ .project-name-label { font-weight: bold; padding-left: 10px; + overflow: hidden; + text-overflow: ellipsis; } -.project-version-label { - color: #666; - padding-left: 5px; - font-size: .9em; +.project-flex { + flex: 1; } .project-image { - max-height: 28px; - margin-left: -.5em; - vertical-align: middle; + max-height: 25px; + margin-left: -10px; } -.editor-image { - padding: 10px; +.project-image, +.project-status, +.project-options { + flex-shrink: 0; } +.project-status { + width: 10px; + height: 10px; + border-radius: 50%; + border: solid 1px rgba(255, 255, 255, .5); + margin-right: 10px; + visibility: hidden; +} + +.project-status[status=valid] { + background: #70bf53; + visibility: visible; +} + +.project-status[status=warning] { + background: #d99b28; + visibility: visible; +} + +.project-status[status=error] { + background: #ed2655; + visibility: visible; +} + +/* Status Bar */ .projecteditor-file-label { font-weight: bold; padding-left: 29px; - vertical-align: middle; + padding-right: 10px; + flex: 1; } +/* Image View */ +.editor-image { + padding: 10px; +} From 74242afd1fd17bc6bc65ffe28316fa463090c1fb Mon Sep 17 00:00:00 2001 From: Brian Grinstead Date: Thu, 5 Jun 2014 08:40:00 -0400 Subject: [PATCH 019/103] Bug 1021023 - Fix 'document is null' error in CssLogic_findCssSelector when inspecting in XUL document. r=pbrosset --- toolkit/devtools/styleinspector/css-logic.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/toolkit/devtools/styleinspector/css-logic.js b/toolkit/devtools/styleinspector/css-logic.js index f3057ea2c9b..dd675bd14ce 100644 --- a/toolkit/devtools/styleinspector/css-logic.js +++ b/toolkit/devtools/styleinspector/css-logic.js @@ -917,10 +917,13 @@ CssLogic.findCssSelector = function CssLogic_findCssSelector(ele) { } } - // So we can be unique w.r.t. our parent, and use recursion - index = positionInNodeList(ele, ele.parentNode.children) + 1; - selector = CssLogic_findCssSelector(ele.parentNode) + ' > ' + - tagName + ':nth-child(' + index + ')'; + // Not unique enough yet. As long as it's not a child of the document, + // continue recursing up until it is unique enough. + if (ele.parentNode !== document) { + index = positionInNodeList(ele, ele.parentNode.children) + 1; + selector = CssLogic_findCssSelector(ele.parentNode) + ' > ' + + tagName + ':nth-child(' + index + ')'; + } return selector; }; From 487b9d5d2f4827c2ed886ef7d2ca098a2a99ce1e Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Thu, 5 Jun 2014 05:14:00 -0400 Subject: [PATCH 020/103] Bug 983814 - Use menuPanel.png instead of menuPanel-aero.png for Windows 8. r=Gijs --- browser/themes/windows/jar.mn | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/browser/themes/windows/jar.mn b/browser/themes/windows/jar.mn index 7027dd4df24..582457dc49d 100644 --- a/browser/themes/windows/jar.mn +++ b/browser/themes/windows/jar.mn @@ -440,11 +440,13 @@ browser.jar: skin/classic/aero/browser/livemark-folder.png (livemark-folder-aero.png) skin/classic/aero/browser/menu-back.png (menu-back-aero.png) skin/classic/aero/browser/menu-forward.png (menu-forward-aero.png) - skin/classic/aero/browser/menuPanel.png (menuPanel-aero.png) + skin/classic/aero/browser/menuPanel.png + skin/classic/aero/browser/menuPanel-aero.png skin/classic/aero/browser/menuPanel-customize.png skin/classic/aero/browser/menuPanel-exit.png skin/classic/aero/browser/menuPanel-help.png - skin/classic/aero/browser/menuPanel-small.png (menuPanel-small-aero.png) + skin/classic/aero/browser/menuPanel-small.png + skin/classic/aero/browser/menuPanel-small-aero.png skin/classic/aero/browser/Metro_Glyph.png (Metro_Glyph-aero.png) skin/classic/aero/browser/Metro_Glyph-inverted.png skin/classic/aero/browser/Metro_Glyph-menuPanel.png @@ -806,5 +808,11 @@ browser.jar: % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6.1 +% override chrome://browser/skin/menuPanel.png chrome://browser/skin/menuPanel-aero.png os=WINNT osversion=6 +% override chrome://browser/skin/menuPanel.png chrome://browser/skin/menuPanel-aero.png os=WINNT osversion=6.1 + +% override chrome://browser/skin/menuPanel-small.png chrome://browser/skin/menuPanel-small-aero.png os=WINNT osversion=6 +% override chrome://browser/skin/menuPanel-small.png chrome://browser/skin/menuPanel-small-aero.png os=WINNT osversion=6.1 + % override chrome://browser/skin/sync-horizontalbar.png chrome://browser/skin/sync-horizontalbar-XPVista7.png os=WINNT osversion<6.2 % override chrome://browser/skin/syncProgress-horizontalbar.png chrome://browser/skin/syncProgress-horizontalbar-XPVista7.png os=WINNT osversion<6.2 From 2bcb53065ece44999f1a5c6d69d9ba7011a35048 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 14:36:09 -0700 Subject: [PATCH 021/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/a98c1c4a288a Author: Dave Hylands Desc: Merge pull request #20098 from dhylands/bug-986331-3g2 Bug 986331 - Add support for .3g2 file extension (maps to video/3gpp2 mime type) r=djf ======== https://hg.mozilla.org/integration/gaia-central/rev/e4eba407bd07 Author: Dave Hylands Desc: Bug 986331 - Add support for .3g2 file extension (maps to video/3gpp2 mime type) --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 97b514e0631..6a20b1204fe 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "e32dee285e41ff8be7779ab4adb3db81a5b36570", + "revision": "a98c1c4a288a235a83341b0805ca0450afb9dc26", "repo_path": "/integration/gaia-central" } From 548d21ad5b106e7ef2c480950bcfabb9f461cdfe Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 14:41:34 -0700 Subject: [PATCH 022/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 5bf405bbb80..b232cfd6e96 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 5d1a9acfec5..fb6f39c1ef4 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index e4415eca213..6c070ad85db 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 5bf405bbb80..b232cfd6e96 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index f58f9346c7e..67e46ebd2e8 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index c45e04d024b..374f9cc4e78 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index fd7b2133aea..19575e3a60f 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index e24cf0539ef..e117aaeb86f 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 6c8ca87bf71..5c2d383c801 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 70371d236090cbd96346367a0f8402a576504f44 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 15:05:51 -0700 Subject: [PATCH 023/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/d83630d272b1 Author: Jared Hirsch Desc: Merge pull request #20042 from 6a68/bug-998012-tos-pp Bug 998012 - Add FxA Terms/Privacy text to the system app ======== https://hg.mozilla.org/integration/gaia-central/rev/a7fb8b24440f Author: Jared Hirsch Desc: Bug 998012 - Add FxA Terms/Privacy text to the system app r=alive --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 6a20b1204fe..a8cd9c44565 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "a98c1c4a288a235a83341b0805ca0450afb9dc26", + "revision": "d83630d272b12024d89f8cb93838117b1cb599aa", "repo_path": "/integration/gaia-central" } From cbc71a3d3eb8ecd44fcb5a15cd2b5dc731a89646 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 15:11:29 -0700 Subject: [PATCH 024/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index b232cfd6e96..a7ea2897d6a 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index fb6f39c1ef4..3b402b759e1 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 6c070ad85db..adcbaf04c78 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index b232cfd6e96..a7ea2897d6a 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 67e46ebd2e8..1533b8d9e56 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 374f9cc4e78..7f297784194 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 19575e3a60f..230d15095f9 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index e117aaeb86f..dd1cf3af3b2 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 5c2d383c801..d5bee892590 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From ae5af46c02e26bc9dd3504864495b372910eb46e Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 17:11:12 -0700 Subject: [PATCH 025/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/02e1830c641f Author: David Flanagan Desc: Merge pull request #20041 from davidflanagan/bug1020273 Bug 1020273: make the Gallery crop handles more sensitive r=pdahiya ======== https://hg.mozilla.org/integration/gaia-central/rev/07ff3b9fe5ef Author: David Flanagan Desc: Bug 1020273: make the Gallery crop handles more sensitive --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index a8cd9c44565..ae0889e5dc0 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "d83630d272b12024d89f8cb93838117b1cb599aa", + "revision": "02e1830c641fe10d272caa8ce228057557f86155", "repo_path": "/integration/gaia-central" } From 756b6fd3678344a5355e7d2fcc6ee0a83707e409 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 17:16:20 -0700 Subject: [PATCH 026/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index a7ea2897d6a..3fbfba7f818 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 3b402b759e1..c902e8db1ca 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index adcbaf04c78..e76aac0cfd5 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index a7ea2897d6a..3fbfba7f818 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 1533b8d9e56..7a967499afe 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 7f297784194..d73d15652c1 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 230d15095f9..8ddb7659602 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index dd1cf3af3b2..410f9cafc1b 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index d5bee892590..7b02f8f81a6 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 7d771a01a39d6900e5559848b92b505e4cdc06ba Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 17:21:09 -0700 Subject: [PATCH 027/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/b4273bddd6b1 Author: Etienne Segonzac Desc: Merge pull request #20049 from etiennesegonzac/bug-992085-simple Bug 992085 - While swiping, enable user to remain in portrait mode when... r=alive ======== https://hg.mozilla.org/integration/gaia-central/rev/db1fd010f19d Author: Etienne Segonzac Desc: Bug 992085 - While swiping, enable user to remain in portrait mode when a landscape app is encountered and vice versa. --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index ae0889e5dc0..c036c45abd5 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "02e1830c641fe10d272caa8ce228057557f86155", + "revision": "b4273bddd6b1e43f59b7e9b694705cc4ec8f90c4", "repo_path": "/integration/gaia-central" } From 170404e0a73b33660d21df1cbae9fdb42192269f Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 17:26:31 -0700 Subject: [PATCH 028/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 3fbfba7f818..096ba633aa2 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index c902e8db1ca..40e7853074f 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index e76aac0cfd5..8924afb1578 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 3fbfba7f818..096ba633aa2 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 7a967499afe..2ee7ff1566d 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index d73d15652c1..9078e00bb49 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 8ddb7659602..3269b8b1b2f 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 410f9cafc1b..bfcb78043f7 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 7b02f8f81a6..f203cd72d98 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From dae1d8ea4d241d4383288cdd2d216ee7acadf5bf Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 17:51:08 -0700 Subject: [PATCH 029/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/429675e9e017 Author: Etienne Segonzac Desc: Merge pull request #20055 from alivedise/bugzilla/1018836/skip-opening-for-immediate-animation Bug 1018836 - Fix immediate transition issues r=etienne ======== https://hg.mozilla.org/integration/gaia-central/rev/f64d6592110e Author: Alive Kuo Desc: Bug 1018836 - Fix immediate transition issues --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index c036c45abd5..967d6b1f7ca 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "b4273bddd6b1e43f59b7e9b694705cc4ec8f90c4", + "revision": "429675e9e0174075220358d652499fd893749594", "repo_path": "/integration/gaia-central" } From 816c004d0da113ffd02b04a890555b08eed4e68e Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 17:53:10 -0700 Subject: [PATCH 030/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 096ba633aa2..a67ccf1a7b5 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 40e7853074f..62d381adf1c 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 8924afb1578..50882c28d99 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 096ba633aa2..a67ccf1a7b5 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 2ee7ff1566d..5ac8d59d1e0 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 9078e00bb49..7b90b3b54b8 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 3269b8b1b2f..55db4a74349 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index bfcb78043f7..1abdb0f063e 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index f203cd72d98..cfe8585260a 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 345448d8d2f0eed97310ae078a7d7d1ce49f7fbf Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 18:46:16 -0700 Subject: [PATCH 031/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/fe6fc8ce56e4 Author: Kevin Grandon Desc: Merge pull request #20112 from KevinGrandon/bug_1021282_vertical_wallpaper Bug 1021282 - Change the Default Wallpaper to Illus_Flow2_Orange.jpg ======== https://hg.mozilla.org/integration/gaia-central/rev/7a350675da71 Author: Kevin Grandon Desc: Bug 1021282 - Change the Default Wallpaper to Illus_Flow2_Orange.jpg r=me --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 967d6b1f7ca..8b1db563f53 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "429675e9e0174075220358d652499fd893749594", + "revision": "fe6fc8ce56e4f7a8eeb55a6ec2c48c1774909058", "repo_path": "/integration/gaia-central" } From e5ca86ddeab09576f2ce43ed3aae75a4a0b957fc Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 18:48:25 -0700 Subject: [PATCH 032/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index a67ccf1a7b5..5f291bee855 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 62d381adf1c..2c7fe627dbf 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 50882c28d99..fbd4b3912de 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index a67ccf1a7b5..5f291bee855 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 5ac8d59d1e0..6a2af95141f 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 7b90b3b54b8..57a072fb2df 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 55db4a74349..3a0d1f341fa 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 1abdb0f063e..0d98766e0ab 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index cfe8585260a..36867d644e9 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 03962a269f48cd3813c6e09f4d4adb21d2467681 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 19:01:06 -0700 Subject: [PATCH 033/103] Bumping gaia.json for 3 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/61075b75c71b Author: Yuren Ju Desc: Merge pull request #20071 from yurenju/timeout Bug 1013585 - Intermittent gaia-build "Automation Error: mozprocess time... r=testonly ======== https://hg.mozilla.org/integration/gaia-central/rev/fcb091e32ab5 Author: Yuren Ju Desc: Bug 1013585 - Intermittent gaia-build "Automation Error: mozprocess timed out after 330 seconds running ['make', 'build-test-integration', 'NPM_REGISTRY=http://npm-mirror.pub.build.mozilla.org', 'REPORTER=mocha-tbpl-reporter'] | timed out after 330 seconds of no output ======== https://hg.mozilla.org/integration/gaia-central/rev/a5a6dd8d69a0 Author: James Lal Desc: Bug 1020475 - App install progress indicator + test infra for packaged app states r=kgrandon --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 8b1db563f53..1abd9f3a8af 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "fe6fc8ce56e4f7a8eeb55a6ec2c48c1774909058", + "revision": "61075b75c71b765ce4d3906aa867a74baccc890d", "repo_path": "/integration/gaia-central" } From b62512507310f99ed7fe4edb2f8c76e243259628 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 19:06:32 -0700 Subject: [PATCH 034/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 5f291bee855..0960b17c119 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 2c7fe627dbf..da5d3baeac6 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index fbd4b3912de..805de0892ce 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 5f291bee855..0960b17c119 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 6a2af95141f..85d4f5c5614 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 57a072fb2df..6549e09a054 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 3a0d1f341fa..f52f4bb963b 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 0d98766e0ab..084c17e3283 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 36867d644e9..bb2bb9ddbfc 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 6836907abb1f260ab70b2069ac19a65c57495c67 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 19:11:09 -0700 Subject: [PATCH 035/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/930e9ee90d32 Author: Kevin Grandon Desc: Merge pull request #20090 from KevinGrandon/bug_1021121_vertical_icon_localization Bug 1021121 - [Vertical] Home screen icons are not localized ======== https://hg.mozilla.org/integration/gaia-central/rev/19fea43caaec Author: Kevin Grandon Desc: Bug 1021121 - [Vertical] Home screen icons are not localized r=lightsofapollo --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 1abd9f3a8af..3bebd07433f 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "61075b75c71b765ce4d3906aa867a74baccc890d", + "revision": "930e9ee90d32497c01f8f3beea7415d0a8537c1c", "repo_path": "/integration/gaia-central" } From 1b4f0e36e72123b348454119034d069224179a43 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 19:13:12 -0700 Subject: [PATCH 036/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 0960b17c119..2ae9e81a621 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index da5d3baeac6..fdc8e59addd 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 805de0892ce..c7997d77090 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 0960b17c119..2ae9e81a621 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 85d4f5c5614..c69647ad57e 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 6549e09a054..86ecef49560 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index f52f4bb963b..0792837515d 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 084c17e3283..997d11f1be8 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index bb2bb9ddbfc..4e7cb4ef371 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From fdce4103b193803bc3a02c948a10636afa71963f Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 19:26:08 -0700 Subject: [PATCH 037/103] Bumping gaia.json for 1 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/912ffe0ff9e2 Author: Kevin Grandon Desc: Bug 1016239 - Follow-up, fix dedupe.js path r=me --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 3bebd07433f..57c6dc9da2f 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "930e9ee90d32497c01f8f3beea7415d0a8537c1c", + "revision": "912ffe0ff9e23938449c15f0b5712653ccf48921", "repo_path": "/integration/gaia-central" } From 7af3a04ffd80049954e47572db55ff2214de4b68 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 19:31:34 -0700 Subject: [PATCH 038/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 2ae9e81a621..dc993dc0824 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index fdc8e59addd..17f7eed2e97 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index c7997d77090..2ea19216fcd 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 2ae9e81a621..dc993dc0824 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index c69647ad57e..a0728cb8275 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 86ecef49560..f994f2a6878 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 0792837515d..c3216ba07b9 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 997d11f1be8..50fabe2b997 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 4e7cb4ef371..78fc0af0a97 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From c1dfbffd6b455d92e1c625a12948e36c371a059c Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 20:06:00 -0700 Subject: [PATCH 039/103] Bumping gaia.json for 1 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/ed1ad1006f3d Author: Kevin Grandon Desc: Bug 1021468 - [Vertical] Prevent app entering horizontal orientation r=me --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 57c6dc9da2f..aeaf98a121c 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "912ffe0ff9e23938449c15f0b5712653ccf48921", + "revision": "ed1ad1006f3da91896a9a9205b56833fc6c6e720", "repo_path": "/integration/gaia-central" } From f50189ebe183c3606c2e07e9b3d800231858c076 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 20:11:24 -0700 Subject: [PATCH 040/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index dc993dc0824..77a849180cd 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 17f7eed2e97..7350d71617d 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 2ea19216fcd..0b2c8f676e9 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index dc993dc0824..77a849180cd 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index a0728cb8275..a28ecace015 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index f994f2a6878..8cb931a3eca 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index c3216ba07b9..f2d2a701de1 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 50fabe2b997..56dc72bdc50 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 78fc0af0a97..1111d02d8a0 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From ad3e3bb9fa3c7ea9d61619dcd64e2ba5b0f2b63b Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 20:21:09 -0700 Subject: [PATCH 041/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/19367dc6b0f9 Author: Arnau Desc: Merge pull request #19874 from pacorampas/call-screen-sprites Bug 1018167 - [Dialer][Call Screen] Change iconpad's icon r=rik ======== https://hg.mozilla.org/integration/gaia-central/rev/d9925c84a5c1 Author: Paco Rampas Desc: Bug 1018167 - [Dialer][Call Screen] Change iconpad's icon --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index aeaf98a121c..d40f9be2b06 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "ed1ad1006f3da91896a9a9205b56833fc6c6e720", + "revision": "19367dc6b0f9fe37cf3f9ca1a49fa12792e68af9", "repo_path": "/integration/gaia-central" } From ba95438acce74699406f6d5d52c63acc8487163d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 20:26:39 -0700 Subject: [PATCH 042/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 77a849180cd..af883252bee 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 7350d71617d..a06c954e3d4 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 0b2c8f676e9..9241ca4f2c0 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 77a849180cd..af883252bee 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index a28ecace015..796fd02a4d0 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 8cb931a3eca..c2fd41bfb2e 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index f2d2a701de1..3c28278af37 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 56dc72bdc50..dd03ac10c99 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 1111d02d8a0..7ac53dcd732 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 921d0a8c8a0f36a0f953cb7c10919613775b0899 Mon Sep 17 00:00:00 2001 From: Jamin Liu Date: Fri, 6 Jun 2014 11:38:24 +0800 Subject: [PATCH 043/103] Bug 968709 - Add a marionette test case to Bluetooth set to make sure the URL of Marionette client is correct. r=echou, f=vyang Few marionette tests in unit-test set may navigate to specific URL and wouldn't restore the URL of marionette client when the tests end. Navigate the URL to default value before running Bluetooth test to make sure the correctness of test. --- dom/bluetooth/tests/marionette/manifest.ini | 1 + .../tests/marionette/test_navigate_to_default_url.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 dom/bluetooth/tests/marionette/test_navigate_to_default_url.py diff --git a/dom/bluetooth/tests/marionette/manifest.ini b/dom/bluetooth/tests/marionette/manifest.ini index 64819b7b9ce..1c7d4a90422 100644 --- a/dom/bluetooth/tests/marionette/manifest.ini +++ b/dom/bluetooth/tests/marionette/manifest.ini @@ -3,6 +3,7 @@ b2g = true browser = false qemu = true +[test_navigate_to_default_url.py] [test_dom_BluetoothManager_enabled.js] [test_dom_BluetoothManager_adapteradded.js] [test_dom_BluetoothAdapter_setters.js] diff --git a/dom/bluetooth/tests/marionette/test_navigate_to_default_url.py b/dom/bluetooth/tests/marionette/test_navigate_to_default_url.py new file mode 100644 index 00000000000..34ad3635a24 --- /dev/null +++ b/dom/bluetooth/tests/marionette/test_navigate_to_default_url.py @@ -0,0 +1,12 @@ +# 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 marionette_test import MarionetteTestCase + +class testNavigateToDefault(MarionetteTestCase): + def test_navigate_to_default_url(self): + try: + self.marionette.navigate("app://system.gaiamobile.org/index.html") + except: + self.assertTrue(Flase, "Can not navigate to system app.") From 056d16c7ed97c0990bd824397efd8c5509fdeeb1 Mon Sep 17 00:00:00 2001 From: Jamin Liu Date: Fri, 6 Jun 2014 11:38:24 +0800 Subject: [PATCH 044/103] Bug 968709 - Add a marionette test for pairing APIs of BluetoothAdapter. r=echou, f=vyang --- dom/bluetooth/tests/marionette/head.js | 304 ++++++++++++++---- dom/bluetooth/tests/marionette/manifest.ini | 1 + .../test_dom_BluetoothAdapter_discovery.js | 14 +- .../test_dom_BluetoothAdapter_getters.js | 4 +- .../test_dom_BluetoothAdapter_pair.js | 66 ++++ .../test_dom_BluetoothAdapter_setters.js | 4 +- .../test_dom_BluetoothManager_adapteradded.js | 4 +- .../test_dom_BluetoothManager_enabled.js | 4 +- 8 files changed, 316 insertions(+), 85 deletions(-) create mode 100644 dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_pair.js diff --git a/dom/bluetooth/tests/marionette/head.js b/dom/bluetooth/tests/marionette/head.js index ae3a46fb1d3..d1afbfb5056 100644 --- a/dom/bluetooth/tests/marionette/head.js +++ b/dom/bluetooth/tests/marionette/head.js @@ -1,6 +1,4 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * vim: sw=2 ts=2 sts=2 et filetype=javascript - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ @@ -36,7 +34,14 @@ const BDADDR_ALL = "ff:ff:ff:ff:ff:ff"; const BDADDR_LOCAL = "ff:ff:ff:00:00:00"; // A user friendly name for remote BT device. -const REMOTE_DEVICE_NAME = "Remote BT Device"; +const REMOTE_DEVICE_NAME = "Remote_BT_Device"; + +// A system message signature of pairing request event +const BT_PAIRING_REQ = "bluetooth-pairing-request"; + +// Passkey and pincode used to reply pairing requst +const BT_PAIRING_PASSKEY = 123456; +const BT_PAIRING_PINCODE = "ABCDEFG"; let Promise = SpecialPowers.Cu.import("resource://gre/modules/Promise.jsm").Promise; @@ -80,6 +85,33 @@ function runEmulatorCmdSafe(aCommand) { return deferred.promise; } +/** + * Wrap DOMRequest onsuccess/onerror events to Promise resolve/reject. + * + * Fulfill params: A DOMEvent. + * Reject params: A DOMEvent. + * + * @param aRequest + * A DOMRequest instance. + * + * @return A deferred promise. + */ +function wrapDomRequestAsPromise(aRequest) { + let deferred = Promise.defer(); + + ok(aRequest instanceof DOMRequest, + "aRequest is instanceof " + aRequest.constructor); + + aRequest.onsuccess = function(aEvent) { + deferred.resolve(aEvent); + }; + aRequest.onerror = function(aEvent) { + deferred.reject(aEvent); + }; + + return deferred.promise; +} + /** * Add a Bluetooth remote device to scatternet and set its properties. * @@ -188,13 +220,11 @@ function setEmulatorDeviceProperty(aAddress, aPropertyName, aValue) { function getEmulatorDeviceProperty(aAddress, aPropertyName) { let cmd = "bt property " + aAddress + " " + aPropertyName; return runEmulatorCmdSafe(cmd) - .then(function(aResults) { - return aResults[0]; - }); + .then(aResults => aResults[0]); } /** - * Start dicovering Bluetooth devices. + * Start discovering Bluetooth devices. * * Allows the device's adapter to start seeking for remote devices. * @@ -202,32 +232,28 @@ function getEmulatorDeviceProperty(aAddress, aPropertyName) { * Reject params: a DOMError * * @param aAdapter - * A BluetoothAdapter which is used to interact with local BT dev + * A BluetoothAdapter which is used to interact with local BT device. * * @return A deferred promise. */ function startDiscovery(aAdapter) { - let deferred = Promise.defer(); - let request = aAdapter.startDiscovery(); - request.onsuccess = function () { - log(" Start discovery - Success"); - // TODO (bug 892207): Make Bluetooth APIs available for 3rd party apps. - // Currently, discovering state wouldn't change immediately here. - // We would turn on this check when the redesigned API are landed. - // is(aAdapter.discovering, true, "BluetoothAdapter.discovering"); - deferred.resolve(); - } - request.onerror = function (aEvent) { - ok(false, "Start discovery - Fail"); - deferred.reject(aEvent.target.error); - } - return deferred.promise; + return wrapDomRequestAsPromise(request) + .then(function resolve() { + // TODO (bug 892207): Make Bluetooth APIs available for 3rd party apps. + // Currently, discovering state wouldn't change immediately here. + // We would turn on this check when the redesigned API are landed. + // is(aAdapter.discovering, false, "BluetoothAdapter.discovering"); + log(" Start discovery - Success"); + }, function reject(aEvent) { + ok(false, "Start discovery - Fail"); + throw aEvent.target.error; + }); } /** - * Stop dicovering Bluetooth devices. + * Stop discovering Bluetooth devices. * * Allows the device's adapter to stop seeking for remote devices. * @@ -240,24 +266,184 @@ function startDiscovery(aAdapter) { * @return A deferred promise. */ function stopDiscovery(aAdapter) { + let request = aAdapter.stopDiscovery(); + + return wrapDomRequestAsPromise(request) + .then(function resolve() { + // TODO (bug 892207): Make Bluetooth APIs available for 3rd party apps. + // Currently, discovering state wouldn't change immediately here. + // We would turn on this check when the redesigned API are landed. + // is(aAdapter.discovering, false, "BluetoothAdapter.discovering"); + log(" Stop discovery - Success"); + }, function reject(aEvent) { + ok(false, "Stop discovery - Fail"); + throw aEvent.target.error; + }); +} + +/** + * Wait for 'devicefound' event of specified devices. + * + * Resolve if that every specified devices has been found. Never reject. + * + * Fulfill params: an array which contains addresses of remote devices. + * + * @param aAdapter + * A BluetoothAdapter which is used to interact with local BT device. + * @param aRemoteAddresses + * An array which contains addresses of remote devices. + * + * @return A deferred promise. + */ +function waitForDevicesFound(aAdapter, aRemoteAddresses) { let deferred = Promise.defer(); - let request = aAdapter.stopDiscovery(); - request.onsuccess = function () { - log(" Stop discovery - Success"); - // TODO (bug 892207): Make Bluetooth APIs available for 3rd party apps. - // Currently, discovering state wouldn't change immediately here. - // We would turn on this check when the redesigned API are landed. - // is(aAdapter.discovering, false, "BluetoothAdapter.discovering"); - deferred.resolve(); - } - request.onerror = function (aEvent) { - ok(false, "Stop discovery - Fail"); - deferred.reject(aEvent.target.error); - } + var addrArray = []; + aAdapter.addEventListener("devicefound", function onevent(aEvent) { + if(aRemoteAddresses.indexOf(aEvent.device.address) != -1) { + addrArray.push(aEvent.device.address); + } + if(addrArray.length == aRemoteAddresses.length) { + aAdapter.removeEventListener("devicefound", onevent); + ok(true, "BluetoothAdapter has found all remote devices."); + + deferred.resolve(addrArray); + } + }); + return deferred.promise; } +/** + * Start discovering Bluetooth devices and wait for 'devicefound' events. + * + * Allows the device's adapter to start seeking for remote devices and wait for + * the 'devicefound' events of specified devices. + * + * Fulfill params: an array of addresses of found devices. + * + * @param aAdapter + * A BluetoothAdapter which is used to interact with local BT device. + * @param aRemoteAddresses + * An array which contains addresses of remote devices. + * + * @return A deferred promise. + */ +function startDiscoveryAndWaitDevicesFound(aAdapter, aRemoteAddresses) { + let promises = []; + + promises.push(waitForDevicesFound(aAdapter, aRemoteAddresses)); + promises.push(startDiscovery(aAdapter)); + return Promise.all(promises) + .then(aResults => aResults[0]); +} + +/** + * Start pairing a remote device. + * + * Start pairing a remote device with the device's adapter. + * + * Fulfill params: (none) + * Reject params: a DOMError + * + * @param aAdapter + * A BluetoothAdapter which is used to interact with local BT device. + * @param aDeviceAddress + * The string of remote Bluetooth address with format xx:xx:xx:xx:xx:xx. + * + * @return A deferred promise. + */ +function pair(aAdapter, aDeviceAddress) { + let request = aAdapter.pair(aDeviceAddress); + + return wrapDomRequestAsPromise(request) + .then(function resolve() { + log(" Pair - Success"); + }, function reject(aEvent) { + ok(false, "Pair - Fail"); + throw aEvent.target.error; + }); +} + +/** + * Remove the paired device from the paired device list. + * + * Remove the paired device from the paired device list of the device's adapter. + * + * Fulfill params: (none) + * Reject params: a DOMError + * + * @param aAdapter + * A BluetoothAdapter which is used to interact with local BT device. + * @param aDeviceAddress + * The string of remote Bluetooth address with format xx:xx:xx:xx:xx:xx. + * + * @return A deferred promise. + */ +function unpair(aAdapter, aDeviceAddress) { + let request = aAdapter.unpair(aDeviceAddress); + + return wrapDomRequestAsPromise(request) + .then(function resolve() { + log(" Unpair - Success"); + }, function reject(aEvent) { + ok(false, "Unpair - Fail"); + throw aEvent.target.error; + }); +} + +/** + * Start pairing a remote device and wait for "pairedstatuschanged" event. + * + * Start pairing a remote device with the device's adapter and wait for + * "pairedstatuschanged" event. + * + * Fulfill params: an array of promise results contains the fulfilled params of + * 'waitForAdapterEvent' and 'pair'. + * + * @param aAdapter + * A BluetoothAdapter which is used to interact with local BT device. + * @param aDeviceAddress + * The string of remote Bluetooth address with format xx:xx:xx:xx:xx:xx. + * + * @return A deferred promise. + */ +function pairDeviceAndWait(aAdapter, aDeviceAddress) { + let promises = []; + promises.push(waitForAdapterEvent(aAdapter, "pairedstatuschanged")); + promises.push(pair(aAdapter, aDeviceAddress)); + return Promise.all(promises); +} + +/** + * Get paried Bluetooth devices. + * + * The getPairedDevices method is used to retrieve the full list of all devices + * paired with the device's adapter. + * + * Fulfill params: a shallow copy of the Array of paired BluetoothDevice + * objects. + * Reject params: a DOMError + * + * @param aAdapter + * A BluetoothAdapter which is used to interact with local BT device. + * + * @return A deferred promise. + */ +function getPairedDevices(aAdapter) { + let request = aAdapter.getPairedDevices(); + + return wrapDomRequestAsPromise(request) + .then(function resolve() { + log(" getPairedDevices - Success"); + let pairedDevices = request.result.slice(); + return pairedDevices; + }, function reject(aEvent) { + ok(false, "getPairedDevices - Fail"); + throw aEvent.target.error; + }); +} + /** * Get mozSettings value specified by @aKey. * @@ -274,19 +460,16 @@ function stopDiscovery(aAdapter) { * @return A deferred promise. */ function getSettings(aKey) { - let deferred = Promise.defer(); - let request = navigator.mozSettings.createLock().get(aKey); - request.addEventListener("success", function(aEvent) { - ok(true, "getSettings(" + aKey + ")"); - deferred.resolve(aEvent.target.result[aKey]); - }); - request.addEventListener("error", function() { - ok(false, "getSettings(" + aKey + ")"); - deferred.reject(); - }); - return deferred.promise; + return wrapDomRequestAsPromise(request) + .then(function resolve(aEvent) { + ok(true, "getSettings(" + aKey + ")"); + return aEvent.target.result[aKey]; + }, function reject(aEvent) { + ok(false, "getSettings(" + aKey + ")"); + throw aEvent.target.error; + }); } /** @@ -303,19 +486,15 @@ function getSettings(aKey) { * @return A deferred promise. */ function setSettings(aSettings) { - let deferred = Promise.defer(); - let request = navigator.mozSettings.createLock().set(aSettings); - request.addEventListener("success", function() { - ok(true, "setSettings(" + JSON.stringify(aSettings) + ")"); - deferred.resolve(); - }); - request.addEventListener("error", function() { - ok(false, "setSettings(" + JSON.stringify(aSettings) + ")"); - deferred.reject(); - }); - return deferred.promise; + return wrapDomRequestAsPromise(request) + .then(function resolve() { + ok(true, "setSettings(" + JSON.stringify(aSettings) + ")"); + }, function reject(aEvent) { + ok(false, "setSettings(" + JSON.stringify(aSettings) + ")"); + throw aEvent.target.error; + }); } /** @@ -438,7 +617,7 @@ function waitForManagerEvent(aEventName) { * Fulfill params: the DOMEvent passed. * * @param aAdapter - * The BluetoothAdapter you want to use. + * A BluetoothAdapter which is used to interact with local BT device. * @param aEventName * The name of the EventHandler. * @@ -463,7 +642,8 @@ function waitForAdapterEvent(aAdapter, aEventName) { * * Resolve if that named event occurs. Reject if we can't set settings. * - * Fulfill params: the DOMEvent passed. + * Fulfill params: an array of promise results contains the fulfill params of + * 'waitForManagerEvent' and 'setBluetoothEnabled'. * Reject params: (none) * * @return A deferred promise. diff --git a/dom/bluetooth/tests/marionette/manifest.ini b/dom/bluetooth/tests/marionette/manifest.ini index 1c7d4a90422..f71c781f899 100644 --- a/dom/bluetooth/tests/marionette/manifest.ini +++ b/dom/bluetooth/tests/marionette/manifest.ini @@ -9,3 +9,4 @@ qemu = true [test_dom_BluetoothAdapter_setters.js] [test_dom_BluetoothAdapter_getters.js] [test_dom_BluetoothAdapter_discovery.js] +[test_dom_BluetoothAdapter_pair.js] diff --git a/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_discovery.js b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_discovery.js index 97ef81eb8e1..5440dcd0616 100644 --- a/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_discovery.js +++ b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_discovery.js @@ -1,13 +1,11 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * vim: sw=2 ts=2 sts=2 et filetype=javascript - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ /////////////////////////////////////////////////////////////////////////////// // Test Purpose: // To verify that discovery process of BluetoothAdapter is correct. -// Use B2G emulator commands to add/remote remote devices to simulate +// Use B2G emulator commands to add/remove remote devices to simulate // discovering behavior. // // Test Coverage: @@ -24,15 +22,9 @@ MARIONETTE_HEAD_JS = 'head.js'; startBluetoothTest(true, function testCaseMain(aAdapter) { log("Testing the discovery process of BluetoothAdapter ..."); - // The properties of remote device. - let theProperties = { - "name": REMOTE_DEVICE_NAME, - "discoverable": true - }; - return Promise.resolve() .then(() => removeEmulatorRemoteDevice(BDADDR_ALL)) - .then(() => addEmulatorRemoteDevice(/*theProperties*/ null)) + .then(() => addEmulatorRemoteDevice(null)) .then(function(aRemoteAddress) { let promises = []; promises.push(waitForAdapterEvent(aAdapter, "devicefound")); diff --git a/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_getters.js b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_getters.js index 9abe13c657c..a32c47c356f 100644 --- a/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_getters.js +++ b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_getters.js @@ -1,6 +1,4 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * vim: sw=2 ts=2 sts=2 et filetype=javascript - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ diff --git a/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_pair.js b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_pair.js new file mode 100644 index 00000000000..7b681bc5112 --- /dev/null +++ b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_pair.js @@ -0,0 +1,66 @@ +/* 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/. */ + +/////////////////////////////////////////////////////////////////////////////// +// Test Purpose: +// To verify that pairing process of BluetoothAdapter is correct. +// Use B2G emulator commands to add/remove remote devices to simulate +// discovering behavior. With current emulator implemation, the pair method +// between adapter and remote device would be 'confirmation'. +// +// Test Coverage: +// - BluetoothAdapter.startDiscovery() +// - BluetoothAdapter.stopDiscovery() +// - BluetoothAdapter.pair() +// - BluetoothAdapter.unpair() +// - BluetoothAdapter.onpairedstatuschanged() +// - BluetoothAdapter.setPairingConfirmation() +// +/////////////////////////////////////////////////////////////////////////////// + +MARIONETTE_TIMEOUT = 60000; +MARIONETTE_HEAD_JS = 'head.js'; + +function replyPairingReq(aAdapter, aPairingEvent) { + switch (aPairingEvent.method) { + case 'confirmation': + log("The pairing passkey is " + aPairingEvent.passkey); + aAdapter.setPairingConfirmation(aPairingEvent.address, true); + break; + case 'pincode': + let pincode = BT_PAIRING_PINCODE; + aAdapter.setPinCode(aPairingEvent.address, pincode); + break; + case 'passkey': + let passkey = BT_PAIRING_PASSKEY; + aAdapter.setPasskey(aPairingEvent.address, passkey); + break; + default: + ok(false, "Unsupported pairing method. [" + aPairingEvent.method + "]"); + } +} + +startBluetoothTest(true, function testCaseMain(aAdapter) { + log("Testing the pairing process of BluetoothAdapter ..."); + + // listens to the system message BT_PAIRING_REQ + navigator.mozSetMessageHandler(BT_PAIRING_REQ, + (evt) => replyPairingReq(aAdapter, evt)); + + return Promise.resolve() + .then(() => removeEmulatorRemoteDevice(BDADDR_ALL)) + .then(() => addEmulatorRemoteDevice()) + .then((aRemoteAddress) => + startDiscoveryAndWaitDevicesFound(aAdapter, [aRemoteAddress])) + .then((aRemoteAddresses) => + stopDiscovery(aAdapter).then(() => aRemoteAddresses)) + // 'aRemoteAddresses' is an arrary which contains addresses of discovered + // remote devices. + // Pairs with the first device in 'aRemoteAddresses' to test the functionality + // of BluetoothAdapter.pair and BluetoothAdapter.onpairedstatuschanged. + .then((aRemoteAddresses) => pairDeviceAndWait(aAdapter, aRemoteAddresses.pop())) + .then(() => getPairedDevices(aAdapter)) + .then((aPairedDevices) => unpair(aAdapter, aPairedDevices.pop().address)) + .then(() => removeEmulatorRemoteDevice(BDADDR_ALL)); +}); diff --git a/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_setters.js b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_setters.js index 5a08cacc010..867d77cf81b 100644 --- a/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_setters.js +++ b/dom/bluetooth/tests/marionette/test_dom_BluetoothAdapter_setters.js @@ -1,6 +1,4 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * vim: sw=2 ts=2 sts=2 et filetype=javascript - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ diff --git a/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_adapteradded.js b/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_adapteradded.js index 034c1827715..eaa35050b32 100644 --- a/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_adapteradded.js +++ b/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_adapteradded.js @@ -1,6 +1,4 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * vim: sw=2 ts=2 sts=2 et filetype=javascript - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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/. */ diff --git a/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_enabled.js b/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_enabled.js index 005cbfcb248..120e4d113a1 100644 --- a/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_enabled.js +++ b/dom/bluetooth/tests/marionette/test_dom_BluetoothManager_enabled.js @@ -1,6 +1,4 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * vim: sw=2 ts=2 sts=2 et filetype=javascript - * This Source Code Form is subject to the terms of the Mozilla Public +/* 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 fbf34a8350da7ee5722edbbb970ff4a6a0f4f506 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 21:00:33 -0700 Subject: [PATCH 045/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/b859207fe404 Author: steveck-chung Desc: Merge pull request #19477 from steveck-chung/bug-1003820 Bug 1003820 - [Messages] Recipients container grows without limit breaking the layout. r=julienw ======== https://hg.mozilla.org/integration/gaia-central/rev/72a245a5ab6f Author: Steve Chung Desc: Bug 1003820 - [Messages] Recipients container grows without limit breaking the layout --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index d40f9be2b06..12d984bf6be 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "19367dc6b0f9fe37cf3f9ca1a49fa12792e68af9", + "revision": "b859207fe404cc5e045da8916871b37e7af07640", "repo_path": "/integration/gaia-central" } From 44b9ed73762ef43438000b8c835288b34a11bef6 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 21:06:22 -0700 Subject: [PATCH 046/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index af883252bee..9f540957af8 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index a06c954e3d4..6fbbf39161d 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 9241ca4f2c0..e9ad126643a 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index af883252bee..9f540957af8 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 796fd02a4d0..64ed6a8751c 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index c2fd41bfb2e..67258bc25e6 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 3c28278af37..cc037f162b5 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index dd03ac10c99..f8848e85be8 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 7ac53dcd732..700b3940908 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From c7c66495bb783c871ce704fc0f49b79aef716941 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 23:31:12 -0700 Subject: [PATCH 047/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/aed61c4d507f Author: Greg Weng Desc: Merge pull request #20048 from snowmantw/issue1020728 Bug 1020728 - [System] Pre-launching LockScreen while the screen off ======== https://hg.mozilla.org/integration/gaia-central/rev/648a92bbf59e Author: Greg Weng Desc: Bug 1020728 - [System] Pre-launching LockScreen while the screen off --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 12d984bf6be..c9d0d0cc4b1 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "b859207fe404cc5e045da8916871b37e7af07640", + "revision": "aed61c4d507fa2a92ab791a910cbd7fa55b2b00d", "repo_path": "/integration/gaia-central" } From a625bf890dccc82951f11972ac33fc4ea858fb0f Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Thu, 5 Jun 2014 23:36:37 -0700 Subject: [PATCH 048/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 9f540957af8..944ce4ec00e 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 6fbbf39161d..37e72e7982b 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index e9ad126643a..74ae420853c 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 9f540957af8..944ce4ec00e 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 64ed6a8751c..6e839d40d4b 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 67258bc25e6..fd958237198 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index cc037f162b5..a2feb7cdceb 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index f8848e85be8..533bc95332a 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 700b3940908..f77971b0832 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 92f759d8e6b902a453e2a42773cdd8c56852bb1d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 00:01:06 -0700 Subject: [PATCH 049/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/0940a7797002 Author: Cristian Rodriguez Desc: Merge pull request #20070 from crdlc/bug-1020155 Bug 1020155 - Populate collection datastore with data defined in pre_ins... ======== https://hg.mozilla.org/integration/gaia-central/rev/d047fa4b0884 Author: crdlc Desc: Bug 1020155 - Populate collection datastore with data defined in pre_installed_collections.json --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index c9d0d0cc4b1..f52bd3b3b9f 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "aed61c4d507fa2a92ab791a910cbd7fa55b2b00d", + "revision": "0940a779700223f455cc9d5362eab09d96e8d442", "repo_path": "/integration/gaia-central" } From 9719791510c01a0e34f8ae1f00b36a833453275d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 00:06:32 -0700 Subject: [PATCH 050/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 944ce4ec00e..72d01b6425c 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 37e72e7982b..e8fd553b02e 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 74ae420853c..465ebe14917 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 944ce4ec00e..72d01b6425c 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 6e839d40d4b..65629f865f4 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index fd958237198..239e500cd53 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index a2feb7cdceb..25fdf1ace7f 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 533bc95332a..7e4422b4e9e 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index f77971b0832..b1bb127ed6d 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 1b8e5730919cb8b95ede2dddc81216ccc96a67b1 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 00:16:14 -0700 Subject: [PATCH 051/103] Bumping gaia.json for 4 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/25f9411c7656 Author: viorelaioia Desc: Merge pull request #20105 from dchunwong/fixcamera Bug 1021034 - [flame] Investigate failure in test_camera_flash_modes.py ======== https://hg.mozilla.org/integration/gaia-central/rev/61ed086c8f99 Author: Dylan Chun Wong Desc: Bug 1021034 - [flame] Investigate failure in test_camera_flash_modes.py ======== https://hg.mozilla.org/integration/gaia-central/rev/50f584cb3165 Author: viorelaioia Desc: Merge pull request #20099 from dchunwong/fixgallery Bug 1021027 - [Flame] Investigate failure in gallery tests ======== https://hg.mozilla.org/integration/gaia-central/rev/bf0a7c48effa Author: Dylan Chun Wong Desc: Bug 1021027 - [Flame] Investigate failure in gallery tests --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index f52bd3b3b9f..790dd9c2226 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "0940a779700223f455cc9d5362eab09d96e8d442", + "revision": "25f9411c7656404c9956a54d6b87697ce3978259", "repo_path": "/integration/gaia-central" } From ef2c66010145d24484b90b095c515318191a6aaf Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 00:21:14 -0700 Subject: [PATCH 052/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 72d01b6425c..1d421a32b92 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index e8fd553b02e..622466cfb56 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 465ebe14917..d661340d34e 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 72d01b6425c..1d421a32b92 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 65629f865f4..a9d9741bf5e 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 239e500cd53..bb0feb8f532 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 25fdf1ace7f..96765abb812 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 7e4422b4e9e..adab731ba2a 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index b1bb127ed6d..11d7dfb0374 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From f4f7ac901e3a775146f6e3d1de7375df58183061 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 00:41:09 -0700 Subject: [PATCH 053/103] Bumping gaia.json for 4 gaia revision(s) a=gaia-bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ======== https://hg.mozilla.org/integration/gaia-central/rev/eea6a5ec9a70 Author: Douglas Sherk Desc: Merge pull request #19984 from DouglasSherk/1020140-phone-input Bug 1020140 - [Visual Refresh][Dialer] Make phone number input field unselectable. r=etienne ======== https://hg.mozilla.org/integration/gaia-central/rev/d2532b563a8f Author: DouglasSherk Desc: Bug 1020140 - [Visual Refresh][Dialer] Make phone number input field unselectable. r=etienne ======== https://hg.mozilla.org/integration/gaia-central/rev/1b11ed7be3e8 Author: Staś Małolepszy Desc: Merge pull request #18641 from stasm/1000852-video-mozL10n.once Bug 1000852 - Clean up bootstrap mozL10n API use in Video. r=djf ======== https://hg.mozilla.org/integration/gaia-central/rev/138e9e076f56 Author: Staś Małolepszy Desc: Bug 1000852 - Clean up bootstrap mozL10n API use in Video --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 790dd9c2226..0741c9f9c2e 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "25f9411c7656404c9956a54d6b87697ce3978259", + "revision": "eea6a5ec9a7067f1a317f5c241aedfb90b447a9f", "repo_path": "/integration/gaia-central" } From 6789eb8eb3476097e83ce186019710efc91f9ba2 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 00:46:41 -0700 Subject: [PATCH 054/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 1d421a32b92..032a08dee9a 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 622466cfb56..e42edb0bd88 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index d661340d34e..21c0fab046f 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 1d421a32b92..032a08dee9a 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index a9d9741bf5e..2a9c2b5125f 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index bb0feb8f532..bec5912311e 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 96765abb812..e7ac299d585 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index adab731ba2a..0f1c50c2c51 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 11d7dfb0374..326dd8ac618 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From c36acface3fdc17a88d438b0ee0e14b1c8a6299d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 00:56:07 -0700 Subject: [PATCH 055/103] Bumping gaia.json for 4 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/d9eb271e0b0e Author: Min-Zhong "John" Lu Desc: Merge pull request #20115 from mnjul/bug_1021479_lockscreen_visual_arrow_size Bug 1021479 - [VsD Refresh] Lockscreen Visual Refresh: Slider arrow size; r=gweng Merged even though Travis didn't pass; the failing Marionette tests were expected to fail, see https://groups.google.com/forum/#!topic/mozilla.dev.gaia/JQeF6PrVlrw ======== https://hg.mozilla.org/integration/gaia-central/rev/f19a639e28f3 Author: John Lu [:mnjul] Desc: Bug 1021479 - [VsD Refresh] Lockscreen Visual Refresh: Slider arrow size ======== https://hg.mozilla.org/integration/gaia-central/rev/a282c5349b37 Author: Alive.Kuo Desc: Merge pull request #19973 from alivedise/bugzilla/1016334_2.0/homescreen-activity-window-home-event Bug 1016334 - Do not change url of homescreen if there is front window, r=timdream ======== https://hg.mozilla.org/integration/gaia-central/rev/1d49dea83d04 Author: Alive Kuo Desc: Bug 1016334 - Do not change url of homescreen if there is front window --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 0741c9f9c2e..ff05bec4760 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "eea6a5ec9a7067f1a317f5c241aedfb90b447a9f", + "revision": "d9eb271e0b0e7804e1580498f1ceeaeef69c29c9", "repo_path": "/integration/gaia-central" } From 740eb01fa84081c9ddf1545dc0b1fd7e67200518 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 01:01:37 -0700 Subject: [PATCH 056/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 032a08dee9a..df8fec497ed 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index e42edb0bd88..2f9f787efb9 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 21c0fab046f..a495fd4c1a8 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 032a08dee9a..df8fec497ed 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 2a9c2b5125f..d45a1bc6cf8 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index bec5912311e..3775f92946b 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index e7ac299d585..136014cbbe9 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 0f1c50c2c51..3477b81bb85 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 326dd8ac618..d5f18c66399 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 04ed76f2eeb5f2bbed87c40d9858bc325c569168 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 01:18:18 -0700 Subject: [PATCH 057/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index df8fec497ed..4159bc99fb0 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -23,7 +23,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index df8fec497ed..4159bc99fb0 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -23,7 +23,7 @@ - + From 3850cd5dbdf99a3ac46c51f6b4fa36cc866466a9 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 01:21:08 -0700 Subject: [PATCH 058/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/b33df7202f63 Author: lissyx Desc: Merge pull request #19940 from lissyx/bug959195 Bug 959195 - Show user prompt on low battery before applying update r=etienne_s ======== https://hg.mozilla.org/integration/gaia-central/rev/1a599a3dbaee Author: Alexandre Lissy Desc: Bug 959195 - Show user prompt on low battery before applying update --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index ff05bec4760..a365decdd2a 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "d9eb271e0b0e7804e1580498f1ceeaeef69c29c9", + "revision": "b33df7202f63c27346d09a854ee7faec8647d464", "repo_path": "/integration/gaia-central" } From 8039282729e4c9fa1938a804fdcb2f8a85ffba1e Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 01:26:31 -0700 Subject: [PATCH 059/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 4 ++-- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 4 ++-- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 4159bc99fb0..8811deb0021 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,11 +19,11 @@ - + - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 2f9f787efb9..f59d24fe40e 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index a495fd4c1a8..0673864aec4 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 4159bc99fb0..8811deb0021 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,11 +19,11 @@ - + - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index d45a1bc6cf8..ff068b53f07 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 3775f92946b..cd6c56bb2b4 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 136014cbbe9..cee6b8264b5 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 3477b81bb85..e6b3eed7480 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index d5f18c66399..10310f9689a 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 0cda0de42648a634fc8c9a73eeb89af71b132e14 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 02:16:28 -0700 Subject: [PATCH 060/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/c9704b92fb86 Author: steveck-chung Desc: Merge pull request #20073 from pacorampas/placeholder-message-1016541 Bug 1016541 - Thread and Composer. The input placeholder text (Message) should be italic. r=schung ======== https://hg.mozilla.org/integration/gaia-central/rev/f0920b816224 Author: Paco Rampas Desc: Bug 1016541 - Thread and Composer. The input placeholder text (Message) should be italic --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index a365decdd2a..16ed67e485e 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "b33df7202f63c27346d09a854ee7faec8647d464", + "revision": "c9704b92fb86e8a8f654e1e7f93cccbc8aeb0f42", "repo_path": "/integration/gaia-central" } From a1dee1381b6fd7ec6550ca9d2c1fcfc5db1b401d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 02:21:24 -0700 Subject: [PATCH 061/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 8811deb0021..8328ceb39a9 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index f59d24fe40e..4918ce2da2a 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 0673864aec4..80725e51d6f 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 8811deb0021..8328ceb39a9 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index ff068b53f07..395c9a07f75 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index cd6c56bb2b4..d76950f2e70 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index cee6b8264b5..8e203146875 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index e6b3eed7480..d89bfb6ff67 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 10310f9689a..e11e35dcdaf 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From ad7527561ddff911f3b0548d485f79560e2c5d25 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 02:46:18 -0700 Subject: [PATCH 062/103] Bumping gaia.json for 3 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/70630498ae2c Author: Timothy Guan-tin Chien Desc: Merge pull request #19849 from timdream/input-manage-transition Bug 1017327 - Isolate keyboard transition management to another module, r=rudyl ======== https://hg.mozilla.org/integration/gaia-central/rev/6147617245ac Author: Timothy Guan-tin Chien Desc: Bug 1017327 - (Part II) Let KeyboardManager use it ======== https://hg.mozilla.org/integration/gaia-central/rev/be5096ead476 Author: Timothy Guan-tin Chien Desc: Bug 1017327 - (Part I) Implement InputAppsTransitionManager --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 16ed67e485e..e2cfc74e47e 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "c9704b92fb86e8a8f654e1e7f93cccbc8aeb0f42", + "revision": "70630498ae2c7de7f4c31b6016b7d52e4018052c", "repo_path": "/integration/gaia-central" } From 18cb846a0a803e2964abfdcfff45d498ae346ff5 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 02:51:19 -0700 Subject: [PATCH 063/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 8328ceb39a9..cf9fff97d06 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 4918ce2da2a..b785d7c37b7 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 80725e51d6f..f2744b9bca4 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 8328ceb39a9..cf9fff97d06 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 395c9a07f75..5743928bf9f 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index d76950f2e70..e91dd9dcf90 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 8e203146875..33fdcd2d3b4 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index d89bfb6ff67..742a4969f15 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index e11e35dcdaf..b2489651bba 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From a69459ff3df28de16ca2cefd11d3782f96ed0e03 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 03:13:05 -0700 Subject: [PATCH 064/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-jb/sources.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index b785d7c37b7..54038ed0fb7 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -128,9 +128,9 @@ - + - + From 900f727b3637dd8378da4dd93aa9a75f31860433 Mon Sep 17 00:00:00 2001 From: Eric Chou Date: Fri, 6 Jun 2014 18:14:22 +0800 Subject: [PATCH 065/103] Bug 1002391 - Get the latest SDP records of the target device, r=shuang Use BlueZ API 'CreateDevice' to update the SDP records of those unknown devices. On the other hand, still use 'DiscoverServices' to update SDP records of paired devices. --- dom/bluetooth/bluez/BluetoothDBusService.cpp | 87 +++++++++++++++----- 1 file changed, 67 insertions(+), 20 deletions(-) diff --git a/dom/bluetooth/bluez/BluetoothDBusService.cpp b/dom/bluetooth/bluez/BluetoothDBusService.cpp index aa65003aad7..167eae276cb 100644 --- a/dom/bluetooth/bluez/BluetoothDBusService.cpp +++ b/dom/bluetooth/bluez/BluetoothDBusService.cpp @@ -3436,14 +3436,13 @@ BluetoothDBusService::ToggleCalls(BluetoothReplyRunnable* aRunnable) class OnUpdateSdpRecordsRunnable : public nsRunnable { public: - OnUpdateSdpRecordsRunnable(const nsAString& aObjectPath, + OnUpdateSdpRecordsRunnable(const nsAString& aDeviceAddress, BluetoothProfileManagerBase* aManager) - : mManager(aManager) + : mDeviceAddress(aDeviceAddress) + , mManager(aManager) { - MOZ_ASSERT(!aObjectPath.IsEmpty()); + MOZ_ASSERT(!aDeviceAddress.IsEmpty()); MOZ_ASSERT(aManager); - - mDeviceAddress = GetAddressFromObjectPath(aObjectPath); } nsresult @@ -3456,6 +3455,12 @@ public: return NS_OK; } + void + GetDeviceAddress(nsAString& aRetDeviceAddress) + { + aRetDeviceAddress = mDeviceAddress; + } + private: nsString mDeviceAddress; BluetoothProfileManagerBase* mManager; @@ -3641,31 +3646,74 @@ public: MOZ_ASSERT(sDBusConnection); MOZ_ASSERT(!sAdapterPath.IsEmpty()); - const nsString objectPath = - GetObjectPathFromAddress(sAdapterPath, mDeviceAddress); + // We first guess that the device doesn't exist at all. So we use BlueZ + // API "CreateDevice" to create an object path for the BluetoothDevice + // object. "CreateDevice" will connect to the remote device and retrieve + // SDP records of the target. + NS_ConvertUTF16toUTF8 address(mDeviceAddress); + const char* cAddress = address.get(); // I choose to use raw pointer here because this is going to be passed as an // argument into SendWithReply() at once. OnUpdateSdpRecordsRunnable* callbackRunnable = - new OnUpdateSdpRecordsRunnable(objectPath, mBluetoothProfileManager); + new OnUpdateSdpRecordsRunnable(mDeviceAddress, mBluetoothProfileManager); - sDBusConnection->SendWithReply(DiscoverServicesCallback, - (void*)callbackRunnable, -1, - BLUEZ_DBUS_BASE_IFC, - NS_ConvertUTF16toUTF8(objectPath).get(), - DBUS_DEVICE_IFACE, - "DiscoverServices", - DBUS_TYPE_STRING, &EmptyCString(), - DBUS_TYPE_INVALID); + sDBusConnection->SendWithReply( + CreateDeviceCallback, callbackRunnable, -1, + BLUEZ_DBUS_BASE_IFC, + NS_ConvertUTF16toUTF8(sAdapterPath).get(), + DBUS_ADAPTER_IFACE, + "CreateDevice", + DBUS_TYPE_STRING, &cAddress, + DBUS_TYPE_INVALID); } protected: + static void CreateDeviceCallback(DBusMessage* aMsg, void* aData) + { + MOZ_ASSERT(!NS_IsMainThread()); // I/O thread + + nsAutoString errorString; + OnUpdateSdpRecordsRunnable* r = + static_cast(aData); + + if (IsDBusMessageError(aMsg, nullptr, errorString)) { + // If the device already exists it comes here. If we want to refresh its + // SDP records then we have to do "DiscoverServices" + BT_LOGR("%s", NS_ConvertUTF16toUTF8(errorString).get()); + + nsString deviceAddress; + r->GetDeviceAddress(deviceAddress); + + const nsString objectPath = + GetObjectPathFromAddress(sAdapterPath, deviceAddress); + + sDBusConnection->SendWithReply(DiscoverServicesCallback, + aData, -1, + BLUEZ_DBUS_BASE_IFC, + NS_ConvertUTF16toUTF8(objectPath).get(), + DBUS_DEVICE_IFACE, + "DiscoverServices", + DBUS_TYPE_STRING, &EmptyCString(), + DBUS_TYPE_INVALID); + return; + } + + NS_DispatchToMainThread(r); + } + static void DiscoverServicesCallback(DBusMessage* aMsg, void* aData) { MOZ_ASSERT(!NS_IsMainThread()); // I/O thread - nsRefPtr r( - static_cast(aData)); + nsAutoString errorStr; + + if (IsDBusMessageError(aMsg, nullptr, errorStr)) { + BT_LOGR("%s", NS_ConvertUTF16toUTF8(errorStr).get()); + } + + OnUpdateSdpRecordsRunnable* r = + static_cast(aData); NS_DispatchToMainThread(r); } @@ -3680,8 +3728,7 @@ BluetoothDBusService::UpdateSdpRecords(const nsAString& aDeviceAddress, { MOZ_ASSERT(NS_IsMainThread()); - Task* task = new UpdateSdpRecordsTask(aDeviceAddress, aManager); - DispatchToDBusThread(task); + DispatchToDBusThread(new UpdateSdpRecordsTask(aDeviceAddress, aManager)); return true; } From 6e086b644f949eecf2d2f68b538245159ef7af16 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 03:28:07 -0700 Subject: [PATCH 066/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-jb/sources.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 54038ed0fb7..235cfa46de9 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -126,7 +126,7 @@ - + From 811245589195eeadb35e7620768fe58db034c424 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 05:01:10 -0700 Subject: [PATCH 067/103] Bumping gaia.json for 4 gaia revision(s) a=gaia-bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ======== https://hg.mozilla.org/integration/gaia-central/rev/a54c3cd4cf91 Author: Anthony Ricaud Desc: Merge pull request #19985 from Rik/flash-cancel-1019076 Bug 1019076 - Flash of Cancel button when opening Dialer r=drs ======== https://hg.mozilla.org/integration/gaia-central/rev/7e4aa353b348 Author: Anthony Ricaud Desc: Bug 1019076 - Flash of Cancel button when opening Dialer ======== https://hg.mozilla.org/integration/gaia-central/rev/e6b8d63eeb7b Author: Staś Małolepszy Desc: Merge pull request #20001 from stasm/1016026-qps-plocm-settings Bug 1016026 - Add qps-plocm to the list of RTL locales in the Language panel. r=arthurcc ======== https://hg.mozilla.org/integration/gaia-central/rev/058d601c76b0 Author: Staś Małolepszy Desc: Bug 1016026 - Add qps-plocm to the list of RTL locales in the Language panel. r=arthurcc --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index e2cfc74e47e..118daa7844d 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "70630498ae2c7de7f4c31b6016b7d52e4018052c", + "revision": "a54c3cd4cf9154e20175fa7e8ac05f8d569993d5", "repo_path": "/integration/gaia-central" } From 5f33cf8a119b81d6ae24ed61245734e069d3f136 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 05:06:36 -0700 Subject: [PATCH 068/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index cf9fff97d06..1579965fbf4 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 235cfa46de9..478a239e68d 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index f2744b9bca4..1fd6db0cfd9 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index cf9fff97d06..1579965fbf4 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 5743928bf9f..c641b8f1648 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index e91dd9dcf90..4668f5ba9b7 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 33fdcd2d3b4..606ccca6eb0 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 742a4969f15..dee2069ccc0 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index b2489651bba..ef21be95811 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 236e8091e50e820bbd36e49a70d97775dc87c3d9 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 05:41:12 -0700 Subject: [PATCH 069/103] Bumping gaia.json for 6 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/d7535846f19d Author: gitmai Desc: Merge pull request #20100 from gitmai/bug-1007590-CC-remove-balance-sms Bug 1007590 - [Cost Control] Make Cost Control to remove balance and top... r=salva ======== https://hg.mozilla.org/integration/gaia-central/rev/44c770cb1ed1 Author: mai Desc: Bug 1007590 - [Cost Control] Make Cost Control to remove balance and top-up SMS responses ======== https://hg.mozilla.org/integration/gaia-central/rev/0cd3c4c23e35 Author: Arnau Desc: Merge pull request #19949 from rnowm/power-modal-object Bug 973827 - Power button modal should be an object menu instead of a custom implementation r=alive ======== https://hg.mozilla.org/integration/gaia-central/rev/81b25082bc79 Author: rnowm Desc: Bug 973827 - Power button modal should be an object menu instead of a custom implementation ======== https://hg.mozilla.org/integration/gaia-central/rev/7de232eb5e82 Author: Albert Desc: Merge pull request #19996 from acperez/bug-1020167 Bug 1020167: Add search engine configuration based on MCC/MNC ======== https://hg.mozilla.org/integration/gaia-central/rev/9848cad039b1 Author: Albert Desc: Bug 1020167: Add search engine configuration based on MCC/MNC --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 118daa7844d..6feac5dc84a 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "a54c3cd4cf9154e20175fa7e8ac05f8d569993d5", + "revision": "d7535846f19d63bd1fbee8cf348b80a0823e5fd1", "repo_path": "/integration/gaia-central" } From 27412e6b9ef944481a868589e2bab10393d50a58 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 05:46:22 -0700 Subject: [PATCH 070/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 1579965fbf4..40dab20ecc7 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 478a239e68d..4e64a69d063 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 1fd6db0cfd9..d0722e79188 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 1579965fbf4..40dab20ecc7 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index c641b8f1648..46600642f0e 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 4668f5ba9b7..dc89b5d1e00 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 606ccca6eb0..84b2e291f23 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index dee2069ccc0..56a4d96690a 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index ef21be95811..00ef7861a7f 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 0d9975ba36d8f11d90d5cf640c855661c93a74ab Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 06:11:16 -0700 Subject: [PATCH 071/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/0ca66c85bb79 Author: BavarianTomcat Desc: Revert "Bug 1017327 - (Part I) Implement InputAppsTransitionManager" for breaking gaia ui tests This reverts commit 3ebe122af79bc73da07b710af0d1fcf3d79601e7. ======== https://hg.mozilla.org/integration/gaia-central/rev/4960c4fc06e2 Author: BavarianTomcat Desc: Revert "Bug 1017327 - (Part II) Let KeyboardManager use it" for breaking gaia ui tests This reverts commit 4ebaf831eb6ac05b34447e7d4c6e97adc2be1873. --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 6feac5dc84a..1ba9d65bcf7 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "d7535846f19d63bd1fbee8cf348b80a0823e5fd1", + "revision": "0ca66c85bb79a9d6def44b839c307f8615fa71c6", "repo_path": "/integration/gaia-central" } From 5126531b3fbb69bec9804f15d0d28b765d691bc7 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 06:16:23 -0700 Subject: [PATCH 072/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 40dab20ecc7..3e7289fe6a6 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 4e64a69d063..4ef61e046b0 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index d0722e79188..5905d2ed44a 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 40dab20ecc7..3e7289fe6a6 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 46600642f0e..e8a5282a19b 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index dc89b5d1e00..c2b7c9667ae 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 84b2e291f23..c20e0fae55f 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 56a4d96690a..c19b0e6ebe0 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 00ef7861a7f..2a68cae4b7a 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 1f6d60e258df3384fd4fd221cc2bccdf79d0e70f Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 06:51:06 -0700 Subject: [PATCH 073/103] Bumping gaia.json for 3 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/de2c586fd09a Author: vingtetun <21@vingtetun.org> Desc: Merge pull request #20133 from vingtetun/multiple.attention.screen Bug 988212 - Support multiple attention screens. r=etienne ======== https://hg.mozilla.org/integration/gaia-central/rev/77828358820c Author: Vivien Nicolas Desc: Bug 988212 - Support multiple attention screens. r=etienne ======== https://hg.mozilla.org/integration/gaia-central/rev/62f7b1d9b335 Author: Miller Medeiros Desc: Revert "Merge pull request #19943 from millermedeiros/1019617-week-view-am-pm" This reverts commit 25ce8f290d921884e15f7559c0597f6b7efad419, reversing changes made to d04b7196fb59834704ef38d400c813b7ea68d755. --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 1ba9d65bcf7..b85c2887008 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "0ca66c85bb79a9d6def44b839c307f8615fa71c6", + "revision": "de2c586fd09a07a9d5f60527d2b54fea4432d22b", "repo_path": "/integration/gaia-central" } From 5e4ffade626f1d3c7cf0b38a9759082c3a84fb3d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 06:56:31 -0700 Subject: [PATCH 074/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 3e7289fe6a6..9a5847ef74d 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 4ef61e046b0..03df2d58ef8 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 5905d2ed44a..234c2f5cdb2 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 3e7289fe6a6..9a5847ef74d 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index e8a5282a19b..a132e526814 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index c2b7c9667ae..e41c181e659 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index c20e0fae55f..2e0d557d086 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index c19b0e6ebe0..79dc4977be8 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 2a68cae4b7a..f8b5fe69755 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From fd418c613e5e77be231831601b0097b84d3ff2cf Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 07:21:07 -0700 Subject: [PATCH 075/103] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/c80f20c5b211 Author: Ryan VanderMeulen Desc: Merge pull request #20075 from guilherme-pg/bug1002581-fmd-settings-enable-geolocation Bug 1002581 - Include new strings for enabling geolocation for Find My D... ======== https://hg.mozilla.org/integration/gaia-central/rev/f4e00e07fa61 Author: Guilherme Goncalves Desc: Bug 1002581 - Include new strings for enabling geolocation for Find My Device. --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index b85c2887008..a2eae2e295a 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "de2c586fd09a07a9d5f60527d2b54fea4432d22b", + "revision": "c80f20c5b2118dc03dc0584ca8cbafc0d23d481f", "repo_path": "/integration/gaia-central" } From 7f809c373b924ca5866c2b6574c9d8fab67f291b Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 07:26:31 -0700 Subject: [PATCH 076/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 9a5847ef74d..5d64aad6504 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 03df2d58ef8..df562cdba33 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 234c2f5cdb2..17d353a25b8 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 9a5847ef74d..5d64aad6504 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index a132e526814..d5df8d58cbc 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index e41c181e659..e7820ed9390 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 2e0d557d086..47249153d3e 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 79dc4977be8..8fd3d812721 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index f8b5fe69755..c1d5b380c70 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 9c6533f7cb7823ce79ed3be6f7735da77f48de0b Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 07:30:52 -0700 Subject: [PATCH 077/103] Bumping gaia.json for 6 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/cd7cf4b5de65 Author: Ryan VanderMeulen Desc: Merge pull request #20095 from kamituel/Bug_1019169_byte_str_conv_fix Bug 1019169: Fixed UTF <-> Uint8Array conversions ======== https://hg.mozilla.org/integration/gaia-central/rev/7bfd5d6c6c8e Author: Kamil Leszczuk Desc: Bug 1019169: Fixed UTF <-> Uint8Array conversions ======== https://hg.mozilla.org/integration/gaia-central/rev/640987fa0fde Author: Ryan VanderMeulen Desc: Merge pull request #19951 from guilherme-pg/bug1017203-position-throttle Bug 1017203 - Throttle rate of position updates for Find My Device. ======== https://hg.mozilla.org/integration/gaia-central/rev/b76042eabadb Author: Guilherme Goncalves Desc: Bug 1017203 - Throttle rate of position updates for Find My Device. ======== https://hg.mozilla.org/integration/gaia-central/rev/afbeb40756b2 Author: Ryan VanderMeulen Desc: Merge pull request #19780 from guilherme-pg/bug1014816-fmd-fxa-logout Bug 1014816 - Keep Find My Device working while logged out of Firefox Accounts. ======== https://hg.mozilla.org/integration/gaia-central/rev/b0ed92f264b6 Author: Guilherme Goncalves Desc: Bug 1014816 - Keep Find My Device working while logged out of FxA. --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index a2eae2e295a..0efb80cafcd 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "c80f20c5b2118dc03dc0584ca8cbafc0d23d481f", + "revision": "cd7cf4b5de6581f6381b14401adf92994221426a", "repo_path": "/integration/gaia-central" } From 884cf73fd4de5e4903727b8de902b419fe8a24c7 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Fri, 6 Jun 2014 07:36:20 -0700 Subject: [PATCH 078/103] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 5d64aad6504..79c5ae47477 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index df562cdba33..3234be53a4d 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 17d353a25b8..748043a4711 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 5d64aad6504..79c5ae47477 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index d5df8d58cbc..d90d6af5f68 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index e7820ed9390..7c8b1c8b6aa 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 47249153d3e..e95a529069c 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 8fd3d812721..03ef605dcfe 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index c1d5b380c70..8d31342ee74 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From eb5c64f849d687254507be9b695e0d2345b88bcf Mon Sep 17 00:00:00 2001 From: John Shih Date: Fri, 6 Jun 2014 17:12:54 +0800 Subject: [PATCH 079/103] Bug 1020758 - Disable Network Information API on Desktop. r=sicking --- modules/libpref/src/init/all.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index 6ef2c63f532..9889fbd7283 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -3942,8 +3942,12 @@ pref("profiler.enabled", false); pref("profiler.interval", 10); pref("profiler.entries", 100000); +#if defined(MOZ_WIDGET_GONK) || defined(MOZ_WIDGET_ANDROID) // Network Information API pref("dom.netinfo.enabled", true); +#else +pref("dom.netinfo.enabled", false); +#endif #ifdef XP_WIN // On 32-bit Windows, fire a low-memory notification if we have less than this From 70877980299e4f638ccfe2d1c6b61b58b2986a86 Mon Sep 17 00:00:00 2001 From: "Bernardo P. Rittmeyer" Date: Fri, 6 Jun 2014 07:47:00 -0400 Subject: [PATCH 080/103] Bug 1010402- Fix full block width of some hit areas in sync dialogs. r=mconley --- browser/base/content/sync/customize.xul | 41 +++++++++++++------------ browser/components/preferences/sync.xul | 25 +++++++-------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/browser/base/content/sync/customize.xul b/browser/base/content/sync/customize.xul index 87e66af085e..e1fd95107b1 100644 --- a/browser/base/content/sync/customize.xul +++ b/browser/base/content/sync/customize.xul @@ -38,25 +38,28 @@ #endif /> - - - - - - + + + + + + + + +