NS_IMETHODIMP nsMacShellService::SetDesktopBackground(nsIDOMElement* aElement, int32_t aPosition) { // Note: We don't support aPosition on OS X. // Get the image URI: nsresult rv; nsCOMPtr<nsIImageLoadingContent> imageContent = do_QueryInterface(aElement, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIURI> imageURI; rv = imageContent->GetCurrentURI(getter_AddRefs(imageURI)); NS_ENSURE_SUCCESS(rv, rv); // We need the referer URI for nsIWebBrowserPersist::saveURI nsCOMPtr<nsIContent> content = do_QueryInterface(aElement, &rv); NS_ENSURE_SUCCESS(rv, rv); nsIURI *docURI = content->OwnerDoc()->GetDocumentURI(); if (!docURI) return NS_ERROR_FAILURE; // Get the desired image file name nsCOMPtr<nsIURL> imageURL(do_QueryInterface(imageURI)); if (!imageURL) { // XXXmano (bug 300293): Non-URL images (e.g. the data: protocol) are not // yet supported. What filename should we take here? return NS_ERROR_NOT_IMPLEMENTED; } nsAutoCString fileName; imageURL->GetFileName(fileName); nsCOMPtr<nsIProperties> fileLocator (do_GetService("@mozilla.org/file/directory_service;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); // Get the current user's "Pictures" folder (That's ~/Pictures): fileLocator->Get(NS_OSX_PICTURE_DOCUMENTS_DIR, NS_GET_IID(nsIFile), getter_AddRefs(mBackgroundFile)); if (!mBackgroundFile) return NS_ERROR_OUT_OF_MEMORY; nsAutoString fileNameUnicode; CopyUTF8toUTF16(fileName, fileNameUnicode); // and add the imgage file name itself: mBackgroundFile->Append(fileNameUnicode); // Download the image; the desktop background will be set in OnStateChange() nsCOMPtr<nsIWebBrowserPersist> wbp (do_CreateInstance("@mozilla.org/embedding/browser/nsWebBrowserPersist;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); uint32_t flags = nsIWebBrowserPersist::PERSIST_FLAGS_NO_CONVERSION | nsIWebBrowserPersist::PERSIST_FLAGS_REPLACE_EXISTING_FILES | nsIWebBrowserPersist::PERSIST_FLAGS_FROM_CACHE; wbp->SetPersistFlags(flags); wbp->SetProgressListener(this); nsCOMPtr<nsILoadContext> loadContext; nsCOMPtr<nsISupports> container = content->OwnerDoc()->GetContainer(); nsCOMPtr<nsIDocShell> docShell = do_QueryInterface(container); if (docShell) { loadContext = do_QueryInterface(docShell); } return wbp->SaveURI(imageURI, nullptr, docURI, content->OwnerDoc()->GetReferrerPolicy(), nullptr, nullptr, mBackgroundFile, loadContext); }
SzbaseWrapper::SzbaseWrapper( const std::string& base ) : base_name(base) { std::wstring wbp( base_name.begin() , base_name.end() ); IPKContainer::GetObject()->GetConfig( wbp ); }