Verified Commit d34d27ae authored by Jens Stutte's avatar Jens Stutte Committed by ma1
Browse files

Bug 2025960 - Use nsMainThreadPtrHandle in WorkerDebugger runnables....

Bug 2025960 - Use nsMainThreadPtrHandle in WorkerDebugger runnables. r=dom-worker-reviewers,edenchuang

Differential Revision: https://phabricator.services.mozilla.com/D290113
parent ea595122
Loading
Loading
Loading
Loading
+24 −8
Original line number Diff line number Diff line
@@ -123,14 +123,14 @@ class CompileDebuggerScriptRunnable final : public WorkerDebuggerRunnable {
}  // namespace

class WorkerDebugger::PostDebuggerMessageRunnable final : public Runnable {
  WorkerDebugger* mDebugger;
  nsMainThreadPtrHandle<WorkerDebugger> mDebugger;
  nsString mMessage;

 public:
  PostDebuggerMessageRunnable(WorkerDebugger* aDebugger,
  PostDebuggerMessageRunnable(nsMainThreadPtrHandle<WorkerDebugger> aDebugger,
                              const nsAString& aMessage)
      : mozilla::Runnable("PostDebuggerMessageRunnable"),
        mDebugger(aDebugger),
        mDebugger(std::move(aDebugger)),
        mMessage(aMessage) {}

 private:
@@ -145,17 +145,17 @@ class WorkerDebugger::PostDebuggerMessageRunnable final : public Runnable {
};

class WorkerDebugger::ReportDebuggerErrorRunnable final : public Runnable {
  WorkerDebugger* mDebugger;
  nsMainThreadPtrHandle<WorkerDebugger> mDebugger;
  nsCString mFilename;
  uint32_t mLineno;
  nsString mMessage;

 public:
  ReportDebuggerErrorRunnable(WorkerDebugger* aDebugger,
  ReportDebuggerErrorRunnable(nsMainThreadPtrHandle<WorkerDebugger> aDebugger,
                              const nsACString& aFilename, uint32_t aLineno,
                              const nsAString& aMessage)
      : Runnable("ReportDebuggerErrorRunnable"),
        mDebugger(aDebugger),
        mDebugger(std::move(aDebugger)),
        mFilename(aFilename),
        mLineno(aLineno),
        mMessage(aMessage) {}
@@ -176,6 +176,17 @@ WorkerDebugger::WorkerDebugger(WorkerPrivate* aWorkerPrivate)
  AssertIsOnMainThread();
}

/* static */
already_AddRefed<WorkerDebugger> WorkerDebugger::Create(
    WorkerPrivate* aWorkerPrivate) {
  AssertIsOnMainThread();
  RefPtr<WorkerDebugger> debugger = new WorkerDebugger(aWorkerPrivate);
  debugger->mSelfHandle = nsMainThreadPtrHandle<WorkerDebugger>(
      new nsMainThreadPtrHolder<WorkerDebugger>("WorkerDebugger::mSelfHandle",
                                                debugger));
  return debugger.forget();
}

WorkerDebugger::~WorkerDebugger() {
  MOZ_ASSERT(!mWorkerPrivate);

@@ -453,8 +464,10 @@ WorkerDebugger::SetDebuggerReady(bool aReady) {
}

void WorkerDebugger::Close() {
  AssertIsOnMainThread();
  MOZ_ASSERT(mWorkerPrivate);
  mWorkerPrivate = nullptr;
  mSelfHandle = nullptr;

  for (const auto& listener : mListeners.Clone()) {
    listener->OnClose();
@@ -463,9 +476,10 @@ void WorkerDebugger::Close() {

void WorkerDebugger::PostMessageToDebugger(const nsAString& aMessage) {
  mWorkerPrivate->AssertIsOnWorkerThread();
  MOZ_ASSERT(mSelfHandle);

  RefPtr<PostDebuggerMessageRunnable> runnable =
      new PostDebuggerMessageRunnable(this, aMessage);
      new PostDebuggerMessageRunnable(mSelfHandle, aMessage);
  if (NS_FAILED(mWorkerPrivate->DispatchToMainThreadForMessaging(
          runnable.forget()))) {
    NS_WARNING("Failed to post message to debugger on main thread!");
@@ -485,9 +499,11 @@ void WorkerDebugger::ReportErrorToDebugger(const nsACString& aFilename,
                                           uint32_t aLineno,
                                           const nsAString& aMessage) {
  mWorkerPrivate->AssertIsOnWorkerThread();
  MOZ_ASSERT(mSelfHandle);

  RefPtr<ReportDebuggerErrorRunnable> runnable =
      new ReportDebuggerErrorRunnable(this, aFilename, aLineno, aMessage);
      new ReportDebuggerErrorRunnable(mSelfHandle, aFilename, aLineno,
                                      aMessage);
  if (NS_FAILED(mWorkerPrivate->DispatchToMainThreadForMessaging(
          runnable.forget()))) {
    NS_WARNING("Failed to report error to debugger on main thread!");
+4 −1
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include "mozilla/dom/WorkerScope.h"
#include "nsCOMPtr.h"
#include "nsIWorkerDebugger.h"
#include "nsProxyRelease.h"

class mozIDOMWindow;
class nsIPrincipal;
@@ -26,9 +27,10 @@ class WorkerDebugger : public nsIWorkerDebugger {
  CheckedUnsafePtr<WorkerPrivate> mWorkerPrivate;
  bool mIsInitialized;
  nsTArray<nsCOMPtr<nsIWorkerDebuggerListener>> mListeners;
  nsMainThreadPtrHandle<WorkerDebugger> mSelfHandle;

 public:
  explicit WorkerDebugger(WorkerPrivate* aWorkerPrivate);
  static already_AddRefed<WorkerDebugger> Create(WorkerPrivate* aWorkerPrivate);

  NS_DECL_ISUPPORTS
  NS_DECL_NSIWORKERDEBUGGER
@@ -43,6 +45,7 @@ class WorkerDebugger : public nsIWorkerDebugger {
                             const nsAString& aMessage);

 private:
  explicit WorkerDebugger(WorkerPrivate* aWorkerPrivate);
  virtual ~WorkerDebugger();

  void PostMessageToDebuggerOnMainThread(const nsAString& aMessage);
+1 −1
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ void WorkerDebuggerManager::RegisterDebuggerMainThread(
    WorkerPrivate* aWorkerPrivate, bool aNotifyListeners) {
  AssertIsOnMainThread();

  RefPtr<WorkerDebugger> debugger = new WorkerDebugger(aWorkerPrivate);
  RefPtr<WorkerDebugger> debugger = WorkerDebugger::Create(aWorkerPrivate);
  mDebuggers.AppendElement(debugger);

  aWorkerPrivate->SetDebugger(debugger);