// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. cr.define('extensions', function() { 'use strict'; /** * The ExtensionErrorOverlay will show the contents of a file which pertains * to the ExtensionError; this is either the manifest file (for manifest * errors) or a source file (for runtime errors). If possible, the portion * of the file which caused the error will be highlighted. * @constructor */ function ExtensionErrorOverlay() { } cr.addSingletonGetter(ExtensionErrorOverlay); ExtensionErrorOverlay.prototype = { /** * Initialize the page. */ initializePage: function() { var overlay = $('overlay'); cr.ui.overlay.setupOverlay(overlay); cr.ui.overlay.globalInitialization(); overlay.addEventListener('cancelOverlay', this.handleDismiss_.bind(this)); $('extension-error-overlay-dismiss').addEventListener( 'click', this.handleDismiss_.bind(this)); }, /** * Handles a click on the dismiss button. * @param {Event} e The click event. * @private */ handleDismiss_: function(e) { $('extension-error-overlay-content').innerHTML = ''; extensions.ExtensionSettings.showOverlay(null); }, }; /** * Called by the ExtensionErrorHandler responding to the request for a file's * source. Populate the content area of the overlay and display the overlay. * @param {Object} result An object with four strings - the title, * beforeHighlight, afterHighlight, and highlight. The three 'highlight' * strings represent three portions of the file's content to display - the * portion which is most relevant and should be emphasized (highlight), * and the parts both before and after this portion. These may be empty. */ ExtensionErrorOverlay.requestFileSourceResponse = function(result) { var content = $('extension-error-overlay-content'); document.querySelector( '#extension-error-overlay .extension-error-overlay-title'). innerText = result.title; var createSpan = function(source, isHighlighted) { var span = document.createElement('span'); span.className = isHighlighted ? 'highlighted-source' : 'normal-source'; source = source.replace(/ /g, ' ').replace(/\n|\r/g, '
'); span.innerHTML = source; return span; }; if (result.beforeHighlight) content.appendChild(createSpan(result.beforeHighlight, false)); if (result.highlight) { var highlightSpan = createSpan(result.highlight, true); highlightSpan.title = result.message; content.appendChild(highlightSpan); } if (result.afterHighlight) content.appendChild(createSpan(result.afterHighlight, false)); extensions.ExtensionSettings.showOverlay($('extension-error-overlay')); }; // Export return { ExtensionErrorOverlay: ExtensionErrorOverlay }; });