Bug 1050104 - Do not return a new console object every time self.console is called on workers; r=baku

--HG--
extra : rebase_source : f259f6677662ce019b19e22e60a167f64cf47c1d
This commit is contained in:
Ehsan Akhgari 2014-08-08 08:34:30 -04:00
parent 56654d5a63
commit ff749c40b4
4 changed files with 13 additions and 4 deletions

View File

@ -53,11 +53,13 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(WorkerGlobalScope)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(WorkerGlobalScope,
DOMEventTargetHelper)
tmp->mWorkerPrivate->AssertIsOnWorkerThread();
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mConsole)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(WorkerGlobalScope,
DOMEventTargetHelper)
tmp->mWorkerPrivate->AssertIsOnWorkerThread();
NS_IMPL_CYCLE_COLLECTION_UNLINK(mConsole)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(WorkerGlobalScope,
@ -80,17 +82,16 @@ WorkerGlobalScope::WrapObject(JSContext* aCx)
MOZ_CRASH("We should never get here!");
}
already_AddRefed<Console>
Console*
WorkerGlobalScope::GetConsole()
{
mWorkerPrivate->AssertIsOnWorkerThread();
if (!mConsole) {
mConsole = new Console(nullptr);
MOZ_ASSERT(mConsole);
}
return mConsole.forget();
return mConsole;
}
already_AddRefed<WorkerLocation>

View File

@ -60,7 +60,7 @@ public:
return nsRefPtr<WorkerGlobalScope>(this).forget();
}
already_AddRefed<Console>
Console*
GetConsole();
already_AddRefed<WorkerLocation>

View File

@ -5,6 +5,12 @@
onmessage = function(event) {
postMessage({event: 'console exists', status: !!console, last : false});
var logCalled = false;
console.log = function() {
logCalled = true;
}
console.log("foo");
postMessage({event: 'console.log is replaceable', status: logCalled, last: false});
console = 42;
postMessage({event: 'console is replaceable', status: console === 42, last : true});
}

View File

@ -7,6 +7,8 @@ onmessage = function(event) {
// TEST: does console exist?
postMessage({event: 'console exists', status: !!console, last : false});
postMessage({event: 'console is the same object', status: console === console, last: false});
postMessage({event: 'trace without function', status: true, last : false});
for (var i = 0; i < 10; ++i) {