Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / karma-chrome-launcher / index.js
1 var fs = require('fs'),
2   path = require('path'),
3   which = require('which');
4
5 function isJSFlags(flag) {
6   return flag.indexOf('--js-flags=') === 0;
7 }
8
9 function sanitizeJSFlags(flag) {
10   var test = /--js-flags=(['"])/.exec(flag);
11   if (!test) {
12     return flag;
13   }
14   var escapeChar = test[1];
15   var endExp = new RegExp(escapeChar + '$');
16   var startExp = new RegExp('--js-flags=' + escapeChar);
17   return flag.replace(startExp, '--js-flags=').replace(endExp, '');
18 }
19
20 var ChromeBrowser = function(baseBrowserDecorator, args) {
21   baseBrowserDecorator(this);
22
23   var flags = args.flags || [];
24
25   this._getOptions = function(url) {
26     // Chrome CLI options
27     // http://peter.sh/experiments/chromium-command-line-switches/
28     flags.forEach(function(flag, i) {
29       if (isJSFlags(flag)) {
30         flags[i] = sanitizeJSFlags(flag);
31       }
32     });
33
34     return [
35       '--user-data-dir=' + this._tempDir,
36       '--no-default-browser-check',
37       '--no-first-run',
38       '--disable-default-apps',
39       '--disable-popup-blocking',
40       '--disable-translate'
41     ].concat(flags, [url]);
42   };
43 };
44
45 // Return location of chrome.exe file for a given Chrome directory (available: "Chrome", "Chrome SxS").
46 function getChromeExe(chromeDirName) {
47   // Only run these checks on win32
48   if (process.platform !== 'win32') {
49     return null;
50   }
51   var windowsChromeDirectory, i, prefix;
52   var suffix = '\\Google\\' + chromeDirName + '\\Application\\chrome.exe';
53   var prefixes = [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']];
54
55   for (i = 0; i < prefixes.length; i++) {
56     prefix = prefixes[i];
57     try {
58       windowsChromeDirectory = path.join(prefix, suffix);
59       fs.accessSync(windowsChromeDirectory);
60       return windowsChromeDirectory;
61     } catch (e) {}
62   }
63
64   return windowsChromeDirectory;
65 }
66
67 function getBin(commands) {
68   // Don't run these checks on win32
69   if (process.platform !== 'linux') {
70     return null;
71   }
72   var bin, i;
73   for (i = 0; i < commands.length; i++) {
74     try {
75       if (which.sync(commands[i])) {
76         bin = commands[i];
77         break;
78       }
79     } catch (e) {}
80   }
81   return bin;
82 }
83
84 function getChromeDarwin(defaultPath) {
85   if (process.platform !== 'darwin') {
86     return null;
87   }
88
89   try {
90     var homePath = path.join(process.env.HOME, defaultPath);
91     fs.accessSync(homePath);
92     return homePath;
93   } catch (e) {
94     return defaultPath;
95   }
96 }
97
98 ChromeBrowser.prototype = {
99   name: 'Chrome',
100
101   DEFAULT_CMD: {
102     // Try chromium-browser before chromium to avoid conflict with the legacy
103     // chromium-bsu package previously known as 'chromium' in Debian and Ubuntu.
104     linux: getBin(['chromium-browser', 'chromium', 'google-chrome', 'google-chrome-stable']),
105     darwin: getChromeDarwin('/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
106     win32: getChromeExe('Chrome')
107   },
108   ENV_CMD: 'CHROME_BIN'
109 };
110
111 ChromeBrowser.$inject = ['baseBrowserDecorator', 'args'];
112
113 function canaryGetOptions(url, args, parent) {
114   // disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0)
115   var flags = args.flags || [];
116   var augmentedFlags;
117   var customFlags = '--nocrankshaft --noopt';
118
119   flags.forEach(function(flag) {
120     if (isJSFlags(flag)) {
121       augmentedFlags = sanitizeJSFlags(flag) + ' ' + customFlags;
122     }
123   });
124
125   return parent.call(this, url).concat([augmentedFlags || '--js-flags=' + customFlags]);
126 }
127
128 var ChromeCanaryBrowser = function(baseBrowserDecorator, args) {
129   ChromeBrowser.apply(this, arguments);
130
131   var parentOptions = this._getOptions;
132   this._getOptions = function(url) {
133     return canaryGetOptions.call(this, url, args, parentOptions);
134   };
135 };
136
137 ChromeCanaryBrowser.prototype = {
138   name: 'ChromeCanary',
139
140   DEFAULT_CMD: {
141     linux: 'google-chrome-canary',
142     darwin: getChromeDarwin('/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'),
143     win32: getChromeExe('Chrome SxS')
144   },
145   ENV_CMD: 'CHROME_CANARY_BIN'
146 };
147
148 ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args'];
149
150 var DartiumBrowser = function() {
151     ChromeBrowser.apply(this, arguments);
152
153     var checkedFlag = '--checked';
154     var dartFlags = process.env.DART_FLAGS || '';
155     var flags = dartFlags.split(' ');
156     if (flags.indexOf(checkedFlag) === -1) {
157         flags.push(checkedFlag);
158         process.env.DART_FLAGS = flags.join(' ');
159     }
160 };
161
162 DartiumBrowser.prototype = {
163     name: 'Dartium',
164     DEFAULT_CMD: {},
165     ENV_CMD: 'DARTIUM_BIN'
166 };
167
168 DartiumBrowser.$inject = ['baseBrowserDecorator', 'args'];
169
170 // PUBLISH DI MODULE
171 module.exports = {
172   'launcher:Chrome': ['type', ChromeBrowser],
173   'launcher:ChromeCanary': ['type', ChromeCanaryBrowser],
174   'launcher:Dartium': ['type', DartiumBrowser]
175 };
176
177 module.exports.test = {
178   isJSFlags: isJSFlags,
179   sanitizeJSFlags: sanitizeJSFlags,
180   canaryGetOptions: canaryGetOptions
181 };