nsresult nsHTMLSharedElement::SetAttr(PRInt32 aNameSpaceID, nsIAtom* aName, nsIAtom* aPrefix, const nsAString& aValue, PRBool aNotify) { nsresult rv = nsGenericHTMLElement::SetAttr(aNameSpaceID, aName, aPrefix, aValue, aNotify); NS_ENSURE_SUCCESS(rv, rv); // If the href attribute of a <base> tag is changing, we may need to update // the document's base URI, which will cause all the links on the page to be // re-resolved given the new base. If the target attribute is changing, we // similarly need to change the base target. if (mNodeInfo->Equals(nsGkAtoms::base) && aNameSpaceID == kNameSpaceID_None && IsInDoc()) { if (aName == nsGkAtoms::href) { SetBaseURIUsingFirstBaseWithHref(GetCurrentDoc(), this); } else if (aName == nsGkAtoms::target) { SetBaseTargetUsingFirstBaseWithTarget(GetCurrentDoc(), this); } } return NS_OK; }
NS_IMETHODIMP nsHTMLMenuElement::SendShowEvent() { NS_ENSURE_TRUE(nsContentUtils::IsCallerChrome(), NS_ERROR_DOM_SECURITY_ERR); nsCOMPtr<nsIDocument> document = GetCurrentDoc(); if (!document) { return NS_ERROR_FAILURE; } nsEvent event(true, NS_SHOW_EVENT); event.flags |= NS_EVENT_FLAG_CANT_CANCEL | NS_EVENT_FLAG_CANT_BUBBLE; nsCOMPtr<nsIPresShell> shell = document->GetShell(); if (!shell) { return NS_ERROR_FAILURE; } nsRefPtr<nsPresContext> presContext = shell->GetPresContext(); nsEventStatus status = nsEventStatus_eIgnore; nsEventDispatcher::Dispatch(static_cast<nsIContent*>(this), presContext, &event, nullptr, &status); return NS_OK; }
void HTMLLinkElement::UnbindFromTree(bool aDeep, bool aNullParent) { // If this link is ever reinserted into a document, it might // be under a different xml:base, so forget the cached state now. Link::ResetLinkState(false, Link::ElementHasHref()); // Once we have XPCOMGC we shouldn't need to call UnbindFromTree during Unlink // and so this messy event dispatch can go away. nsCOMPtr<nsIDocument> oldDoc = GetCurrentDoc(); // Check for a ShadowRoot because link elements are inert in a // ShadowRoot. ShadowRoot* oldShadowRoot = GetBindingParent() ? GetBindingParent()->GetShadowRoot() : nullptr; if (oldDoc && !oldShadowRoot) { oldDoc->UnregisterPendingLinkUpdate(this); } CreateAndDispatchEvent(oldDoc, NS_LITERAL_STRING("DOMLinkRemoved")); nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); UpdateStyleSheetInternal(oldDoc, oldShadowRoot); UpdateImport(); }
void nsXTFElementWrapper::RegUnregAccessKey(PRBool aDoReg) { nsIDocument* doc = GetCurrentDoc(); if (!doc) return; // Get presentation shell 0 nsIPresShell *presShell = doc->GetShell(); if (!presShell) return; nsPresContext *presContext = presShell->GetPresContext(); if (!presContext) return; nsEventStateManager *esm = presContext->EventStateManager(); if (!esm) return; // Register or unregister as appropriate. nsCOMPtr<nsIDOMAttr> accesskeyNode; GetXTFElement()->GetAccesskeyNode(getter_AddRefs(accesskeyNode)); if (!accesskeyNode) return; nsAutoString accessKey; accesskeyNode->GetValue(accessKey); if (aDoReg && !accessKey.IsEmpty()) esm->RegisterAccessKey(this, (PRUint32)accessKey.First()); else esm->UnregisterAccessKey(this, (PRUint32)accessKey.First()); }
// /// Calls CreateAnyView(*doc) where doc is the current document. // void TDocManager::ViewCreate() { TDocument* doc = GetCurrentDoc(); if (doc) CreateAnyView(*doc); }
void HTMLAnchorElement::UnbindFromTree(bool aDeep, bool aNullParent) { // Cancel any DNS prefetches // Note: Must come before ResetLinkState. If called after, it will recreate // mCachedURI based on data that is invalid - due to a call to GetHostname. // If prefetch was deferred, clear flag and move on if (HasFlag(HTML_ANCHOR_DNS_PREFETCH_DEFERRED)) UnsetFlags(HTML_ANCHOR_DNS_PREFETCH_DEFERRED); // Else if prefetch was requested, clear flag and send cancellation else if (HasFlag(HTML_ANCHOR_DNS_PREFETCH_REQUESTED)) { UnsetFlags(HTML_ANCHOR_DNS_PREFETCH_REQUESTED); // Possible that hostname could have changed since binding, but since this // covers common cases, most DNS prefetch requests will be canceled nsHTMLDNSPrefetch::CancelPrefetchLow(this, NS_ERROR_ABORT); } // If this link is ever reinserted into a document, it might // be under a different xml:base, so forget the cached state now. Link::ResetLinkState(false, Link::ElementHasHref()); nsIDocument* doc = GetCurrentDoc(); if (doc) { doc->UnregisterPendingLinkUpdate(this); } nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); }
nsGenericHTMLElement* HTMLLabelElement::GetLabeledElement() const { nsAutoString elementId; if (!GetAttr(kNameSpaceID_None, nsGkAtoms::_for, elementId)) { // No @for, so we are a label for our first form control element. // Do a depth-first traversal to look for the first form control element. return GetFirstLabelableDescendant(); } // We have a @for. The id has to be linked to an element in the same document // and this element should be a labelable form control. nsIDocument* doc = GetCurrentDoc(); if (!doc) { return nullptr; } Element* element = doc->GetElementById(elementId); if (element && element->IsLabelable()) { return static_cast<nsGenericHTMLElement*>(element); } return nullptr; }
void nsHTMLMetaElement::UnbindFromTree(bool aDeep, bool aNullParent) { nsCOMPtr<nsIDocument> oldDoc = GetCurrentDoc(); CreateAndDispatchEvent(oldDoc, NS_LITERAL_STRING("DOMMetaRemoved")); nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); }
void nsHTMLStyleElement::UnbindFromTree(PRBool aDeep, PRBool aNullParent) { nsCOMPtr<nsIDocument> oldDoc = GetCurrentDoc(); nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); UpdateStyleSheetInternal(oldDoc); }
void SVGTitleElement::SendTitleChangeEvent(bool aBound) { nsIDocument* doc = GetCurrentDoc(); if (doc) { doc->NotifyPossibleTitleChange(aBound); } }
void HTMLStyleElement::UnbindFromTree(bool aDeep, bool aNullParent) { nsCOMPtr<nsIDocument> oldDoc = GetCurrentDoc(); ShadowRoot* oldShadow = GetContainingShadow(); nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); UpdateStyleSheetInternal(oldDoc, oldShadow); }
void nsXMLStylesheetPI::UnbindFromTree(bool aDeep, bool aNullParent) { nsCOMPtr<nsIDocument> oldDoc = GetCurrentDoc(); nsXMLProcessingInstruction::UnbindFromTree(aDeep, aNullParent); UpdateStyleSheetInternal(oldDoc); }
void HTMLLinkElement::UpdateImport() { // 1. link node should be attached to the document. nsCOMPtr<nsIDocument> doc = GetCurrentDoc(); if (!doc) { // We might have been just removed from the document, so // let's remove ourself from the list of link nodes of // the import and reset mImportLoader. if (mImportLoader) { mImportLoader->RemoveLinkElement(this); mImportLoader = nullptr; } return; } // Until the script execution order is not sorted out for nested cases // let's not allow them. if (!doc->IsMasterDocument()) { nsContentUtils::LogSimpleConsoleError( NS_LITERAL_STRING("Nested imports are not supported yet"), "Imports"); return; } // 2. rel type should be import. nsAutoString rel; GetAttr(kNameSpaceID_None, nsGkAtoms::rel, rel); uint32_t linkTypes = nsStyleLinkElement::ParseLinkTypes(rel); if (!(linkTypes & eHTMLIMPORT)) { mImportLoader = nullptr; return; } nsCOMPtr<nsIURI> uri = GetHrefURI(); if (!uri) { mImportLoader = nullptr; return; } if (!nsStyleLinkElement::IsImportEnabled()) { // For now imports are hidden behind a pref... return; } nsRefPtr<ImportManager> manager = doc->ImportManager(); MOZ_ASSERT(manager, "ImportManager should be created lazily when needed"); { // The load even might fire sooner than we could set mImportLoader so // we must use async event and a scriptBlocker here. nsAutoScriptBlocker scriptBlocker; // CORS check will happen at the start of the load. mImportLoader = manager->Get(uri, this, doc); } }
void nsSVGElement::FlushAnimations() { nsIDocument* doc = GetCurrentDoc(); if (doc) { nsSMILAnimationController* smilController = doc->GetAnimationController(); if (smilController) { smilController->FlushResampleRequests(); } } }
void nsSVGElement::AnimationNeedsResample() { nsIDocument* doc = GetCurrentDoc(); if (doc) { nsSMILAnimationController* smilController = doc->GetAnimationController(); if (smilController) { smilController->SetResampleNeeded(); } } }
void SVGUseElement::TriggerReclone() { nsIDocument *doc = GetCurrentDoc(); if (!doc) return; nsIPresShell *presShell = doc->GetShell(); if (!presShell) return; presShell->PostRecreateFramesFor(this); }
bool HTMLAnchorElement::IsHTMLFocusable(bool aWithMouse, bool *aIsFocusable, int32_t *aTabIndex) { if (nsGenericHTMLElement::IsHTMLFocusable(aWithMouse, aIsFocusable, aTabIndex)) { return true; } // cannot focus links if there is no link handler nsIDocument* doc = GetCurrentDoc(); if (doc) { nsIPresShell* presShell = doc->GetShell(); if (presShell) { nsPresContext* presContext = presShell->GetPresContext(); if (presContext && !presContext->GetLinkHandler()) { *aIsFocusable = false; return false; } } } if (IsEditable()) { if (aTabIndex) { *aTabIndex = -1; } *aIsFocusable = false; return true; } if (!HasAttr(kNameSpaceID_None, nsGkAtoms::tabindex)) { // check whether we're actually a link if (!Link::HasURI()) { // Not tabbable or focusable without href (bug 17605), unless // forced to be via presence of nonnegative tabindex attribute if (aTabIndex) { *aTabIndex = -1; } *aIsFocusable = false; return false; } } if (aTabIndex && (sTabFocusModel & eTabFocus_linksMask) == 0) { *aTabIndex = -1; } *aIsFocusable = true; return false; }
// /// If the document can be closed it is closed. // void TDocManager::FileClose() { TDocument* doc = GetCurrentDoc(); if (doc && doc->CanClose()) { // normally calls back to FlushDoc() if (!doc->Close()) PostDocError(*doc, IDS_UNABLECLOSE); else delete doc; } WARNX(OwlDocView, !doc, 0, _T("FileClose invoked with no current doc")); }
void TDocManager::FileRevert() { TDocument* doc = GetCurrentDoc(); if (doc && doc->GetDocPath()) { if (!doc->IsDirty()) { PostDocError(*doc, IDS_NOTCHANGED); return; } doc->Revert(); } }
void CMainFrame::OnSelchangeGroupList () { CFusionDoc *pDoc = GetCurrentDoc (); int CurSel; CurSel = m_wndGroupBar.m_comboBox.GetCurSel (); if (CurSel != LB_ERR) { pDoc->mCurrentGroup = m_wndGroupBar.m_comboBox.GetItemData (CurSel); m_wndTabControls->GrpTab->UpdateTabDisplay (pDoc); } }
bool HTMLObjectElement::IsFocusableForTabIndex() { nsIDocument* doc = GetCurrentDoc(); if (!doc || doc->HasFlag(NODE_IS_EDITABLE)) { return false; } return IsEditableRoot() || (Type() == eType_Document && nsContentUtils::IsSubDocumentTabbable(this)); }
nsresult nsHTMLSharedElement::UnsetAttr(PRInt32 aNameSpaceID, nsIAtom* aName, PRBool aNotify) { nsresult rv = nsGenericHTMLElement::UnsetAttr(aNameSpaceID, aName, aNotify); NS_ENSURE_SUCCESS(rv, rv); // If we're the first <base> with an href and our href attribute is being // unset, then we're no longer the first <base> with an href, and we need to // find the new one. Similar for target. if (mNodeInfo->Equals(nsGkAtoms::base) && aNameSpaceID == kNameSpaceID_None && IsInDoc()) { if (aName == nsGkAtoms::href) { SetBaseURIUsingFirstBaseWithHref(GetCurrentDoc(), nsnull); } else if (aName == nsGkAtoms::target) { SetBaseTargetUsingFirstBaseWithTarget(GetCurrentDoc(), nsnull); } } return NS_OK; }
// /// SelectAnySave() is called to get a template. Then the Commit() function is called /// for the current document. // void TDocManager::FileSaveAs() { TDocument* doc = GetCurrentDoc(); if (doc) { TDocTemplate* tpl = SelectAnySave(*doc, true); if (tpl) { if (tpl != doc->Template) doc->SetTemplate(tpl); // replace existing template if (doc->Commit(true)) // force rewrite to new path PostEvent(dnRename, *doc); // WM_OWLDOCUMENT } } }
nsresult HTMLMetaElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName, const nsAttrValue* aValue, bool aNotify) { if (aNameSpaceID == kNameSpaceID_None) { if (aName == nsGkAtoms::content) { nsIDocument *document = GetCurrentDoc(); CreateAndDispatchEvent(document, NS_LITERAL_STRING("DOMMetaChanged")); } } return nsGenericHTMLElement::AfterSetAttr(aNameSpaceID, aName, aValue, aNotify); }
bool nsMappedAttributeElement::SetMappedAttribute(nsIDocument* aDocument, nsIAtom* aName, nsAttrValue& aValue, nsresult* aRetval) { NS_PRECONDITION(aDocument == GetCurrentDoc(), "Unexpected document"); nsHTMLStyleSheet* sheet = aDocument ? aDocument->GetAttributeStyleSheet() : nullptr; *aRetval = mAttrsAndChildren.SetAndTakeMappedAttr(aName, aValue, this, sheet); return true; }
void HTMLAreaElement::UnbindFromTree(bool aDeep, bool aNullParent) { // If this link is ever reinserted into a document, it might // be under a different xml:base, so forget the cached state now. Link::ResetLinkState(false, Link::ElementHasHref()); nsIDocument* doc = GetCurrentDoc(); if (doc) { doc->UnregisterPendingLinkUpdate(this); } nsGenericHTMLElement::UnbindFromTree(aDeep, aNullParent); }
void SVGUseElement::LookupHref() { nsAutoString href; mStringAttributes[HREF].GetAnimValue(href, this); if (href.IsEmpty()) return; nsCOMPtr<nsIURI> targetURI; nsCOMPtr<nsIURI> baseURI = mOriginal ? mOriginal->GetBaseURI() : GetBaseURI(); nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(targetURI), href, GetCurrentDoc(), baseURI); mSource.Reset(this, targetURI); }
void TDocManager::FileSave() { TDocument* doc = GetCurrentDoc(); if (doc) { if (!doc->GetDocPath()) { CmFileSaveAs(); return; } if (!(Mode & dmSaveEnable) && !doc->IsDirty()) { PostDocError(*doc, IDS_NOTCHANGED); return; } doc->Commit(); // No force of write here since is just to same file } }
void nsMathMLElement::SetIncrementScriptLevel(PRBool aIncrementScriptLevel, PRBool aNotify) { if (aIncrementScriptLevel == mIncrementScriptLevel) return; mIncrementScriptLevel = aIncrementScriptLevel; NS_ASSERTION(aNotify, "We always notify!"); nsIDocument* doc = GetCurrentDoc(); if (!doc) return; mozAutoDocUpdate upd(doc, UPDATE_CONTENT_STATE, PR_TRUE); doc->ContentStateChanged(this, NS_EVENT_STATE_INCREMENT_SCRIPT_LEVEL); }
/* nsIDOMSVGMatrix getScreenCTM (); */ NS_IMETHODIMP nsSVGGraphicElement::GetScreenCTM(nsIDOMSVGMatrix **_retval) { nsresult rv; *_retval = nsnull; nsIDocument* currentDoc = GetCurrentDoc(); if (currentDoc) { // Flush all pending notifications so that our frames are uptodate currentDoc->FlushPendingNotifications(Flush_Layout); } nsBindingManager *bindingManager = nsnull; // XXXbz I _think_ this is right. We want to be using the binding manager // that would have attached the binding that gives us our anonymous parent. // That's the binding manager for the document we actually belong to, which // is our owner doc. nsIDocument* ownerDoc = GetOwnerDoc(); if (ownerDoc) { bindingManager = ownerDoc->BindingManager(); } nsIContent* parent = nsnull; nsCOMPtr<nsIDOMSVGMatrix> parentScreenCTM; if (bindingManager) { // check for an anonymous parent first parent = bindingManager->GetInsertionParent(this); } if (!parent) { // if we didn't find an anonymous parent, use the explicit one parent = GetParent(); } nsCOMPtr<nsIDOMSVGLocatable> locatableElement = do_QueryInterface(parent); if (!locatableElement) { // we don't have an SVGLocatable parent so we aren't even rendered NS_WARNING("SVGGraphicElement without an SVGLocatable parent"); return NS_ERROR_FAILURE; } // get our parent's "screen" CTM rv = locatableElement->GetScreenCTM(getter_AddRefs(parentScreenCTM)); if (NS_FAILED(rv)) return rv; return AppendLocalTransform(parentScreenCTM, _retval); }