diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index d401b298ed9..5fdcdffc152 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -2228,7 +2228,7 @@ RuntimeService::CreateServiceWorker(const GlobalObject& aGlobal, nsresult RuntimeService::CreateServiceWorkerFromLoadInfo(JSContext* aCx, - WorkerLoadInfo* aLoadInfo, + WorkerPrivate::LoadInfo* aLoadInfo, const nsAString& aScriptURL, const nsACString& aScope, ServiceWorker** aServiceWorker) @@ -2267,7 +2267,7 @@ RuntimeService::CreateSharedWorkerInternal(const GlobalObject& aGlobal, JSContext* cx = aGlobal.Context(); - WorkerLoadInfo loadInfo; + WorkerPrivate::LoadInfo loadInfo; nsresult rv = WorkerPrivate::GetLoadInfo(cx, window, nullptr, aScriptURL, false, WorkerPrivate::OverrideLoadGroup, @@ -2280,7 +2280,7 @@ RuntimeService::CreateSharedWorkerInternal(const GlobalObject& aGlobal, nsresult RuntimeService::CreateSharedWorkerFromLoadInfo(JSContext* aCx, - WorkerLoadInfo* aLoadInfo, + WorkerPrivate::LoadInfo* aLoadInfo, const nsAString& aScriptURL, const nsACString& aName, WorkerType aType, diff --git a/dom/workers/RuntimeService.h b/dom/workers/RuntimeService.h index 48acf2acab8..becc88a4481 100644 --- a/dom/workers/RuntimeService.h +++ b/dom/workers/RuntimeService.h @@ -155,7 +155,7 @@ public: nsresult CreateServiceWorkerFromLoadInfo(JSContext* aCx, - WorkerLoadInfo* aLoadInfo, + WorkerPrivate::LoadInfo* aLoadInfo, const nsAString& aScriptURL, const nsACString& aScope, ServiceWorker** aServiceWorker); @@ -308,7 +308,7 @@ private: nsresult CreateSharedWorkerFromLoadInfo(JSContext* aCx, - WorkerLoadInfo* aLoadInfo, + WorkerPrivate::LoadInfo* aLoadInfo, const nsAString& aScriptURL, const nsACString& aName, WorkerType aType, diff --git a/dom/workers/ServiceWorkerManager.cpp b/dom/workers/ServiceWorkerManager.cpp index b54ffe3372e..5b1a1605f8f 100644 --- a/dom/workers/ServiceWorkerManager.cpp +++ b/dom/workers/ServiceWorkerManager.cpp @@ -2463,7 +2463,7 @@ ServiceWorkerManager::CreateServiceWorker(nsIPrincipal* aPrincipal, AssertIsOnMainThread(); MOZ_ASSERT(aPrincipal); - WorkerLoadInfo info; + WorkerPrivate::LoadInfo info; nsresult rv = NS_NewURI(getter_AddRefs(info.mBaseURI), aScriptSpec, nullptr, nullptr); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp index a956e2cfbc5..d3c268726c1 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -1920,7 +1920,9 @@ NS_IMPL_ISUPPORTS_INHERITED0(TopLevelWorkerFinishedRunnable, nsRunnable) NS_IMPL_ISUPPORTS(TimerThreadEventTarget, nsIEventTarget) -WorkerLoadInfo::WorkerLoadInfo() +template +WorkerPrivateParent:: +LoadInfo::LoadInfo() : mWindowID(UINT64_MAX) , mFromWindow(false) , mEvalAllowed(false) @@ -1931,114 +1933,15 @@ WorkerLoadInfo::WorkerLoadInfo() , mIsInCertifiedApp(false) , mIndexedDBAllowed(false) { - MOZ_COUNT_CTOR(WorkerLoadInfo); -} - -WorkerLoadInfo::~WorkerLoadInfo() -{ - MOZ_COUNT_DTOR(WorkerLoadInfo); -} - -void -WorkerLoadInfo::StealFrom(WorkerLoadInfo& aOther) -{ - MOZ_ASSERT(!mBaseURI); - aOther.mBaseURI.swap(mBaseURI); - - MOZ_ASSERT(!mResolvedScriptURI); - aOther.mResolvedScriptURI.swap(mResolvedScriptURI); - - MOZ_ASSERT(!mPrincipal); - aOther.mPrincipal.swap(mPrincipal); - - MOZ_ASSERT(!mScriptContext); - aOther.mScriptContext.swap(mScriptContext); - - MOZ_ASSERT(!mWindow); - aOther.mWindow.swap(mWindow); - - MOZ_ASSERT(!mCSP); - aOther.mCSP.swap(mCSP); - - MOZ_ASSERT(!mChannel); - aOther.mChannel.swap(mChannel); - - MOZ_ASSERT(!mLoadGroup); - aOther.mLoadGroup.swap(mLoadGroup); - - MOZ_ASSERT(!mInterfaceRequestor); - aOther.mInterfaceRequestor.swap(mInterfaceRequestor); - - MOZ_ASSERT(!mPrincipalInfo); - mPrincipalInfo = aOther.mPrincipalInfo.forget(); - - mDomain = aOther.mDomain; - mWindowID = aOther.mWindowID; - mFromWindow = aOther.mFromWindow; - mEvalAllowed = aOther.mEvalAllowed; - mReportCSPViolations = aOther.mReportCSPViolations; - mXHRParamsAllowed = aOther.mXHRParamsAllowed; - mPrincipalIsSystem = aOther.mPrincipalIsSystem; - mIsInPrivilegedApp = aOther.mIsInPrivilegedApp; - mIsInCertifiedApp = aOther.mIsInCertifiedApp; - mIndexedDBAllowed = aOther.mIndexedDBAllowed; + MOZ_COUNT_CTOR(WorkerPrivateParent::LoadInfo); } template -class WorkerPrivateParent::EventTarget MOZ_FINAL - : public nsIEventTarget +WorkerPrivateParent:: +LoadInfo::~LoadInfo() { - // This mutex protects mWorkerPrivate and must be acquired *before* the - // WorkerPrivate's mutex whenever they must both be held. - mozilla::Mutex mMutex; - WorkerPrivate* mWorkerPrivate; - nsIEventTarget* mWeakNestedEventTarget; - nsCOMPtr mNestedEventTarget; - -public: - explicit EventTarget(WorkerPrivate* aWorkerPrivate) - : mMutex("WorkerPrivateParent::EventTarget::mMutex"), - mWorkerPrivate(aWorkerPrivate), mWeakNestedEventTarget(nullptr) - { - MOZ_ASSERT(aWorkerPrivate); - } - - EventTarget(WorkerPrivate* aWorkerPrivate, nsIEventTarget* aNestedEventTarget) - : mMutex("WorkerPrivateParent::EventTarget::mMutex"), - mWorkerPrivate(aWorkerPrivate), mWeakNestedEventTarget(aNestedEventTarget), - mNestedEventTarget(aNestedEventTarget) - { - MOZ_ASSERT(aWorkerPrivate); - MOZ_ASSERT(aNestedEventTarget); - } - - void - Disable() - { - nsCOMPtr nestedEventTarget; - { - MutexAutoLock lock(mMutex); - - MOZ_ASSERT(mWorkerPrivate); - mWorkerPrivate = nullptr; - mNestedEventTarget.swap(nestedEventTarget); - } - } - - nsIEventTarget* - GetWeakNestedEventTarget() const - { - MOZ_ASSERT(mWeakNestedEventTarget); - return mWeakNestedEventTarget; - } - - NS_DECL_THREADSAFE_ISUPPORTS - NS_DECL_NSIEVENTTARGET - -private: - ~EventTarget() - { } -}; + MOZ_COUNT_DTOR(WorkerPrivateParent::LoadInfo); +} template class WorkerPrivateParent::SynchronizeAndResumeRunnable MOZ_FINAL @@ -2096,110 +1999,184 @@ private: } }; -WorkerLoadInfo:: -InterfaceRequestor::InterfaceRequestor(nsIPrincipal* aPrincipal, - nsILoadGroup* aLoadGroup) +template +class WorkerPrivateParent::InterfaceRequestor MOZ_FINAL + : public nsIInterfaceRequestor { - MOZ_ASSERT(NS_IsMainThread()); - MOZ_ASSERT(aPrincipal); + NS_DECL_ISUPPORTS + +public: + InterfaceRequestor(nsIPrincipal* aPrincipal, nsILoadGroup* aLoadGroup) + { + MOZ_ASSERT(NS_IsMainThread()); + MOZ_ASSERT(aPrincipal); + + // Look for an existing LoadContext. This is optional and it's ok if + // we don't find one. + nsCOMPtr baseContext; + if (aLoadGroup) { + nsCOMPtr callbacks; + aLoadGroup->GetNotificationCallbacks(getter_AddRefs(callbacks)); + if (callbacks) { + callbacks->GetInterface(NS_GET_IID(nsILoadContext), + getter_AddRefs(baseContext)); + } + } + + mLoadContext = new LoadContext(aPrincipal, baseContext); + } + + void + MaybeAddTabChild(nsILoadGroup* aLoadGroup) + { + MOZ_ASSERT(NS_IsMainThread()); + + if (!aLoadGroup) { + return; + } - // Look for an existing LoadContext. This is optional and it's ok if - // we don't find one. - nsCOMPtr baseContext; - if (aLoadGroup) { nsCOMPtr callbacks; aLoadGroup->GetNotificationCallbacks(getter_AddRefs(callbacks)); - if (callbacks) { - callbacks->GetInterface(NS_GET_IID(nsILoadContext), - getter_AddRefs(baseContext)); + if (!callbacks) { + return; } - } - mLoadContext = new LoadContext(aPrincipal, baseContext); -} - -void -WorkerLoadInfo:: -InterfaceRequestor::MaybeAddTabChild(nsILoadGroup* aLoadGroup) -{ - MOZ_ASSERT(NS_IsMainThread()); - - if (!aLoadGroup) { - return; - } - - nsCOMPtr callbacks; - aLoadGroup->GetNotificationCallbacks(getter_AddRefs(callbacks)); - if (!callbacks) { - return; - } - - nsCOMPtr tabChild; - callbacks->GetInterface(NS_GET_IID(nsITabChild), getter_AddRefs(tabChild)); - if (!tabChild) { - return; - } - - // Use weak references to the tab child. Holding a strong reference will - // not prevent an ActorDestroy() from being called on the TabChild. - // Therefore, we should let the TabChild destroy itself as soon as possible. - mTabChildList.AppendElement(do_GetWeakReference(tabChild)); -} - -NS_IMETHODIMP -WorkerLoadInfo:: -InterfaceRequestor::GetInterface(const nsIID& aIID, void** aSink) -{ - MOZ_ASSERT(NS_IsMainThread()); - MOZ_ASSERT(mLoadContext); - - if (aIID.Equals(NS_GET_IID(nsILoadContext))) { - nsCOMPtr ref = mLoadContext; - ref.forget(aSink); - return NS_OK; - } - - // If we still have an active nsITabChild, then return it. Its possible, - // though, that all of the TabChild objects have been destroyed. In that - // case we return NS_NOINTERFACE. - if (aIID.Equals(NS_GET_IID(nsITabChild))) { - nsCOMPtr tabChild = GetAnyLiveTabChild(); + nsCOMPtr tabChild; + callbacks->GetInterface(NS_GET_IID(nsITabChild), getter_AddRefs(tabChild)); if (!tabChild) { - return NS_NOINTERFACE; + return; } - tabChild.forget(aSink); - return NS_OK; + + // Use weak references to the tab child. Holding a strong reference will + // not prevent an ActorDestroy() from being called on the TabChild. + // Therefore, we should let the TabChild destroy itself as soon as possible. + mTabChildList.AppendElement(do_GetWeakReference(tabChild)); } - return NS_NOINTERFACE; -} + NS_IMETHOD + GetInterface(const nsIID& aIID, void** aSink) MOZ_OVERRIDE + { + MOZ_ASSERT(NS_IsMainThread()); + MOZ_ASSERT(mLoadContext); -already_AddRefed -WorkerLoadInfo:: -InterfaceRequestor::GetAnyLiveTabChild() + if (aIID.Equals(NS_GET_IID(nsILoadContext))) { + nsCOMPtr ref = mLoadContext; + ref.forget(aSink); + return NS_OK; + } + + // If we still have an active nsITabChild, then return it. Its possible, + // though, that all of the TabChild objects have been destroyed. In that + // case we return NS_NOINTERFACE. + if(aIID.Equals(NS_GET_IID(nsITabChild))) { + nsCOMPtr tabChild = GetAnyLiveTabChild(); + if (!tabChild) { + return NS_NOINTERFACE; + } + tabChild.forget(aSink); + return NS_OK; + } + + return NS_NOINTERFACE; + } + +private: + ~InterfaceRequestor() { } + + already_AddRefed + GetAnyLiveTabChild() + { + MOZ_ASSERT(NS_IsMainThread()); + + // Search our list of known TabChild objects for one that still exists. + while (!mTabChildList.IsEmpty()) { + nsCOMPtr tabChild = + do_QueryReferent(mTabChildList.LastElement()); + + // Does this tab child still exist? If so, return it. We are done. + if (tabChild) { + return tabChild.forget(); + } + + // Otherwise remove the stale weak reference and check the next one + mTabChildList.RemoveElementAt(mTabChildList.Length() - 1); + } + + return nullptr; + } + + nsCOMPtr mLoadContext; + + // Array of weak references to nsITabChild. We do not want to keep TabChild + // actors alive for long after their ActorDestroy() methods are called. + nsTArray mTabChildList; +}; + +template +NS_IMPL_ADDREF(WorkerPrivateParent::InterfaceRequestor) + +template +NS_IMPL_RELEASE(WorkerPrivateParent::InterfaceRequestor) + +template +NS_IMPL_QUERY_INTERFACE(WorkerPrivateParent::InterfaceRequestor, + nsIInterfaceRequestor) + +template +class WorkerPrivateParent::EventTarget MOZ_FINAL + : public nsIEventTarget { - MOZ_ASSERT(NS_IsMainThread()); + // This mutex protects mWorkerPrivate and must be acquired *before* the + // WorkerPrivate's mutex whenever they must both be held. + mozilla::Mutex mMutex; + WorkerPrivate* mWorkerPrivate; + nsIEventTarget* mWeakNestedEventTarget; + nsCOMPtr mNestedEventTarget; - // Search our list of known TabChild objects for one that still exists. - while (!mTabChildList.IsEmpty()) { - nsCOMPtr tabChild = - do_QueryReferent(mTabChildList.LastElement()); - - // Does this tab child still exist? If so, return it. We are done. - if (tabChild) { - return tabChild.forget(); - } - - // Otherwise remove the stale weak reference and check the next one - mTabChildList.RemoveElementAt(mTabChildList.Length() - 1); +public: + explicit EventTarget(WorkerPrivate* aWorkerPrivate) + : mMutex("WorkerPrivateParent::EventTarget::mMutex"), + mWorkerPrivate(aWorkerPrivate), mWeakNestedEventTarget(nullptr) + { + MOZ_ASSERT(aWorkerPrivate); } - return nullptr; -} + EventTarget(WorkerPrivate* aWorkerPrivate, nsIEventTarget* aNestedEventTarget) + : mMutex("WorkerPrivateParent::EventTarget::mMutex"), + mWorkerPrivate(aWorkerPrivate), mWeakNestedEventTarget(aNestedEventTarget), + mNestedEventTarget(aNestedEventTarget) + { + MOZ_ASSERT(aWorkerPrivate); + MOZ_ASSERT(aNestedEventTarget); + } -NS_IMPL_ADDREF(WorkerLoadInfo::InterfaceRequestor) -NS_IMPL_RELEASE(WorkerLoadInfo::InterfaceRequestor) -NS_IMPL_QUERY_INTERFACE(WorkerLoadInfo::InterfaceRequestor, nsIInterfaceRequestor) + void + Disable() + { + nsCOMPtr nestedEventTarget; + { + MutexAutoLock lock(mMutex); + + MOZ_ASSERT(mWorkerPrivate); + mWorkerPrivate = nullptr; + mNestedEventTarget.swap(nestedEventTarget); + } + } + + nsIEventTarget* + GetWeakNestedEventTarget() const + { + MOZ_ASSERT(mWeakNestedEventTarget); + return mWeakNestedEventTarget; + } + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIEVENTTARGET + +private: + ~EventTarget() + { } +}; struct WorkerPrivate::TimeoutInfo { @@ -2403,7 +2380,7 @@ WorkerPrivateParent::WorkerPrivateParent( bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo& aLoadInfo) + LoadInfo& aLoadInfo) : mMutex("WorkerPrivateParent Mutex"), mCondVar(mMutex, "WorkerPrivateParent CondVar"), mMemoryReportCondVar(mMutex, "WorkerPrivateParent Memory Report CondVar"), @@ -4116,7 +4093,7 @@ WorkerPrivate::WorkerPrivate(JSContext* aCx, const nsAString& aScriptURL, bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo& aLoadInfo) + LoadInfo& aLoadInfo) : WorkerPrivateParent(aCx, aParent, aScriptURL, aIsChromeWorker, aWorkerType, aSharedWorkerName, aLoadInfo) @@ -4218,7 +4195,7 @@ WorkerPrivate::Constructor(const GlobalObject& aGlobal, const nsAString& aScriptURL, bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo* aLoadInfo, ErrorResult& aRv) + LoadInfo* aLoadInfo, ErrorResult& aRv) { JSContext* cx = aGlobal.Context(); return Constructor(cx, aScriptURL, aIsChromeWorker, aWorkerType, @@ -4231,7 +4208,7 @@ WorkerPrivate::Constructor(JSContext* aCx, const nsAString& aScriptURL, bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo* aLoadInfo, ErrorResult& aRv) + LoadInfo* aLoadInfo, ErrorResult& aRv) { WorkerPrivate* parent = NS_IsMainThread() ? nullptr : @@ -4247,7 +4224,7 @@ WorkerPrivate::Constructor(JSContext* aCx, MOZ_ASSERT_IF(aWorkerType == WorkerTypeDedicated, aSharedWorkerName.IsEmpty()); - Maybe stackLoadInfo; + Maybe stackLoadInfo; if (!aLoadInfo) { stackLoadInfo.emplace(); @@ -4310,7 +4287,7 @@ WorkerPrivate::GetLoadInfo(JSContext* aCx, nsPIDOMWindow* aWindow, WorkerPrivate* aParent, const nsAString& aScriptURL, bool aIsChromeWorker, LoadGroupBehavior aLoadGroupBehavior, - WorkerLoadInfo* aLoadInfo) + LoadInfo* aLoadInfo) { using namespace mozilla::dom::workers::scriptloader; using mozilla::dom::indexedDB::IDBFactory; @@ -4322,7 +4299,7 @@ WorkerPrivate::GetLoadInfo(JSContext* aCx, nsPIDOMWindow* aWindow, AssertIsOnMainThread(); } - WorkerLoadInfo loadInfo; + LoadInfo loadInfo; nsresult rv; if (aParent) { @@ -4566,13 +4543,12 @@ WorkerPrivate::GetLoadInfo(JSContext* aCx, nsPIDOMWindow* aWindow, // static void -WorkerPrivate::OverrideLoadInfoLoadGroup(WorkerLoadInfo& aLoadInfo) +WorkerPrivate::OverrideLoadInfoLoadGroup(LoadInfo& aLoadInfo) { MOZ_ASSERT(!aLoadInfo.mInterfaceRequestor); - aLoadInfo.mInterfaceRequestor = - new WorkerLoadInfo::InterfaceRequestor(aLoadInfo.mPrincipal, - aLoadInfo.mLoadGroup); + aLoadInfo.mInterfaceRequestor = new InterfaceRequestor(aLoadInfo.mPrincipal, + aLoadInfo.mLoadGroup); aLoadInfo.mInterfaceRequestor->MaybeAddTabChild(aLoadInfo.mLoadGroup); nsCOMPtr loadGroup = diff --git a/dom/workers/WorkerPrivate.h b/dom/workers/WorkerPrivate.h index 2c7a92e17c5..0a99a0728fe 100644 --- a/dom/workers/WorkerPrivate.h +++ b/dom/workers/WorkerPrivate.h @@ -132,6 +132,7 @@ class WorkerPrivateParent : public DOMEventTargetHelper class SynchronizeAndResumeRunnable; protected: + class InterfaceRequestor; class EventTarget; friend class EventTarget; @@ -151,6 +152,84 @@ public: nsString mOrigin; }; + struct LoadInfo + { + // All of these should be released in ForgetMainThreadObjects. + nsCOMPtr mBaseURI; + nsCOMPtr mResolvedScriptURI; + nsCOMPtr mPrincipal; + nsCOMPtr mScriptContext; + nsCOMPtr mWindow; + nsCOMPtr mCSP; + nsCOMPtr mChannel; + nsCOMPtr mLoadGroup; + + // Only set if we have a custom overriden load group + nsRefPtr mInterfaceRequestor; + + nsAutoPtr mPrincipalInfo; + nsCString mDomain; + + uint64_t mWindowID; + + bool mFromWindow; + bool mEvalAllowed; + bool mReportCSPViolations; + bool mXHRParamsAllowed; + bool mPrincipalIsSystem; + bool mIsInPrivilegedApp; + bool mIsInCertifiedApp; + bool mIndexedDBAllowed; + + LoadInfo(); + ~LoadInfo(); + + void + StealFrom(LoadInfo& aOther) + { + MOZ_ASSERT(!mBaseURI); + aOther.mBaseURI.swap(mBaseURI); + + MOZ_ASSERT(!mResolvedScriptURI); + aOther.mResolvedScriptURI.swap(mResolvedScriptURI); + + MOZ_ASSERT(!mPrincipal); + aOther.mPrincipal.swap(mPrincipal); + + MOZ_ASSERT(!mScriptContext); + aOther.mScriptContext.swap(mScriptContext); + + MOZ_ASSERT(!mWindow); + aOther.mWindow.swap(mWindow); + + MOZ_ASSERT(!mCSP); + aOther.mCSP.swap(mCSP); + + MOZ_ASSERT(!mChannel); + aOther.mChannel.swap(mChannel); + + MOZ_ASSERT(!mLoadGroup); + aOther.mLoadGroup.swap(mLoadGroup); + + MOZ_ASSERT(!mInterfaceRequestor); + aOther.mInterfaceRequestor.swap(mInterfaceRequestor); + + MOZ_ASSERT(!mPrincipalInfo); + mPrincipalInfo = aOther.mPrincipalInfo.forget(); + + mDomain = aOther.mDomain; + mWindowID = aOther.mWindowID; + mFromWindow = aOther.mFromWindow; + mEvalAllowed = aOther.mEvalAllowed; + mReportCSPViolations = aOther.mReportCSPViolations; + mXHRParamsAllowed = aOther.mXHRParamsAllowed; + mPrincipalIsSystem = aOther.mPrincipalIsSystem; + mIsInPrivilegedApp = aOther.mIsInPrivilegedApp; + mIsInCertifiedApp = aOther.mIsInCertifiedApp; + mIndexedDBAllowed = aOther.mIndexedDBAllowed; + } + }; + protected: typedef mozilla::ErrorResult ErrorResult; @@ -169,7 +248,7 @@ private: LocationInfo mLocationInfo; // The lifetime of these objects within LoadInfo is managed explicitly; // they do not need to be cycle collected. - WorkerLoadInfo mLoadInfo; + LoadInfo mLoadInfo; // Only used for top level workers. nsTArray> mQueuedRunnables; @@ -205,7 +284,7 @@ protected: const nsAString& aScriptURL, bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo& aLoadInfo); + LoadInfo& aLoadInfo); ~WorkerPrivateParent(); @@ -845,12 +924,12 @@ public: Constructor(const GlobalObject& aGlobal, const nsAString& aScriptURL, bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo* aLoadInfo, ErrorResult& aRv); + LoadInfo* aLoadInfo, ErrorResult& aRv); static already_AddRefed Constructor(JSContext* aCx, const nsAString& aScriptURL, bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo* aLoadInfo, ErrorResult& aRv); + LoadInfo* aLoadInfo, ErrorResult& aRv); static bool WorkerAvailable(JSContext* /* unused */, JSObject* /* unused */); @@ -864,10 +943,10 @@ public: static nsresult GetLoadInfo(JSContext* aCx, nsPIDOMWindow* aWindow, WorkerPrivate* aParent, const nsAString& aScriptURL, bool aIsChromeWorker, - LoadGroupBehavior aLoadGroupBehavior, WorkerLoadInfo* aLoadInfo); + LoadGroupBehavior aLoadGroupBehavior, LoadInfo* aLoadInfo); static void - OverrideLoadInfoLoadGroup(WorkerLoadInfo& aLoadInfo); + OverrideLoadInfoLoadGroup(LoadInfo& aLoadInfo); WorkerDebugger* Debugger() const @@ -1164,7 +1243,7 @@ private: WorkerPrivate(JSContext* aCx, WorkerPrivate* aParent, const nsAString& aScriptURL, bool aIsChromeWorker, WorkerType aWorkerType, const nsACString& aSharedWorkerName, - WorkerLoadInfo& aLoadInfo); + LoadInfo& aLoadInfo); void ClearMainEventQueue(WorkerRanOrNot aRanOrNot); diff --git a/dom/workers/Workers.h b/dom/workers/Workers.h index 8ed6fb7c7f3..a7dc565bd2e 100644 --- a/dom/workers/Workers.h +++ b/dom/workers/Workers.h @@ -14,10 +14,6 @@ #include "nsCOMPtr.h" #include "nsDebug.h" #include "nsString.h" -#include "nsTArray.h" - -#include "nsIWeakReferenceUtils.h" -#include "nsIInterfaceRequestor.h" #define BEGIN_WORKERS_NAMESPACE \ namespace mozilla { namespace dom { namespace workers { @@ -28,21 +24,8 @@ #define WORKERS_SHUTDOWN_TOPIC "web-workers-shutdown" -class nsIContentSecurityPolicy; class nsIScriptContext; -class nsILoadContext; class nsPIDOMWindow; -class nsIPrincipal; -class nsILoadGroup; -class nsITabChild; -class nsIChannel; -class nsIURI; - -namespace mozilla { -namespace ipc { -class PrincipalInfo; -} -} BEGIN_WORKERS_NAMESPACE @@ -187,64 +170,6 @@ enum WorkerPreference WORKERPREF_COUNT }; -// Implemented in WorkerPrivate.cpp - -struct WorkerLoadInfo -{ - // All of these should be released in WorkerPrivateParent::ForgetMainThreadObjects. - nsCOMPtr mBaseURI; - nsCOMPtr mResolvedScriptURI; - nsCOMPtr mPrincipal; - nsCOMPtr mScriptContext; - nsCOMPtr mWindow; - nsCOMPtr mCSP; - nsCOMPtr mChannel; - nsCOMPtr mLoadGroup; - - class InterfaceRequestor MOZ_FINAL : public nsIInterfaceRequestor - { - NS_DECL_ISUPPORTS - - public: - InterfaceRequestor(nsIPrincipal* aPrincipal, nsILoadGroup* aLoadGroup); - void MaybeAddTabChild(nsILoadGroup* aLoadGroup); - NS_IMETHOD GetInterface(const nsIID& aIID, void** aSink) MOZ_OVERRIDE; - - private: - ~InterfaceRequestor() { } - - already_AddRefed GetAnyLiveTabChild(); - - nsCOMPtr mLoadContext; - - // Array of weak references to nsITabChild. We do not want to keep TabChild - // actors alive for long after their ActorDestroy() methods are called. - nsTArray mTabChildList; - }; - - // Only set if we have a custom overriden load group - nsRefPtr mInterfaceRequestor; - - nsAutoPtr mPrincipalInfo; - nsCString mDomain; - - uint64_t mWindowID; - - bool mFromWindow; - bool mEvalAllowed; - bool mReportCSPViolations; - bool mXHRParamsAllowed; - bool mPrincipalIsSystem; - bool mIsInPrivilegedApp; - bool mIsInCertifiedApp; - bool mIndexedDBAllowed; - - WorkerLoadInfo(); - ~WorkerLoadInfo(); - - void StealFrom(WorkerLoadInfo& aOther); -}; - // All of these are implemented in RuntimeService.cpp void