author | Olli Pettay <Olli.Pettay@helsinki.fi> |
Wed, 05 Sep 2012 20:47:57 +0300 | |
changeset 104332 | eb201b1e55fd10dd47a1804bfe33d7cc976708a7 |
parent 104331 | 056a16f19be205bc3f217f931074897629a897cf |
child 104333 | bcc2d5b5b351664686b166763ba9d40c3c82e8f1 |
push id | 14464 |
push user | ryanvm@gmail.com |
push date | Wed, 05 Sep 2012 21:52:38 +0000 |
treeherder | mozilla-inbound@013743bb609e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bent |
bugs | 787961 |
milestone | 18.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
dom/workers/WorkerPrivate.cpp | file | annotate | diff | comparison | revisions | |
dom/workers/WorkerPrivate.h | file | annotate | diff | comparison | revisions |
--- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -1887,18 +1887,17 @@ WorkerPrivateParent<Derived>::WorkerPriv WorkerPrivate* aParent, JSContext* aParentJSContext, const nsAString& aScriptURL, bool aIsChromeWorker, const nsACString& aDomain, nsCOMPtr<nsPIDOMWindow>& aWindow, nsCOMPtr<nsIScriptContext>& aScriptContext, nsCOMPtr<nsIURI>& aBaseURI, - nsCOMPtr<nsIPrincipal>& aPrincipal, - nsCOMPtr<nsIDocument>& aDocument) + nsCOMPtr<nsIPrincipal>& aPrincipal) : EventTarget(aParent ? aCx : NULL), mMutex("WorkerPrivateParent Mutex"), mCondVar(mMutex, "WorkerPrivateParent CondVar"), mJSObject(aObject), mParent(aParent), mParentJSContext(aParentJSContext), mScriptURL(aScriptURL), mDomain(aDomain), mBusyCount(0), mParentStatus(Pending), mJSContextOptions(0), mJSRuntimeHeapSize(0), mGCZeal(0), mJSObjectRooted(false), mParentSuspended(false), mIsChromeWorker(aIsChromeWorker), mPrincipalIsSystem(false), mMainThreadObjectsForgotten(false) @@ -1909,17 +1908,16 @@ WorkerPrivateParent<Derived>::WorkerPriv NS_ASSERTION(aWindow->IsInnerWindow(), "Should have inner window here!"); } mWindow.swap(aWindow); mScriptContext.swap(aScriptContext); mScriptNotify = do_QueryInterface(mScriptContext); mBaseURI.swap(aBaseURI); mPrincipal.swap(aPrincipal); - mDocument.swap(aDocument); if (aParent) { aParent->AssertIsOnWorkerThread(); NS_ASSERTION(JS_GetOptions(aCx) == aParent->GetJSContextOptions(), "Options mismatch!"); mJSContextOptions = aParent->GetJSContextOptions(); @@ -2216,17 +2214,16 @@ WorkerPrivateParent<Derived>::ForgetMain aDoomed.SetCapacity(7); SwapToISupportsArray(mWindow, aDoomed); SwapToISupportsArray(mScriptContext, aDoomed); SwapToISupportsArray(mScriptNotify, aDoomed); SwapToISupportsArray(mBaseURI, aDoomed); SwapToISupportsArray(mScriptURI, aDoomed); SwapToISupportsArray(mPrincipal, aDoomed); - SwapToISupportsArray(mDocument, aDoomed); mMainThreadObjectsForgotten = true; } template <class Derived> bool WorkerPrivateParent<Derived>::PostMessage(JSContext* aCx, jsval aMessage) { @@ -2273,17 +2270,18 @@ WorkerPrivateParent<Derived>::PostMessag return runnable->Dispatch(aCx); } template <class Derived> uint64_t WorkerPrivateParent<Derived>::GetInnerWindowId() { AssertIsOnMainThread(); - return mDocument ? mDocument->InnerWindowID() : 0; + NS_ASSERTION(!mWindow || mWindow->IsInnerWindow(), "Outer window?"); + return mWindow ? mWindow->WindowID() : 0; } template <class Derived> void WorkerPrivateParent<Derived>::UpdateJSContextOptions(JSContext* aCx, uint32_t aOptions) { AssertIsOnParentThread(); @@ -2449,22 +2447,21 @@ WorkerPrivateParent<Derived>::ParentJSCo WorkerPrivate::WorkerPrivate(JSContext* aCx, JSObject* aObject, WorkerPrivate* aParent, JSContext* aParentJSContext, const nsAString& aScriptURL, bool aIsChromeWorker, const nsACString& aDomain, nsCOMPtr<nsPIDOMWindow>& aWindow, nsCOMPtr<nsIScriptContext>& aParentScriptContext, nsCOMPtr<nsIURI>& aBaseURI, - nsCOMPtr<nsIPrincipal>& aPrincipal, - nsCOMPtr<nsIDocument>& aDocument) + nsCOMPtr<nsIPrincipal>& aPrincipal) : WorkerPrivateParent<WorkerPrivate>(aCx, aObject, aParent, aParentJSContext, aScriptURL, aIsChromeWorker, aDomain, aWindow, aParentScriptContext, aBaseURI, - aPrincipal, aDocument), + aPrincipal), mJSContext(nullptr), mErrorHandlerRecursionCount(0), mNextTimeoutId(1), mStatus(Pending), mSuspended(false), mTimerRunning(false), mRunningExpiredTimeouts(false), mCloseHandlerStarted(false), mCloseHandlerFinished(false), mMemoryReporterRunning(false) { MOZ_COUNT_CTOR(mozilla::dom::workers::WorkerPrivate); } @@ -2643,17 +2640,17 @@ WorkerPrivate::Create(JSContext* aCx, JS return nullptr; } nsDependentString scriptURL(urlChars, urlLength); nsRefPtr<WorkerPrivate> worker = new WorkerPrivate(aCx, aObj, aParent, parentContext, scriptURL, aIsChromeWorker, domain, window, scriptContext, baseURI, - principal, document); + principal); worker->SetIsDOMBinding(); worker->SetWrapper(aObj); nsRefPtr<CompileScriptRunnable> compiler = new CompileScriptRunnable(worker); if (!compiler->Dispatch(aCx)) { return nullptr; }
--- a/dom/workers/WorkerPrivate.h +++ b/dom/workers/WorkerPrivate.h @@ -6,16 +6,17 @@ #ifndef mozilla_dom_workers_workerprivate_h__ #define mozilla_dom_workers_workerprivate_h__ #include "Workers.h" #include "nsIRunnable.h" #include "nsIThread.h" #include "nsIThreadInternal.h" +#include "nsPIDOMWindow.h" #include "jsapi.h" #include "mozilla/CondVar.h" #include "mozilla/Mutex.h" #include "mozilla/TimeStamp.h" #include "nsAutoPtr.h" #include "nsCOMPtr.h" #include "nsEventQueue.h" @@ -176,17 +177,16 @@ private: // Main-thread things. nsCOMPtr<nsPIDOMWindow> mWindow; nsCOMPtr<nsIScriptContext> mScriptContext; nsCOMPtr<nsIXPCScriptNotify> mScriptNotify; nsCOMPtr<nsIURI> mBaseURI; nsCOMPtr<nsIURI> mScriptURI; nsCOMPtr<nsIPrincipal> mPrincipal; - nsCOMPtr<nsIDocument> mDocument; // Only used for top level workers. nsTArray<nsRefPtr<WorkerRunnable> > mQueuedRunnables; uint64_t mBusyCount; Status mParentStatus; uint32_t mJSContextOptions; uint32_t mJSRuntimeHeapSize; @@ -199,18 +199,17 @@ private: protected: WorkerPrivateParent(JSContext* aCx, JSObject* aObject, WorkerPrivate* aParent, JSContext* aParentJSContext, const nsAString& aScriptURL, bool aIsChromeWorker, const nsACString& aDomain, nsCOMPtr<nsPIDOMWindow>& aWindow, nsCOMPtr<nsIScriptContext>& aScriptContext, nsCOMPtr<nsIURI>& aBaseURI, - nsCOMPtr<nsIPrincipal>& aPrincipal, - nsCOMPtr<nsIDocument>& aDocument); + nsCOMPtr<nsIPrincipal>& aPrincipal); ~WorkerPrivateParent(); private: Derived* ParentAsWorkerPrivate() const { return static_cast<Derived*>(const_cast<WorkerPrivateParent*>(this)); @@ -421,24 +420,17 @@ public: { return mPrincipalIsSystem; } nsIDocument* GetDocument() const { AssertIsOnMainThread(); - return mDocument; - } - - void - SetDocument(nsIDocument* aDocument) - { - AssertIsOnMainThread(); - mDocument = aDocument; + return mWindow ? mWindow->GetExtantDoc() : nullptr; } nsPIDOMWindow* GetWindow() { AssertIsOnMainThread(); return mWindow; } @@ -722,18 +714,17 @@ public: GetCrossThreadDispatcher(); private: WorkerPrivate(JSContext* aCx, JSObject* aObject, WorkerPrivate* aParent, JSContext* aParentJSContext, const nsAString& aScriptURL, bool aIsChromeWorker, const nsACString& aDomain, nsCOMPtr<nsPIDOMWindow>& aWindow, nsCOMPtr<nsIScriptContext>& aScriptContext, - nsCOMPtr<nsIURI>& aBaseURI, nsCOMPtr<nsIPrincipal>& aPrincipal, - nsCOMPtr<nsIDocument>& aDocument); + nsCOMPtr<nsIURI>& aBaseURI, nsCOMPtr<nsIPrincipal>& aPrincipal); bool Dispatch(WorkerRunnable* aEvent, EventQueue* aQueue); bool DispatchToSyncQueue(WorkerSyncRunnable* aEvent); void