Home | History | Annotate | Download | only in network
      1 /*
      2  * Copyright (C) 2011 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 /**
     32  * @constructor
     33  * @extends {WebInspector.RequestView}
     34  * @param {!WebInspector.NetworkRequest} request
     35  * @param {!WebInspector.ParsedJSON} parsedJSON
     36  */
     37 WebInspector.RequestJSONView = function(request, parsedJSON)
     38 {
     39     WebInspector.RequestView.call(this, request);
     40     this._parsedJSON = parsedJSON;
     41     this.element.classList.add("json");
     42 }
     43 
     44 /**
     45  * @param {string} text
     46  * @return {?WebInspector.ParsedJSON}
     47  */
     48 WebInspector.RequestJSONView.parseJSON = function(text)
     49 {
     50     var prefix = "";
     51 
     52     // Trim while(1), for(;;), weird numbers, etc. We need JSON start.
     53     var start = /[{[]/.exec(text);
     54     if (start && start.index) {
     55         prefix = text.substring(0, start.index);
     56         text = text.substring(start.index);
     57     }
     58 
     59     try {
     60         return new WebInspector.ParsedJSON(JSON.parse(text), prefix, "");
     61     } catch (e) {
     62         return null;
     63     }
     64 }
     65 
     66 /**
     67  * @param {string} text
     68  * @return {?WebInspector.ParsedJSON}
     69  */
     70 WebInspector.RequestJSONView.parseJSONP = function(text)
     71 {
     72     // Taking everything between first and last parentheses
     73     var start = text.indexOf("(");
     74     var end = text.lastIndexOf(")");
     75     if (start == -1 || end == -1 || end < start)
     76         return null;
     77 
     78     var prefix = text.substring(0, start + 1);
     79     var suffix = text.substring(end);
     80     text = text.substring(start + 1, end);
     81 
     82     try {
     83         return new WebInspector.ParsedJSON(JSON.parse(text), prefix, suffix);
     84     } catch (e) {
     85         return null;
     86     }
     87 }
     88 
     89 WebInspector.RequestJSONView.prototype = {
     90     /**
     91      * @return {boolean}
     92      */
     93     hasContent: function()
     94     {
     95         return true;
     96     },
     97 
     98     wasShown: function()
     99     {
    100         this._initialize();
    101     },
    102 
    103     _initialize: function()
    104     {
    105         if (this._initialized)
    106             return;
    107         this._initialized = true;
    108 
    109         var obj = WebInspector.RemoteObject.fromLocalObject(this._parsedJSON.data);
    110         var title = this._parsedJSON.prefix + obj.description + this._parsedJSON.suffix;
    111         var section = new WebInspector.ObjectPropertiesSection(obj, title);
    112         section.expand();
    113         section.editable = false;
    114         this.element.appendChild(section.element);
    115     },
    116 
    117     __proto__: WebInspector.RequestView.prototype
    118 }
    119 
    120 /**
    121  * @constructor
    122  */
    123 WebInspector.ParsedJSON = function(data, prefix, suffix)
    124 {
    125     this.data = data;
    126     this.prefix = prefix;
    127     this.suffix = suffix;
    128 }
    129