mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-12 14:20:14 +02:00
The bulk of this commit was generated with a script, executed at the top
level of a typical source code checkout. The only non-machine-generated
part was modifying MFBT's moz.build to reflect the new naming.
CLOSED TREE makes big refactorings like this a piece of cake.
# The main substitution.
find . -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
xargs perl -p -i -e '
s/nsRefPtr\.h/RefPtr\.h/g; # handle includes
s/nsRefPtr ?</RefPtr</g; # handle declarations and variables
'
# Handle a special friend declaration in gfx/layers/AtomicRefCountedWithFinalize.h.
perl -p -i -e 's/::nsRefPtr;/::RefPtr;/' gfx/layers/AtomicRefCountedWithFinalize.h
# Handle nsRefPtr.h itself, a couple places that define constructors
# from nsRefPtr, and code generators specially. We do this here, rather
# than indiscriminantly s/nsRefPtr/RefPtr/, because that would rename
# things like nsRefPtrHashtable.
perl -p -i -e 's/nsRefPtr/RefPtr/g' \
mfbt/nsRefPtr.h \
xpcom/glue/nsCOMPtr.h \
xpcom/base/OwningNonNull.h \
ipc/ipdl/ipdl/lower.py \
ipc/ipdl/ipdl/builtin.py \
dom/bindings/Codegen.py \
python/lldbutils/lldbutils/utils.py
# In our indiscriminate substitution above, we renamed
# nsRefPtrGetterAddRefs, the class behind getter_AddRefs. Fix that up.
find . -name '*.cpp' -o -name '*.h' -o -name '*.idl' | \
xargs perl -p -i -e 's/nsRefPtrGetterAddRefs/RefPtrGetterAddRefs/g'
if [ -d .git ]; then
git mv mfbt/nsRefPtr.h mfbt/RefPtr.h
else
hg mv mfbt/nsRefPtr.h mfbt/RefPtr.h
fi
--HG--
rename : mfbt/nsRefPtr.h => mfbt/RefPtr.h
185 lines
5.1 KiB
C++
185 lines
5.1 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* 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/. */
|
|
|
|
#include "mozilla/dom/HTMLExtAppElement.h"
|
|
#include "mozilla/dom/HTMLUnknownElement.h"
|
|
#include "mozilla/dom/HTMLExtAppElementBinding.h"
|
|
#include "mozilla/dom/ExternalAppEvent.h"
|
|
|
|
#include "nsGkAtoms.h"
|
|
#include "nsIAtom.h"
|
|
#include "nsIPermissionManager.h"
|
|
#include "nsStyleConsts.h"
|
|
#include "nsRuleData.h"
|
|
|
|
nsGenericHTMLElement*
|
|
NS_NewHTMLExtAppElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
|
|
mozilla::dom::FromParser aFromParser) {
|
|
// Return HTMLUnknownElement if the document doesn't have the 'external-app' permission.
|
|
nsCOMPtr<nsIPermissionManager> permissionManager =
|
|
mozilla::services::GetPermissionManager();
|
|
RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
|
|
nsIPrincipal* principal = ni->GetDocument()->NodePrincipal();
|
|
|
|
already_AddRefed<mozilla::dom::NodeInfo> aarni = ni.forget();
|
|
|
|
if (!permissionManager) {
|
|
return new mozilla::dom::HTMLUnknownElement(aarni);
|
|
}
|
|
|
|
uint32_t perm = nsIPermissionManager::UNKNOWN_ACTION;
|
|
permissionManager->TestExactPermissionFromPrincipal(principal,
|
|
"external-app",
|
|
&perm);
|
|
if (perm != nsIPermissionManager::ALLOW_ACTION) {
|
|
return new mozilla::dom::HTMLUnknownElement(aarni);
|
|
}
|
|
|
|
return new mozilla::dom::HTMLExtAppElement(aarni);
|
|
}
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
HTMLExtAppElement::HTMLExtAppElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
|
|
: nsGenericHTMLElement(aNodeInfo)
|
|
{
|
|
mCustomEventDispatch = new nsCustomEventDispatch(this);
|
|
mCustomPropertyBag = new nsCustomPropertyBag();
|
|
|
|
nsCOMPtr<nsIExternalApplication> app =
|
|
do_CreateInstance(NS_EXTERNALAPP_CONTRACTID);
|
|
if (app) {
|
|
nsresult rv = app->Init(OwnerDoc()->GetInnerWindow(), mCustomPropertyBag, mCustomEventDispatch);
|
|
if (NS_SUCCEEDED(rv)) {
|
|
mApp = app;
|
|
}
|
|
}
|
|
}
|
|
|
|
HTMLExtAppElement::~HTMLExtAppElement()
|
|
{
|
|
mCustomEventDispatch->ClearEventTarget();
|
|
}
|
|
|
|
void
|
|
HTMLExtAppElement::GetCustomProperty(const nsAString& aName, nsString& aReturn)
|
|
{
|
|
mCustomPropertyBag->GetCustomProperty(aName, aReturn);
|
|
}
|
|
|
|
void
|
|
HTMLExtAppElement::PostMessage(const nsAString& aMessage, ErrorResult& aRv)
|
|
{
|
|
if (!mApp) {
|
|
aRv.Throw(NS_ERROR_UNEXPECTED);
|
|
return;
|
|
}
|
|
|
|
aRv = mApp->PostMessage(aMessage);
|
|
}
|
|
|
|
NS_IMPL_ADDREF_INHERITED(HTMLExtAppElement, Element)
|
|
NS_IMPL_RELEASE_INHERITED(HTMLExtAppElement, Element)
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_CLASS(HTMLExtAppElement)
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(HTMLExtAppElement,
|
|
nsGenericHTMLElement)
|
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(HTMLExtAppElement,
|
|
nsGenericHTMLElement)
|
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
|
|
|
// QueryInterface implementation for HTMLExtAppElement
|
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(HTMLExtAppElement)
|
|
NS_INTERFACE_MAP_END_INHERITING(nsGenericHTMLElement)
|
|
|
|
NS_IMPL_ELEMENT_CLONE(HTMLExtAppElement)
|
|
|
|
JSObject*
|
|
HTMLExtAppElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
|
|
{
|
|
return HTMLExtAppElementBinding::Wrap(aCx, this, aGivenProto);
|
|
}
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
NS_IMPL_ISUPPORTS(nsCustomPropertyBag, nsICustomPropertyBag)
|
|
|
|
nsCustomPropertyBag::nsCustomPropertyBag()
|
|
{
|
|
}
|
|
|
|
nsCustomPropertyBag::~nsCustomPropertyBag()
|
|
{
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsCustomPropertyBag::SetProperty(const nsAString& aName, const nsAString& aValue)
|
|
{
|
|
mBag.Put(nsString(aName), new nsString(aValue));
|
|
return NS_OK;
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsCustomPropertyBag::RemoveProperty(const nsAString& aName)
|
|
{
|
|
mBag.Remove(nsString(aName));
|
|
return NS_OK;
|
|
}
|
|
|
|
void
|
|
nsCustomPropertyBag::GetCustomProperty(const nsAString& aName, nsString& aReturn)
|
|
{
|
|
nsString* value;
|
|
if (!mBag.Get(nsString(aName), &value)) {
|
|
aReturn.Truncate();
|
|
return;
|
|
}
|
|
|
|
MOZ_ASSERT(value);
|
|
aReturn.Assign(*value);
|
|
}
|
|
|
|
NS_IMPL_ISUPPORTS(nsCustomEventDispatch, nsICustomEventDispatch)
|
|
|
|
nsCustomEventDispatch::nsCustomEventDispatch(mozilla::dom::EventTarget* aEventTarget)
|
|
: mEventTarget(aEventTarget)
|
|
{
|
|
MOZ_ASSERT(mEventTarget);
|
|
}
|
|
|
|
void
|
|
nsCustomEventDispatch::ClearEventTarget()
|
|
{
|
|
mEventTarget = nullptr;
|
|
}
|
|
|
|
nsCustomEventDispatch::~nsCustomEventDispatch()
|
|
{
|
|
}
|
|
|
|
NS_IMETHODIMP
|
|
nsCustomEventDispatch::DispatchExternalEvent(const nsAString& value)
|
|
{
|
|
if (!mEventTarget) {
|
|
return NS_OK;
|
|
}
|
|
|
|
mozilla::dom::ExternalAppEventInit init;
|
|
init.mData = value;
|
|
|
|
RefPtr<mozilla::dom::ExternalAppEvent> event =
|
|
mozilla::dom::ExternalAppEvent::Constructor(mEventTarget,
|
|
NS_LITERAL_STRING("externalappevent"),
|
|
init);
|
|
|
|
bool defaultActionEnabled;
|
|
return mEventTarget->DispatchEvent(event, &defaultActionEnabled);
|
|
}
|