1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file. 4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)(function() { 6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// This function is converted to a string and becomes the preprocessor 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)function preprocessor(source, url, listenerName) { 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) url = url ? url : '(eval)'; 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) url += listenerName ? '_' + listenerName : ''; 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var prefix = 'window.__preprocessed = window.__preprocessed || [];\n'; 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) prefix += 'window.__preprocessed.push(\'' + url +'\');\n'; 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var postfix = '\n//# sourceURL=' + url + '.js\n'; 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return prefix + source + postfix; 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)function extractPreprocessedFiles(onExtracted) { 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var expr = 'window.__preprocessed'; 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) function onEval(files, isException) { 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (isException) 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) throw new Error('Eval failed for ' + expr, isException.value); 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) onExtracted(files); 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) chrome.devtools.inspectedWindow.eval(expr, onEval); 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)function reloadWithPreprocessor(injectedScript) { 28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var options = { 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ignoreCache: true, 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) userAgent: undefined, 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) injectedScript: '(' + injectedScript + ')()', 32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) preprocessingScript: '(' + preprocessor + ')' 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }; 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) chrome.devtools.inspectedWindow.reload(options); 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)function demoPreprocessor() { 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) function onLoaded() { 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) extractPreprocessedFiles(updateUI); 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var loadMonitor = new InspectedWindow.LoadMonitor(onLoaded); 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) reloadWithPreprocessor(loadMonitor.injectedScript); 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)function listen() { 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var reloadButton = document.querySelector('.reload-button'); 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) reloadButton.addEventListener('click', demoPreprocessor); 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)window.addEventListener('load', listen); 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)function createRow(url) { 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var li = document.createElement('li'); 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) li.textContent = url; 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return li; 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)function updateUI(preprocessedFiles) { 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var rowContainer = document.querySelector('.js-preprocessed-urls'); 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) rowContainer.innerHTML = ''; 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) preprocessedFiles.forEach(function(url) { 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) rowContainer.appendChild(createRow(url)); 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }); 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)})(); 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 69