gecko-dev/dom/html/HTMLExtAppElement.cpp
Nathan Froyd 01583602a9 Bug 1207245 - part 6 - rename nsRefPtr<T> to RefPtr<T>; r=ehsan; a=Tomcat
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
2015-10-18 01:24:48 -04:00

186 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);
}