NS_IMETHODIMP nsPACMan::GetInterface(const nsIID &iid, void **result) { // In case loading the PAC file requires authentication. if (iid.Equals(NS_GET_IID(nsIAuthPrompt))) { nsCOMPtr<nsIPromptFactory> promptFac = do_GetService("@mozilla.org/prompter;1"); NS_ENSURE_TRUE(promptFac, NS_ERROR_FAILURE); return promptFac->GetPrompt(nullptr, iid, reinterpret_cast<void**>(result)); } // In case loading the PAC file results in a redirect. if (iid.Equals(NS_GET_IID(nsIChannelEventSink))) { NS_ADDREF_THIS(); *result = static_cast<nsIChannelEventSink *>(this); return NS_OK; } return NS_ERROR_NO_INTERFACE; }
void nsWebShellWindow::SetPersistenceTimer(PRUint32 aDirtyFlags) { if (!mSPTimerLock) return; PR_Lock(mSPTimerLock); if (!mSPTimer) { nsresult rv; mSPTimer = do_CreateInstance("@mozilla.org/timer;1", &rv); if (NS_SUCCEEDED(rv)) { NS_ADDREF_THIS(); // for the timer, which holds a reference to this window } } mSPTimer->InitWithFuncCallback(FirePersistenceTimer, this, SIZE_PERSISTENCE_TIMEOUT, nsITimer::TYPE_ONE_SHOT); PersistentAttributesDirty(aDirtyFlags); PR_Unlock(mSPTimerLock); }
NS_IMETHODIMP nsImapMoveCopyMsgTxn::QueryInterface(REFNSIID aIID, void** aInstancePtr) { if (!aInstancePtr) return NS_ERROR_NULL_POINTER; *aInstancePtr = nsnull; if (aIID.Equals(NS_GET_IID(nsImapMoveCopyMsgTxn))) { *aInstancePtr = static_cast<nsImapMoveCopyMsgTxn*>(this); } if (*aInstancePtr) { NS_ADDREF_THIS(); return NS_OK; } return nsMsgTxn::QueryInterface(aIID, aInstancePtr); }
bool nsNPAPIPluginStreamListener::SetStreamType(uint16_t aType, bool aNeedsResume) { switch(aType) { case NP_NORMAL: mStreamType = NP_NORMAL; break; case NP_ASFILEONLY: mStreamType = NP_ASFILEONLY; break; case NP_ASFILE: mStreamType = NP_ASFILE; break; case NP_SEEK: mStreamType = NP_SEEK; // Seekable streams should continue to exist even after OnStopRequest // is fired, so we AddRef ourself an extra time and Release when the // plugin calls NPN_DestroyStream (CleanUpStream). If the plugin never // calls NPN_DestroyStream the stream will be destroyed before the plugin // instance is destroyed. NS_ADDREF_THIS(); break; case nsPluginStreamListenerPeer::STREAM_TYPE_UNKNOWN: MOZ_ASSERT(!aNeedsResume); mStreamType = nsPluginStreamListenerPeer::STREAM_TYPE_UNKNOWN; // In this case we just want to set mStreamType but we do not want to // execute anything else in this function. return true; default: return false; } mStreamState = eStreamTypeSet; if (aNeedsResume) { if (mStreamListenerPeer) { mStreamListenerPeer->OnStreamTypeSet(mStreamType); } ResumeRequest(); } return true; }
void FileSystemTaskChildBase::Start() { mFileSystem->AssertIsOnOwningThread(); if (HasError()) { // In this case we don't want to use IPC at all. RefPtr<ErrorRunnable> runnable = new ErrorRunnable(this); nsresult rv = NS_DispatchToCurrentThread(runnable); NS_WARN_IF(NS_FAILED(rv)); return; } if (mFileSystem->IsShutdown()) { return; } nsAutoString serialization; mFileSystem->SerializeDOMPath(serialization); ErrorResult rv; FileSystemParams params = GetRequestParams(serialization, rv); if (NS_WARN_IF(rv.Failed())) { rv.SuppressException(); return; } // Retain a reference so the task object isn't deleted without IPDL's // knowledge. The reference will be released by // mozilla::ipc::BackgroundChildImpl::DeallocPFileSystemRequestChild. NS_ADDREF_THIS(); // If we are here, PBackground must be up and running, because Start() is // called only by FileSystemPermissionRequest, and that class takes care of // PBackground initialization. PBackgroundChild* actor = mozilla::ipc::BackgroundChild::GetForCurrentThread(); MOZ_ASSERT(actor); actor->SendPFileSystemRequestConstructor(this, params); }
NS_IMETHODIMP nsIOThreadPool::PostEvent(PLEvent *event) { LOG(("nsIOThreadPool::PostEvent [event=%p]\n", event)); nsAutoLock lock(mLock); // if we are shutting down, then prevent additional events from being // added to the queue... if (mShutdown) return NS_ERROR_UNEXPECTED; nsresult rv = NS_OK; PR_APPEND_LINK(&event->link, &mEventQ); // now, look for an available idle thread... if (mNumIdleThreads) PR_NotifyCondVar(mIdleThreadCV); // wake up an idle thread // or, try to create a new thread unless we have reached our maximum... else if (mNumThreads < MAX_THREADS) { NS_ADDREF_THIS(); // the thread owns a reference to us mNumThreads++; PRThread *thread = PR_CreateThread(PR_USER_THREAD, ThreadFunc, this, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_UNJOINABLE_THREAD, 0); if (!thread) { NS_RELEASE_THIS(); mNumThreads--; rv = NS_ERROR_OUT_OF_MEMORY; } } // else, we expect one of the active threads to process the event queue. return rv; }
NS_IMETHODIMP WSPPropertyBagWrapper::QueryInterface(REFNSIID aIID, void** aInstancePtr) { if (aIID.Equals(NS_GET_IID(nsISupports))) { *aInstancePtr = static_cast<nsIXPTCProxy*>(this); } if(mXPTCStub && mIID && aIID.Equals(*mIID)) { *aInstancePtr = mXPTCStub; } else if (aIID.Equals(NS_GET_IID(nsIWebServicePropertyBagWrapper))) { *aInstancePtr = static_cast<nsIWebServicePropertyBagWrapper*>(this); } else if (aIID.Equals(NS_GET_IID(nsIClassInfo))) { *aInstancePtr = static_cast<nsIClassInfo*>(this); } else { return NS_ERROR_NO_INTERFACE; } NS_ADDREF_THIS(); return NS_OK; }
//----------------------------------------------------------- PRBool CPrintingPromptService::FirePauseEvent() { static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); nsCOMPtr<nsIEventQueueService> event_service = do_GetService(kEventQueueServiceCID); if (!event_service) { NS_WARNING("Failed to get event queue service"); return PR_FALSE; } nsCOMPtr<nsIEventQueue> event_queue; event_service->GetThreadEventQueue(NS_CURRENT_THREAD, getter_AddRefs(event_queue)); if (!event_queue) { NS_WARNING("Failed to get event queue from service"); return PR_FALSE; } PLEvent *event = new PLEvent; if (!event) { NS_WARNING("Out of memory?"); return PR_FALSE; } PL_InitEvent(event, this, (PLHandleEventProc)::HandlePLEvent, (PLDestroyEventProc)::DestroyPLEvent); // The event owns the content pointer now. NS_ADDREF_THIS(); event_queue->PostEvent(event); return PR_TRUE; }
void FileSystemTaskChildBase::ActorCreated(mozilla::ipc::PBackgroundChild* aActor) { if (HasError()) { // In this case we don't want to use IPC at all. RefPtr<ErrorRunnable> runnable = new ErrorRunnable(this); FileSystemUtils::DispatchRunnable(mGlobalObject, runnable.forget()); return; } if (mFileSystem->IsShutdown()) { return; } nsAutoString serialization; mFileSystem->SerializeDOMPath(serialization); ErrorResult rv; FileSystemParams params = GetRequestParams(serialization, rv); if (NS_WARN_IF(rv.Failed())) { rv.SuppressException(); return; } // Retain a reference so the task object isn't deleted without IPDL's // knowledge. The reference will be released by // mozilla::ipc::BackgroundChildImpl::DeallocPFileSystemRequestChild. NS_ADDREF_THIS(); if (NS_IsMainThread()) { nsIEventTarget* target = mGlobalObject->EventTargetFor(TaskCategory::Other); MOZ_ASSERT(target); aActor->SetEventTargetForActor(this, target); } aActor->SendPFileSystemRequestConstructor(this, params); }
MySecMan::MySecMan() : mMode(OK_ALL) { NS_ADDREF_THIS(); }
nsTestXPCFoo::nsTestXPCFoo() : mFoo(NULL) { NS_ADDREF_THIS(); }
xpcstringtest::xpcstringtest() { NS_ADDREF_THIS(); }
xpcTestIn :: xpcTestIn() { NS_ADDREF_THIS(); }
xpcTestParentOne :: xpcTestParentOne() { NS_ADDREF_THIS(); }
xpcTestChild5 :: xpcTestChild5() { NS_ADDREF_THIS(); }
NS_IMETHODIMP nsColorPicker::Open(nsIColorPickerShownCallback *aColorPickerShownCallback) { // Input color string should be 7 length (i.e. a string representing a valid // simple color) if (mInitialColor.Length() != 7) { return NS_ERROR_FAILURE; } const nsAString& withoutHash = StringTail(mInitialColor, 6); nscolor color; if (!NS_HexToRGBA(withoutHash, nsHexColorType::NoAlpha, &color)) { return NS_ERROR_FAILURE; } if (mCallback) { // It means Open has already been called: this is not allowed NS_WARNING("mCallback is already set. Open called twice?"); return NS_ERROR_FAILURE; } mCallback = aColorPickerShownCallback; nsXPIDLCString title; title.Adopt(ToNewUTF8String(mTitle)); GtkWindow *parent_window = GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)); #if defined(ACTIVATE_GTK3_COLOR_PICKER) && GTK_CHECK_VERSION(3,4,0) GtkWidget* color_chooser = gtk_color_chooser_dialog_new(title, parent_window); if (parent_window) { gtk_window_set_destroy_with_parent(GTK_WINDOW(color_chooser), TRUE); } gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(color_chooser), FALSE); GdkRGBA color_rgba = convertToRgbaColor(color); gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(color_chooser), &color_rgba); g_signal_connect(GTK_COLOR_CHOOSER(color_chooser), "color-activated", G_CALLBACK(OnColorChanged), this); #else GtkWidget *color_chooser = gtk_color_selection_dialog_new(title); if (parent_window) { GtkWindow *window = GTK_WINDOW(color_chooser); gtk_window_set_transient_for(window, parent_window); gtk_window_set_destroy_with_parent(window, TRUE); } GdkColor color_gdk = convertToGdkColor(color); gtk_color_selection_set_current_color(WidgetGetColorSelection(color_chooser), &color_gdk); g_signal_connect(WidgetGetColorSelection(color_chooser), "color-changed", G_CALLBACK(OnColorChanged), this); #endif NS_ADDREF_THIS(); g_signal_connect(color_chooser, "response", G_CALLBACK(OnResponse), this); g_signal_connect(color_chooser, "destroy", G_CALLBACK(OnDestroy), this); gtk_widget_show(color_chooser); return NS_OK; }
xpcTestChild3 :: xpcTestChild3() { NS_ADDREF_THIS(); }
nsTestXPCFoo2::nsTestXPCFoo2() { NS_ADDREF_THIS(); }
nsresult nsXMLPrettyPrinter::PrettyPrint(nsIDocument* aDocument, PRBool* aDidPrettyPrint) { *aDidPrettyPrint = PR_FALSE; // Check for iframe with display:none. Such iframes don't have presshells if (!aDocument->GetPrimaryShell()) { return NS_OK; } // check if we're in an invisible iframe nsPIDOMWindow *internalWin = aDocument->GetWindow(); nsCOMPtr<nsIDOMElement> frameElem; if (internalWin) { internalWin->GetFrameElement(getter_AddRefs(frameElem)); } if (frameElem) { nsCOMPtr<nsIDOMCSSStyleDeclaration> computedStyle; nsCOMPtr<nsIDOMDocument> frameOwnerDoc; frameElem->GetOwnerDocument(getter_AddRefs(frameOwnerDoc)); nsCOMPtr<nsIDOMDocumentView> docView = do_QueryInterface(frameOwnerDoc); if (docView) { nsCOMPtr<nsIDOMAbstractView> defaultView; docView->GetDefaultView(getter_AddRefs(defaultView)); nsCOMPtr<nsIDOMViewCSS> defaultCSSView = do_QueryInterface(defaultView); if (defaultCSSView) { defaultCSSView->GetComputedStyle(frameElem, EmptyString(), getter_AddRefs(computedStyle)); } } if (computedStyle) { nsAutoString visibility; computedStyle->GetPropertyValue(NS_LITERAL_STRING("visibility"), visibility); if (!visibility.EqualsLiteral("visible")) { return NS_OK; } } } // check the pref if (!nsContentUtils::GetBoolPref("layout.xml.prettyprint", PR_TRUE)) { return NS_OK; } // Ok, we should prettyprint. Let's do it! *aDidPrettyPrint = PR_TRUE; nsresult rv = NS_OK; // Load the XSLT nsCOMPtr<nsIURI> xslUri; rv = NS_NewURI(getter_AddRefs(xslUri), NS_LITERAL_CSTRING("chrome://global/content/xml/XMLPrettyPrint.xsl")); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIDOMDocument> xslDocument; rv = nsSyncLoadService::LoadDocument(xslUri, nsnull, nsnull, PR_TRUE, getter_AddRefs(xslDocument)); NS_ENSURE_SUCCESS(rv, rv); // Transform the document nsCOMPtr<nsIXSLTProcessor> transformer = do_CreateInstance("@mozilla.org/document-transformer;1?type=xslt", &rv); NS_ENSURE_SUCCESS(rv, rv); rv = transformer->ImportStylesheet(xslDocument); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIDOMDocumentFragment> resultFragment; nsCOMPtr<nsIDOMDocument> sourceDocument = do_QueryInterface(aDocument); rv = transformer->TransformToFragment(sourceDocument, sourceDocument, getter_AddRefs(resultFragment)); NS_ENSURE_SUCCESS(rv, rv); // Add the binding nsCOMPtr<nsIDOMDocumentXBL> xblDoc = do_QueryInterface(aDocument); NS_ASSERTION(xblDoc, "xml document doesn't implement nsIDOMDocumentXBL"); NS_ENSURE_TRUE(xblDoc, NS_ERROR_FAILURE); xblDoc->LoadBindingDocument(NS_LITERAL_STRING("chrome://global/content/xml/XMLPrettyPrint.xml")); nsCOMPtr<nsIDOMElement> rootElem; sourceDocument->GetDocumentElement(getter_AddRefs(rootElem)); NS_ENSURE_TRUE(rootElem, NS_ERROR_UNEXPECTED); rv = xblDoc->AddBinding(rootElem, NS_LITERAL_STRING("chrome://global/content/xml/XMLPrettyPrint.xml#prettyprint")); NS_ENSURE_SUCCESS(rv, rv); // Hand the result document to the binding nsCOMPtr<nsIObserver> binding; nsCOMPtr<nsIContent> rootCont = do_QueryInterface(rootElem); NS_ASSERTION(rootCont, "Element doesn't implement nsIContent"); aDocument->BindingManager()->GetBindingImplementation(rootCont, NS_GET_IID(nsIObserver), (void**)getter_AddRefs(binding)); NS_ASSERTION(binding, "Prettyprint binding doesn't implement nsIObserver"); NS_ENSURE_TRUE(binding, NS_ERROR_UNEXPECTED); rv = binding->Observe(resultFragment, "prettyprint-dom-created", EmptyString().get()); NS_ENSURE_SUCCESS(rv, rv); // Observe the document so we know when to switch to "normal" view aDocument->AddObserver(this); mDocument = aDocument; NS_ADDREF_THIS(); return NS_OK; }
xpctestEcho::xpctestEcho() : mReceiver(nsnull), mString(nsnull), mSomeValue(0) { NS_ADDREF_THIS(); }
xpcTestOut :: xpcTestOut() { NS_ADDREF_THIS(); }
nsTestXPCFoo::nsTestXPCFoo() { NS_ADDREF_THIS(); }
CGeckoView::CGeckoView() { NS_ADDREF_THIS(); }
xpcTestChild4 :: xpcTestChild4() { NS_ADDREF_THIS(); }
rbXPCOMTest::rbXPCOMTest() : mFoo((char*)nsMemory::Clone("foo", 4)) { NS_INIT_ISUPPORTS(); NS_ADDREF_THIS(); }
xpcoverloaded::xpcoverloaded() { NS_ADDREF_THIS(); }
// Called on the worker thread. nsresult BackgroundFileSaver::ProcessStateChange() { nsresult rv; // We might have been notified because the operation is complete, verify. if (CheckCompletion()) { return NS_OK; } // Get a copy of the current shared state for the worker thread. nsCOMPtr<nsIFile> initialTarget; bool initialTargetKeepPartial; nsCOMPtr<nsIFile> renamedTarget; bool renamedTargetKeepPartial; bool sha256Enabled; bool append; { MutexAutoLock lock(mLock); initialTarget = mInitialTarget; initialTargetKeepPartial = mInitialTargetKeepPartial; renamedTarget = mRenamedTarget; renamedTargetKeepPartial = mRenamedTargetKeepPartial; sha256Enabled = mSha256Enabled; append = mAppend; // From now on, another attention event needs to be posted if state changes. mWorkerThreadAttentionRequested = false; } // The initial target can only be null if it has never been assigned. In this // case, there is nothing to do since we never created any output file. if (!initialTarget) { return NS_OK; } // Determine if we are processing the attention request for the first time. bool isContinuation = !!mActualTarget; if (!isContinuation) { // Assign the target file for the first time. mActualTarget = initialTarget; mActualTargetKeepPartial = initialTargetKeepPartial; } // Verify whether we have actually been instructed to use a different file. // This may happen the first time this function is executed, if SetTarget was // called two times before the worker thread processed the attention request. bool equalToCurrent = false; if (renamedTarget) { rv = mActualTarget->Equals(renamedTarget, &equalToCurrent); NS_ENSURE_SUCCESS(rv, rv); if (!equalToCurrent) { // If we were asked to rename the file but the initial file did not exist, // we simply create the file in the renamed location. We avoid this check // if we have already started writing the output file ourselves. bool exists = true; if (!isContinuation) { rv = mActualTarget->Exists(&exists); NS_ENSURE_SUCCESS(rv, rv); } if (exists) { // We are moving the previous target file to a different location. nsCOMPtr<nsIFile> renamedTargetParentDir; rv = renamedTarget->GetParent(getter_AddRefs(renamedTargetParentDir)); NS_ENSURE_SUCCESS(rv, rv); nsAutoString renamedTargetName; rv = renamedTarget->GetLeafName(renamedTargetName); NS_ENSURE_SUCCESS(rv, rv); // We must delete any existing target file before moving the current // one. rv = renamedTarget->Exists(&exists); NS_ENSURE_SUCCESS(rv, rv); if (exists) { rv = renamedTarget->Remove(false); NS_ENSURE_SUCCESS(rv, rv); } // Move the file. If this fails, we still reference the original file // in mActualTarget, so that it is deleted if requested. If this // succeeds, the nsIFile instance referenced by mActualTarget mutates // and starts pointing to the new file, but we'll discard the reference. rv = mActualTarget->MoveTo(renamedTargetParentDir, renamedTargetName); NS_ENSURE_SUCCESS(rv, rv); } // Now we can update the actual target file name. mActualTarget = renamedTarget; mActualTargetKeepPartial = renamedTargetKeepPartial; } } // Notify if the target file name actually changed. if (!equalToCurrent) { // We must clone the nsIFile instance because mActualTarget is not // immutable, it may change if the target is renamed later. nsCOMPtr<nsIFile> actualTargetToNotify; rv = mActualTarget->Clone(getter_AddRefs(actualTargetToNotify)); NS_ENSURE_SUCCESS(rv, rv); RefPtr<NotifyTargetChangeRunnable> event = new NotifyTargetChangeRunnable(this, actualTargetToNotify); NS_ENSURE_TRUE(event, NS_ERROR_FAILURE); rv = mControlThread->Dispatch(event, NS_DISPATCH_NORMAL); NS_ENSURE_SUCCESS(rv, rv); } if (isContinuation) { // The pending rename operation might be the last task before finishing. We // may return here only if we have already created the target file. if (CheckCompletion()) { return NS_OK; } // Even if the operation did not complete, the pipe input stream may be // empty and may have been closed already. We detect this case using the // Available property, because it never returns an error if there is more // data to be consumed. If the pipe input stream is closed, we just exit // and wait for more calls like SetTarget or Finish to be invoked on the // control thread. However, we still truncate the file or create the // initial digest context if we are expected to do that. uint64_t available; rv = mPipeInputStream->Available(&available); if (NS_FAILED(rv)) { return NS_OK; } } // Create the digest context if requested and NSS hasn't been shut down. if (sha256Enabled && !mDigestContext) { nsNSSShutDownPreventionLock lock; if (!isAlreadyShutDown()) { mDigestContext = UniquePK11Context( PK11_CreateDigestContext(SEC_OID_SHA256)); NS_ENSURE_TRUE(mDigestContext, NS_ERROR_OUT_OF_MEMORY); } } // When we are requested to append to an existing file, we should read the // existing data and ensure we include it as part of the final hash. if (mDigestContext && append && !isContinuation) { nsCOMPtr<nsIInputStream> inputStream; rv = NS_NewLocalFileInputStream(getter_AddRefs(inputStream), mActualTarget, PR_RDONLY | nsIFile::OS_READAHEAD); if (rv != NS_ERROR_FILE_NOT_FOUND) { NS_ENSURE_SUCCESS(rv, rv); char buffer[BUFFERED_IO_SIZE]; while (true) { uint32_t count; rv = inputStream->Read(buffer, BUFFERED_IO_SIZE, &count); NS_ENSURE_SUCCESS(rv, rv); if (count == 0) { // We reached the end of the file. break; } nsNSSShutDownPreventionLock lock; if (isAlreadyShutDown()) { return NS_ERROR_NOT_AVAILABLE; } nsresult rv = MapSECStatus(PK11_DigestOp(mDigestContext.get(), uint8_t_ptr_cast(buffer), count)); NS_ENSURE_SUCCESS(rv, rv); } rv = inputStream->Close(); NS_ENSURE_SUCCESS(rv, rv); } } // We will append to the initial target file only if it was requested by the // caller, but we'll always append on subsequent accesses to the target file. int32_t creationIoFlags; if (isContinuation) { creationIoFlags = PR_APPEND; } else { creationIoFlags = (append ? PR_APPEND : PR_TRUNCATE) | PR_CREATE_FILE; } // Create the target file, or append to it if we already started writing it. // The 0600 permissions are used while the file is being downloaded, and for // interrupted downloads. Those may be located in the system temporary // directory, as well as the target directory, and generally have a ".part" // extension. Those part files should never be group or world-writable even // if the umask allows it. nsCOMPtr<nsIOutputStream> outputStream; rv = NS_NewLocalFileOutputStream(getter_AddRefs(outputStream), mActualTarget, PR_WRONLY | creationIoFlags, 0600); NS_ENSURE_SUCCESS(rv, rv); outputStream = NS_BufferOutputStream(outputStream, BUFFERED_IO_SIZE); if (!outputStream) { return NS_ERROR_FAILURE; } // Wrap the output stream so that it feeds the digest context if needed. if (mDigestContext) { // No need to acquire the NSS lock here, DigestOutputStream must acquire it // in any case before each asynchronous write. Constructing the // DigestOutputStream cannot fail. Passing mDigestContext to // DigestOutputStream is safe, because BackgroundFileSaver always outlives // the outputStream. BackgroundFileSaver is reference-counted before the // call to AsyncCopy, and mDigestContext is never destroyed before // AsyncCopyCallback. outputStream = new DigestOutputStream(outputStream, mDigestContext.get()); } // Start copying our input to the target file. No errors can be raised past // this point if the copy starts, since they should be handled by the thread. { MutexAutoLock lock(mLock); rv = NS_AsyncCopy(mPipeInputStream, outputStream, mWorkerThread, NS_ASYNCCOPY_VIA_READSEGMENTS, 4096, AsyncCopyCallback, this, false, true, getter_AddRefs(mAsyncCopyContext), GetProgressCallback()); if (NS_FAILED(rv)) { NS_WARNING("NS_AsyncCopy failed."); mAsyncCopyContext = nullptr; return rv; } } // If the operation succeeded, we must ensure that we keep this object alive // for the entire duration of the copy, since only the raw pointer will be // provided as the argument of the AsyncCopyCallback function. We can add the // reference now, after NS_AsyncCopy returned, because it always starts // processing asynchronously, and there is no risk that the callback is // invoked before we reach this point. If the operation failed instead, then // AsyncCopyCallback will never be called. NS_ADDREF_THIS(); return NS_OK; }
xpcTestParentTwo :: xpcTestParentTwo() { NS_ADDREF_THIS(); }
nsresult nsNPAPIPluginStreamListener::OnStartBinding(nsPluginStreamListenerPeer* streamPeer) { if (!mInst || !mInst->CanFireNotifications() || mStreamCleanedUp) return NS_ERROR_FAILURE; PluginDestructionGuard guard(mInst); nsNPAPIPlugin* plugin = mInst->GetPlugin(); if (!plugin || !plugin->GetLibrary()) return NS_ERROR_FAILURE; NPPluginFuncs* pluginFunctions = plugin->PluginFuncs(); if (!pluginFunctions->newstream) return NS_ERROR_FAILURE; NPP npp; mInst->GetNPP(&npp); bool seekable; char* contentType; uint16_t streamType = NP_NORMAL; NPError error; streamPeer->GetURL(&mNPStreamWrapper->mNPStream.url); streamPeer->GetLength((uint32_t*)&(mNPStreamWrapper->mNPStream.end)); streamPeer->GetLastModified((uint32_t*)&(mNPStreamWrapper->mNPStream.lastmodified)); streamPeer->IsSeekable(&seekable); streamPeer->GetContentType(&contentType); if (!mResponseHeaders.IsEmpty()) { mResponseHeaderBuf = PL_strdup(mResponseHeaders.get()); mNPStreamWrapper->mNPStream.headers = mResponseHeaderBuf; } mStreamListenerPeer = streamPeer; NPPAutoPusher nppPusher(npp); NS_TRY_SAFE_CALL_RETURN(error, (*pluginFunctions->newstream)(npp, (char*)contentType, &mNPStreamWrapper->mNPStream, seekable, &streamType), mInst, NS_PLUGIN_CALL_UNSAFE_TO_REENTER_GECKO); NPP_PLUGIN_LOG(PLUGIN_LOG_NORMAL, ("NPP NewStream called: this=%p, npp=%p, mime=%s, seek=%d, type=%d, return=%d, url=%s\n", this, npp, (char *)contentType, seekable, streamType, error, mNPStreamWrapper->mNPStream.url)); if (error != NPERR_NO_ERROR) return NS_ERROR_FAILURE; switch(streamType) { case NP_NORMAL: mStreamType = NP_NORMAL; break; case NP_ASFILEONLY: mStreamType = NP_ASFILEONLY; break; case NP_ASFILE: mStreamType = NP_ASFILE; break; case NP_SEEK: mStreamType = NP_SEEK; // Seekable streams should continue to exist even after OnStopRequest // is fired, so we AddRef ourself an extra time and Release when the // plugin calls NPN_DestroyStream (CleanUpStream). If the plugin never // calls NPN_DestroyStream the stream will be destroyed before the plugin // instance is destroyed. NS_ADDREF_THIS(); break; default: return NS_ERROR_FAILURE; } mStreamStarted = true; return NS_OK; }
xpcTestChild2 :: xpcTestChild2() { NS_ADDREF_THIS(); }