mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 06:45:42 +00:00
Bug 888479 - Port osfile_shared_allthreads.jsm and dependents to worker module loader. r=froydnj
This commit is contained in:
parent
b07bacbd43
commit
5f4d724ed4
@ -15,7 +15,7 @@ if (typeof Components != "undefined") {
|
||||
// what looks like a nested event loop bug (see bug 794091).
|
||||
#ifdef XP_WIN
|
||||
importScripts(
|
||||
"resource://gre/modules/osfile/osfile_shared_allthreads.jsm",
|
||||
"resource://gre/modules/workers/require.js",
|
||||
"resource://gre/modules/osfile/osfile_win_allthreads.jsm",
|
||||
"resource://gre/modules/osfile/ospath_win_back.jsm",
|
||||
"resource://gre/modules/osfile/osfile_win_back.jsm",
|
||||
@ -24,7 +24,7 @@ if (typeof Components != "undefined") {
|
||||
);
|
||||
#else
|
||||
importScripts(
|
||||
"resource://gre/modules/osfile/osfile_shared_allthreads.jsm",
|
||||
"resource://gre/modules/workers/require.js",
|
||||
"resource://gre/modules/osfile/osfile_unix_allthreads.jsm",
|
||||
"resource://gre/modules/osfile/ospath_unix_back.jsm",
|
||||
"resource://gre/modules/osfile/osfile_unix_back.jsm",
|
||||
|
@ -21,13 +21,15 @@
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["OS"];
|
||||
|
||||
Components.utils.import("resource://gre/modules/osfile/osfile_shared_allthreads.jsm", this);
|
||||
let SharedAll = {};
|
||||
Components.utils.import("resource://gre/modules/osfile/osfile_shared_allthreads.jsm", SharedAll);
|
||||
|
||||
// Boilerplate, to simplify the transition to require()
|
||||
let OS = SharedAll.OS;
|
||||
|
||||
let LOG = OS.Shared.LOG.bind(OS.Shared, "Controller");
|
||||
let isTypedArray = OS.Shared.isTypedArray;
|
||||
|
||||
// A simple flag used to control debugging messages.
|
||||
let DEBUG = OS.Shared.DEBUG;
|
||||
let isTypedArray = OS.Shared.isTypedArray;
|
||||
|
||||
// The constructor for file errors.
|
||||
let OSError;
|
||||
@ -155,23 +157,48 @@ let Scheduler = {
|
||||
}
|
||||
};
|
||||
|
||||
// Update worker's DEBUG flag if it's true.
|
||||
if (DEBUG === true) {
|
||||
Scheduler.post("SET_DEBUG", [DEBUG]);
|
||||
}
|
||||
const PREF_OSFILE_LOG = "toolkit.osfile.log";
|
||||
const PREF_OSFILE_LOG_REDIRECT = "toolkit.osfile.log.redirect";
|
||||
|
||||
// Define a new getter and setter for OS.Shared.DEBUG to be able to watch
|
||||
// for changes to it and update worker's DEBUG accordingly.
|
||||
Object.defineProperty(OS.Shared, "DEBUG", {
|
||||
configurable: true,
|
||||
get: function () {
|
||||
return DEBUG;
|
||||
},
|
||||
set: function (newVal) {
|
||||
Scheduler.post("SET_DEBUG", [newVal]);
|
||||
DEBUG = newVal;
|
||||
}
|
||||
});
|
||||
/**
|
||||
* Safely read a PREF_OSFILE_LOG preference.
|
||||
* Returns a value read or, in case of an error, oldPref or false.
|
||||
*
|
||||
* @param bool oldPref
|
||||
* An optional value that the DEBUG flag was set to previously.
|
||||
*/
|
||||
let readDebugPref = function readDebugPref(prefName, oldPref = false) {
|
||||
let pref = oldPref;
|
||||
try {
|
||||
pref = Services.prefs.getBoolPref(prefName);
|
||||
} catch (x) {
|
||||
// In case of an error when reading a pref keep it as is.
|
||||
}
|
||||
// If neither pref nor oldPref were set, default it to false.
|
||||
return pref;
|
||||
};
|
||||
|
||||
/**
|
||||
* Listen to PREF_OSFILE_LOG changes and update gShouldLog flag
|
||||
* appropriately.
|
||||
*/
|
||||
Services.prefs.addObserver(PREF_OSFILE_LOG,
|
||||
function prefObserver(aSubject, aTopic, aData) {
|
||||
OS.Shared.DEBUG = readDebugPref(PREF_OSFILE_LOG, OS.Shared.DEBUG);
|
||||
Scheduler.post("SET_DEBUG", [OS.Shared.DEBUG]);
|
||||
}, false);
|
||||
OS.Shared.DEBUG = readDebugPref(PREF_OSFILE_LOG, false);
|
||||
|
||||
Services.prefs.addObserver(PREF_OSFILE_LOG_REDIRECT,
|
||||
function prefObserver(aSubject, aTopic, aData) {
|
||||
OS.Shared.TEST = readDebugPref(PREF_OSFILE_LOG_REDIRECT, OS.Shared.TEST);
|
||||
}, false);
|
||||
OS.Shared.TEST = readDebugPref(PREF_OSFILE_LOG_REDIRECT, false);
|
||||
|
||||
// Update worker's DEBUG flag if it's true.
|
||||
if (OS.Shared.DEBUG === true) {
|
||||
Scheduler.post("SET_DEBUG", [true]);
|
||||
}
|
||||
|
||||
// Observer topics used for monitoring shutdown
|
||||
const WEB_WORKERS_SHUTDOWN_TOPIC = "web-workers-shutdown";
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -14,6 +14,8 @@ if (typeof Components != "undefined") {
|
||||
}
|
||||
(function(exports) {
|
||||
|
||||
exports.OS = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm").OS;
|
||||
|
||||
let LOG = exports.OS.Shared.LOG.bind(OS.Shared, "Shared front-end");
|
||||
|
||||
/**
|
||||
|
@ -17,22 +17,27 @@
|
||||
* - opened from a chrome worker through importScripts.
|
||||
*/
|
||||
|
||||
let SharedAll;
|
||||
if (typeof Components != "undefined") {
|
||||
// Module is opened as a jsm module
|
||||
this.EXPORTED_SYMBOLS = ["OS"];
|
||||
Components.utils.import("resource://gre/modules/ctypes.jsm");
|
||||
Components.utils.import("resource://gre/modules/osfile/osfile_shared_allthreads.jsm", this);
|
||||
|
||||
SharedAll = {};
|
||||
Components.utils.import("resource://gre/modules/osfile/osfile_shared_allthreads.jsm", SharedAll);
|
||||
} else {
|
||||
SharedAll = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm");
|
||||
}
|
||||
|
||||
(function(exports) {
|
||||
"use strict";
|
||||
if (!exports.OS || !exports.OS.Shared) {
|
||||
throw new Error("osfile_unix_allthreads.jsm must be loaded after osfile_shared_allthreads.jsm");
|
||||
}
|
||||
if (exports.OS.Shared.Unix) {
|
||||
if ("OS" in exports && "Shared" in exports.OS && "Unix" in exports.OS.Shared) {
|
||||
// Avoid double inclusion
|
||||
return;
|
||||
}
|
||||
|
||||
exports.OS = SharedAll.OS;
|
||||
|
||||
exports.OS.Shared.Unix = {};
|
||||
|
||||
let LOG = OS.Shared.LOG.bind(OS.Shared, "Unix", "allthreads");
|
||||
|
@ -13,15 +13,12 @@
|
||||
}
|
||||
(function(exports) {
|
||||
"use strict";
|
||||
if (!exports.OS) {
|
||||
exports.OS = {};
|
||||
}
|
||||
if (!exports.OS.Unix) {
|
||||
exports.OS.Unix = {};
|
||||
}
|
||||
if (exports.OS.Unix.File) {
|
||||
return; // Avoid double-initialization
|
||||
if (exports.OS && exports.OS.Unix && exports.OS.Unix.File) {
|
||||
return; // Avoid double initialization
|
||||
}
|
||||
|
||||
exports.OS = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm").OS;
|
||||
|
||||
exports.OS.Unix.File = {};
|
||||
|
||||
let LOG = exports.OS.Shared.LOG.bind(OS.Shared, "Unix", "back");
|
||||
|
@ -19,10 +19,12 @@
|
||||
(function(exports) {
|
||||
"use strict";
|
||||
|
||||
exports.OS = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm").OS;
|
||||
// exports.OS.Unix is created by osfile_unix_back.jsm
|
||||
if (exports.OS.File) {
|
||||
if (exports.OS && exports.OS.File) {
|
||||
return; // Avoid double-initialization
|
||||
}
|
||||
|
||||
exports.OS.Unix.File._init();
|
||||
let Const = exports.OS.Constants.libc;
|
||||
let UnixFile = exports.OS.Unix.File;
|
||||
|
@ -17,22 +17,25 @@
|
||||
* - opened from a chrome worker through importScripts.
|
||||
*/
|
||||
|
||||
let SharedAll;
|
||||
if (typeof Components != "undefined") {
|
||||
// Module is opened as a jsm module
|
||||
this.EXPORTED_SYMBOLS = ["OS"];
|
||||
Components.utils.import("resource://gre/modules/ctypes.jsm");
|
||||
Components.utils.import("resource://gre/modules/osfile/osfile_shared_allthreads.jsm", this);
|
||||
|
||||
SharedAll = {};
|
||||
Components.utils.import("resource://gre/modules/osfile/osfile_shared_allthreads.jsm", SharedAll);
|
||||
} else {
|
||||
SharedAll = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm");
|
||||
}
|
||||
|
||||
(function(exports) {
|
||||
"use strict";
|
||||
if (!exports.OS || !exports.OS.Shared) {
|
||||
throw new Error("osfile_win_allthreads.jsm must be loaded after osfile_shared_allthreads.jsm");
|
||||
}
|
||||
if (exports.OS.Shared.Win) {
|
||||
if (exports.OS && exports.OS.Shared && exports.OS.Shared.Win) {
|
||||
// Avoid double inclusion
|
||||
return;
|
||||
}
|
||||
exports.OS = SharedAll.OS;
|
||||
exports.OS.Shared.Win = {};
|
||||
|
||||
let LOG = OS.Shared.LOG.bind(OS.Shared, "Win", "allthreads");
|
||||
|
@ -31,15 +31,10 @@
|
||||
|
||||
(function(exports) {
|
||||
"use strict";
|
||||
if (!exports.OS) {
|
||||
exports.OS = {};
|
||||
}
|
||||
if (!exports.OS.Win) {
|
||||
exports.OS.Win = {};
|
||||
}
|
||||
if (exports.OS.Win.File) {
|
||||
return; // Avoid double-initialization
|
||||
if (exports.OS && exports.OS.Win && exports.OS.Win.File) {
|
||||
return; // Avoid double initialization
|
||||
}
|
||||
exports.OS = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm").OS;
|
||||
exports.OS.Win.File = {};
|
||||
|
||||
let LOG = OS.Shared.LOG.bind(OS.Shared, "Win", "back");
|
||||
|
@ -19,10 +19,12 @@
|
||||
(function(exports) {
|
||||
"use strict";
|
||||
|
||||
// exports.OS.Win is created by osfile_win_back.jsm
|
||||
if (exports.OS.File) {
|
||||
return; // Avoid double-initialization
|
||||
exports.OS = require("resource://gre/modules/osfile/osfile_shared_allthreads.jsm").OS;
|
||||
// exports.OS.Win is created by osfile_win_back.jsm
|
||||
if (exports.OS && exports.OS.File) {
|
||||
return; // Avoid double-initialization
|
||||
}
|
||||
|
||||
exports.OS.Win.File._init();
|
||||
let Const = exports.OS.Constants.Win;
|
||||
let WinFile = exports.OS.Win.File;
|
||||
|
@ -134,6 +134,14 @@ let reference_dir_contents = function reference_dir_contents(path) {
|
||||
return result;
|
||||
};
|
||||
|
||||
// Set/Unset OS.Shared.DEBUG, OS.Shared.TEST and a console listener.
|
||||
function toggleDebugTest (pref, consoleListener) {
|
||||
Services.prefs.setBoolPref("toolkit.osfile.log", pref);
|
||||
Services.prefs.setBoolPref("toolkit.osfile.log.redirect", pref);
|
||||
Services.console[pref ? "registerListener" : "unregisterListener"](
|
||||
consoleListener);
|
||||
}
|
||||
|
||||
let test = maketest("Main", function main(test) {
|
||||
return Task.spawn(function() {
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
@ -813,24 +821,13 @@ let test_debug_test = maketest("debug_test", function debug_test(test) {
|
||||
if (aMessage.message.indexOf("TEST OS") < 0) {
|
||||
return;
|
||||
}
|
||||
test.ok(true, "DEBUG TEST messages are logged correctly.")
|
||||
test.ok(true, "DEBUG TEST messages are logged correctly.");
|
||||
}
|
||||
};
|
||||
// Set/Unset OS.Shared.DEBUG, OS.Shared.TEST and the console listener.
|
||||
function toggleDebugTest (pref) {
|
||||
OS.Shared.DEBUG = pref;
|
||||
OS.Shared.TEST = pref;
|
||||
Services.console[pref ? "registerListener" : "unregisterListener"](
|
||||
consoleListener);
|
||||
}
|
||||
// Save original DEBUG value.
|
||||
let originalPref = OS.Shared.DEBUG;
|
||||
toggleDebugTest(true);
|
||||
toggleDebugTest(true, consoleListener);
|
||||
// Execution of OS.File.exist method will trigger OS.File.LOG several times.
|
||||
let fileExists = yield OS.File.exists(EXISTING_FILE);
|
||||
toggleDebugTest(false);
|
||||
// Restore DEBUG to its original.
|
||||
OS.Shared.DEBUG = originalPref;
|
||||
toggleDebugTest(false, consoleListener);
|
||||
});
|
||||
});
|
||||
|
||||
@ -839,8 +836,6 @@ let test_debug_test = maketest("debug_test", function debug_test(test) {
|
||||
*/
|
||||
let test_system_shutdown = maketest("system_shutdown", function system_shutdown(test) {
|
||||
return Task.spawn(function () {
|
||||
// Save original DEBUG value.
|
||||
let originalDebug = OS.Shared.DEBUG;
|
||||
// Count the number of times the leaks are logged.
|
||||
let logCounter = 0;
|
||||
// Create a console listener.
|
||||
@ -854,10 +849,7 @@ let test_system_shutdown = maketest("system_shutdown", function system_shutdown(
|
||||
// Unregister a listener, reset DEBUG and TEST both when the promise is
|
||||
// resolved or rejected.
|
||||
let cleanUp = function cleanUp() {
|
||||
Services.console.unregisterListener(listener);
|
||||
OS.Shared.DEBUG = originalDebug;
|
||||
OS.Shared.TEST = false;
|
||||
test.info("Unregistered listener for resource " + resource);
|
||||
toggleDebugTest(false, listener);
|
||||
};
|
||||
waitObservation.promise.then(cleanUp, cleanUp);
|
||||
|
||||
@ -893,7 +885,7 @@ let test_system_shutdown = maketest("system_shutdown", function system_shutdown(
|
||||
}
|
||||
}
|
||||
};
|
||||
Services.console.registerListener(listener);
|
||||
toggleDebugTest(true, listener);
|
||||
logStart = Date.now();
|
||||
f();
|
||||
// If listener does not resolve webObservation in timely manner (1000MS),
|
||||
|
@ -11,6 +11,8 @@ function run_test() {
|
||||
do_test_pending();
|
||||
let messageCount = 0;
|
||||
|
||||
do_print("Test starting");
|
||||
|
||||
// Create a console listener.
|
||||
let consoleListener = {
|
||||
observe: function (aMessage) {
|
||||
@ -18,30 +20,32 @@ function run_test() {
|
||||
if (!(aMessage instanceof Components.interfaces.nsIConsoleMessage)) {
|
||||
return;
|
||||
}
|
||||
if (aMessage.message.indexOf("TEST OS") < 0) {
|
||||
return;
|
||||
}
|
||||
// This is required, as printing to the |Services.console|
|
||||
// while in the observe function causes an exception.
|
||||
do_execute_soon(function() {
|
||||
do_print("Observing message " + aMessage.message);
|
||||
if (aMessage.message.indexOf("TEST OS") < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
++messageCount;
|
||||
if(messageCount == 1) {
|
||||
do_check_eq(aMessage.message, "TEST OS {\"name\":\"test\"}\n");
|
||||
}
|
||||
if(messageCount == 2) {
|
||||
do_check_eq(aMessage.message, "TEST OS name is test\n");
|
||||
// This is required, as printing to the |Services.console|
|
||||
// while in the observe function causes an exception.
|
||||
do_execute_soon(function() {
|
||||
++messageCount;
|
||||
if(messageCount == 1) {
|
||||
do_check_eq(aMessage.message, "TEST OS {\"name\":\"test\"}\n");
|
||||
}
|
||||
if(messageCount == 2) {
|
||||
do_check_eq(aMessage.message, "TEST OS name is test\n");
|
||||
toggleConsoleListener(false);
|
||||
do_test_finished();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Set/Unset the console listener.
|
||||
function toggleConsoleListener (pref) {
|
||||
OS.Shared.DEBUG = pref;
|
||||
OS.Shared.TEST = pref;
|
||||
do_print("Setting console listener: " + pref);
|
||||
Services.prefs.setBoolPref("toolkit.osfile.log", pref);
|
||||
Services.prefs.setBoolPref("toolkit.osfile.log.redirect", pref);
|
||||
Services.console[pref ? "registerListener" : "unregisterListener"](
|
||||
consoleListener);
|
||||
}
|
||||
@ -51,12 +55,18 @@ function run_test() {
|
||||
let objectDefault = {name: "test"};
|
||||
let CustomToString = function() {
|
||||
this.name = "test";
|
||||
}
|
||||
};
|
||||
CustomToString.prototype.toString = function() {
|
||||
return "name is " + this.name;
|
||||
}
|
||||
};
|
||||
let objectCustom = new CustomToString();
|
||||
|
||||
do_print(OS.Shared.LOG.toSource());
|
||||
|
||||
do_print("Logging 1");
|
||||
OS.Shared.LOG(objectDefault);
|
||||
|
||||
do_print("Logging 2");
|
||||
OS.Shared.LOG(objectCustom);
|
||||
// Once both messages are observed OS.Shared.DEBUG, and OS.Shared.TEST
|
||||
// are reset to false.
|
||||
|
Loading…
Reference in New Issue
Block a user