This is a large number of largely mechanical changes. When possible, the code was called to directly call `.get()` instead, performing the assertions manually. In many places PromiseFlatCString() calls were added to dynamically copy the strings into null terminated buffers if the string was not null terminated. Differential Revision: https://phabricator.services.mozilla.com/D286158
76 lines
2.6 KiB
C++
76 lines
2.6 KiB
C++
/* 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/. */
|
|
|
|
#include "ScriptTrace.h"
|
|
|
|
#include "mozilla/Services.h" // services::*
|
|
#include "mozilla/dom/Element.h" // mozilla::dom::Element
|
|
#include "mozilla/dom/ScriptLoadContext.h" // mozilla::dom::ScriptLoadContext
|
|
#include "nsCOMPtr.h" // nsCOMPtr.h
|
|
#include "nsIObserverService.h" // nsIObserverService
|
|
#include "nsIScriptElement.h" // nsIScriptElement
|
|
#include "nsThreadUtils.h" // mozilla::Runnable, NS_DispatchToCurrentThread
|
|
|
|
namespace mozilla::dom::script {
|
|
|
|
class ScriptLoaderTestRunnable : public Runnable {
|
|
public:
|
|
ScriptLoaderTestRunnable(JS::loader::ScriptLoadRequest* aRequest,
|
|
JS::loader::LoadedScript* aLoadedScript,
|
|
const char* aEvent)
|
|
: Runnable("dom::script::ScriptLoaderTestRunnable") {
|
|
mData.AppendLiteral(u"event:");
|
|
mData.AppendASCII(aEvent);
|
|
if (aLoadedScript) {
|
|
mData.AppendLiteral(u"\nurl:");
|
|
mData.Append(
|
|
NS_ConvertUTF8toUTF16(aLoadedScript->GetURI()->GetSpecOrDefault()));
|
|
}
|
|
|
|
if (aRequest) {
|
|
nsIScriptElement* scriptElement =
|
|
aRequest->GetScriptLoadContext()->GetScriptElementForTrace();
|
|
nsCOMPtr<Element> target(do_QueryInterface(scriptElement));
|
|
if (target) {
|
|
nsAutoString id;
|
|
target->GetId(id);
|
|
mData.AppendLiteral(u"\nid:");
|
|
mData.Append(id);
|
|
}
|
|
}
|
|
}
|
|
|
|
NS_IMETHOD Run() override {
|
|
nsCOMPtr<nsIObserverService> obsService = services::GetObserverService();
|
|
obsService->NotifyObservers(nullptr, "ScriptLoaderTest", mData.get());
|
|
return NS_OK;
|
|
}
|
|
|
|
protected:
|
|
~ScriptLoaderTestRunnable() = default;
|
|
|
|
private:
|
|
nsAutoString mData;
|
|
};
|
|
|
|
void TestingNotifyObserver(JS::loader::ScriptLoadRequest* aRequest,
|
|
JS::loader::LoadedScript* aLoadedScript,
|
|
const char* aEvent) {
|
|
nsCOMPtr<nsIObserverService> obsService = services::GetObserverService();
|
|
|
|
if (!obsService->HasObservers("ScriptLoaderTest")) {
|
|
return;
|
|
}
|
|
|
|
// NOTE: There can be pending exception for the script load itself,
|
|
// and the observer notification shouldn't be performed in that
|
|
// situation.
|
|
// Use a separate task to avoid the collision.
|
|
RefPtr<ScriptLoaderTestRunnable> runnable =
|
|
new ScriptLoaderTestRunnable(aRequest, aLoadedScript, aEvent);
|
|
(void)NS_DispatchToCurrentThread(runnable);
|
|
}
|
|
|
|
} // namespace mozilla::dom::script
|