From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- dom/base/nsContentPermissionHelper.h | 215 +++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 dom/base/nsContentPermissionHelper.h (limited to 'dom/base/nsContentPermissionHelper.h') diff --git a/dom/base/nsContentPermissionHelper.h b/dom/base/nsContentPermissionHelper.h new file mode 100644 index 000000000..af15744af --- /dev/null +++ b/dom/base/nsContentPermissionHelper.h @@ -0,0 +1,215 @@ +/* -*- 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/. */ + +#ifndef nsContentPermissionHelper_h +#define nsContentPermissionHelper_h + +#include "nsIContentPermissionPrompt.h" +#include "nsTArray.h" +#include "nsIMutableArray.h" +#include "mozilla/dom/PContentPermissionRequestChild.h" +#include "mozilla/dom/ipc/IdType.h" +#include "nsIDOMEventListener.h" + +// Microsoft's API Name hackery sucks +// XXXbz Doing this in a header is a gigantic footgun. See +// https://bugzilla.mozilla.org/show_bug.cgi?id=932421#c3 for why. +#undef LoadImage + +class nsPIDOMWindowInner; +class nsContentPermissionRequestProxy; +class VisibilityChangeListener; + +// Forward declare IPC::Principal here which is defined in +// PermissionMessageUtils.h. Include this file will transitively includes +// "windows.h" and it defines +// #define CreateEvent CreateEventW +// #define LoadImage LoadImageW +// That will mess up windows build. +namespace IPC { +class Principal; +} // namespace IPC + +namespace mozilla { +namespace dom { + +class Element; +class PermissionRequest; +class ContentPermissionRequestParent; +class PContentPermissionRequestParent; + +class ContentPermissionType : public nsIContentPermissionType +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSICONTENTPERMISSIONTYPE + + ContentPermissionType(const nsACString& aType, + const nsACString& aAccess, + const nsTArray& aOptions); + +protected: + virtual ~ContentPermissionType(); + + nsCString mType; + nsCString mAccess; + nsTArray mOptions; +}; + +class nsContentPermissionUtils +{ +public: + static uint32_t + ConvertPermissionRequestToArray(nsTArray& aSrcArray, + nsIMutableArray* aDesArray); + + static uint32_t + ConvertArrayToPermissionRequest(nsIArray* aSrcArray, + nsTArray& aDesArray); + + static nsresult + CreatePermissionArray(const nsACString& aType, + const nsACString& aAccess, + const nsTArray& aOptions, + nsIArray** aTypesArray); + + static PContentPermissionRequestParent* + CreateContentPermissionRequestParent(const nsTArray& aRequests, + Element* element, + const IPC::Principal& principal, + const TabId& aTabId); + + static nsresult + AskPermission(nsIContentPermissionRequest* aRequest, + nsPIDOMWindowInner* aWindow); + + static nsTArray + GetContentPermissionRequestParentById(const TabId& aTabId); + + static void + NotifyRemoveContentPermissionRequestParent(PContentPermissionRequestParent* aParent); + + static nsTArray + GetContentPermissionRequestChildById(const TabId& aTabId); + + static void + NotifyRemoveContentPermissionRequestChild(PContentPermissionRequestChild* aChild); +}; + +class nsContentPermissionRequester final : public nsIContentPermissionRequester +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSICONTENTPERMISSIONREQUESTER + + explicit nsContentPermissionRequester(nsPIDOMWindowInner* aWindow); + +private: + virtual ~nsContentPermissionRequester(); + + nsWeakPtr mWindow; + RefPtr mListener; +}; + +} // namespace dom +} // namespace mozilla + +using mozilla::dom::ContentPermissionRequestParent; + +class nsContentPermissionRequestProxy : public nsIContentPermissionRequest +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSICONTENTPERMISSIONREQUEST + + nsContentPermissionRequestProxy(); + + nsresult Init(const nsTArray& requests, + ContentPermissionRequestParent* parent); + + void OnParentDestroyed(); + + void NotifyVisibility(const bool& aIsVisible); + +private: + class nsContentPermissionRequesterProxy final : public nsIContentPermissionRequester { + public: + NS_DECL_ISUPPORTS + NS_DECL_NSICONTENTPERMISSIONREQUESTER + + explicit nsContentPermissionRequesterProxy(ContentPermissionRequestParent* aParent) + : mParent(aParent) + , mWaitGettingResult(false) {} + + void NotifyVisibilityResult(const bool& aIsVisible); + + private: + virtual ~nsContentPermissionRequesterProxy() {} + + ContentPermissionRequestParent* mParent; + bool mWaitGettingResult; + nsCOMPtr mGetCallback; + nsCOMPtr mOnChangeCallback; + }; + + virtual ~nsContentPermissionRequestProxy(); + + // Non-owning pointer to the ContentPermissionRequestParent object which owns this proxy. + ContentPermissionRequestParent* mParent; + nsTArray mPermissionRequests; + RefPtr mRequester; +}; + +/** + * RemotePermissionRequest will send a prompt ipdl request to b2g process. + */ +class RemotePermissionRequest final : public nsIContentPermissionRequestCallback + , public mozilla::dom::PContentPermissionRequestChild +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSICONTENTPERMISSIONREQUESTCALLBACK + + RemotePermissionRequest(nsIContentPermissionRequest* aRequest, + nsPIDOMWindowInner* aWindow); + + // It will be called when prompt dismissed. + virtual bool RecvNotifyResult(const bool &aAllow, + InfallibleTArray&& aChoices) override; + + virtual bool RecvGetVisibility() override; + + void IPDLAddRef() + { + mIPCOpen = true; + AddRef(); + } + + void IPDLRelease() + { + mIPCOpen = false; + Release(); + } + + void Destroy(); + + bool IPCOpen() const { return mIPCOpen && !mDestroyed; } + +private: + virtual ~RemotePermissionRequest(); + + void DoAllow(JS::HandleValue aChoices); + void DoCancel(); + + nsCOMPtr mRequest; + nsCOMPtr mWindow; + bool mIPCOpen; + bool mDestroyed; + RefPtr mListener; +}; + +#endif // nsContentPermissionHelper_h + -- cgit v1.2.3