| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 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 23 matching lines...) Expand all Loading... |
| 34 * @extends {WebInspector.Object} | 34 * @extends {WebInspector.Object} |
| 35 * @param {boolean} responsiveDesignAvailable | 35 * @param {boolean} responsiveDesignAvailable |
| 36 */ | 36 */ |
| 37 WebInspector.OverridesSupport = function(responsiveDesignAvailable) | 37 WebInspector.OverridesSupport = function(responsiveDesignAvailable) |
| 38 { | 38 { |
| 39 WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeMod
el.EventTypes.MainFrameNavigated, this._onMainFrameNavigated.bind(this), this); | 39 WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeMod
el.EventTypes.MainFrameNavigated, this._onMainFrameNavigated.bind(this), this); |
| 40 this._overrideDeviceResolution = false; | 40 this._overrideDeviceResolution = false; |
| 41 this._emulateViewportEnabled = false; | 41 this._emulateViewportEnabled = false; |
| 42 this._userAgent = ""; | 42 this._userAgent = ""; |
| 43 this._pageResizer = null; | 43 this._pageResizer = null; |
| 44 this._initialized = false; |
| 44 WebInspector.targetManager.observeTargets(this); | 45 WebInspector.targetManager.observeTargets(this); |
| 45 this._responsiveDesignAvailable = responsiveDesignAvailable; | 46 this._responsiveDesignAvailable = responsiveDesignAvailable; |
| 46 } | 47 } |
| 47 | 48 |
| 48 WebInspector.OverridesSupport.Events = { | 49 WebInspector.OverridesSupport.Events = { |
| 49 OverridesWarningUpdated: "OverridesWarningUpdated", | 50 OverridesWarningUpdated: "OverridesWarningUpdated", |
| 50 HasActiveOverridesChanged: "HasActiveOverridesChanged", | 51 HasActiveOverridesChanged: "HasActiveOverridesChanged", |
| 51 } | 52 } |
| 52 | 53 |
| 53 /** | 54 /** |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 | 420 |
| 420 if (this._pageResizer) { | 421 if (this._pageResizer) { |
| 421 this._pageResizer.removeEventListener(WebInspector.OverridesSupport.
PageResizer.Events.AvailableSizeChanged, this._onPageResizerAvailableSizeChanged
, this); | 422 this._pageResizer.removeEventListener(WebInspector.OverridesSupport.
PageResizer.Events.AvailableSizeChanged, this._onPageResizerAvailableSizeChanged
, this); |
| 422 this._pageResizer.removeEventListener(WebInspector.OverridesSupport.
PageResizer.Events.ResizeRequested, this._onPageResizerResizeRequested, this); | 423 this._pageResizer.removeEventListener(WebInspector.OverridesSupport.
PageResizer.Events.ResizeRequested, this._onPageResizerResizeRequested, this); |
| 423 } | 424 } |
| 424 this._pageResizer = pageResizer; | 425 this._pageResizer = pageResizer; |
| 425 if (this._pageResizer) { | 426 if (this._pageResizer) { |
| 426 this._pageResizer.addEventListener(WebInspector.OverridesSupport.Pag
eResizer.Events.AvailableSizeChanged, this._onPageResizerAvailableSizeChanged, t
his); | 427 this._pageResizer.addEventListener(WebInspector.OverridesSupport.Pag
eResizer.Events.AvailableSizeChanged, this._onPageResizerAvailableSizeChanged, t
his); |
| 427 this._pageResizer.addEventListener(WebInspector.OverridesSupport.Pag
eResizer.Events.ResizeRequested, this._onPageResizerResizeRequested, this); | 428 this._pageResizer.addEventListener(WebInspector.OverridesSupport.Pag
eResizer.Events.ResizeRequested, this._onPageResizerResizeRequested, this); |
| 428 } | 429 } |
| 429 this._deviceMetricsChanged(); | 430 if (this._initialized) |
| 431 this._deviceMetricsChanged(); |
| 430 }, | 432 }, |
| 431 | 433 |
| 432 /** | 434 /** |
| 433 * @param {string} deviceMetrics | 435 * @param {string} deviceMetrics |
| 434 * @param {string} userAgent | 436 * @param {string} userAgent |
| 435 */ | 437 */ |
| 436 emulateDevice: function(deviceMetrics, userAgent) | 438 emulateDevice: function(deviceMetrics, userAgent) |
| 437 { | 439 { |
| 438 var metrics = WebInspector.OverridesSupport.DeviceMetrics.parseSetting(d
eviceMetrics); | 440 var metrics = WebInspector.OverridesSupport.DeviceMetrics.parseSetting(d
eviceMetrics); |
| 439 this._deviceMetricsChangedListenerMuted = true; | 441 this._deviceMetricsChangedListenerMuted = true; |
| 440 this._userAgentChangedListenerMuted = true; | 442 this._userAgentChangedListenerMuted = true; |
| 441 this.settings.userAgent.set(userAgent); | 443 this.settings.userAgent.set(userAgent); |
| 442 this.settings.overrideDeviceResolution.set(true); | 444 this.settings.overrideDeviceResolution.set(true); |
| 443 this.settings.deviceWidth.set(metrics.width); | 445 this.settings.deviceWidth.set(metrics.width); |
| 444 this.settings.deviceHeight.set(metrics.height); | 446 this.settings.deviceHeight.set(metrics.height); |
| 445 this.settings.deviceScaleFactor.set(metrics.deviceScaleFactor); | 447 this.settings.deviceScaleFactor.set(metrics.deviceScaleFactor); |
| 446 this.settings.deviceTextAutosizing.set(metrics.textAutosizing); | 448 this.settings.deviceTextAutosizing.set(metrics.textAutosizing); |
| 447 this.settings.overrideUserAgent.set(true); | 449 this.settings.overrideUserAgent.set(true); |
| 448 this.settings.emulateTouchEvents.set(true); | 450 this.settings.emulateTouchEvents.set(true); |
| 449 this.settings.emulateViewport.set(true); | 451 this.settings.emulateViewport.set(true); |
| 450 delete this._deviceMetricsChangedListenerMuted; | 452 delete this._deviceMetricsChangedListenerMuted; |
| 451 delete this._userAgentChangedListenerMuted; | 453 delete this._userAgentChangedListenerMuted; |
| 452 this._deviceMetricsChanged(); | 454 |
| 453 this._userAgentChanged(); | 455 if (this._initialized) { |
| 456 this._deviceMetricsChanged(); |
| 457 this._userAgentChanged(); |
| 458 } |
| 454 }, | 459 }, |
| 455 | 460 |
| 456 resetEmulatedDevice: function() | 461 resetEmulatedDevice: function() |
| 457 { | 462 { |
| 458 this._deviceMetricsChangedListenerMuted = true; | 463 this._deviceMetricsChangedListenerMuted = true; |
| 459 this._userAgentChangedListenerMuted = true; | 464 this._userAgentChangedListenerMuted = true; |
| 460 this.settings.overrideDeviceResolution.set(false); | 465 this.settings.overrideDeviceResolution.set(false); |
| 461 this.settings.overrideUserAgent.set(false); | 466 this.settings.overrideUserAgent.set(false); |
| 462 this.settings.emulateTouchEvents.set(false); | 467 this.settings.emulateTouchEvents.set(false); |
| 463 this.settings.emulateViewport.set(false); | 468 this.settings.emulateViewport.set(false); |
| 464 delete this._deviceMetricsChangedListenerMuted; | 469 delete this._deviceMetricsChangedListenerMuted; |
| 465 delete this._userAgentChangedListenerMuted; | 470 delete this._userAgentChangedListenerMuted; |
| 466 this._deviceMetricsChanged(); | 471 |
| 467 this._userAgentChanged(); | 472 if (this._initialized) { |
| 473 this._deviceMetricsChanged(); |
| 474 this._userAgentChanged(); |
| 475 } |
| 468 }, | 476 }, |
| 469 | 477 |
| 470 reset: function() | 478 reset: function() |
| 471 { | 479 { |
| 472 this.settings.overrideDeviceOrientation.set(false); | 480 this.settings.overrideDeviceOrientation.set(false); |
| 473 this.settings.overrideGeolocation.set(false); | 481 this.settings.overrideGeolocation.set(false); |
| 474 this.settings.overrideCSSMedia.set(false); | 482 this.settings.overrideCSSMedia.set(false); |
| 475 this.resetEmulatedDevice(); | 483 this.resetEmulatedDevice(); |
| 476 }, | 484 }, |
| 477 | 485 |
| 478 applyInitialOverrides: function() | 486 applyInitialOverrides: function() |
| 479 { | 487 { |
| 480 if (!this._target) { | 488 if (!this._target) { |
| 481 this._applyInitialOverridesOnTargetAdded = true; | 489 this._applyInitialOverridesOnTargetAdded = true; |
| 482 return; | 490 return; |
| 483 } | 491 } |
| 484 | 492 |
| 493 this._initialized = true; |
| 494 |
| 495 this.settings.overrideUserAgent.addChangeListener(this._userAgentChanged
, this); |
| 496 this.settings.userAgent.addChangeListener(this._userAgentChanged, this); |
| 497 |
| 498 this.settings.overrideDeviceResolution.addChangeListener(this._deviceMet
ricsChanged, this); |
| 499 this.settings.deviceWidth.addChangeListener(this._deviceMetricsChanged,
this); |
| 500 this.settings.deviceHeight.addChangeListener(this._deviceMetricsChanged,
this); |
| 501 this.settings.deviceScaleFactor.addChangeListener(this._deviceMetricsCha
nged, this); |
| 502 this.settings.deviceTextAutosizing.addChangeListener(this._deviceMetrics
Changed, this); |
| 503 this.settings.emulateViewport.addChangeListener(this._deviceMetricsChang
ed, this); |
| 504 this.settings.deviceFitWindow.addChangeListener(this._deviceMetricsChang
ed, this); |
| 505 WebInspector.settings.responsiveDesignMode.addChangeListener(this._devic
eMetricsChanged, this); |
| 506 |
| 507 this.settings.overrideGeolocation.addChangeListener(this._geolocationPos
itionChanged, this); |
| 508 this.settings.geolocationOverride.addChangeListener(this._geolocationPos
itionChanged, this); |
| 509 |
| 510 this.settings.overrideDeviceOrientation.addChangeListener(this._deviceOr
ientationChanged, this); |
| 511 this.settings.deviceOrientationOverride.addChangeListener(this._deviceOr
ientationChanged, this); |
| 512 |
| 513 this.settings.emulateTouchEvents.addChangeListener(this._emulateTouchEve
ntsChanged, this); |
| 514 |
| 515 this.settings.overrideCSSMedia.addChangeListener(this._cssMediaChanged,
this); |
| 516 this.settings.emulatedCSSMedia.addChangeListener(this._cssMediaChanged,
this); |
| 517 |
| 518 WebInspector.settings.showMetricsRulers.addChangeListener(this._showRule
rsChanged, this); |
| 519 |
| 485 if (this.settings.overrideDeviceOrientation.get()) | 520 if (this.settings.overrideDeviceOrientation.get()) |
| 486 this._deviceOrientationChanged(); | 521 this._deviceOrientationChanged(); |
| 487 | 522 |
| 488 if (this.settings.overrideGeolocation.get()) | 523 if (this.settings.overrideGeolocation.get()) |
| 489 this._geolocationPositionChanged(); | 524 this._geolocationPositionChanged(); |
| 490 | 525 |
| 491 if (this.settings.emulateTouchEvents.get()) | 526 if (this.settings.emulateTouchEvents.get()) |
| 492 this._emulateTouchEventsChanged(); | 527 this._emulateTouchEventsChanged(); |
| 493 | 528 |
| 494 if (this.settings.overrideCSSMedia.get()) | 529 if (this.settings.overrideCSSMedia.get()) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 510 var userAgent = this.settings.overrideUserAgent.get() ? this.settings.us
erAgent.get() : ""; | 545 var userAgent = this.settings.overrideUserAgent.get() ? this.settings.us
erAgent.get() : ""; |
| 511 NetworkAgent.setUserAgentOverride(userAgent); | 546 NetworkAgent.setUserAgentOverride(userAgent); |
| 512 if (this._userAgent !== userAgent) | 547 if (this._userAgent !== userAgent) |
| 513 this._updateUserAgentWarningMessage(WebInspector.UIString("You might
need to reload the page for proper user agent spoofing and viewport rendering."
)); | 548 this._updateUserAgentWarningMessage(WebInspector.UIString("You might
need to reload the page for proper user agent spoofing and viewport rendering."
)); |
| 514 this._userAgent = userAgent; | 549 this._userAgent = userAgent; |
| 515 this.maybeHasActiveOverridesChanged(); | 550 this.maybeHasActiveOverridesChanged(); |
| 516 }, | 551 }, |
| 517 | 552 |
| 518 _onPageResizerAvailableSizeChanged: function() | 553 _onPageResizerAvailableSizeChanged: function() |
| 519 { | 554 { |
| 520 this._deviceMetricsChanged(); | 555 if (this._initialized) |
| 556 this._deviceMetricsChanged(); |
| 521 }, | 557 }, |
| 522 | 558 |
| 523 _onPageResizerResizeRequested: function(event) | 559 _onPageResizerResizeRequested: function(event) |
| 524 { | 560 { |
| 525 var size = /** @type {!Size} */ (event.data); | 561 var size = /** @type {!Size} */ (event.data); |
| 526 if (size.width !== this.settings.deviceWidth.get()) | 562 if (size.width !== this.settings.deviceWidth.get()) |
| 527 this.settings.deviceWidth.set(size.width); | 563 this.settings.deviceWidth.set(size.width); |
| 528 if (size.height !== this.settings.deviceHeight.get()) | 564 if (size.height !== this.settings.deviceHeight.get()) |
| 529 this.settings.deviceHeight.set(size.height); | 565 this.settings.deviceHeight.set(size.height); |
| 530 }, | 566 }, |
| 531 | 567 |
| 532 _deviceMetricsChanged: function() | 568 _deviceMetricsChanged: function() |
| 533 { | 569 { |
| 534 this._showRulersChanged(); | 570 this._showRulersChanged(); |
| 535 | 571 |
| 536 if (this._deviceMetricsChangedListenerMuted) | 572 if (this._deviceMetricsChangedListenerMuted) |
| 537 return; | 573 return; |
| 538 var responsiveDesignAvailableAndDisabled = this._responsiveDesignAvailab
le && !WebInspector.settings.responsiveDesignMode.get(); | 574 var responsiveDesignAvailableAndDisabled = this._responsiveDesignAvailab
le && (!WebInspector.settings.responsiveDesignMode.get() || !this._pageResizer); |
| 539 var overrideDeviceResolution = this.settings.overrideDeviceResolution.ge
t(); | 575 var overrideDeviceResolution = this.settings.overrideDeviceResolution.ge
t(); |
| 540 if (responsiveDesignAvailableAndDisabled || (!overrideDeviceResolution &
& !this.settings.emulateViewport.get())) { | 576 var emulationEnabled = overrideDeviceResolution || this.settings.emulate
Viewport.get(); |
| 577 if (responsiveDesignAvailableAndDisabled || !emulationEnabled) { |
| 541 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this)); | 578 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this)); |
| 542 if (this._pageResizer) | 579 if (this._pageResizer && !emulationEnabled) |
| 543 this._pageResizer.update(0, 0, 0); | 580 this._pageResizer.update(0, 0, 0); |
| 544 this.maybeHasActiveOverridesChanged(); | 581 this.maybeHasActiveOverridesChanged(); |
| 545 return; | 582 return; |
| 546 } | 583 } |
| 547 | 584 |
| 548 var dipWidth = overrideDeviceResolution ? this.settings.deviceWidth.get(
) : 0; | 585 var dipWidth = overrideDeviceResolution ? this.settings.deviceWidth.get(
) : 0; |
| 549 var dipHeight = overrideDeviceResolution ? this.settings.deviceHeight.ge
t() : 0; | 586 var dipHeight = overrideDeviceResolution ? this.settings.deviceHeight.ge
t() : 0; |
| 550 | 587 |
| 551 // Disable override without checks. | 588 // Disable override without checks. |
| 552 if (this.isInspectingDevice()) | 589 if (this.isInspectingDevice()) |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 (this.settings.emulateTouchEvents.get() && !this.hasTouchInputs()) |
| | 746 (this.settings.emulateTouchEvents.get() && !this.hasTouchInputs()) |
| |
| 710 (this.settings.overrideCSSMedia.get() && !this.isInspectingDevice())
; | 747 (this.settings.overrideCSSMedia.get() && !this.isInspectingDevice())
; |
| 711 if (this._hasActiveOverrides !== hasActiveOverrides) { | 748 if (this._hasActiveOverrides !== hasActiveOverrides) { |
| 712 this._hasActiveOverrides = hasActiveOverrides; | 749 this._hasActiveOverrides = hasActiveOverrides; |
| 713 this.dispatchEventToListeners(WebInspector.OverridesSupport.Events.H
asActiveOverridesChanged); | 750 this.dispatchEventToListeners(WebInspector.OverridesSupport.Events.H
asActiveOverridesChanged); |
| 714 } | 751 } |
| 715 }, | 752 }, |
| 716 | 753 |
| 717 _onMainFrameNavigated: function() | 754 _onMainFrameNavigated: function() |
| 718 { | 755 { |
| 719 this._deviceMetricsChanged(); | 756 if (this._initialized) |
| 757 this._deviceMetricsChanged(); |
| 720 this._updateUserAgentWarningMessage(""); | 758 this._updateUserAgentWarningMessage(""); |
| 721 this._updateDeviceMetricsWarningMessage(""); | 759 this._updateDeviceMetricsWarningMessage(""); |
| 722 }, | 760 }, |
| 723 | 761 |
| 724 /** | 762 /** |
| 725 * @param {string} warningMessage | 763 * @param {string} warningMessage |
| 726 */ | 764 */ |
| 727 _updateDeviceMetricsWarningMessage: function(warningMessage) | 765 _updateDeviceMetricsWarningMessage: function(warningMessage) |
| 728 { | 766 { |
| 729 this._deviceMetricsWarningMessage = warningMessage; | 767 this._deviceMetricsWarningMessage = warningMessage; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 this.settings.overrideGeolocation = WebInspector.settings.createSetting(
"overrideGeolocation", false); | 811 this.settings.overrideGeolocation = WebInspector.settings.createSetting(
"overrideGeolocation", false); |
| 774 this.settings.geolocationOverride = WebInspector.settings.createSetting(
"geolocationOverride", ""); | 812 this.settings.geolocationOverride = WebInspector.settings.createSetting(
"geolocationOverride", ""); |
| 775 this.settings.overrideDeviceOrientation = WebInspector.settings.createSe
tting("overrideDeviceOrientation", false); | 813 this.settings.overrideDeviceOrientation = WebInspector.settings.createSe
tting("overrideDeviceOrientation", false); |
| 776 this.settings.deviceOrientationOverride = WebInspector.settings.createSe
tting("deviceOrientationOverride", ""); | 814 this.settings.deviceOrientationOverride = WebInspector.settings.createSe
tting("deviceOrientationOverride", ""); |
| 777 this.settings.overrideCSSMedia = WebInspector.settings.createSetting("ov
errideCSSMedia", false); | 815 this.settings.overrideCSSMedia = WebInspector.settings.createSetting("ov
errideCSSMedia", false); |
| 778 this.settings.emulatedCSSMedia = WebInspector.settings.createSetting("em
ulatedCSSMedia", "print"); | 816 this.settings.emulatedCSSMedia = WebInspector.settings.createSetting("em
ulatedCSSMedia", "print"); |
| 779 this.settings.emulatedDevice = WebInspector.settings.createSetting("emul
atedDevice", "Google Nexus 5"); | 817 this.settings.emulatedDevice = WebInspector.settings.createSetting("emul
atedDevice", "Google Nexus 5"); |
| 780 | 818 |
| 781 this.maybeHasActiveOverridesChanged(); | 819 this.maybeHasActiveOverridesChanged(); |
| 782 | 820 |
| 783 this.settings.overrideUserAgent.addChangeListener(this._userAgentChanged
, this); | |
| 784 this.settings.userAgent.addChangeListener(this._userAgentChanged, this); | |
| 785 | |
| 786 this.settings.overrideDeviceResolution.addChangeListener(this._deviceMet
ricsChanged, this); | |
| 787 this.settings.deviceWidth.addChangeListener(this._deviceMetricsChanged,
this); | |
| 788 this.settings.deviceHeight.addChangeListener(this._deviceMetricsChanged,
this); | |
| 789 this.settings.deviceScaleFactor.addChangeListener(this._deviceMetricsCha
nged, this); | |
| 790 this.settings.deviceTextAutosizing.addChangeListener(this._deviceMetrics
Changed, this); | |
| 791 this.settings.emulateViewport.addChangeListener(this._deviceMetricsChang
ed, this); | |
| 792 this.settings.deviceFitWindow.addChangeListener(this._deviceMetricsChang
ed, this); | |
| 793 | |
| 794 this.settings.overrideGeolocation.addChangeListener(this._geolocationPos
itionChanged, this); | |
| 795 this.settings.geolocationOverride.addChangeListener(this._geolocationPos
itionChanged, this); | |
| 796 | |
| 797 this.settings.overrideDeviceOrientation.addChangeListener(this._deviceOr
ientationChanged, this); | |
| 798 this.settings.deviceOrientationOverride.addChangeListener(this._deviceOr
ientationChanged, this); | |
| 799 | |
| 800 this.settings.emulateTouchEvents.addChangeListener(this._emulateTouchEve
ntsChanged, this); | |
| 801 | |
| 802 this.settings.overrideCSSMedia.addChangeListener(this._cssMediaChanged,
this); | |
| 803 this.settings.emulatedCSSMedia.addChangeListener(this._cssMediaChanged,
this); | |
| 804 | |
| 805 WebInspector.settings.showMetricsRulers.addChangeListener(this._showRule
rsChanged, this); | |
| 806 | |
| 807 if (this._applyInitialOverridesOnTargetAdded) { | 821 if (this._applyInitialOverridesOnTargetAdded) { |
| 808 delete this._applyInitialOverridesOnTargetAdded; | 822 delete this._applyInitialOverridesOnTargetAdded; |
| 809 this.applyInitialOverrides(); | 823 this.applyInitialOverrides(); |
| 810 } | 824 } |
| 811 }, | 825 }, |
| 812 | 826 |
| 813 swapDimensions: function() | 827 swapDimensions: function() |
| 814 { | 828 { |
| 815 var width = WebInspector.overridesSupport.settings.deviceWidth.get(); | 829 var width = WebInspector.overridesSupport.settings.deviceWidth.get(); |
| 816 var height = WebInspector.overridesSupport.settings.deviceHeight.get(); | 830 var height = WebInspector.overridesSupport.settings.deviceHeight.get(); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 932 }, | 946 }, |
| 933 | 947 |
| 934 __proto__: WebInspector.Object.prototype | 948 __proto__: WebInspector.Object.prototype |
| 935 } | 949 } |
| 936 | 950 |
| 937 | 951 |
| 938 /** | 952 /** |
| 939 * @type {!WebInspector.OverridesSupport} | 953 * @type {!WebInspector.OverridesSupport} |
| 940 */ | 954 */ |
| 941 WebInspector.overridesSupport; | 955 WebInspector.overridesSupport; |
| OLD | NEW |