Remove network process load serialization code
[WebKit-https.git] / Source / WebInspectorUI / UserInterface / Views / FrameContentView.js
1 /*
2  * Copyright (C) 2013 Apple 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
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 WebInspector.FrameContentView = function(frame)
27 {
28     WebInspector.ClusterContentView.call(this, frame);
29
30     this._frame = frame;
31
32     function createPathComponent(displayName, className, identifier)
33     {
34         var pathComponent = new WebInspector.HierarchicalPathComponent(displayName, className, identifier, false, true);
35         pathComponent.addEventListener(WebInspector.HierarchicalPathComponent.Event.SiblingWasSelected, this._pathComponentSelected, this);
36         return pathComponent;
37     }
38
39     this._sourceCodePathComponent = createPathComponent.call(this, WebInspector.UIString("Source Code"), WebInspector.FrameContentView.SourceCodeIconStyleClassName, WebInspector.FrameContentView.SourceCodeIdentifier);
40     this._domTreePathComponent = createPathComponent.call(this, WebInspector.UIString("DOM Tree"), WebInspector.FrameContentView.DOMTreeIconStyleClassName, WebInspector.FrameContentView.DOMTreeIdentifier);
41
42     this._sourceCodePathComponent.nextSibling = this._domTreePathComponent;
43     this._domTreePathComponent.previousSibling = this._sourceCodePathComponent;
44
45     this.element.classList.add(WebInspector.FrameContentView.StyleClassName);
46
47     this._currentContentViewSetting = new WebInspector.Setting("frame-current-view-" + this._frame.url.hash, WebInspector.FrameContentView.DOMTreeIdentifier);
48 };
49
50 WebInspector.FrameContentView.StyleClassName = "frame";
51 WebInspector.FrameContentView.SourceCodeIconStyleClassName = "source-code-icon";
52 WebInspector.FrameContentView.SourceCodeIdentifier = "source-code";
53 WebInspector.FrameContentView.DOMTreeIconStyleClassName = "dom-tree-icon";
54 WebInspector.FrameContentView.DOMTreeIdentifier = "dom-tree";
55
56 WebInspector.FrameContentView.prototype = {
57     constructor: WebInspector.FrameContentView,
58
59     // Public
60
61     get frame()
62     {
63         return this._frame;
64     },
65
66     get selectionPathComponents()
67     {
68         if (!this._contentViewContainer.currentContentView)
69             return [];
70
71         // Append the current view's path components to the path component representing the current view.
72         var components = [this._pathComponentForContentView(this._contentViewContainer.currentContentView)];
73         return components.concat(this._contentViewContainer.currentContentView.selectionPathComponents);
74     },
75
76     shown: function()
77     {
78         WebInspector.ClusterContentView.prototype.shown.call(this);
79
80         if (this._shownInitialContent)
81             return;
82
83         this._showContentViewForIdentifier(this._currentContentViewSetting.value);
84     },
85
86     closed: function()
87     {
88         WebInspector.ClusterContentView.prototype.closed.call(this);
89
90         this._shownInitialContent = false;
91     },
92
93     saveToCookie: function(cookie)
94     {
95         cookie.type = WebInspector.ContentViewCookieType.Resource;
96         cookie.subview = this._currentContentViewSetting.value;
97         if (!this.representedObject.isMainFrame())
98             cookie.url = this.representedObject.url;
99     },
100
101     restoreFromCookie: function(cookie)
102     {
103         var shownView = this._showContentViewForIdentifier(cookie.subview);
104         if ("lineNumber" in cookie && "columnNumber" in cookie)
105             this.showSourceCode(new WebInspector.SourceCodePosition(cookie.lineNumber, cookie.columnNumber));
106     },
107
108     showResource: function()
109     {
110         this._shownInitialContent = true;
111
112         return this._showContentViewForIdentifier(WebInspector.FrameContentView.SourceCodeIdentifier);
113     },
114
115     showSourceCode: function(positionToReveal, textRangeToSelect, forceUnformatted)
116     {
117         var resourceContentView = this.showResource();
118         console.assert(resourceContentView instanceof WebInspector.ResourceClusterContentView);
119         if (!resourceContentView)
120             return null;
121
122         return resourceContentView.showResponse(positionToReveal, textRangeToSelect, forceUnformatted);
123     },
124
125     showDOMTree: function(domNodeToSelect, preventFocusChange)
126     {
127         this._shownInitialContent = true;
128
129         var domTreeContentView = this._showContentViewForIdentifier(WebInspector.FrameContentView.DOMTreeIdentifier);
130         console.assert(domTreeContentView);
131         if (!domTreeContentView || !domNodeToSelect)
132             return null;
133
134         domTreeContentView.selectAndRevealDOMNode(domNodeToSelect, preventFocusChange);
135
136         return domTreeContentView;
137     },
138
139     // Private
140
141     _pathComponentForContentView: function(contentView)
142     {
143         console.assert(contentView);
144         if (!contentView)
145             return null;
146         if (contentView.representedObject instanceof WebInspector.Resource)
147             return this._sourceCodePathComponent;
148         if (contentView.representedObject instanceof WebInspector.DOMTree)
149             return this._domTreePathComponent;
150         console.error("Unknown contentView.");
151         return null;
152     },
153
154     _identifierForContentView: function(contentView)
155     {
156         console.assert(contentView);
157         if (!contentView)
158             return null;
159         if (contentView.representedObject instanceof WebInspector.Resource)
160             return WebInspector.FrameContentView.SourceCodeIdentifier;
161         if (contentView.representedObject instanceof WebInspector.DOMTree)
162             return WebInspector.FrameContentView.DOMTreeIdentifier;
163         console.error("Unknown contentView.");
164         return null;
165     },
166
167     _showContentViewForIdentifier: function(identifier)
168     {
169         var representedObjectToShow = null;
170
171         switch (identifier) {
172         case WebInspector.FrameContentView.SourceCodeIdentifier:
173             representedObjectToShow = this._frame.mainResource;
174             break;
175         case WebInspector.FrameContentView.DOMTreeIdentifier:
176             representedObjectToShow = this._frame.domTree;
177             break;
178         }
179
180         console.assert(representedObjectToShow);
181         if (!representedObjectToShow)
182             return null;
183
184         this._currentContentViewSetting.value = identifier;
185
186         return this.contentViewContainer.showContentViewForRepresentedObject(representedObjectToShow);
187     },
188
189     _pathComponentSelected: function(event)
190     {
191         this._showContentViewForIdentifier(event.data.pathComponent.representedObject);
192     }
193 };
194
195 WebInspector.FrameContentView.prototype.__proto__ = WebInspector.ClusterContentView.prototype;