Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/browser/GeckoDirectoryProvider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'browser/GeckoDirectoryProvider.cpp')
-rw-r--r--browser/GeckoDirectoryProvider.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/browser/GeckoDirectoryProvider.cpp b/browser/GeckoDirectoryProvider.cpp
new file mode 100644
index 0000000..c94a7cf
--- /dev/null
+++ b/browser/GeckoDirectoryProvider.cpp
@@ -0,0 +1,66 @@
+#include "GeckoDirectoryProvider.h"
+
+#include <nsCOMPtr.h>
+#include <nsIIOService.h>
+#include <nsNetUtil.h>
+#include <nsArrayEnumerator.h>
+#include <nsILocalFile.h>
+#include <nsDirectoryServiceDefs.h>
+#include <nsIToolkitChromeRegistry.h>
+#include <nsIDirectoryService.h>
+#include <nsCOMArray.h>
+
+#include <glib.h>
+
+NS_IMPL_ISUPPORTS2 (GeckoDirectoryProvider,
+ nsIDirectoryServiceProvider,
+ nsIDirectoryServiceProvider2)
+
+GeckoDirectoryProvider::GeckoDirectoryProvider(const char *sugar_path)
+{
+ mComponentPath = g_strconcat(sugar_path, "/mozilla/components", NULL);
+}
+
+GeckoDirectoryProvider::~GeckoDirectoryProvider()
+{
+ if(mComponentPath)
+ g_free(mComponentPath);
+}
+
+/* nsIFile getFile (in string prop, out PRBool persistent); */
+NS_IMETHODIMP
+GeckoDirectoryProvider::GetFile (const char *prop,
+ PRBool *persistent,
+ nsIFile **_retval)
+{
+ return NS_ERROR_FAILURE;
+}
+
+/* nsISimpleEnumerator getFiles (in string aProperty); */
+NS_IMETHODIMP
+GeckoDirectoryProvider::GetFiles (const char *aProperty, nsISimpleEnumerator **aResult)
+{
+ nsresult rv = NS_ERROR_FAILURE;
+
+ if (!strcmp(aProperty, NS_XPCOM_COMPONENT_DIR_LIST)) {
+ if (mComponentPath) {
+ nsCOMPtr<nsILocalFile> componentDir;
+ rv = NS_NewNativeLocalFile(nsDependentCString(mComponentPath),
+ PR_TRUE,
+ getter_AddRefs (componentDir));
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ nsCOMArray<nsIFile> array;
+
+ rv = array.AppendObject (componentDir);
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ rv = NS_NewArrayEnumerator (aResult, array);
+ NS_ENSURE_SUCCESS (rv, rv);
+
+ rv = NS_SUCCESS_AGGREGATE_RESULT;
+ }
+ }
+
+ return rv;
+}