NS_IMETHODIMP nsDOMWorkerPrivateEvent::InitProgressEvent(const nsAString& aTypeArg, PRBool aCanBubbleArg, PRBool aCancelableArg, PRBool aLengthComputableArg, PRUint64 aLoadedArg, PRUint64 aTotalArg) { NS_ASSERTION(mProgressEvent, "Impossible!"); mPreventDefaultCalled = PR_FALSE; return mProgressEvent->InitProgressEvent(aTypeArg, aCanBubbleArg, aCancelableArg, aLengthComputableArg, aLoadedArg, aTotalArg); }
void FileRequest::FireProgressEvent(uint64_t aLoaded, uint64_t aTotal) { if (NS_FAILED(CheckInnerWindowCorrectness())) { return; } nsCOMPtr<nsIDOMEvent> event; nsresult rv = NS_NewDOMProgressEvent(getter_AddRefs(event), nullptr, nullptr); if (NS_FAILED(rv)) { return; } nsCOMPtr<nsIDOMProgressEvent> progress = do_QueryInterface(event); MOZ_ASSERT(progress); rv = progress->InitProgressEvent(NS_LITERAL_STRING("progress"), false, false, false, aLoaded, aTotal); if (NS_FAILED(rv)) { return; } DispatchTrustedEvent(event); }
nsresult nsDOMWorkerXHREvent::Init(PRUint32 aXHREventType, const nsAString& aType, nsIDOMEvent* aEvent, SnapshotChoice aSnapshot) { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); NS_ASSERTION(aEvent, "Don't pass null here!"); mXHREventType = aXHREventType; // Only set a channel id if we're not going to be run immediately. mChannelID = mXHRProxy->mSyncEventQueue ? -1 : mXHRProxy->ChannelID(); mTarget = static_cast<nsDOMWorkerMessageHandler*>(mXHRProxy->mWorkerXHR); NS_ENSURE_TRUE(mTarget, NS_ERROR_UNEXPECTED); mXHRWN = mXHRProxy->mWorkerXHR->GetWrappedNative(); NS_ENSURE_STATE(mXHRWN); nsCOMPtr<nsIDOMEventTarget> mainThreadTarget; nsresult rv = aEvent->GetTarget(getter_AddRefs(mainThreadTarget)); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_STATE(mainThreadTarget); nsCOMPtr<nsIXMLHttpRequestUpload> upload(do_QueryInterface(mainThreadTarget)); if (upload) { mUploadEvent = PR_TRUE; mTarget = static_cast<nsDOMWorkerMessageHandler*>(mXHRProxy->mWorkerXHR->mUpload); } else { mUploadEvent = PR_FALSE; mTarget = static_cast<nsDOMWorkerMessageHandler*>(mXHRProxy->mWorkerXHR); } NS_ASSERTION(mTarget, "Null target!"); PRBool bubbles; rv = aEvent->GetBubbles(&bubbles); NS_ENSURE_SUCCESS(rv, rv); PRBool cancelable; rv = aEvent->GetCancelable(&cancelable); NS_ENSURE_SUCCESS(rv, rv); rv = aEvent->GetTimeStamp(&mTimeStamp); NS_ENSURE_SUCCESS(rv, rv); rv = aEvent->GetEventPhase(&mEventPhase); NS_ENSURE_SUCCESS(rv, rv); NS_ASSERTION(mEventPhase == nsIDOMEvent::AT_TARGET, "Unsupported phase!"); nsCOMPtr<nsIDOMProgressEvent> progressEvent(do_QueryInterface(aEvent)); if (progressEvent) { mProgressEvent = PR_TRUE; PRBool lengthComputable; rv = progressEvent->GetLengthComputable(&lengthComputable); NS_ENSURE_SUCCESS(rv, rv); PRUint64 loaded; rv = progressEvent->GetLoaded(&loaded); NS_ENSURE_SUCCESS(rv, rv); PRUint64 total; rv = progressEvent->GetTotal(&total); NS_ENSURE_SUCCESS(rv, rv); rv = InitProgressEvent(aType, bubbles, cancelable, lengthComputable, loaded, total); NS_ENSURE_SUCCESS(rv, rv); } else { mProgressEvent = PR_FALSE; rv = InitEvent(aType, bubbles, cancelable); NS_ENSURE_SUCCESS(rv, rv); } mState = new nsDOMWorkerXHRState(); NS_ENSURE_TRUE(mState, NS_ERROR_OUT_OF_MEMORY); if (aSnapshot == SNAPSHOT) { SnapshotXHRState(mXHRProxy->mXHR, mState); } return NS_OK; }