void ImportLoader::DispatchEventIfFinished(nsINode* aNode) { MOZ_ASSERT(!(mReady && mStopped)); if (mReady) { DispatchLoadEvent(aNode); } if (mStopped) { DispatchErrorEvent(aNode); } }
void ImportLoader::Error(bool aUnblockScripts) { mDocument = nullptr; mStopped = true; uint32_t l = mLinks.Length(); for (uint32_t i = 0; i < l; i++) { DispatchErrorEvent(mLinks[i]); } if (aUnblockScripts) { UnblockScripts(); } ReleaseResources(); }
NS_IMETHODIMP OpenDatabaseHelper::Run() { NS_ASSERTION(mState != eCreated, "Dispatch was not called?!?"); if (NS_IsMainThread()) { // If we need to queue up a SetVersionHelper, do that here. if (mState == eSetVersionPending) { nsresult rv = StartSetVersion(); if (NS_SUCCEEDED(rv)) { return rv; } SetError(rv); // fall through and run the default error processing } // We've done whatever work we need to do on the DB thread, and any // SetVersion stuff is done by now. NS_ASSERTION(mState == eFiringEvents || mState == eSetVersionCompleted, "Why are we here?"); if (mState == eSetVersionCompleted) { // Allow transaction creation/other version change transactions to proceed // before we fire events. Other version changes will be postd to the end // of the event loop, and will be behind whatever the page does in // its error/success event handlers. mDatabase->ExitSetVersionTransaction(); mState = eFiringEvents; } else { // Notify the request that we're done, but only if we didn't just finish // a SetVersionHelper. In the SetVersionHelper case, that helper tells // the request that it is done, and we avoid calling NotifyHandlerCompleted // twice. nsresult rv = mOpenDBRequest->NotifyHelperCompleted(this); if (NS_SUCCEEDED(mResultCode) && NS_FAILED(rv)) { mResultCode = rv; } } NS_ASSERTION(mState == eFiringEvents, "Why are we here?"); if (NS_FAILED(mResultCode)) { DispatchErrorEvent(); } else { DispatchSuccessEvent(); } IndexedDatabaseManager* manager = IndexedDatabaseManager::Get(); NS_ASSERTION(manager, "This should never be null!"); manager->AllowNextSynchronizedOp(mASCIIOrigin, mDatabaseId); ReleaseMainThreadObjects(); return NS_OK; } // If we're on the DB thread, do that NS_ASSERTION(mState == eDBWork, "Why are we here?"); mResultCode = DoDatabaseWork(); NS_ASSERTION(mState != eDBWork, "We should be doing something else now."); return NS_DispatchToMainThread(this, NS_DISPATCH_NORMAL); }