addon-sdk/source/lib/sdk/system.js

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 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 'use strict';
     7 module.metadata = {
     8   "stability": "unstable"
     9 };
    11 const { Cc, Ci, CC } = require('chrome');
    12 const options = require('@loader/options');
    13 const file = require('./io/file');
    14 const runtime = require("./system/runtime");
    16 const appStartup = Cc['@mozilla.org/toolkit/app-startup;1'].
    17                    getService(Ci.nsIAppStartup);
    18 const appInfo = Cc["@mozilla.org/xre/app-info;1"].
    19                 getService(Ci.nsIXULAppInfo);
    20 const directoryService = Cc['@mozilla.org/file/directory_service;1'].
    21                          getService(Ci.nsIProperties);
    23 const PR_WRONLY = parseInt("0x02");
    24 const PR_CREATE_FILE = parseInt("0x08");
    25 const PR_APPEND = parseInt("0x10");
    26 const PR_TRUNCATE = parseInt("0x20");
    28 function openFile(path, mode) {
    29   let file = Cc["@mozilla.org/file/local;1"].
    30              createInstance(Ci.nsILocalFile);
    31   file.initWithPath(path);
    32   let stream = Cc["@mozilla.org/network/file-output-stream;1"].
    33                createInstance(Ci.nsIFileOutputStream);
    34   stream.init(file, mode, -1, 0);
    35   return stream
    36 }
    38 const { eAttemptQuit: E_ATTEMPT, eForceQuit: E_FORCE } = appStartup;
    40 /**
    41  * Parsed JSON object that was passed via `cfx --static-args "{ foo: 'bar' }"`
    42  */
    43 exports.staticArgs = options.staticArgs;
    45 /**
    46  * Environment variables. Environment variables are non-enumerable properties
    47  * of this object (key is name and value is value).
    48  */
    49 exports.env = require('./system/environment').env;
    51 /**
    52  * Ends the process with the specified `code`. If omitted, exit uses the
    53  * 'success' code 0. To exit with failure use `1`.
    54  * TODO: Improve platform to actually quit with an exit code.
    55  */
    56 let forcedExit = false;
    57 exports.exit = function exit(code) {
    58   if (forcedExit) {
    59     // a forced exit was already tried
    60     // NOTE: exit(0) is called twice sometimes (ex when using cfx testaddons)
    61     return;
    62   }
    64   // This is used by 'cfx' to find out exit code.
    65   if ('resultFile' in options && options.resultFile) {
    66     let mode = PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE;
    67     let stream = openFile(options.resultFile, mode);
    68     let status = code ? 'FAIL' : 'OK';
    69     stream.write(status, status.length);
    70     stream.flush();
    71     stream.close();
    72   }
    74   if (code == 0) {
    75     forcedExit = true;
    76   }
    77   appStartup.quit(code ? E_ATTEMPT : E_FORCE);
    78 };
    80 // Adapter for nodejs's stdout & stderr:
    81 // http://nodejs.org/api/process.html#process_process_stdout
    82 let stdout = Object.freeze({ write: dump, end: dump });
    83 exports.stdout = stdout;
    84 exports.stderr = stdout;
    86 /**
    87  * Returns a path of the system's or application's special directory / file
    88  * associated with a given `id`. For list of possible `id`s please see:
    89  * https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O#Getting_files_in_special_directories
    90  * http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsAppDirectoryServiceDefs.h
    91  * @example
    92  *
    93  *    // get firefox profile path
    94  *    let profilePath = require('system').pathFor('ProfD');
    95  *    // get OS temp files directory (/tmp)
    96  *    let temps = require('system').pathFor('TmpD');
    97  *    // get OS desktop path for an active user (~/Desktop on linux
    98  *    // or C:\Documents and Settings\username\Desktop on windows).
    99  *    let desktopPath = require('system').pathFor('Desk');
   100  */
   101 exports.pathFor = function pathFor(id) {
   102   return directoryService.get(id, Ci.nsIFile).path;
   103 };
   105 /**
   106  * What platform you're running on (all lower case string).
   107  * For possible values see:
   108  * https://developer.mozilla.org/en/OS_TARGET
   109  */
   110 exports.platform = runtime.OS.toLowerCase();
   112 const [, architecture, compiler] = runtime.XPCOMABI ? 
   113                                    runtime.XPCOMABI.match(/^([^-]*)-(.*)$/) :
   114                                    [, null, null];
   116 /**
   117  * What processor architecture you're running on:
   118  * `'arm', 'ia32', or 'x64'`.
   119  */
   120 exports.architecture = architecture;
   122 /**
   123  * What compiler used for build:
   124  * `'msvc', 'n32', 'gcc2', 'gcc3', 'sunc', 'ibmc'...`
   125  */
   126 exports.compiler = compiler;
   128 /**
   129  * The application's build ID/date, for example "2004051604".
   130  */
   131 exports.build = appInfo.appBuildID;
   133 /**
   134  * The XUL application's UUID.
   135  * This has traditionally been in the form
   136  * `{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}` but for some applications it may
   137  * be: "appname@vendor.tld".
   138  */
   139 exports.id = appInfo.ID;
   141 /**
   142  * The name of the application.
   143  */
   144 exports.name = appInfo.name;
   146 /**
   147  * The XUL application's version, for example "0.8.0+" or "3.7a1pre".
   148  */
   149 exports.version = appInfo.version;
   151 /**
   152  * XULRunner version.
   153  */
   154 exports.platformVersion = appInfo.platformVersion;
   157 /**
   158  * The name of the application vendor, for example "Mozilla".
   159  */
   160 exports.vendor = appInfo.vendor;

mercurial