already_AddRefed<nsIDocument> DOMImplementation::CreateHTMLDocument(const Optional<nsAString>& aTitle, ErrorResult& aRv) { nsCOMPtr<nsIDocument> document; nsCOMPtr<nsIDOMDocument> domDocument; aRv = CreateHTMLDocument(aTitle.WasPassed() ? aTitle.Value() : NullString(), getter_AddRefs(document), getter_AddRefs(domDocument)); return document.forget(); }
IPCResult PendingIPCBlobParent::Recv__delete__(const PendingIPCBlobData& aData) { if (aData.file().type() == PendingIPCFileUnion::Tvoid_t) { mBlobImpl->SetLazyData(NullString(), aData.type(), aData.size(), INT64_MAX); } else { const PendingIPCFileData& fileData = aData.file().get_PendingIPCFileData(); mBlobImpl->SetLazyData(fileData.name(), aData.type(), aData.size(), fileData.lastModified()); } return IPC_OK(); }
NS_IMETHODIMP nsSHEntry::Create(nsIURI* aURI, const nsAString& aTitle, nsIInputStream* aInputStream, nsILayoutHistoryState* aLayoutHistoryState, nsISupports* aCacheKey, const nsACString& aContentType, nsIPrincipal* aTriggeringPrincipal, nsIPrincipal* aPrincipalToInherit, const nsID& aDocShellID, bool aDynamicCreation) { MOZ_ASSERT(aTriggeringPrincipal, "need a valid triggeringPrincipal to create a session history entry"); mURI = aURI; mTitle = aTitle; mPostData = aInputStream; // Set the LoadType by default to loadHistory during creation mLoadType = (uint32_t)nsIDocShellLoadInfo::loadHistory; mShared->mCacheKey = aCacheKey; mShared->mContentType = aContentType; mShared->mTriggeringPrincipal = aTriggeringPrincipal; mShared->mPrincipalToInherit = aPrincipalToInherit; mShared->mDocShellID = aDocShellID; mShared->mDynamicallyCreated = aDynamicCreation; // By default all entries are set false for subframe flag. // nsDocShell::CloneAndReplace() which creates entries for // all subframe navigations, sets the flag to true. mShared->mIsFrameNavigation = false; // By default we save LayoutHistoryState mShared->mSaveLayoutState = true; mShared->mLayoutHistoryState = aLayoutHistoryState; // By default the page is not expired mShared->mExpired = false; mIsSrcdocEntry = false; mSrcdocData = NullString(); mLoadedInThisProcess = true; return NS_OK; }
NS_IMETHODIMP nsSHEntry::Create(nsIURI* aURI, const nsAString& aTitle, nsIInputStream* aInputStream, nsILayoutHistoryState* aLayoutHistoryState, nsISupports* aCacheKey, const nsACString& aContentType, nsISupports* aOwner, uint64_t aDocShellID, bool aDynamicCreation) { mURI = aURI; mTitle = aTitle; mPostData = aInputStream; // Set the LoadType by default to loadHistory during creation mLoadType = (uint32_t)nsIDocShellLoadInfo::loadHistory; mShared->mCacheKey = aCacheKey; mShared->mContentType = aContentType; mShared->mOwner = aOwner; mShared->mDocShellID = aDocShellID; mShared->mDynamicallyCreated = aDynamicCreation; // By default all entries are set false for subframe flag. // nsDocShell::CloneAndReplace() which creates entries for // all subframe navigations, sets the flag to true. mShared->mIsFrameNavigation = false; // By default we save LayoutHistoryState mShared->mSaveLayoutState = true; mShared->mLayoutHistoryState = aLayoutHistoryState; // By default the page is not expired mShared->mExpired = false; mIsSrcdocEntry = false; mSrcdocData = NullString(); return NS_OK; }
nsresult HTMLImageElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName, const nsAttrValue* aValue, bool aNotify) { if (aNameSpaceID == kNameSpaceID_None && mForm && (aName == nsGkAtoms::name || aName == nsGkAtoms::id) && aValue && !aValue->IsEmptyString()) { // add the image to the hashtable as needed MOZ_ASSERT(aValue->Type() == nsAttrValue::eAtom, "Expected atom value for name/id"); mForm->AddImageElementToTable(this, nsDependentAtomString(aValue->GetAtomValue())); } // Handle src/srcset/crossorigin updates. If aNotify is false, we are coming // from the parser or some such place; we'll get bound after all the // attributes have been set, so we'll do the image load from BindToTree. nsAttrValueOrString attrVal(aValue); if (aName == nsGkAtoms::src && aNameSpaceID == kNameSpaceID_None && !aValue) { // SetAttr handles setting src since it needs to catch img.src = // img.src, so we only need to handle the unset case if (InResponsiveMode()) { if (mResponsiveSelector && mResponsiveSelector->Content() == this) { mResponsiveSelector->SetDefaultSource(NullString()); } QueueImageLoadTask(true); } else { // Bug 1076583 - We still behave synchronously in the non-responsive case CancelImageRequests(aNotify); } } else if (aName == nsGkAtoms::srcset && aNameSpaceID == kNameSpaceID_None && IsSrcsetEnabled()) { PictureSourceSrcsetChanged(this, attrVal.String(), aNotify); } else if (aName == nsGkAtoms::sizes && aNameSpaceID == kNameSpaceID_None && HTMLPictureElement::IsPictureEnabled()) { PictureSourceSizesChanged(this, attrVal.String(), aNotify); } else if (aName == nsGkAtoms::crossorigin && aNameSpaceID == kNameSpaceID_None && aNotify) { // Force a new load of the image with the new cross origin policy. if (InResponsiveMode()) { // per spec, full selection runs when this changes, even though // it doesn't directly affect the source selection QueueImageLoadTask(true); } else { // Bug 1076583 - We still use the older synchronous algorithm in // non-responsive mode. Force a new load of the image with the // new cross origin policy. ForceReload(aNotify); } } return nsGenericHTMLElement::AfterSetAttr(aNameSpaceID, aName, aValue, aNotify); }
// static nsresult FileManager::InitDirectory(mozIStorageServiceQuotaManagement* aService, nsIFile* aDirectory, nsIFile* aDatabaseFile, FactoryPrivilege aPrivilege) { NS_ASSERTION(!NS_IsMainThread(), "Wrong thread!"); NS_ASSERTION(aService, "Null service!"); NS_ASSERTION(aDirectory, "Null directory!"); NS_ASSERTION(aDatabaseFile, "Null database file!"); bool exists; nsresult rv = aDirectory->Exists(&exists); NS_ENSURE_SUCCESS(rv, rv); if (!exists) { return NS_OK; } bool isDirectory; rv = aDirectory->IsDirectory(&isDirectory); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(isDirectory, NS_ERROR_FAILURE); nsCOMPtr<nsIFile> journalDirectory; rv = aDirectory->Clone(getter_AddRefs(journalDirectory)); NS_ENSURE_SUCCESS(rv, rv); rv = journalDirectory->Append(NS_LITERAL_STRING(JOURNAL_DIRECTORY_NAME)); NS_ENSURE_SUCCESS(rv, rv); rv = journalDirectory->Exists(&exists); NS_ENSURE_SUCCESS(rv, rv); if (exists) { rv = journalDirectory->IsDirectory(&isDirectory); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(isDirectory, NS_ERROR_FAILURE); nsCOMPtr<nsISimpleEnumerator> entries; rv = journalDirectory->GetDirectoryEntries(getter_AddRefs(entries)); NS_ENSURE_SUCCESS(rv, rv); bool hasElements; rv = entries->HasMoreElements(&hasElements); NS_ENSURE_SUCCESS(rv, rv); if (hasElements) { nsCOMPtr<mozIStorageConnection> connection; rv = OpenDatabaseHelper::CreateDatabaseConnection( NullString(), aDatabaseFile, aDirectory, getter_AddRefs(connection)); NS_ENSURE_SUCCESS(rv, rv); mozStorageTransaction transaction(connection, false); rv = connection->ExecuteSimpleSQL(NS_LITERAL_CSTRING( "CREATE VIRTUAL TABLE fs USING filesystem;" )); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<mozIStorageStatement> stmt; rv = connection->CreateStatement(NS_LITERAL_CSTRING( "SELECT name, (name IN (SELECT id FROM file)) FROM fs " "WHERE path = :path" ), getter_AddRefs(stmt)); NS_ENSURE_SUCCESS(rv, rv); nsString path; rv = journalDirectory->GetPath(path); NS_ENSURE_SUCCESS(rv, rv); rv = stmt->BindStringByName(NS_LITERAL_CSTRING("path"), path); NS_ENSURE_SUCCESS(rv, rv); bool hasResult; while (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult) { nsString name; rv = stmt->GetString(0, name); NS_ENSURE_SUCCESS(rv, rv); int32_t flag = stmt->AsInt32(1); if (!flag) { nsCOMPtr<nsIFile> file; rv = aDirectory->Clone(getter_AddRefs(file)); NS_ENSURE_SUCCESS(rv, rv); rv = file->Append(name); NS_ENSURE_SUCCESS(rv, rv); if (NS_FAILED(file->Remove(false))) { NS_WARNING("Failed to remove orphaned file!"); } } nsCOMPtr<nsIFile> journalFile; rv = journalDirectory->Clone(getter_AddRefs(journalFile)); NS_ENSURE_SUCCESS(rv, rv); rv = journalFile->Append(name); NS_ENSURE_SUCCESS(rv, rv); if (NS_FAILED(journalFile->Remove(false))) { NS_WARNING("Failed to remove journal file!"); } } rv = connection->ExecuteSimpleSQL(NS_LITERAL_CSTRING( "DROP TABLE fs;" )); NS_ENSURE_SUCCESS(rv, rv); transaction.Commit(); } } if (aPrivilege == Chrome) { return NS_OK; } nsCOMPtr<nsISimpleEnumerator> entries; rv = aDirectory->GetDirectoryEntries(getter_AddRefs(entries)); NS_ENSURE_SUCCESS(rv, rv); bool hasMore; while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) && hasMore) { nsCOMPtr<nsISupports> entry; rv = entries->GetNext(getter_AddRefs(entry)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIFile> file = do_QueryInterface(entry); NS_ENSURE_TRUE(file, NS_NOINTERFACE); nsString leafName; rv = file->GetLeafName(leafName); NS_ENSURE_SUCCESS(rv, rv); if (leafName.EqualsLiteral(JOURNAL_DIRECTORY_NAME)) { continue; } rv = aService->UpdateQuotaInformationForFile(file); NS_ENSURE_SUCCESS(rv, rv); } return NS_OK; }
nsresult DOMImplementation::CreateHTMLDocument(const nsAString& aTitle, nsIDocument** aDocument, nsIDOMDocument** aDOMDocument) { *aDocument = nullptr; *aDOMDocument = nullptr; NS_ENSURE_STATE(mOwner); nsCOMPtr<nsIDOMDocumentType> doctype; // Indicate that there is no internal subset (not just an empty one) nsresult rv = NS_NewDOMDocumentType(getter_AddRefs(doctype), mOwner->NodeInfoManager(), nsGkAtoms::html, // aName EmptyString(), // aPublicId EmptyString(), // aSystemId NullString()); // aInternalSubset NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIGlobalObject> scriptHandlingObject = do_QueryReferent(mScriptObject); NS_ENSURE_STATE(!mScriptObject || scriptHandlingObject); nsCOMPtr<nsIDOMDocument> document; rv = NS_NewDOMDocument(getter_AddRefs(document), EmptyString(), EmptyString(), doctype, mDocumentURI, mBaseURI, mOwner->NodePrincipal(), true, scriptHandlingObject, DocumentFlavorLegacyGuess); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIDocument> doc = do_QueryInterface(document); nsCOMPtr<nsIContent> root; rv = doc->CreateElem(NS_LITERAL_STRING("html"), nullptr, kNameSpaceID_XHTML, getter_AddRefs(root)); NS_ENSURE_SUCCESS(rv, rv); rv = doc->AppendChildTo(root, false); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIContent> head; rv = doc->CreateElem(NS_LITERAL_STRING("head"), nullptr, kNameSpaceID_XHTML, getter_AddRefs(head)); NS_ENSURE_SUCCESS(rv, rv); rv = root->AppendChildTo(head, false); NS_ENSURE_SUCCESS(rv, rv); if (!DOMStringIsNull(aTitle)) { nsCOMPtr<nsIContent> title; rv = doc->CreateElem(NS_LITERAL_STRING("title"), nullptr, kNameSpaceID_XHTML, getter_AddRefs(title)); NS_ENSURE_SUCCESS(rv, rv); rv = head->AppendChildTo(title, false); NS_ENSURE_SUCCESS(rv, rv); nsRefPtr<nsTextNode> titleText = new nsTextNode(doc->NodeInfoManager()); rv = titleText->SetText(aTitle, false); NS_ENSURE_SUCCESS(rv, rv); rv = title->AppendChildTo(titleText, false); NS_ENSURE_SUCCESS(rv, rv); } nsCOMPtr<nsIContent> body; rv = doc->CreateElem(NS_LITERAL_STRING("body"), nullptr, kNameSpaceID_XHTML, getter_AddRefs(body)); NS_ENSURE_SUCCESS(rv, rv); rv = root->AppendChildTo(body, false); NS_ENSURE_SUCCESS(rv, rv); doc->SetReadyStateInternal(nsIDocument::READYSTATE_COMPLETE); doc.forget(aDocument); document.forget(aDOMDocument); return NS_OK; }