Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: Source/devtools/front_end/sources/SourcesPanel.js

Issue 449893002: DevTools: Introduce ThreadsSidebar (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix visibility Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 26 matching lines...) Expand all
37 importScript("JavaScriptSourceFrame.js"); 37 importScript("JavaScriptSourceFrame.js");
38 importScript("CSSSourceFrame.js"); 38 importScript("CSSSourceFrame.js");
39 importScript("NavigatorView.js"); 39 importScript("NavigatorView.js");
40 importScript("RevisionHistoryView.js"); 40 importScript("RevisionHistoryView.js");
41 importScript("ScopeChainSidebarPane.js"); 41 importScript("ScopeChainSidebarPane.js");
42 importScript("SourcesNavigator.js"); 42 importScript("SourcesNavigator.js");
43 importScript("StyleSheetOutlineDialog.js"); 43 importScript("StyleSheetOutlineDialog.js");
44 importScript("TabbedEditorContainer.js"); 44 importScript("TabbedEditorContainer.js");
45 importScript("WatchExpressionsSidebarPane.js"); 45 importScript("WatchExpressionsSidebarPane.js");
46 importScript("WorkersSidebarPane.js"); 46 importScript("WorkersSidebarPane.js");
47 importScript("ThreadsSidebarPane.js");
48
47 importScript("ScriptFormatterEditorAction.js"); 49 importScript("ScriptFormatterEditorAction.js");
48 importScript("InplaceFormatterEditorAction.js"); 50 importScript("InplaceFormatterEditorAction.js");
49 importScript("ScriptFormatter.js"); 51 importScript("ScriptFormatter.js");
50 importScript("SourcesView.js"); 52 importScript("SourcesView.js");
51 53
52 // Search results pane 54 // Search results pane
53 importScript("AdvancedSearchView.js"); 55 importScript("AdvancedSearchView.js");
54 importScript("FileBasedSearchResultsPane.js"); 56 importScript("FileBasedSearchResultsPane.js");
55 importScript("SourcesSearchScope.js"); 57 importScript("SourcesSearchScope.js");
56 58
57 /** 59 /**
58 * @constructor 60 * @constructor
61 * @extends {WebInspector.Panel}
59 * @implements {WebInspector.ContextMenu.Provider} 62 * @implements {WebInspector.ContextMenu.Provider}
60 * @extends {WebInspector.Panel} 63 * @implements {WebInspector.TargetManager.Observer}
61 * @param {!WebInspector.Workspace=} workspaceForTest 64 * @param {!WebInspector.Workspace=} workspaceForTest
62 */ 65 */
63 WebInspector.SourcesPanel = function(workspaceForTest) 66 WebInspector.SourcesPanel = function(workspaceForTest)
64 { 67 {
65 WebInspector.Panel.call(this, "sources"); 68 WebInspector.Panel.call(this, "sources");
66 this.registerRequiredCSS("sourcesPanel.css"); 69 this.registerRequiredCSS("sourcesPanel.css");
67 new WebInspector.UpgradeFileSystemDropTarget(this.element); 70 new WebInspector.UpgradeFileSystemDropTarget(this.element);
68 71
69 this._workspace = workspaceForTest || WebInspector.workspace; 72 this._workspace = workspaceForTest || WebInspector.workspace;
70 73
71 this.debugToolbar = this._createDebugToolbar(); 74 this.debugToolbar = this._createDebugToolbar();
72 this._debugToolbarDrawer = this._createDebugToolbarDrawer(); 75 this._debugToolbarDrawer = this._createDebugToolbarDrawer();
73 this._targetsToolbar = new WebInspector.StatusBarComboBox(null, "targets-sel ect");
74 this._targetsToolbar.element.id = "targets-toolbar";
75 this._targetsComboBoxController = new WebInspector.TargetsComboBoxController (this._targetsToolbar.selectElement(), this._targetsToolbar.element);
76 76
77 const initialDebugSidebarWidth = 225; 77 const initialDebugSidebarWidth = 225;
78 this._splitView = new WebInspector.SplitView(true, true, "sourcesPanelSplitV iewState", initialDebugSidebarWidth); 78 this._splitView = new WebInspector.SplitView(true, true, "sourcesPanelSplitV iewState", initialDebugSidebarWidth);
79 this._splitView.enableShowModeSaving(); 79 this._splitView.enableShowModeSaving();
80 this._splitView.show(this.element); 80 this._splitView.show(this.element);
81 81
82 // Create scripts navigator 82 // Create scripts navigator
83 const initialNavigatorWidth = 225; 83 const initialNavigatorWidth = 225;
84 this.editorView = new WebInspector.SplitView(true, false, "sourcesPanelNavig atorSplitViewState", initialNavigatorWidth); 84 this.editorView = new WebInspector.SplitView(true, false, "sourcesPanelNavig atorSplitViewState", initialNavigatorWidth);
85 this.editorView.enableShowModeSaving(); 85 this.editorView.enableShowModeSaving();
(...skipping 13 matching lines...) Expand all
99 this._sourcesView.registerShortcuts(this.registerShortcuts.bind(this)); 99 this._sourcesView.registerShortcuts(this.registerShortcuts.bind(this));
100 this._sourcesView.show(this.editorView.mainElement()); 100 this._sourcesView.show(this.editorView.mainElement());
101 101
102 this._debugSidebarResizeWidgetElement = document.createElementWithClass("div ", "resizer-widget"); 102 this._debugSidebarResizeWidgetElement = document.createElementWithClass("div ", "resizer-widget");
103 this._debugSidebarResizeWidgetElement.id = "scripts-debug-sidebar-resizer-wi dget"; 103 this._debugSidebarResizeWidgetElement.id = "scripts-debug-sidebar-resizer-wi dget";
104 this._splitView.addEventListener(WebInspector.SplitView.Events.ShowModeChang ed, this._updateDebugSidebarResizeWidget, this); 104 this._splitView.addEventListener(WebInspector.SplitView.Events.ShowModeChang ed, this._updateDebugSidebarResizeWidget, this);
105 this._updateDebugSidebarResizeWidget(); 105 this._updateDebugSidebarResizeWidget();
106 this._splitView.installResizer(this._debugSidebarResizeWidgetElement); 106 this._splitView.installResizer(this._debugSidebarResizeWidgetElement);
107 107
108 this.sidebarPanes = {}; 108 this.sidebarPanes = {};
109 this.sidebarPanes.threads = new WebInspector.ThreadsSidebarPane();
109 this.sidebarPanes.watchExpressions = new WebInspector.WatchExpressionsSideba rPane(); 110 this.sidebarPanes.watchExpressions = new WebInspector.WatchExpressionsSideba rPane();
110 this.sidebarPanes.callstack = new WebInspector.CallStackSidebarPane(); 111 this.sidebarPanes.callstack = new WebInspector.CallStackSidebarPane();
111 this.sidebarPanes.callstack.addEventListener(WebInspector.CallStackSidebarPa ne.Events.CallFrameSelected, this._callFrameSelectedInSidebar.bind(this)); 112 this.sidebarPanes.callstack.addEventListener(WebInspector.CallStackSidebarPa ne.Events.CallFrameSelected, this._callFrameSelectedInSidebar.bind(this));
112 this.sidebarPanes.callstack.registerShortcuts(this.registerShortcuts.bind(th is)); 113 this.sidebarPanes.callstack.registerShortcuts(this.registerShortcuts.bind(th is));
113 114
114 this.sidebarPanes.scopechain = new WebInspector.ScopeChainSidebarPane(); 115 this.sidebarPanes.scopechain = new WebInspector.ScopeChainSidebarPane();
115 this.sidebarPanes.jsBreakpoints = new WebInspector.JavaScriptBreakpointsSide barPane(WebInspector.breakpointManager, this.showUISourceCode.bind(this)); 116 this.sidebarPanes.jsBreakpoints = new WebInspector.JavaScriptBreakpointsSide barPane(WebInspector.breakpointManager, this.showUISourceCode.bind(this));
116 this.sidebarPanes.domBreakpoints = WebInspector.domBreakpointsSidebarPane.cr eateProxy(this); 117 this.sidebarPanes.domBreakpoints = WebInspector.domBreakpointsSidebarPane.cr eateProxy(this);
117 this.sidebarPanes.xhrBreakpoints = new WebInspector.XHRBreakpointsSidebarPan e(); 118 this.sidebarPanes.xhrBreakpoints = new WebInspector.XHRBreakpointsSidebarPan e();
118 this.sidebarPanes.eventListenerBreakpoints = new WebInspector.EventListenerB reakpointsSidebarPane(); 119 this.sidebarPanes.eventListenerBreakpoints = new WebInspector.EventListenerB reakpointsSidebarPane();
119 120
120 if (!WebInspector.isWorkerFrontend()) 121 if (!WebInspector.isWorkerFrontend() && !WebInspector.experimentsSettings.wo rkersInMainWindow.isEnabled())
121 this.sidebarPanes.workerList = new WebInspector.WorkersSidebarPane(); 122 this.sidebarPanes.workerList = new WebInspector.WorkersSidebarPane();
122 123
123 this._extensionSidebarPanes = []; 124 this._extensionSidebarPanes = [];
124 this._installDebuggerSidebarController(); 125 this._installDebuggerSidebarController();
125 126
126 WebInspector.dockController.addEventListener(WebInspector.DockController.Eve nts.DockSideChanged, this._dockSideChanged.bind(this)); 127 WebInspector.dockController.addEventListener(WebInspector.DockController.Eve nts.DockSideChanged, this._dockSideChanged.bind(this));
127 WebInspector.settings.splitVerticallyWhenDockedToRight.addChangeListener(thi s._dockSideChanged.bind(this)); 128 WebInspector.settings.splitVerticallyWhenDockedToRight.addChangeListener(thi s._dockSideChanged.bind(this));
128 this._dockSideChanged(); 129 this._dockSideChanged();
129 130
130 this._updateDebuggerButtons(); 131 this._updateDebuggerButtons();
131 this._pauseOnExceptionEnabledChanged(); 132 this._pauseOnExceptionEnabledChanged();
132 WebInspector.settings.pauseOnExceptionEnabled.addChangeListener(this._pauseO nExceptionEnabledChanged, this); 133 WebInspector.settings.pauseOnExceptionEnabled.addChangeListener(this._pauseO nExceptionEnabledChanged, this);
133 this._setTarget(WebInspector.context.flavor(WebInspector.Target)); 134 this._setTarget(WebInspector.context.flavor(WebInspector.Target));
134 WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManag er.Events.BreakpointsActiveStateChanged, this._breakpointsActiveStateChanged, th is); 135 WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManag er.Events.BreakpointsActiveStateChanged, this._breakpointsActiveStateChanged, th is);
135 WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._onCu rrentTargetChanged, this); 136 WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._onCu rrentTargetChanged, this);
136 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerWasEnabled, this._debuggerWasEnabled, this ); 137 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerWasEnabled, this._debuggerWasEnabled, this );
137 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerWasDisabled, this._debuggerReset, this); 138 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerWasDisabled, this._debuggerReset, this);
138 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this); 139 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
139 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerResumed, this._debuggerResumed, this); 140 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.DebuggerResumed, this._debuggerResumed, this);
140 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.CallFrameSelected, this._callFrameSelected, this); 141 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.CallFrameSelected, this._callFrameSelected, this);
141 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.ConsoleCommandEvaluatedInSelectedCallFrame, this._ consoleCommandEvaluatedInSelectedCallFrame, this); 142 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.ConsoleCommandEvaluatedInSelectedCallFrame, this._ consoleCommandEvaluatedInSelectedCallFrame, this);
142 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this); 143 WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebI nspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
144 WebInspector.targetManager.observeTargets(this);
143 } 145 }
144 146
145 WebInspector.SourcesPanel.minToolbarWidth = 215; 147 WebInspector.SourcesPanel.minToolbarWidth = 215;
146 148
147 WebInspector.SourcesPanel.prototype = { 149 WebInspector.SourcesPanel.prototype = {
148 /** 150 /**
149 * @param {?WebInspector.Target} target 151 * @param {?WebInspector.Target} target
150 */ 152 */
151 _setTarget: function(target) 153 _setTarget: function(target)
152 { 154 {
(...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 1067
1066 if (!vertically) 1068 if (!vertically)
1067 this._splitView.uninstallResizer(this._sourcesView.statusBarContaine rElement()); 1069 this._splitView.uninstallResizer(this._sourcesView.statusBarContaine rElement());
1068 else 1070 else
1069 this._splitView.installResizer(this._sourcesView.statusBarContainerE lement()); 1071 this._splitView.installResizer(this._sourcesView.statusBarContainerE lement());
1070 1072
1071 // Create vertical box with stack. 1073 // Create vertical box with stack.
1072 var vbox = new WebInspector.VBox(); 1074 var vbox = new WebInspector.VBox();
1073 vbox.element.appendChild(this._debugToolbarDrawer); 1075 vbox.element.appendChild(this._debugToolbarDrawer);
1074 vbox.element.appendChild(this.debugToolbar); 1076 vbox.element.appendChild(this.debugToolbar);
1075 vbox.element.appendChild(this._targetsToolbar.element);
1076 vbox.setMinimumAndPreferredSizes(25, 25, WebInspector.SourcesPanel.minTo olbarWidth, 100); 1077 vbox.setMinimumAndPreferredSizes(25, 25, WebInspector.SourcesPanel.minTo olbarWidth, 100);
1077 var sidebarPaneStack = new WebInspector.SidebarPaneStack(); 1078 var sidebarPaneStack = new WebInspector.SidebarPaneStack();
1078 sidebarPaneStack.element.classList.add("flex-auto"); 1079 sidebarPaneStack.element.classList.add("flex-auto");
1079 sidebarPaneStack.show(vbox.element); 1080 sidebarPaneStack.show(vbox.element);
1080 1081
1081 if (!vertically) { 1082 if (!vertically) {
1082 // Populate the only stack. 1083 // Populate the only stack.
1083 for (var pane in this.sidebarPanes) 1084 for (var pane in this.sidebarPanes)
1084 sidebarPaneStack.addPane(this.sidebarPanes[pane]); 1085 sidebarPaneStack.addPane(this.sidebarPanes[pane]);
1085 this._extensionSidebarPanesContainer = sidebarPaneStack; 1086 this._extensionSidebarPanesContainer = sidebarPaneStack;
1086
1087 this.sidebarPaneView = vbox; 1087 this.sidebarPaneView = vbox;
1088 } else { 1088 } else {
1089 var splitView = new WebInspector.SplitView(true, true, "sourcesPanel DebuggerSidebarSplitViewState", 0.5); 1089 var splitView = new WebInspector.SplitView(true, true, "sourcesPanel DebuggerSidebarSplitViewState", 0.5);
1090 vbox.show(splitView.mainElement()); 1090 vbox.show(splitView.mainElement());
1091 1091
1092 // Populate the left stack. 1092 // Populate the left stack.
1093 sidebarPaneStack.addPane(this.sidebarPanes.threads);
1093 sidebarPaneStack.addPane(this.sidebarPanes.callstack); 1094 sidebarPaneStack.addPane(this.sidebarPanes.callstack);
1094 sidebarPaneStack.addPane(this.sidebarPanes.jsBreakpoints); 1095 sidebarPaneStack.addPane(this.sidebarPanes.jsBreakpoints);
1095 sidebarPaneStack.addPane(this.sidebarPanes.domBreakpoints); 1096 sidebarPaneStack.addPane(this.sidebarPanes.domBreakpoints);
1096 sidebarPaneStack.addPane(this.sidebarPanes.xhrBreakpoints); 1097 sidebarPaneStack.addPane(this.sidebarPanes.xhrBreakpoints);
1097 sidebarPaneStack.addPane(this.sidebarPanes.eventListenerBreakpoints) ; 1098 sidebarPaneStack.addPane(this.sidebarPanes.eventListenerBreakpoints) ;
1098 if (this.sidebarPanes.workerList) 1099 if (this.sidebarPanes.workerList)
1099 sidebarPaneStack.addPane(this.sidebarPanes.workerList); 1100 sidebarPaneStack.addPane(this.sidebarPanes.workerList);
1100 1101
1101 var tabbedPane = new WebInspector.SidebarTabbedPane(); 1102 var tabbedPane = new WebInspector.SidebarTabbedPane();
1102 tabbedPane.show(splitView.sidebarElement()); 1103 tabbedPane.show(splitView.sidebarElement());
1103 tabbedPane.addPane(this.sidebarPanes.scopechain); 1104 tabbedPane.addPane(this.sidebarPanes.scopechain);
1104 tabbedPane.addPane(this.sidebarPanes.watchExpressions); 1105 tabbedPane.addPane(this.sidebarPanes.watchExpressions);
1105 this._extensionSidebarPanesContainer = tabbedPane; 1106 this._extensionSidebarPanesContainer = tabbedPane;
1106 1107
1107 this.sidebarPaneView = splitView; 1108 this.sidebarPaneView = splitView;
1108 } 1109 }
1109 for (var i = 0; i < this._extensionSidebarPanes.length; ++i) 1110 for (var i = 0; i < this._extensionSidebarPanes.length; ++i)
1110 this._extensionSidebarPanesContainer.addPane(this._extensionSidebarP anes[i]); 1111 this._extensionSidebarPanesContainer.addPane(this._extensionSidebarP anes[i]);
1111 1112
1112 this.sidebarPaneView.show(this._splitView.sidebarElement()); 1113 this.sidebarPaneView.show(this._splitView.sidebarElement());
1113 1114 this.sidebarPanes.threads.expand();
1114 this.sidebarPanes.scopechain.expand(); 1115 this.sidebarPanes.scopechain.expand();
1115 this.sidebarPanes.jsBreakpoints.expand(); 1116 this.sidebarPanes.jsBreakpoints.expand();
1116 this.sidebarPanes.callstack.expand(); 1117 this.sidebarPanes.callstack.expand();
1117 1118 this._sidebarPaneStack = sidebarPaneStack;
1119 this._updateTargetsSidebarVisibility();
1118 if (WebInspector.settings.watchExpressions.get().length > 0) 1120 if (WebInspector.settings.watchExpressions.get().length > 0)
1119 this.sidebarPanes.watchExpressions.expand(); 1121 this.sidebarPanes.watchExpressions.expand();
1120 }, 1122 },
1121 1123
1122 /** 1124 /**
1123 * @param {string} id 1125 * @param {string} id
1124 * @param {!WebInspector.SidebarPane} pane 1126 * @param {!WebInspector.SidebarPane} pane
1125 */ 1127 */
1126 addExtensionSidebarPane: function(id, pane) 1128 addExtensionSidebarPane: function(id, pane)
1127 { 1129 {
1128 this._extensionSidebarPanes.push(pane); 1130 this._extensionSidebarPanes.push(pane);
1129 this._extensionSidebarPanesContainer.addPane(pane); 1131 this._extensionSidebarPanesContainer.addPane(pane);
1130 this.setHideOnDetach(); 1132 this.setHideOnDetach();
1131 }, 1133 },
1132 1134
1133 /** 1135 /**
1134 * @return {!WebInspector.SourcesView} 1136 * @return {!WebInspector.SourcesView}
1135 */ 1137 */
1136 sourcesView: function() 1138 sourcesView: function()
1137 { 1139 {
1138 return this._sourcesView; 1140 return this._sourcesView;
1139 }, 1141 },
1140 1142
1143 /**
1144 * @param {!WebInspector.Target} target
1145 */
1146 targetAdded: function(target)
1147 {
1148 this._updateTargetsSidebarVisibility();
1149 },
1150
1151 /**
1152 * @param {!WebInspector.Target} target
1153 */
1154 targetRemoved: function(target)
1155 {
1156 this._updateTargetsSidebarVisibility();
1157 },
1158
1159 _updateTargetsSidebarVisibility: function()
1160 {
1161 if (!this._sidebarPaneStack)
1162 return;
1163 this._sidebarPaneStack.toggleHidden(this.sidebarPanes.threads, WebInspec tor.targetManager.targets().length < 2);
vsevik 2014/08/08 08:32:03 togglePaneHidden
sergeyv 2014/08/08 09:01:50 Done.
1164 },
1165
1141 __proto__: WebInspector.Panel.prototype 1166 __proto__: WebInspector.Panel.prototype
1142 } 1167 }
1143 1168
1144 /** 1169 /**
1145 * @constructor 1170 * @constructor
1146 * @param {!Element} element 1171 * @param {!Element} element
1147 */ 1172 */
1148 WebInspector.UpgradeFileSystemDropTarget = function(element) 1173 WebInspector.UpgradeFileSystemDropTarget = function(element)
1149 { 1174 {
1150 element.addEventListener("dragenter", this._onDragEnter.bind(this), true); 1175 element.addEventListener("dragenter", this._onDragEnter.bind(this), true);
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 */ 1381 */
1357 handleAction: function() 1382 handleAction: function()
1358 { 1383 {
1359 var panel = /** @type {?WebInspector.SourcesPanel} */ (WebInspector.insp ectorView.showPanel("sources")); 1384 var panel = /** @type {?WebInspector.SourcesPanel} */ (WebInspector.insp ectorView.showPanel("sources"));
1360 if (!panel) 1385 if (!panel)
1361 return false; 1386 return false;
1362 panel.togglePause(); 1387 panel.togglePause();
1363 return true; 1388 return true;
1364 } 1389 }
1365 } 1390 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698