@@ -8,6 +8,10 @@ var ChromeBrowser = function(baseBrowserDecorator, args) {
88 this . _getOptions = function ( url ) {
99 // Chrome CLI options
1010 // http://peter.sh/experiments/chromium-command-line-switches/
11+ flags . forEach ( function ( flag , i ) {
12+ if ( isJSFlags ( flag ) ) flags [ i ] = sanitizeJSFlags ( flag ) ;
13+ } ) ;
14+
1115 return [
1216 '--user-data-dir=' + this . _tempDir ,
1317 '--no-default-browser-check' ,
@@ -19,6 +23,19 @@ var ChromeBrowser = function(baseBrowserDecorator, args) {
1923 } ;
2024} ;
2125
26+ function isJSFlags ( flag ) {
27+ return flag . indexOf ( '--js-flags=' ) === 0 ;
28+ }
29+
30+ function sanitizeJSFlags ( flag ) {
31+ var test = / - - j s - f l a g s = ( [ ' " ] ) / . exec ( flag ) ;
32+ if ( ! test ) return flag ;
33+ var escapeChar = test [ 1 ] ;
34+ var endExp = new RegExp ( escapeChar + '$' ) ;
35+ var startExp = new RegExp ( '--js-flags=' + escapeChar ) ;
36+ return flag . replace ( startExp , '--js-flags=' ) . replace ( endExp , '' ) ;
37+ }
38+
2239// Return location of chrome.exe file for a given Chrome directory (available: "Chrome", "Chrome SxS").
2340function getChromeExe ( chromeDirName ) {
2441 if ( process . platform !== 'win32' ) {
@@ -58,11 +75,25 @@ var ChromeCanaryBrowser = function(baseBrowserDecorator, args) {
5875
5976 var parentOptions = this . _getOptions ;
6077 this . _getOptions = function ( url ) {
61- // disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0)
62- return parentOptions . call ( this , url ) . concat ( [ '--js-flags="--nocrankshaft --noopt"' ] ) ;
78+ return canaryGetOptions . call ( this , url , args , parentOptions ) ;
6379 } ;
6480} ;
6581
82+ function canaryGetOptions ( url , args , parent ) {
83+ // disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0)
84+ var flags = args . flags || [ ] ;
85+ var augmentedFlags ;
86+ var customFlags = '--nocrankshaft --noopt' ;
87+
88+ flags . forEach ( function ( flag , i ) {
89+ if ( isJSFlags ( flag ) ) {
90+ augmentedFlags = sanitizeJSFlags ( flag ) + ' ' + customFlags ;
91+ }
92+ } ) ;
93+
94+ return parent . call ( this , url ) . concat ( [ augmentedFlags || '--js-flags=' + customFlags ] ) ;
95+ }
96+
6697ChromeCanaryBrowser . prototype = {
6798 name : 'ChromeCanary' ,
6899
@@ -103,3 +134,9 @@ module.exports = {
103134 'launcher:ChromeCanary' : [ 'type' , ChromeCanaryBrowser ] ,
104135 'launcher:Dartium' : [ 'type' , DartiumBrowser ]
105136} ;
137+
138+ module . exports . test = {
139+ isJSFlags : isJSFlags ,
140+ sanitizeJSFlags : sanitizeJSFlags ,
141+ canaryGetOptions : canaryGetOptions
142+ }
0 commit comments