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