mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 1150805 - WorkerPrivate should use nsTObserverArray for the WorkerFeatures, r=bent CLOSED TREE
This commit is contained in:
parent
ae3f008388
commit
670fb6a86b
@ -125,8 +125,7 @@ public:
|
||||
void FailConnection(uint16_t reasonCode,
|
||||
const nsACString& aReasonString = EmptyCString());
|
||||
nsresult CloseConnection(uint16_t reasonCode,
|
||||
const nsACString& aReasonString = EmptyCString(),
|
||||
bool aCanceling = false);
|
||||
const nsACString& aReasonString = EmptyCString());
|
||||
nsresult Disconnect();
|
||||
void DisconnectInternal();
|
||||
|
||||
@ -385,38 +384,6 @@ WebSocketImpl::PrintErrorOnConsole(const char *aBundleURI,
|
||||
|
||||
namespace {
|
||||
|
||||
class CloseRunnable final : public WorkerMainThreadRunnable
|
||||
{
|
||||
public:
|
||||
CloseRunnable(WebSocketImpl* aImpl, uint16_t aReasonCode,
|
||||
const nsACString& aReasonString)
|
||||
: WorkerMainThreadRunnable(aImpl->mWorkerPrivate)
|
||||
, mImpl(aImpl)
|
||||
, mReasonCode(aReasonCode)
|
||||
, mReasonString(aReasonString)
|
||||
, mRv(NS_ERROR_FAILURE)
|
||||
{ }
|
||||
|
||||
bool MainThreadRun() override
|
||||
{
|
||||
mRv = mImpl->mChannel->Close(mReasonCode, mReasonString);
|
||||
return true;
|
||||
}
|
||||
|
||||
nsresult ErrorCode() const
|
||||
{
|
||||
return mRv;
|
||||
}
|
||||
|
||||
private:
|
||||
// A raw pointer because this runnable is sync.
|
||||
WebSocketImpl* mImpl;
|
||||
|
||||
uint16_t mReasonCode;
|
||||
const nsACString& mReasonString;
|
||||
nsresult mRv;
|
||||
};
|
||||
|
||||
class CancelWebSocketRunnable final : public nsRunnable
|
||||
{
|
||||
public:
|
||||
@ -469,11 +436,9 @@ private:
|
||||
|
||||
nsresult
|
||||
WebSocketImpl::CloseConnection(uint16_t aReasonCode,
|
||||
const nsACString& aReasonString,
|
||||
bool aCanceling)
|
||||
const nsACString& aReasonString)
|
||||
{
|
||||
AssertIsOnTargetThread();
|
||||
MOZ_ASSERT(!NS_IsMainThread() || !aCanceling);
|
||||
|
||||
if (mDisconnectingOrDisconnected) {
|
||||
return NS_OK;
|
||||
@ -500,16 +465,9 @@ WebSocketImpl::CloseConnection(uint16_t aReasonCode,
|
||||
return mChannel->Close(aReasonCode, aReasonString);
|
||||
}
|
||||
|
||||
if (aCanceling) {
|
||||
nsRefPtr<CancelWebSocketRunnable> runnable =
|
||||
new CancelWebSocketRunnable(mChannel, aReasonCode, aReasonString);
|
||||
return NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
nsRefPtr<CloseRunnable> runnable =
|
||||
new CloseRunnable(this, aReasonCode, aReasonString);
|
||||
runnable->Dispatch(mWorkerPrivate->GetJSContext());
|
||||
return runnable->ErrorCode();
|
||||
nsRefPtr<CancelWebSocketRunnable> runnable =
|
||||
new CancelWebSocketRunnable(mChannel, aReasonCode, aReasonString);
|
||||
return NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
// No channel, but not disconnected: canceled or failed early
|
||||
@ -2033,7 +1991,7 @@ public:
|
||||
}
|
||||
|
||||
mWebSocketImpl->CloseConnection(nsIWebSocketChannel::CLOSE_GOING_AWAY,
|
||||
EmptyCString(), true);
|
||||
EmptyCString());
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -5898,11 +5898,10 @@ WorkerPrivate::NotifyFeatures(JSContext* aCx, Status aStatus)
|
||||
CancelAllTimeouts(aCx);
|
||||
}
|
||||
|
||||
nsAutoTArray<WorkerFeature*, 30> features;
|
||||
features.AppendElements(mFeatures);
|
||||
|
||||
for (uint32_t index = 0; index < features.Length(); index++) {
|
||||
if (!features[index]->Notify(aCx, aStatus)) {
|
||||
nsTObserverArray<WorkerFeature*>::ForwardIterator iter(mFeatures);
|
||||
while (iter.HasMore()) {
|
||||
WorkerFeature* feature = iter.GetNext();
|
||||
if (!feature->Notify(aCx, aStatus)) {
|
||||
NS_WARNING("Failed to notify feature!");
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "nsString.h"
|
||||
#include "nsTArray.h"
|
||||
#include "nsThreadUtils.h"
|
||||
#include "nsTObserverArray.h"
|
||||
#include "mozilla/dom/StructuredCloneTags.h"
|
||||
|
||||
#include "Queue.h"
|
||||
@ -852,7 +853,7 @@ class WorkerPrivate : public WorkerPrivateParent<WorkerPrivate>
|
||||
nsRefPtr<WorkerGlobalScope> mScope;
|
||||
nsRefPtr<WorkerDebuggerGlobalScope> mDebuggerScope;
|
||||
nsTArray<ParentType*> mChildWorkers;
|
||||
nsTArray<WorkerFeature*> mFeatures;
|
||||
nsTObserverArray<WorkerFeature*> mFeatures;
|
||||
nsTArray<nsAutoPtr<TimeoutInfo>> mTimeouts;
|
||||
uint32_t mDebuggerEventLoopLevel;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user