gecko-dev/dom/xul/nsXULContentUtils.cpp
Brendan Dahl 3c230cf25e Bug 1481286 - Use a custom element to add/remove command updater. r=bz
Create a "commandset" custom element that performs the job of adding and
removing command updaters that XULDocument use to do. Previously, the
"commandupdater" attribute was allowed on any element, but in tree it is
only every used on "commandset" elements.

MozReview-Commit-ID: HUXMG9kx4ft
2018-08-08 09:02:03 -07:00

89 lines
2.2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
A package of routines shared by the XUL content code.
*/
#include "mozilla/ArrayUtils.h"
#include "nsCollationCID.h"
#include "nsCOMPtr.h"
#include "nsIContent.h"
#include "nsICollation.h"
#include "nsIDocument.h"
#include "nsIDOMXULCommandDispatcher.h"
#include "nsIServiceManager.h"
#include "nsXULContentUtils.h"
#include "nsLayoutCID.h"
#include "nsString.h"
#include "nsGkAtoms.h"
#include "XULDocument.h"
using namespace mozilla;
using dom::XULDocument;
//------------------------------------------------------------------------
nsICollation *nsXULContentUtils::gCollation;
//------------------------------------------------------------------------
// Constructors n' stuff
//
nsresult
nsXULContentUtils::Finish()
{
NS_IF_RELEASE(gCollation);
return NS_OK;
}
nsICollation*
nsXULContentUtils::GetCollation()
{
if (!gCollation) {
nsCOMPtr<nsICollationFactory> colFactory =
do_CreateInstance(NS_COLLATIONFACTORY_CONTRACTID);
if (colFactory) {
DebugOnly<nsresult> rv = colFactory->CreateCollation(&gCollation);
NS_ASSERTION(NS_SUCCEEDED(rv),
"couldn't create collation instance");
} else
NS_ERROR("couldn't create instance of collation factory");
}
return gCollation;
}
//------------------------------------------------------------------------
//
nsresult
nsXULContentUtils::FindChildByTag(nsIContent* aElement,
int32_t aNameSpaceID,
nsAtom* aTag,
Element** aResult)
{
for (nsIContent* child = aElement->GetFirstChild();
child;
child = child->GetNextSibling()) {
if (child->IsElement() &&
child->NodeInfo()->Equals(aTag, aNameSpaceID)) {
NS_ADDREF(*aResult = child->AsElement());
return NS_OK;
}
}
*aResult = nullptr;
return NS_RDF_NO_VALUE; // not found
}