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