Skip to content

Commit

Permalink
Bug 1393805 - Part 1 - Add XRE_USER_SYS_EXTENSION_DEV_DIR XRESysExtDe…
Browse files Browse the repository at this point in the history
…v Key. r=bobowen,gcp

Adds a new directory provider key "XRESysExtDev" to be used by system extension
developers needing to load system extensions from a directory readable by
sandboxed content processes.

MozReview-Commit-ID: 4BKOZoPzCC3
  • Loading branch information
hafta committed Oct 4, 2017
1 parent dea29c2 commit e26906c
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
53 changes: 53 additions & 0 deletions toolkit/xre/nsXREDirProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
return NS_ERROR_FAILURE;
#endif
}
else if (!strcmp(aProperty, XRE_USER_SYS_EXTENSION_DEV_DIR)) {
return GetSysUserExtensionsDevDirectory(aFile);
}
else if (!strcmp(aProperty, XRE_APP_DISTRIBUTION_DIR)) {
bool persistent = false;
rv = GetFile(NS_GRE_DIR, &persistent, getter_AddRefs(file));
Expand Down Expand Up @@ -1522,6 +1525,23 @@ nsXREDirProvider::GetSysUserExtensionsDirectory(nsIFile** aFile)
return NS_OK;
}

nsresult
nsXREDirProvider::GetSysUserExtensionsDevDirectory(nsIFile** aFile)
{
nsCOMPtr<nsIFile> localDir;
nsresult rv = GetUserDataDirectoryHome(getter_AddRefs(localDir), false);
NS_ENSURE_SUCCESS(rv, rv);

rv = AppendSysUserExtensionsDevPath(localDir);
NS_ENSURE_SUCCESS(rv, rv);

rv = EnsureDirectoryExists(localDir);
NS_ENSURE_SUCCESS(rv, rv);

localDir.forget(aFile);
return NS_OK;
}

#if defined(XP_UNIX) || defined(XP_MACOSX)
nsresult
nsXREDirProvider::GetSystemExtensionsDirectory(nsIFile** aFile)
Expand Down Expand Up @@ -1629,6 +1649,39 @@ nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile)
return NS_OK;
}

nsresult
nsXREDirProvider::AppendSysUserExtensionsDevPath(nsIFile* aFile)
{
MOZ_ASSERT(aFile);

nsresult rv;

#if defined (XP_MACOSX) || defined(XP_WIN)

static const char* const sXR = "Mozilla";
rv = aFile->AppendNative(nsDependentCString(sXR));
NS_ENSURE_SUCCESS(rv, rv);

static const char* const sExtensions = "SystemExtensionsDev";
rv = aFile->AppendNative(nsDependentCString(sExtensions));
NS_ENSURE_SUCCESS(rv, rv);

#elif defined(XP_UNIX)

static const char* const sXR = ".mozilla";
rv = aFile->AppendNative(nsDependentCString(sXR));
NS_ENSURE_SUCCESS(rv, rv);

static const char* const sExtensions = "systemextensionsdev";
rv = aFile->AppendNative(nsDependentCString(sExtensions));
NS_ENSURE_SUCCESS(rv, rv);

#else
#error "Don't know how to get XRE system extension dev path on your platform"
#endif
return NS_OK;
}


nsresult
nsXREDirProvider::AppendProfilePath(nsIFile* aFile,
Expand Down
2 changes: 2 additions & 0 deletions toolkit/xre/nsXREDirProvider.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ class nsXREDirProvider final : public nsIDirectoryServiceProvider2,
nsresult GetFilesInternal(const char* aProperty, nsISimpleEnumerator** aResult);
static nsresult GetUserDataDirectoryHome(nsIFile* *aFile, bool aLocal);
static nsresult GetSysUserExtensionsDirectory(nsIFile* *aFile);
static nsresult GetSysUserExtensionsDevDirectory(nsIFile* *aFile);
#if defined(XP_UNIX) || defined(XP_MACOSX)
static nsresult GetSystemExtensionsDirectory(nsIFile** aFile);
#endif
Expand All @@ -118,6 +119,7 @@ class nsXREDirProvider final : public nsIDirectoryServiceProvider2,
bool aLocal);

static nsresult AppendSysUserExtensionPath(nsIFile* aFile);
static nsresult AppendSysUserExtensionsDevPath(nsIFile* aFile);

// Internal helper that splits a path into components using the '/' and '\\'
// delimiters.
Expand Down
6 changes: 6 additions & 0 deletions xpcom/build/nsXULAppAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,12 @@
*/
#define XRE_USER_SYS_EXTENSION_DIR "XREUSysExt"

/**
* A directory service key which specifies a directory where temporary
* system extensions can be loaded from during development.
*/
#define XRE_USER_SYS_EXTENSION_DEV_DIR "XRESysExtDev"

/**
* A directory service key which specifies the distribution specific files for
* the application.
Expand Down

0 comments on commit e26906c

Please sign in to comment.