Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 122 isInterstitialShowing() { | 122 isInterstitialShowing() { |
| 123 return this._isInterstitialShowing; | 123 return this._isInterstitialShowing; |
| 124 } | 124 } |
| 125 | 125 |
| 126 /** | 126 /** |
| 127 * @param {!SDK.ResourceTreeFrame} frame | 127 * @param {!SDK.ResourceTreeFrame} frame |
| 128 * @param {boolean=} aboutToNavigate | 128 * @param {boolean=} aboutToNavigate |
| 129 */ | 129 */ |
| 130 _addFrame(frame, aboutToNavigate) { | 130 _addFrame(frame, aboutToNavigate) { |
| 131 this._frames.set(frame.id, frame); | 131 this._frames.set(frame.id, frame); |
| 132 if (frame.isMainFrame()) { | 132 if (frame.isMainFrame()) |
| 133 this.mainFrame = frame; | 133 this.mainFrame = frame; |
| 134 this._securityOriginManager.setMainSecurityOrigin(frame.url); | |
| 135 } | |
| 136 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameAdded, frame ); | 134 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameAdded, frame ); |
| 137 if (!aboutToNavigate) | 135 if (!aboutToNavigate) |
| 138 this._securityOriginManager.addSecurityOrigin(frame.securityOrigin); | 136 this._updateSecurityOrigins(); |
|
pfeldman
2017/01/09 20:06:13
You should unconditionally update origins.
eostroukhov
2017/01/09 20:32:01
Done.
| |
| 139 } | 137 } |
| 140 | 138 |
| 141 /** | 139 /** |
| 142 * @param {!SDK.ResourceTreeFrame} mainFrame | |
| 143 */ | |
| 144 _handleMainFrameDetached(mainFrame) { | |
| 145 /** | |
| 146 * @param {!SDK.ResourceTreeFrame} frame | |
| 147 * @this {SDK.ResourceTreeModel} | |
| 148 */ | |
| 149 function removeOriginForFrame(frame) { | |
| 150 for (var i = 0; i < frame.childFrames.length; ++i) | |
| 151 removeOriginForFrame.call(this, frame.childFrames[i]); | |
| 152 if (!frame.isMainFrame()) | |
| 153 this._securityOriginManager.removeSecurityOrigin(frame.securityOrigin); | |
| 154 } | |
| 155 removeOriginForFrame.call(this, mainFrame); | |
| 156 } | |
| 157 | |
| 158 /** | |
| 159 * @param {!Protocol.Page.FrameId} frameId | 140 * @param {!Protocol.Page.FrameId} frameId |
| 160 * @param {?Protocol.Page.FrameId} parentFrameId | 141 * @param {?Protocol.Page.FrameId} parentFrameId |
| 161 * @return {?SDK.ResourceTreeFrame} | 142 * @return {?SDK.ResourceTreeFrame} |
| 162 */ | 143 */ |
| 163 _frameAttached(frameId, parentFrameId) { | 144 _frameAttached(frameId, parentFrameId) { |
| 164 // Do nothing unless cached resource tree is processed - it will overwrite e verything. | 145 // Do nothing unless cached resource tree is processed - it will overwrite e verything. |
| 165 if (!this._cachedResourcesProcessed && parentFrameId) | 146 if (!this._cachedResourcesProcessed && parentFrameId) |
| 166 return null; | 147 return null; |
| 167 if (this._frames.has(frameId)) | 148 if (this._frames.has(frameId)) |
| 168 return null; | 149 return null; |
| 169 | 150 |
| 170 var parentFrame = parentFrameId ? (this._frames.get(parentFrameId) || null) : null; | 151 var parentFrame = parentFrameId ? (this._frames.get(parentFrameId) || null) : null; |
| 171 var frame = new SDK.ResourceTreeFrame(this, parentFrame, frameId); | 152 var frame = new SDK.ResourceTreeFrame(this, parentFrame, frameId); |
| 172 if (frame.isMainFrame() && this.mainFrame) { | 153 if (frame.isMainFrame() && this.mainFrame) { |
| 173 this._handleMainFrameDetached(this.mainFrame); | |
| 174 // Navigation to the new backend process. | 154 // Navigation to the new backend process. |
| 175 this._frameDetached(this.mainFrame.id); | 155 this._frameDetached(this.mainFrame.id); |
| 176 } | 156 } |
| 177 this._addFrame(frame, true); | 157 this._addFrame(frame, true); |
| 178 return frame; | 158 return frame; |
| 179 } | 159 } |
| 180 | 160 |
| 181 /** | 161 /** |
| 182 * @param {!Protocol.Page.Frame} framePayload | 162 * @param {!Protocol.Page.Frame} framePayload |
| 183 */ | 163 */ |
| 184 _frameNavigated(framePayload) { | 164 _frameNavigated(framePayload) { |
| 185 // Do nothing unless cached resource tree is processed - it will overwrite e verything. | 165 // Do nothing unless cached resource tree is processed - it will overwrite e verything. |
| 186 if (!this._cachedResourcesProcessed && framePayload.parentId) | 166 if (!this._cachedResourcesProcessed && framePayload.parentId) |
| 187 return; | 167 return; |
| 188 var frame = this._frames.get(framePayload.id); | 168 var frame = this._frames.get(framePayload.id); |
| 189 if (!frame) { | 169 if (!frame) { |
| 190 // Simulate missed "frameAttached" for a main frame navigation to the new backend process. | 170 // Simulate missed "frameAttached" for a main frame navigation to the new backend process. |
| 191 console.assert(!framePayload.parentId, 'Main frame shouldn\'t have parent frame id.'); | 171 console.assert(!framePayload.parentId, 'Main frame shouldn\'t have parent frame id.'); |
| 192 frame = this._frameAttached(framePayload.id, framePayload.parentId || ''); | 172 frame = this._frameAttached(framePayload.id, framePayload.parentId || ''); |
| 193 console.assert(frame); | 173 console.assert(frame); |
| 194 } | 174 } |
| 195 | 175 |
| 196 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameWillNavigate , frame); | 176 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameWillNavigate , frame); |
| 177 frame._navigate(framePayload); | |
| 178 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameNavigated, f rame); | |
| 197 | 179 |
| 198 this._securityOriginManager.removeSecurityOrigin(frame.securityOrigin); | |
| 199 frame._navigate(framePayload); | |
| 200 var addedOrigin = frame.securityOrigin; | |
| 201 | |
| 202 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameNavigated, f rame); | |
| 203 if (frame.isMainFrame()) { | 180 if (frame.isMainFrame()) { |
| 204 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.MainFrameNaviga ted, frame); | 181 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.MainFrameNaviga ted, frame); |
| 205 if (Common.moduleSetting('preserveConsoleLog').get()) | 182 if (Common.moduleSetting('preserveConsoleLog').get()) |
| 206 Common.console.log(Common.UIString('Navigated to %s', frame.url)); | 183 Common.console.log(Common.UIString('Navigated to %s', frame.url)); |
| 207 } | 184 } |
| 208 if (addedOrigin) | |
| 209 this._securityOriginManager.addSecurityOrigin(addedOrigin); | |
| 210 | 185 |
| 211 // Fill frame with retained resources (the ones loaded using new loader). | 186 // Fill frame with retained resources (the ones loaded using new loader). |
| 212 var resources = frame.resources(); | 187 var resources = frame.resources(); |
| 213 for (var i = 0; i < resources.length; ++i) | 188 for (var i = 0; i < resources.length; ++i) |
| 214 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.ResourceAdded, resources[i]); | 189 this.dispatchEventToListeners(SDK.ResourceTreeModel.Events.ResourceAdded, resources[i]); |
| 215 | 190 |
| 216 if (frame.isMainFrame()) | 191 if (frame.isMainFrame()) |
| 217 this.target().setInspectedURL(frame.url); | 192 this.target().setInspectedURL(frame.url); |
| 193 this._updateSecurityOrigins(); | |
| 218 } | 194 } |
| 219 | 195 |
| 220 /** | 196 /** |
| 221 * @param {!Protocol.Page.FrameId} frameId | 197 * @param {!Protocol.Page.FrameId} frameId |
| 222 */ | 198 */ |
| 223 _frameDetached(frameId) { | 199 _frameDetached(frameId) { |
| 224 // Do nothing unless cached resource tree is processed - it will overwrite e verything. | 200 // Do nothing unless cached resource tree is processed - it will overwrite e verything. |
| 225 if (!this._cachedResourcesProcessed) | 201 if (!this._cachedResourcesProcessed) |
| 226 return; | 202 return; |
| 227 | 203 |
| 228 var frame = this._frames.get(frameId); | 204 var frame = this._frames.get(frameId); |
| 229 if (!frame) | 205 if (!frame) |
| 230 return; | 206 return; |
| 231 | 207 |
| 232 this._securityOriginManager.removeSecurityOrigin(frame.securityOrigin); | |
| 233 if (frame.parentFrame) | 208 if (frame.parentFrame) |
| 234 frame.parentFrame._removeChildFrame(frame); | 209 frame.parentFrame._removeChildFrame(frame); |
| 235 else | 210 else |
| 236 frame._remove(); | 211 frame._remove(); |
|
pfeldman
2017/01/09 20:06:13
You should update origins here as well.
| |
| 237 } | 212 } |
| 238 | 213 |
| 239 /** | 214 /** |
| 240 * @param {!Protocol.Page.FrameId} frameId | 215 * @param {!Protocol.Page.FrameId} frameId |
| 241 */ | 216 */ |
| 242 _frameStartedLoading(frameId) { | 217 _frameStartedLoading(frameId) { |
| 243 // Do nothing unless cached resource tree is processed - it will overwrite e verything. | 218 // Do nothing unless cached resource tree is processed - it will overwrite e verything. |
| 244 if (!this._cachedResourcesProcessed) | 219 if (!this._cachedResourcesProcessed) |
| 245 return; | 220 return; |
| 246 | 221 |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 444 return -1; | 419 return -1; |
| 445 | 420 |
| 446 if (!frameB && frameA) | 421 if (!frameB && frameA) |
| 447 return 1; | 422 return 1; |
| 448 | 423 |
| 449 if (frameA && frameB) | 424 if (frameA && frameB) |
| 450 return frameA.id.localeCompare(frameB.id); | 425 return frameA.id.localeCompare(frameB.id); |
| 451 | 426 |
| 452 return SDK.ExecutionContext.comparator(a, b); | 427 return SDK.ExecutionContext.comparator(a, b); |
| 453 } | 428 } |
| 429 | |
| 430 _updateSecurityOrigins() { | |
| 431 var securityOrigins = []; | |
|
pfeldman
2017/01/09 20:06:13
You should use Set here, otherwise you report same
eostroukhov
2017/01/09 20:32:01
Done.
| |
| 432 var mainSecurityOrigin = null; | |
| 433 for (var frame of this._frames.values()) { | |
| 434 var origin = frame.securityOrigin; | |
| 435 if (!origin) | |
| 436 continue; | |
| 437 securityOrigins.push(origin); | |
| 438 if (frame.isMainFrame()) | |
| 439 mainSecurityOrigin = origin; | |
| 440 } | |
| 441 this._securityOriginManager.updateSecurityOrigins(securityOrigins); | |
| 442 this._securityOriginManager.setMainSecurityOrigin(mainSecurityOrigin || ''); | |
| 443 } | |
| 454 }; | 444 }; |
| 455 | 445 |
| 456 /** @enum {symbol} */ | 446 /** @enum {symbol} */ |
| 457 SDK.ResourceTreeModel.Events = { | 447 SDK.ResourceTreeModel.Events = { |
| 458 FrameAdded: Symbol('FrameAdded'), | 448 FrameAdded: Symbol('FrameAdded'), |
| 459 FrameNavigated: Symbol('FrameNavigated'), | 449 FrameNavigated: Symbol('FrameNavigated'), |
| 460 FrameDetached: Symbol('FrameDetached'), | 450 FrameDetached: Symbol('FrameDetached'), |
| 461 FrameResized: Symbol('FrameResized'), | 451 FrameResized: Symbol('FrameResized'), |
| 462 FrameWillNavigate: Symbol('FrameWillNavigate'), | 452 FrameWillNavigate: Symbol('FrameWillNavigate'), |
| 463 MainFrameNavigated: Symbol('MainFrameNavigated'), | 453 MainFrameNavigated: Symbol('MainFrameNavigated'), |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 651 _removeChildFrames() { | 641 _removeChildFrames() { |
| 652 var frames = this._childFrames; | 642 var frames = this._childFrames; |
| 653 this._childFrames = []; | 643 this._childFrames = []; |
| 654 for (var i = 0; i < frames.length; ++i) | 644 for (var i = 0; i < frames.length; ++i) |
| 655 frames[i]._remove(); | 645 frames[i]._remove(); |
| 656 } | 646 } |
| 657 | 647 |
| 658 _remove() { | 648 _remove() { |
| 659 this._removeChildFrames(); | 649 this._removeChildFrames(); |
| 660 this._model._frames.delete(this.id); | 650 this._model._frames.delete(this.id); |
| 651 this._model._updateSecurityOrigins(); | |
|
pfeldman
2017/01/09 20:06:13
You are calling this in a loop, I'd rather interce
eostroukhov
2017/01/09 20:32:01
Done.
| |
| 661 this._model.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameDetac hed, this); | 652 this._model.dispatchEventToListeners(SDK.ResourceTreeModel.Events.FrameDetac hed, this); |
| 662 } | 653 } |
| 663 | 654 |
| 664 /** | 655 /** |
| 665 * @param {!SDK.Resource} resource | 656 * @param {!SDK.Resource} resource |
| 666 */ | 657 */ |
| 667 addResource(resource) { | 658 addResource(resource) { |
| 668 if (this._resourcesMap[resource.url] === resource) { | 659 if (this._resourcesMap[resource.url] === resource) { |
| 669 // Already in the tree, we just got an extra update. | 660 // Already in the tree, we just got an extra update. |
| 670 return; | 661 return; |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 893 this._resourceTreeModel.dispatchEventToListeners(SDK.ResourceTreeModel.Event s.InterstitialHidden); | 884 this._resourceTreeModel.dispatchEventToListeners(SDK.ResourceTreeModel.Event s.InterstitialHidden); |
| 894 } | 885 } |
| 895 | 886 |
| 896 /** | 887 /** |
| 897 * @override | 888 * @override |
| 898 */ | 889 */ |
| 899 navigationRequested() { | 890 navigationRequested() { |
| 900 // Frontend is not interested in when navigations are requested. | 891 // Frontend is not interested in when navigations are requested. |
| 901 } | 892 } |
| 902 }; | 893 }; |
| OLD | NEW |