diff -r 000000000000 -r 6474c204b198 dom/plugins/ipc/PluginIdentifierParent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/plugins/ipc/PluginIdentifierParent.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,89 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: sw=2 ts=2 et : + * 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/. */ + +#ifndef dom_plugins_PluginIdentifierParent_h +#define dom_plugins_PluginIdentifierParent_h + +#include "mozilla/plugins/PPluginIdentifierParent.h" + +#include "npapi.h" +#include "npruntime.h" + +namespace mozilla { +namespace plugins { + +class PluginInstanceParent; + +class PluginIdentifierParent : public PPluginIdentifierParent +{ + friend class PluginModuleParent; + +public: + NPIdentifier ToNPIdentifier() + { + return mIdentifier; + } + + bool IsTemporary() { + return !!mTemporaryRefs; + } + + /** + * Holds a perhaps-temporary identifier for the current stack frame. + */ + class MOZ_STACK_CLASS StackIdentifier + { + public: + StackIdentifier(PluginInstanceParent* inst, NPIdentifier aIdentifier); + StackIdentifier(NPObject* aObject, NPIdentifier aIdentifier); + ~StackIdentifier(); + + operator PluginIdentifierParent*() { + return mIdentifier; + } + + private: + DISALLOW_COPY_AND_ASSIGN(StackIdentifier); + + PluginIdentifierParent* mIdentifier; + }; + +protected: + PluginIdentifierParent(NPIdentifier aIdentifier, bool aTemporary) + : mIdentifier(aIdentifier) + , mTemporaryRefs(aTemporary ? 1 : 0) + { + MOZ_COUNT_CTOR(PluginIdentifierParent); + } + + virtual ~PluginIdentifierParent() + { + MOZ_COUNT_DTOR(PluginIdentifierParent); + } + + virtual bool RecvRetain() MOZ_OVERRIDE; + + void AddTemporaryRef() { + mTemporaryRefs++; + } + + /** + * @returns true if the last temporary reference was removed. + */ + bool RemoveTemporaryRef() { + --mTemporaryRefs; + return !mTemporaryRefs; + } + +private: + NPIdentifier mIdentifier; + unsigned int mTemporaryRefs; +}; + +} // namespace plugins +} // namespace mozilla + +#endif // dom_plugins_PluginIdentifierParent_h