Backed out 5 changesets (bug 1287091) for build bustage after assertions in SharedIC.h CLOSED TREE

Backed out changeset c57fd3af416e (bug 1287091)
Backed out changeset edad0174cb12 (bug 1287091)
Backed out changeset 7ed07b35bad6 (bug 1287091)
Backed out changeset 939d5064ab91 (bug 1287091)
Backed out changeset acbca9af0a3b (bug 1287091)
This commit is contained in:
Wes Kocher 2016-07-22 11:14:13 -07:00
Родитель c3a5940060
Коммит 9c46018401
8 изменённых файлов: 36 добавлений и 295 удалений

Просмотреть файл

@ -8,7 +8,6 @@ var Cu = Components.utils;
var Cc = Components.classes;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/ContextualIdentityService.jsm");
Cu.import("resource://gre/modules/NotificationDB.jsm");
Cu.import("resource:///modules/RecentWindow.jsm");
@ -57,6 +56,8 @@ XPCOMUtils.defineLazyServiceGetter(this, "WindowsUIUtils",
"@mozilla.org/windows-ui-utils;1", "nsIWindowsUIUtils");
XPCOMUtils.defineLazyModuleGetter(this, "LightweightThemeManager",
"resource://gre/modules/LightweightThemeManager.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService",
"resource://gre/modules/ContextualIdentityService.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "gAboutNewTabService",
"@mozilla.org/browser/aboutnewtab-service;1",
"nsIAboutNewTabService");

Просмотреть файл

@ -4,7 +4,6 @@
# 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/.
Components.utils.import("resource://gre/modules/ContextualIdentityService.jsm");
Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
Components.utils.import("resource://gre/modules/InlineSpellChecker.jsm");
Components.utils.import("resource://gre/modules/LoginManagerContextMenu.jsm");
@ -12,6 +11,8 @@ Components.utils.import("resource://gre/modules/BrowserUtils.jsm");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService",
"resource://gre/modules/ContextualIdentityService.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "LoginHelper",
"resource://gre/modules/LoginHelper.jsm");

Просмотреть файл

@ -5,7 +5,6 @@
// Services = object with smart getters for common XPCOM services
Components.utils.import("resource://gre/modules/AppConstants.jsm");
Components.utils.import("resource://gre/modules/ContextualIdentityService.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
@ -14,6 +13,9 @@ Components.utils.import("resource:///modules/RecentWindow.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ShellService",
"resource:///modules/ShellService.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService",
"resource://gre/modules/ContextualIdentityService.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
"@mozilla.org/browser/aboutnewtab-service;1",
"nsIAboutNewTabService");
@ -445,12 +447,8 @@ function createUserContextMenu(event, addCommandAttribute = true, excludeUserCon
let menuitem = document.createElement("menuitem");
menuitem.setAttribute("usercontextid", identity.userContextId);
menuitem.setAttribute("label", ContextualIdentityService.getUserContextLabel(identity.userContextId));
if (identity.accessKey) {
menuitem.setAttribute("accesskey", bundle.getString(identity.accessKey));
}
menuitem.setAttribute("label", bundle.getString(identity.label));
menuitem.setAttribute("accesskey", bundle.getString(identity.accessKey));
menuitem.classList.add("menuitem-iconic");
if (addCommandAttribute) {

Просмотреть файл

@ -11,7 +11,6 @@ Cu.import("resource:///modules/CustomizableUI.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/AppConstants.jsm");
Cu.import("resource://gre/modules/ContextualIdentityService.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "BrowserUITelemetry",
"resource:///modules/BrowserUITelemetry.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
@ -28,6 +27,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
"resource://gre/modules/PrivateBrowsingUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "SyncedTabs",
"resource://services-sync/SyncedTabs.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService",
"resource://gre/modules/ContextualIdentityService.jsm");
XPCOMUtils.defineLazyGetter(this, "CharsetBundle", function() {
const kCharsetBundle = "chrome://global/locale/charsetMenu.properties";
@ -1134,7 +1135,7 @@ const CustomizableWidgets = [
ContextualIdentityService.getIdentities().forEach(identity => {
let bundle = doc.getElementById("bundle_browser");
let label = ContextualIdentityService.getUserContextLabel(identity.userContextId);
let label = bundle.getString(identity.label);
let item = doc.createElementNS(kNSXUL, "toolbarbutton");
item.setAttribute("label", label);

Просмотреть файл

@ -7,246 +7,71 @@ this.EXPORTED_SYMBOLS = ["ContextualIdentityService"];
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Services.jsm")
const DEFAULT_TAB_COLOR = "#909090";
const SAVE_DELAY_MS = 1500;
const DEFAULT_TAB_COLOR = "#909090"
XPCOMUtils.defineLazyGetter(this, "gBrowserBundle", function() {
return Services.strings.createBundle("chrome://browser/locale/browser.properties");
});
XPCOMUtils.defineLazyGetter(this, "gTextDecoder", function () {
return new TextDecoder();
});
XPCOMUtils.defineLazyGetter(this, "gTextEncoder", function () {
return new TextEncoder();
});
XPCOMUtils.defineLazyModuleGetter(this, "AsyncShutdown",
"resource://gre/modules/AsyncShutdown.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "OS",
"resource://gre/modules/osfile.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "DeferredTask",
"resource://gre/modules/DeferredTask.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
"resource://gre/modules/FileUtils.jsm");
function _ContextualIdentityService(path) {
this.init(path);
}
_ContextualIdentityService.prototype = {
_defaultIdentities: [
this.ContextualIdentityService = {
_identities: [
{ userContextId: 1,
public: true,
icon: "chrome://browser/skin/usercontext/personal.svg",
color: "#00a7e0",
l10nID: "userContextPersonal.label",
label: "userContextPersonal.label",
accessKey: "userContextPersonal.accesskey",
alreadyOpened: false,
telemetryId: 1,
},
{ userContextId: 2,
public: true,
icon: "chrome://browser/skin/usercontext/work.svg",
color: "#f89c24",
l10nID: "userContextWork.label",
label: "userContextWork.label",
accessKey: "userContextWork.accesskey",
alreadyOpened: false,
telemetryId: 2,
},
{ userContextId: 3,
public: true,
icon: "chrome://browser/skin/usercontext/banking.svg",
color: "#7dc14c",
l10nID: "userContextBanking.label",
label: "userContextBanking.label",
accessKey: "userContextBanking.accesskey",
alreadyOpened: false,
telemetryId: 3,
},
{ userContextId: 4,
public: true,
icon: "chrome://browser/skin/usercontext/shopping.svg",
color: "#ee5195",
l10nID: "userContextShopping.label",
label: "userContextShopping.label",
accessKey: "userContextShopping.accesskey",
alreadyOpened: false,
telemetryId: 4,
},
{ userContextId: 5,
{ userContextId: Math.pow(2, 31) - 1,
public: false,
icon: "",
color: "",
name: "userContextIdInternal.thumbnail",
accessKey: "" },
label: "userContextIdInternal.thumbnail",
accessKey: "",
alreadyOpened: false },
],
_identities: null,
_openedIdentities: new Set(),
_lastUserContextId: 0,
_path: null,
_dataReady: false,
_saver: null,
init(path) {
this._path = path;
this._saver = new DeferredTask(() => this.save(), SAVE_DELAY_MS);
AsyncShutdown.profileBeforeChange.addBlocker("ContextualIdentityService: writing data",
() => this._saver.finalize());
this.load();
},
load() {
OS.File.read(this._path).then(bytes => {
// If synchronous loading happened in the meantime, exit now.
if (this._dataReady) {
return;
}
try {
let data = JSON.parse(gTextDecoder.decode(bytes));
if (data.version != 1) {
dump("ERROR - ContextualIdentityService - Unknown version found in " + this._path + "\n");
this.loadError(null);
return;
}
this._identities = data.identities;
this._lastUserContextId = data.lastUserContextId;
this._dataReady = true;
} catch(error) {
this.loadError(error);
}
}, (error) => {
this.loadError(error);
});
},
loadError(error) {
if (error != null &&
!(error instanceof OS.File.Error && error.becauseNoSuchFile) &&
!(error instanceof Components.Exception &&
error.result == Cr.NS_ERROR_FILE_NOT_FOUND)) {
// Let's report the error.
Cu.reportError(error);
}
// If synchronous loading happened in the meantime, exit now.
if (this._dataReady) {
return;
}
this._identities = this._defaultIdentities;
this._lastUserContextId = this._defaultIdentities.length;
this._dataReady = true;
this.saveSoon();
},
saveSoon() {
this._saver.arm();
},
save() {
let object = {
version: 1,
lastUserContextId: this._lastUserContextId,
identities: this._identities
};
let bytes = gTextEncoder.encode(JSON.stringify(object));
return OS.File.writeAtomic(this._path, bytes,
{ tmpPath: this._path + ".tmp" });
},
create(name, icon, color) {
let identity = {
userContextId: ++this._lastUserContextId,
public: true,
icon,
color,
name
};
this._identities.push(identity);
this.saveSoon();
return Cu.cloneInto(identity, {});
},
update(userContextId, name, icon, color) {
let identity = this._identities.find(identity => identity.userContextId == userContextId &&
identity.public);
if (identity) {
identity.name = name;
identity.color = color;
identity.icon = icon;
delete identity.l10nID;
delete identity.accessKey;
this.saveSoon();
}
return !!identity;
},
remove(userContextId) {
let index = this._identities.findIndex(i => i.userContextId == userContextId && i.public);
if (index == -1) {
return false;
}
Services.obs.notifyObservers(null, "clear-origin-data",
JSON.stringify({ userContextId }));
this._identities.splice(index, 1);
this._openedIdentities.delete(userContextId);
this.saveSoon();
return true;
},
ensureDataReady() {
if (this._dataReady) {
return;
}
try {
// This reads the file and automatically detects the UTF-8 encoding.
let inputStream = Cc["@mozilla.org/network/file-input-stream;1"]
.createInstance(Ci.nsIFileInputStream);
inputStream.init(new FileUtils.File(this._path),
FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, 0);
try {
let json = Cc["@mozilla.org/dom/json;1"].createInstance(Ci.nsIJSON);
this._identities = json.decodeFromStream(inputStream,
inputStream.available());
this._dataReady = true;
} finally {
inputStream.close();
}
} catch (error) {
this.loadError(error);
return;
}
},
getIdentities() {
this.ensureDataReady();
return Cu.cloneInto(this._identities.filter(info => info.public), {});
return this._identities.filter(info => info.public);
},
getPrivateIdentity(name) {
this.ensureDataReady();
return Cu.cloneInto(this._identities.find(info => !info.public && info.name == name), {});
getPrivateIdentity(label) {
return this._identities.find(info => !info.public && info.label == label);
},
getIdentityFromId(userContextId) {
this.ensureDataReady();
return Cu.cloneInto(this._identities.find(info => info.userContextId == userContextId &&
info.public), {});
return this._identities.find(info => info.userContextId == userContextId);
},
getUserContextLabel(userContextId) {
@ -254,13 +79,7 @@ _ContextualIdentityService.prototype = {
if (!identity.public) {
return "";
}
// We cannot localize the user-created identity names.
if (identity.name) {
return identity.name;
}
return gBrowserBundle.GetStringFromName(identity.l10nID);
return gBrowserBundle.GetStringFromName(identity.label);
},
setTabStyle(tab) {
@ -290,8 +109,8 @@ _ContextualIdentityService.prototype = {
return;
}
if (this._openedIdentities.has(userContextId)) {
this._openedIdentities.add(userContextId);
if (!identity.alreadyOpened) {
identity.alreadyOpened = true;
Services.telemetry.getHistogramById("UNIQUE_CONTAINERS_OPENED").add(1);
}
@ -302,11 +121,4 @@ _ContextualIdentityService.prototype = {
.add(identity.telemetryId);
}
},
createNewInstanceForTesting(path) {
return new _ContextualIdentityService(path);
},
};
let path = OS.Path.join(OS.Constants.Path.profileDir, "containers.json");
this.ContextualIdentityService = new _ContextualIdentityService(path);
}

Просмотреть файл

@ -7,5 +7,3 @@
EXTRA_JS_MODULES += [
'ContextualIdentityService.jsm',
]
XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']

Просмотреть файл

@ -1,67 +0,0 @@
"use strict";
do_get_profile();
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/ContextualIdentityService.jsm");
const TEST_STORE_FILE_NAME = "test-containers.json";
let cis;
// Basic tests
add_task(function() {
ok(!!ContextualIdentityService, "ContextualIdentityService exists");
cis = ContextualIdentityService.createNewInstanceForTesting(TEST_STORE_FILE_NAME);
ok(!!cis, "We have our instance of ContextualIdentityService");
equal(cis.getIdentities().length, 4, "By default, 4 containers.");
equal(cis.getIdentityFromId(0), null, "No identity with id 0");
ok(!!cis.getIdentityFromId(1), "Identity 1 exists");
ok(!!cis.getIdentityFromId(2), "Identity 2 exists");
ok(!!cis.getIdentityFromId(3), "Identity 3 exists");
ok(!!cis.getIdentityFromId(4), "Identity 4 exists");
});
// Create a new identity
add_task(function() {
equal(cis.getIdentities().length, 4, "By default, 4 containers.");
let identity = cis.create("New Container", "Icon", "Color");
ok(!!identity, "New container created");
equal(identity.name, "New Container", "Name matches");
equal(identity.icon, "Icon", "Icon matches");
equal(identity.color, "Color", "Color matches");
equal(cis.getIdentities().length, 5, "Expected 5 containers.");
ok(!!cis.getIdentityFromId(identity.userContextId), "Identity exists");
equal(cis.getIdentityFromId(identity.userContextId).name, "New Container", "Identity name is OK");
equal(cis.getIdentityFromId(identity.userContextId).icon, "Icon", "Identity icon is OK");
equal(cis.getIdentityFromId(identity.userContextId).color, "Color", "Identity color is OK");
equal(cis.getUserContextLabel(identity.userContextId), "New Container", "Identity label is OK");
// Remove an identity
equal(cis.remove(-1), false, "cis.remove() returns false if identity doesn't exist.");
equal(cis.remove(1), true, "cis.remove() returns true if identity exists.");
equal(cis.getIdentities().length, 4, "Expected 4 containers.");
});
// Update an identity
add_task(function() {
ok(!!cis.getIdentityFromId(2), "Identity 2 exists");
equal(cis.update(-1, "Container", "Icon", "Color"), false, "Update returns false if the identity doesn't exist");
equal(cis.update(2, "Container", "Icon", "Color"), true, "Update returns true if everything is OK");
ok(!!cis.getIdentityFromId(2), "Identity exists");
equal(cis.getIdentityFromId(2).name, "Container", "Identity name is OK");
equal(cis.getIdentityFromId(2).icon, "Icon", "Identity icon is OK");
equal(cis.getIdentityFromId(2).color, "Color", "Identity color is OK");
equal(cis.getUserContextLabel(2), "Container", "Identity label is OK");
});

Просмотреть файл

@ -1,3 +0,0 @@
[DEFAULT]
[test_basic.js]