From 370acd6950ad87e1307e7130f75570944e323000 Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Thu, 22 Feb 2018 08:49:51 +0100 Subject: [PATCH] Bug 1439686 - Console API should print logs on stdout when used by chrome code and if browser.dom.window.dump.enabled is true, r=bgrins --- dom/base/nsGlobalWindowInner.cpp | 4 ++-- dom/base/nsGlobalWindowInner.h | 3 ++- dom/console/Console.cpp | 21 ++++++++++++++------- dom/console/Console.h | 4 ++-- dom/console/ConsoleInstance.cpp | 8 +++----- dom/console/ConsoleInstance.h | 3 ++- dom/workers/WorkerScope.cpp | 6 ++++-- dom/worklet/WorkletGlobalScope.cpp | 4 ++-- dom/worklet/WorkletGlobalScope.h | 2 +- 9 files changed, 32 insertions(+), 23 deletions(-) diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp index 9996df83b020..56bb7b7ac2f6 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -7474,10 +7474,10 @@ nsGlobalWindowInner::Orientation(CallerType aCallerType) const #endif already_AddRefed -nsGlobalWindowInner::GetConsole(ErrorResult& aRv) +nsGlobalWindowInner::GetConsole(JSContext* aCx, ErrorResult& aRv) { if (!mConsole) { - mConsole = Console::Create(this, aRv); + mConsole = Console::Create(aCx, this, aRv); if (NS_WARN_IF(aRv.Failed())) { return nullptr; } diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h index bf4173f12459..42f990cc3229 100644 --- a/dom/base/nsGlobalWindowInner.h +++ b/dom/base/nsGlobalWindowInner.h @@ -679,7 +679,8 @@ public: int16_t Orientation(mozilla::dom::CallerType aCallerType) const; #endif - already_AddRefed GetConsole(mozilla::ErrorResult& aRv); + already_AddRefed + GetConsole(JSContext* aCx, mozilla::ErrorResult& aRv); // https://w3c.github.io/webappsec-secure-contexts/#dom-window-issecurecontext bool IsSecureContext() const; diff --git a/dom/console/Console.cpp b/dom/console/Console.cpp index f293fafbc990..4cde46d4f17d 100644 --- a/dom/console/Console.cpp +++ b/dom/console/Console.cpp @@ -10,6 +10,7 @@ #include "ConsoleCommon.h" #include "mozilla/dom/BlobBinding.h" +#include "mozilla/dom/DOMPrefs.h" #include "mozilla/dom/Exceptions.h" #include "mozilla/dom/File.h" #include "mozilla/dom/FunctionBinding.h" @@ -790,11 +791,11 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Console) NS_INTERFACE_MAP_END /* static */ already_AddRefed -Console::Create(nsPIDOMWindowInner* aWindow, ErrorResult& aRv) +Console::Create(JSContext* aCx, nsPIDOMWindowInner* aWindow, ErrorResult& aRv) { MOZ_ASSERT_IF(NS_IsMainThread(), aWindow); - RefPtr console = new Console(aWindow); + RefPtr console = new Console(aCx, aWindow); console->Initialize(aRv); if (NS_WARN_IF(aRv.Failed())) { return nullptr; @@ -803,7 +804,7 @@ Console::Create(nsPIDOMWindowInner* aWindow, ErrorResult& aRv) return console.forget(); } -Console::Console(nsPIDOMWindowInner* aWindow) +Console::Console(JSContext* aCx, nsPIDOMWindowInner* aWindow) : mWindow(aWindow) , mOuterID(0) , mInnerID(0) @@ -825,6 +826,11 @@ Console::Console(nsPIDOMWindowInner* aWindow) } } + // Let's enable the dumping to stdout by default for chrome. + if (nsContentUtils::ThreadsafeIsSystemCaller(aCx)) { + mDumpToStdout = DOMPrefs::DumpEnabled(); + } + mozilla::HoldJSObjects(this); } @@ -2420,7 +2426,7 @@ Console::GetConsoleInternal(const GlobalObject& aGlobal, ErrorResult& aRv) nsCOMPtr workletScope = do_QueryInterface(aGlobal.GetAsSupports()); if (workletScope) { - return workletScope->GetConsole(aRv); + return workletScope->GetConsole(aGlobal.Context(), aRv); } } @@ -2431,7 +2437,7 @@ Console::GetConsoleInternal(const GlobalObject& aGlobal, ErrorResult& aRv) // we are probably running a chrome script. if (!innerWindow) { - RefPtr console = new Console(nullptr); + RefPtr console = new Console(aGlobal.Context(), nullptr); console->Initialize(aRv); if (NS_WARN_IF(aRv.Failed())) { return nullptr; @@ -2441,7 +2447,7 @@ Console::GetConsoleInternal(const GlobalObject& aGlobal, ErrorResult& aRv) } nsGlobalWindowInner* window = nsGlobalWindowInner::Cast(innerWindow); - return window->GetConsole(aRv); + return window->GetConsole(aGlobal.Context(), aRv); } // Workers @@ -2560,7 +2566,8 @@ Console::MonotonicTimer(JSContext* aCx, MethodName aMethodName, Console::CreateInstance(const GlobalObject& aGlobal, const ConsoleInstanceOptions& aOptions) { - RefPtr console = new ConsoleInstance(aOptions); + RefPtr console = + new ConsoleInstance(aGlobal.Context(), aOptions); return console.forget(); } diff --git a/dom/console/Console.h b/dom/console/Console.h index 53cd4552b918..627b45a18bba 100644 --- a/dom/console/Console.h +++ b/dom/console/Console.h @@ -42,7 +42,7 @@ public: NS_DECL_NSIOBSERVER static already_AddRefed - Create(nsPIDOMWindowInner* aWindow, ErrorResult& aRv); + Create(JSContext* aCx, nsPIDOMWindowInner* aWindow, ErrorResult& aRv); // WebIDL methods nsPIDOMWindowInner* GetParentObject() const @@ -129,7 +129,7 @@ public: SetConsoleEventHandler(AnyCallback* aHandler); private: - explicit Console(nsPIDOMWindowInner* aWindow); + Console(JSContext* aCx, nsPIDOMWindowInner* aWindow); ~Console(); void diff --git a/dom/console/ConsoleInstance.cpp b/dom/console/ConsoleInstance.cpp index 9cabf64d8fe0..4b26a24df969 100644 --- a/dom/console/ConsoleInstance.cpp +++ b/dom/console/ConsoleInstance.cpp @@ -67,17 +67,15 @@ WebIDLevelToConsoleUtilsLevel(ConsoleLevel aLevel) } // anonymous -ConsoleInstance::ConsoleInstance(const ConsoleInstanceOptions& aOptions) - : mConsole(new Console(nullptr)) +ConsoleInstance::ConsoleInstance(JSContext* aCx, + const ConsoleInstanceOptions& aOptions) + : mConsole(new Console(aCx, nullptr)) { mConsole->mConsoleID = aOptions.mConsoleID; mConsole->mPassedInnerID = aOptions.mInnerID; if (aOptions.mDump.WasPassed()) { mConsole->mDumpFunction = &aOptions.mDump.Value(); - } else { - // For historical reasons, ConsoleInstance prints messages on stdout. - mConsole->mDumpToStdout = true; } mConsole->mPrefix = aOptions.mPrefix; diff --git a/dom/console/ConsoleInstance.h b/dom/console/ConsoleInstance.h index 378c7dd435a0..7d2fff4f96b2 100644 --- a/dom/console/ConsoleInstance.h +++ b/dom/console/ConsoleInstance.h @@ -20,7 +20,8 @@ public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ConsoleInstance) - explicit ConsoleInstance(const ConsoleInstanceOptions& aOptions); + explicit ConsoleInstance(JSContext* aCx, + const ConsoleInstanceOptions& aOptions); // WebIDL methods JSObject* diff --git a/dom/workers/WorkerScope.cpp b/dom/workers/WorkerScope.cpp index b465c0900c90..070b0149d889 100644 --- a/dom/workers/WorkerScope.cpp +++ b/dom/workers/WorkerScope.cpp @@ -144,7 +144,8 @@ WorkerGlobalScope::GetConsole(ErrorResult& aRv) mWorkerPrivate->AssertIsOnWorkerThread(); if (!mConsole) { - mConsole = Console::Create(nullptr, aRv); + mConsole = Console::Create(mWorkerPrivate->GetJSContext(), + nullptr, aRv); if (NS_WARN_IF(aRv.Failed())) { return nullptr; } @@ -1077,7 +1078,8 @@ WorkerDebuggerGlobalScope::GetConsole(ErrorResult& aRv) // Debugger console has its own console object. if (!mConsole) { - mConsole = Console::Create(nullptr, aRv); + mConsole = Console::Create(mWorkerPrivate->GetJSContext(), + nullptr, aRv); if (NS_WARN_IF(aRv.Failed())) { return nullptr; } diff --git a/dom/worklet/WorkletGlobalScope.cpp b/dom/worklet/WorkletGlobalScope.cpp index 30c011942f0b..b32b61f5063b 100644 --- a/dom/worklet/WorkletGlobalScope.cpp +++ b/dom/worklet/WorkletGlobalScope.cpp @@ -55,10 +55,10 @@ WorkletGlobalScope::WrapObject(JSContext* aCx, JS::Handle aGivenProto } already_AddRefed -WorkletGlobalScope::GetConsole(ErrorResult& aRv) +WorkletGlobalScope::GetConsole(JSContext* aCx, ErrorResult& aRv) { if (!mConsole) { - mConsole = Console::Create(mWindow, aRv); + mConsole = Console::Create(aCx, mWindow, aRv); if (NS_WARN_IF(aRv.Failed())) { return nullptr; } diff --git a/dom/worklet/WorkletGlobalScope.h b/dom/worklet/WorkletGlobalScope.h index 1e81d6a66631..ddfaf85379db 100644 --- a/dom/worklet/WorkletGlobalScope.h +++ b/dom/worklet/WorkletGlobalScope.h @@ -55,7 +55,7 @@ public: } already_AddRefed - GetConsole(ErrorResult& aRv); + GetConsole(JSContext* aCx, ErrorResult& aRv); void Dump(const Optional& aString) const;