11e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 21e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// Redistribution and use in source and binary forms, with or without 31e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// modification, are permitted provided that the following conditions are 41e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// met: 51e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// 61e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// * Redistributions of source code must retain the above copyright 71e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// notice, this list of conditions and the following disclaimer. 81e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// * Redistributions in binary form must reproduce the above 91e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// copyright notice, this list of conditions and the following 101e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// disclaimer in the documentation and/or other materials provided 111e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// with the distribution. 121e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// * Neither the name of Google Inc. nor the names of its 131e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// contributors may be used to endorse or promote products derived 141e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// from this software without specific prior written permission. 151e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// 161e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 171e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 181e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 191e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 201e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 211e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 221e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 231e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 241e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 251e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 261e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 271e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 281e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// This is a copy from blink dev tools, see: 291e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// http://src.chromium.org/viewvc/blink/trunk/Source/devtools/front_end/SourceMap.js 301e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// revision: 153407 311e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 321e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// Added to make the file work without dev tools 331e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector = {}; 341e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector.ParsedURL = {}; 351e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector.ParsedURL.completeURL = function(){}; 361e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org// start of original file content 371e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 381e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org/* 391e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * Copyright (C) 2012 Google Inc. All rights reserved. 401e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * 411e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * Redistribution and use in source and binary forms, with or without 421e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * modification, are permitted provided that the following conditions are 431e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * met: 441e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * 451e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * * Redistributions of source code must retain the above copyright 461e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * notice, this list of conditions and the following disclaimer. 471e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * * Redistributions in binary form must reproduce the above 481e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * copyright notice, this list of conditions and the following disclaimer 491e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * in the documentation and/or other materials provided with the 501e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * distribution. 511e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * * Neither the name of Google Inc. nor the names of its 521e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * contributors may be used to endorse or promote products derived from 531e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * this software without specific prior written permission. 541e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * 551e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 561e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 571e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 581e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 591e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 601e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 611e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 621e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 631e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 641e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 651e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 661e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 671e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 681e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org/** 691e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * Implements Source Map V3 model. See http://code.google.com/p/closure-compiler/wiki/SourceMaps 701e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * for format description. 711e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @constructor 721e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} sourceMappingURL 731e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {SourceMapV3} payload 741e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 751e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector.SourceMap = function(sourceMappingURL, payload) 761e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org{ 771e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (!WebInspector.SourceMap.prototype._base64Map) { 781e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org const base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 791e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org WebInspector.SourceMap.prototype._base64Map = {}; 801e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org for (var i = 0; i < base64Digits.length; ++i) 811e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org WebInspector.SourceMap.prototype._base64Map[base64Digits.charAt(i)] = i; 821e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 831e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 841e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._sourceMappingURL = sourceMappingURL; 851e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._reverseMappingsBySourceURL = {}; 861e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._mappings = []; 871e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._sources = {}; 881e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._sourceContentByURL = {}; 891e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._parseMappingPayload(payload); 901e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 911e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 921e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org/** 931e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} sourceMapURL 941e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} compiledURL 951e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {function(WebInspector.SourceMap)} callback 961e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 971e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector.SourceMap.load = function(sourceMapURL, compiledURL, callback) 981e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org{ 991e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org NetworkAgent.loadResourceForFrontend(WebInspector.resourceTreeModel.mainFrame.id, sourceMapURL, undefined, contentLoaded.bind(this)); 1001e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1011e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 1021e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {?Protocol.Error} error 1031e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {number} statusCode 1041e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {NetworkAgent.Headers} headers 1051e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} content 1061e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 1071e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org function contentLoaded(error, statusCode, headers, content) 1081e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 1091e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (error || !content || statusCode >= 400) { 1101e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org console.error("Could not load content for " + sourceMapURL + " : " + (error || ("HTTP status code: " + statusCode))); 1111e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org callback(null); 1121e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return; 1131e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 1141e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1151e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (content.slice(0, 3) === ")]}") 1161e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org content = content.substring(content.indexOf('\n')); 1171e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org try { 1181e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var payload = /** @type {SourceMapV3} */ (JSON.parse(content)); 1191e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var baseURL = sourceMapURL.startsWith("data:") ? compiledURL : sourceMapURL; 1201e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org callback(new WebInspector.SourceMap(baseURL, payload)); 1211e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } catch(e) { 1221e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org console.error(e.message); 1231e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org callback(null); 1241e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 1251e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 1261e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 1271e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1281e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector.SourceMap.prototype = { 1291e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 1301e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {Array.<string>} 1311e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 1321e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sources: function() 1331e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 1341e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return Object.keys(this._sources); 1351e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 1361e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1371e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 1381e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} sourceURL 1391e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {string|undefined} 1401e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 1411e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sourceContent: function(sourceURL) 1421e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 1431e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return this._sourceContentByURL[sourceURL]; 1441e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 1451e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1461e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 1471e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} sourceURL 1481e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {WebInspector.ResourceType} contentType 1491e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {WebInspector.ContentProvider} 1501e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 1511e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sourceContentProvider: function(sourceURL, contentType) 1521e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 1531e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var lastIndexOfDot = sourceURL.lastIndexOf("."); 1541e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var extension = lastIndexOfDot !== -1 ? sourceURL.substr(lastIndexOfDot + 1) : ""; 1551e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var mimeType = WebInspector.ResourceType.mimeTypesForExtensions[extension.toLowerCase()]; 1561e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceContent = this.sourceContent(sourceURL); 1571e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (sourceContent) 1581e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return new WebInspector.StaticContentProvider(contentType, sourceContent, mimeType); 1591e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return new WebInspector.CompilerSourceMappingContentProvider(sourceURL, contentType, mimeType); 1601e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 1611e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1621e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 1631e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {SourceMapV3} mappingPayload 1641e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 1651e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _parseMappingPayload: function(mappingPayload) 1661e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 1671e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (mappingPayload.sections) 1681e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._parseSections(mappingPayload.sections); 1691e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org else 1701e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._parseMap(mappingPayload, 0, 0); 1711e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 1721e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1731e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 1741e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {Array.<SourceMapV3.Section>} sections 1751e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 1761e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _parseSections: function(sections) 1771e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 1781e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org for (var i = 0; i < sections.length; ++i) { 1791e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var section = sections[i]; 1801e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._parseMap(section.map, section.offset.line, section.offset.column); 1811e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 1821e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 1831e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 1841e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 1851e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {number} lineNumber in compiled resource 1861e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {number} columnNumber in compiled resource 1871e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {?Array} 1881e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 1891e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org findEntry: function(lineNumber, columnNumber) 1901e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 1911e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var first = 0; 1921e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var count = this._mappings.length; 1931e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org while (count > 1) { 1941e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var step = count >> 1; 1951e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var middle = first + step; 1961e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var mapping = this._mappings[middle]; 1971e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (lineNumber < mapping[0] || (lineNumber === mapping[0] && columnNumber < mapping[1])) 1981e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org count = step; 1991e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org else { 2001e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org first = middle; 2011e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org count -= step; 2021e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2031e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2041e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var entry = this._mappings[first]; 2051e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (!first && entry && (lineNumber < entry[0] || (lineNumber === entry[0] && columnNumber < entry[1]))) 2061e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return null; 2071e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return entry; 2081e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 2091e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2101e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 2111e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} sourceURL of the originating resource 2121e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {number} lineNumber in the originating resource 2131e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {Array} 2141e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 2151e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org findEntryReversed: function(sourceURL, lineNumber) 2161e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 2171e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var mappings = this._reverseMappingsBySourceURL[sourceURL]; 2181e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org for ( ; lineNumber < mappings.length; ++lineNumber) { 2191e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var mapping = mappings[lineNumber]; 2201e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (mapping) 2211e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return mapping; 2221e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2231e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return this._mappings[0]; 2241e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 2251e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2261e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 2271e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @override 2281e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 2291e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _parseMap: function(map, lineNumber, columnNumber) 2301e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 2311e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceIndex = 0; 2321e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceLineNumber = 0; 2331e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceColumnNumber = 0; 2341e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var nameIndex = 0; 2351e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2361e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sources = []; 2371e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var originalToCanonicalURLMap = {}; 2381e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org for (var i = 0; i < map.sources.length; ++i) { 2391e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var originalSourceURL = map.sources[i]; 2401e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceRoot = map.sourceRoot || ""; 2411e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (sourceRoot && !sourceRoot.endsWith("/")) 2421e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sourceRoot += "/"; 2431e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var href = sourceRoot + originalSourceURL; 2441e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var url = WebInspector.ParsedURL.completeURL(this._sourceMappingURL, href) || href; 2451e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org originalToCanonicalURLMap[originalSourceURL] = url; 2461e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sources.push(url); 2471e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._sources[url] = true; 2481e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2491e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (map.sourcesContent && map.sourcesContent[i]) 2501e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._sourceContentByURL[url] = map.sourcesContent[i]; 2511e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2521e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2531e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var stringCharIterator = new WebInspector.SourceMap.StringCharIterator(map.mappings); 2541e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceURL = sources[sourceIndex]; 2551e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2561e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org while (true) { 2571e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (stringCharIterator.peek() === ",") 2581e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org stringCharIterator.next(); 2591e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org else { 2601e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org while (stringCharIterator.peek() === ";") { 2611e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org lineNumber += 1; 2621e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org columnNumber = 0; 2631e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org stringCharIterator.next(); 2641e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2651e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (!stringCharIterator.hasNext()) 2661e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org break; 2671e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2681e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2691e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org columnNumber += this._decodeVLQ(stringCharIterator); 2701e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (this._isSeparator(stringCharIterator.peek())) { 2711e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._mappings.push([lineNumber, columnNumber]); 2721e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org continue; 2731e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2741e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2751e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceIndexDelta = this._decodeVLQ(stringCharIterator); 2761e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (sourceIndexDelta) { 2771e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sourceIndex += sourceIndexDelta; 2781e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sourceURL = sources[sourceIndex]; 2791e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2801e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sourceLineNumber += this._decodeVLQ(stringCharIterator); 2811e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org sourceColumnNumber += this._decodeVLQ(stringCharIterator); 2821e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (!this._isSeparator(stringCharIterator.peek())) 2831e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org nameIndex += this._decodeVLQ(stringCharIterator); 2841e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2851e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._mappings.push([lineNumber, columnNumber, sourceURL, sourceLineNumber, sourceColumnNumber]); 2861e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 2871e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 2881e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org for (var i = 0; i < this._mappings.length; ++i) { 2891e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var mapping = this._mappings[i]; 2901e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var url = mapping[2]; 2911e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (!url) 2921e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org continue; 2931e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (!this._reverseMappingsBySourceURL[url]) 2941e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._reverseMappingsBySourceURL[url] = []; 2951e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var reverseMappings = this._reverseMappingsBySourceURL[url]; 2961e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var sourceLine = mapping[3]; 2971e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (!reverseMappings[sourceLine]) 2981e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org reverseMappings[sourceLine] = [mapping[0], mapping[1]]; 2991e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 3001e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 3011e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3021e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 3031e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} char 3041e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {boolean} 3051e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 3061e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _isSeparator: function(char) 3071e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 3081e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return char === "," || char === ";"; 3091e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 3101e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3111e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 3121e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {WebInspector.SourceMap.StringCharIterator} stringCharIterator 3131e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {number} 3141e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 3151e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _decodeVLQ: function(stringCharIterator) 3161e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 3171e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org // Read unsigned value. 3181e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var result = 0; 3191e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var shift = 0; 3201e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org do { 3211e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var digit = this._base64Map[stringCharIterator.next()]; 3221e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org result += (digit & this._VLQ_BASE_MASK) << shift; 3231e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org shift += this._VLQ_BASE_SHIFT; 3241e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } while (digit & this._VLQ_CONTINUATION_MASK); 3251e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3261e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org // Fix the sign. 3271e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org var negative = result & 1; 3281e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org result >>= 1; 3291e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return negative ? -result : result; 3301e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 3311e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3321e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _VLQ_BASE_SHIFT: 5, 3331e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _VLQ_BASE_MASK: (1 << 5) - 1, 3341e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org _VLQ_CONTINUATION_MASK: 1 << 5 3351e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 3361e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3371e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org/** 3381e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @constructor 3391e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @param {string} string 3401e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 3411e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector.SourceMap.StringCharIterator = function(string) 3421e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org{ 3431e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._string = string; 3441e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org this._position = 0; 3451e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 3461e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3471e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgWebInspector.SourceMap.StringCharIterator.prototype = { 3481e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 3491e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {string} 3501e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 3511e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org next: function() 3521e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 3531e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return this._string.charAt(this._position++); 3541e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 3551e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3561e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 3571e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {string} 3581e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 3591e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org peek: function() 3601e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 3611e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return this._string.charAt(this._position); 3621e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org }, 3631e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 3641e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org /** 3651e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org * @return {boolean} 3661e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org */ 3671e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org hasNext: function() 3681e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org { 3691e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return this._position < this._string.length; 3701e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org } 3711e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 372