diff --git a/caps/nsIAddonPolicyService.idl b/caps/nsIAddonPolicyService.idl index d89de56aff95..0932be05cb35 100644 --- a/caps/nsIAddonPolicyService.idl +++ b/caps/nsIAddonPolicyService.idl @@ -52,6 +52,12 @@ interface nsIAddonPolicyService : nsISupports */ boolean addonMayLoadURI(in AString aAddonId, in nsIURI aURI, [optional] in boolean aExplicit); + /** + * Returns the name of the WebExtension with the given ID, or the ID string + * if no matching add-on can be found. + */ + AString getExtensionName(in AString aAddonId); + /** * Returns true if a given extension:// URI is web-accessible. */ diff --git a/dom/webidl/WebExtensionPolicy.webidl b/dom/webidl/WebExtensionPolicy.webidl index f1cedbb33c07..6a7742d48397 100644 --- a/dom/webidl/WebExtensionPolicy.webidl +++ b/dom/webidl/WebExtensionPolicy.webidl @@ -34,6 +34,12 @@ interface WebExtensionPolicy { [Constant] readonly attribute ByteString baseURL; + /** + * The extension's user-visible name. + */ + [Constant] + readonly attribute DOMString name; + /** * The content security policy string to apply to all pages loaded from the * extension's moz-extension: protocol. @@ -142,6 +148,8 @@ dictionary WebExtensionInit { required DOMString baseURL; + DOMString name = ""; + required WebExtensionLocalizeCallback localizeCallback; required MatchPatternSet allowedOrigins; diff --git a/toolkit/components/extensions/Extension.jsm b/toolkit/components/extensions/Extension.jsm index 1c91019d2dca..02920eca5a33 100644 --- a/toolkit/components/extensions/Extension.jsm +++ b/toolkit/components/extensions/Extension.jsm @@ -993,6 +993,7 @@ this.Extension = class extends ExtensionData { return { id: this.id, uuid: this.uuid, + name: this.name, instanceId: this.instanceId, manifest: this.manifest, resourceURL: this.resourceURL, diff --git a/toolkit/components/extensions/ExtensionPolicyService.cpp b/toolkit/components/extensions/ExtensionPolicyService.cpp index 449e81a47a80..30899a8cef65 100644 --- a/toolkit/components/extensions/ExtensionPolicyService.cpp +++ b/toolkit/components/extensions/ExtensionPolicyService.cpp @@ -377,6 +377,17 @@ ExtensionPolicyService::AddonMayLoadURI(const nsAString& aAddonId, return NS_ERROR_INVALID_ARG; } +nsresult +ExtensionPolicyService::GetExtensionName(const nsAString& aAddonId, + nsAString& aName) +{ + if (WebExtensionPolicy* policy = GetByID(aAddonId)) { + aName.Assign(policy->Name()); + return NS_OK; + } + return NS_ERROR_INVALID_ARG; +} + nsresult ExtensionPolicyService::ExtensionURILoadableByAnyone(nsIURI* aURI, bool* aResult) { diff --git a/toolkit/components/extensions/WebExtensionPolicy.cpp b/toolkit/components/extensions/WebExtensionPolicy.cpp index 498f545a3a04..86249b9e7b2e 100644 --- a/toolkit/components/extensions/WebExtensionPolicy.cpp +++ b/toolkit/components/extensions/WebExtensionPolicy.cpp @@ -89,6 +89,7 @@ WebExtensionPolicy::WebExtensionPolicy(GlobalObject& aGlobal, ErrorResult& aRv) : mId(NS_AtomizeMainThread(aInit.mId)) , mHostname(aInit.mMozExtensionHostname) + , mName(aInit.mName) , mContentSecurityPolicy(aInit.mContentSecurityPolicy) , mLocalizeCallback(aInit.mLocalizeCallback) , mPermissions(new AtomSet(aInit.mPermissions)) diff --git a/toolkit/components/extensions/WebExtensionPolicy.h b/toolkit/components/extensions/WebExtensionPolicy.h index 167cab8f593b..30f4612a28c9 100644 --- a/toolkit/components/extensions/WebExtensionPolicy.h +++ b/toolkit/components/extensions/WebExtensionPolicy.h @@ -82,6 +82,15 @@ public: void Localize(const nsAString& aInput, nsString& aResult) const; + const nsString& Name() const + { + return mName; + } + void GetName(nsAString& aName) const + { + aName = mName; + } + const nsString& ContentSecurityPolicy() const { return mContentSecurityPolicy; @@ -153,6 +162,7 @@ private: nsCString mHostname; nsCOMPtr mBaseURI; + nsString mName; nsString mContentSecurityPolicy; bool mActive = false; diff --git a/toolkit/components/extensions/extension-process-script.js b/toolkit/components/extensions/extension-process-script.js index 51ce682813ae..523d432766ba 100644 --- a/toolkit/components/extensions/extension-process-script.js +++ b/toolkit/components/extensions/extension-process-script.js @@ -317,6 +317,7 @@ ExtensionManager = { policy = new WebExtensionPolicy({ id: extension.id, mozExtensionHostname: extension.uuid, + name: extension.name, baseURL: extension.resourceURL, permissions: Array.from(extension.permissions),