xpcom/tests/RegFactory.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #include <iostream.h>
     7 #include "plstr.h"
     8 #include "prlink.h"
     9 #include "nsIComponentRegistrar.h"
    10 #include "nsIComponentManager.h"
    11 #include "nsIServiceManager.h"
    12 #include "nsIFile.h"
    13 #include "nsCOMPtr.h"
    14 #include "nsString.h"
    16 static bool gUnreg = false;
    18 void print_err(nsresult err)
    19 {
    20   switch (err) {
    21   case NS_ERROR_FACTORY_NOT_LOADED:
    22     cerr << "Factory not loaded";
    23     break;
    24   case NS_NOINTERFACE:
    25     cerr << "No Interface";
    26     break;
    27   case NS_ERROR_NULL_POINTER:
    28     cerr << "Null pointer";
    29     break;
    30   case NS_ERROR_OUT_OF_MEMORY:
    31     cerr << "Out of memory";
    32     break;
    33   default:
    34     cerr << hex << err << dec;
    35   }
    36 }
    38 nsresult Register(nsIComponentRegistrar* registrar, const char *path) 
    39 { 
    40   nsCOMPtr<nsIFile> file;
    41   nsresult rv =
    42     NS_NewLocalFile(
    43       NS_ConvertUTF8toUTF16(path),
    44       true,
    45       getter_AddRefs(file));
    46   if (NS_FAILED(rv)) return rv;
    47   rv = registrar->AutoRegister(file);
    48   return rv;
    49 }
    51 nsresult Unregister(const char *path) 
    52 {
    53   /* NEEDS IMPLEMENTATION */
    54 #if 0
    55     nsresult res = nsComponentManager::AutoUnregisterComponent(path);
    56   return res;
    57 #else
    58   return NS_ERROR_FAILURE;
    59 #endif
    60 }
    62 int ProcessArgs(nsIComponentRegistrar* registrar, int argc, char *argv[])
    63 {
    64   int i = 1;
    65   nsresult res;
    67   while (i < argc) {
    68     if (argv[i][0] == '-') {
    69       int j;
    70       for (j = 1; argv[i][j] != '\0'; j++) {
    71         switch (argv[i][j]) {
    72         case 'u':
    73           gUnreg = true;
    74           break;
    75         default:
    76           cerr << "Unknown option '" << argv[i][j] << "'\n";
    77         }
    78       }
    79       i++;
    80     } else {
    81       if (gUnreg) {
    82         res = Unregister(argv[i]);
    83         if (NS_SUCCEEDED(res)) {
    84           cout << "Successfully unregistered: " << argv[i] << "\n";
    85         } else {
    86           cerr << "Unregister failed (";
    87           print_err(res);
    88           cerr << "): " << argv[i] << "\n";
    89         }
    90       } else {
    91         res = Register(registrar, argv[i]);
    92         if (NS_SUCCEEDED(res)) {
    93           cout << "Successfully registered: " << argv[i] << "\n";
    94         } else {
    95           cerr << "Register failed (";
    96           print_err(res);
    97           cerr << "): " << argv[i] << "\n";
    98         }
    99       }
   100       i++;
   101     }
   102   }
   103   return 0;
   104 }
   106 int main(int argc, char *argv[])
   107 {
   108   int ret = 0;
   109   nsresult rv;
   110   {
   111     nsCOMPtr<nsIServiceManager> servMan;
   112     rv = NS_InitXPCOM2(getter_AddRefs(servMan), nullptr, nullptr);
   113     if (NS_FAILED(rv)) return -1;
   114     nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan);
   115     NS_ASSERTION(registrar, "Null nsIComponentRegistrar");
   117     /* With no arguments, RegFactory will autoregister */
   118     if (argc <= 1)
   119     {
   120       rv = registrar->AutoRegister(nullptr);
   121       ret = (NS_FAILED(rv)) ? -1 : 0;
   122     }
   123     else
   124       ret = ProcessArgs(registrar, argc, argv);
   125   } // this scopes the nsCOMPtrs
   126   // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM
   127   rv = NS_ShutdownXPCOM(nullptr);
   128   NS_ASSERTION(NS_SUCCEEDED(rv), "NS_ShutdownXPCOM failed");
   129   return ret;
   130 }

mercurial