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 24 matching lines...) Expand all Loading... |
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 this._initialized = false; |
| 45 this._deviceMetricsThrottler = new WebInspector.Throttler(0); |
45 WebInspector.targetManager.observeTargets(this); | 46 WebInspector.targetManager.observeTargets(this); |
46 this._responsiveDesignAvailable = responsiveDesignAvailable; | 47 this._responsiveDesignAvailable = responsiveDesignAvailable; |
47 } | 48 } |
48 | 49 |
49 WebInspector.OverridesSupport.Events = { | 50 WebInspector.OverridesSupport.Events = { |
50 OverridesWarningUpdated: "OverridesWarningUpdated", | 51 OverridesWarningUpdated: "OverridesWarningUpdated", |
51 HasActiveOverridesChanged: "HasActiveOverridesChanged", | 52 HasActiveOverridesChanged: "HasActiveOverridesChanged", |
52 } | 53 } |
53 | 54 |
54 /** | 55 /** |
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
616 _deviceMetricsChanged: function() | 617 _deviceMetricsChanged: function() |
617 { | 618 { |
618 this._showRulersChanged(); | 619 this._showRulersChanged(); |
619 | 620 |
620 if (this._deviceMetricsChangedListenerMuted) | 621 if (this._deviceMetricsChangedListenerMuted) |
621 return; | 622 return; |
622 var responsiveDesignAvailableAndDisabled = this._responsiveDesignAvailab
le && (!WebInspector.settings.responsiveDesign.enabled.get() || !this._pageResiz
er); | 623 var responsiveDesignAvailableAndDisabled = this._responsiveDesignAvailab
le && (!WebInspector.settings.responsiveDesign.enabled.get() || !this._pageResiz
er); |
623 var overrideDeviceResolution = this.settings.overrideDeviceResolution.ge
t(); | 624 var overrideDeviceResolution = this.settings.overrideDeviceResolution.ge
t(); |
624 var emulationEnabled = overrideDeviceResolution || this.settings.emulate
Viewport.get(); | 625 var emulationEnabled = overrideDeviceResolution || this.settings.emulate
Viewport.get(); |
625 if (responsiveDesignAvailableAndDisabled || !emulationEnabled) { | 626 if (responsiveDesignAvailableAndDisabled || !emulationEnabled) { |
626 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this)); | 627 this._deviceMetricsThrottler.schedule(clearDeviceMetricsOverride.bin
d(this)); |
627 if (this._pageResizer && !emulationEnabled) | 628 if (this._pageResizer && !emulationEnabled) |
628 this._pageResizer.update(0, 0, 0); | 629 this._pageResizer.update(0, 0, 0); |
629 this.maybeHasActiveOverridesChanged(); | |
630 return; | 630 return; |
631 } | 631 } |
632 | 632 |
633 var dipWidth = overrideDeviceResolution ? this.settings.deviceWidth.get(
) : 0; | 633 var dipWidth = overrideDeviceResolution ? this.settings.deviceWidth.get(
) : 0; |
634 var dipHeight = overrideDeviceResolution ? this.settings.deviceHeight.ge
t() : 0; | 634 var dipHeight = overrideDeviceResolution ? this.settings.deviceHeight.ge
t() : 0; |
635 | 635 |
636 // Disable override without checks. | 636 // Disable override without checks. |
637 if (this.isInspectingDevice()) | 637 if (this.isInspectingDevice()) |
638 return; | 638 return; |
639 | 639 |
640 var overrideWidth = dipWidth; | 640 var overrideWidth = dipWidth; |
641 var overrideHeight = dipHeight; | 641 var overrideHeight = dipHeight; |
642 if (this._pageResizer) { | 642 if (this._pageResizer) { |
643 var available = this._pageResizer.availableDipSize(); | 643 var available = this._pageResizer.availableDipSize(); |
644 if (available.width >= dipWidth && available.height >= dipHeight) { | 644 if (available.width >= dipWidth && available.height >= dipHeight) { |
645 this._pageResizer.update(dipWidth, dipHeight, 0); | 645 this._pageResizer.update(dipWidth, dipHeight, 0); |
646 // When we have enough space, no page size override is required.
This will speed things up and remove lag. | 646 // When we have enough space, no page size override is required.
This will speed things up and remove lag. |
647 overrideWidth = 0; | 647 overrideWidth = 0; |
648 overrideHeight = 0; | 648 overrideHeight = 0; |
649 } else { | 649 } else { |
650 this._pageResizer.update(Math.min(dipWidth, available.width), Ma
th.min(dipHeight, available.height), 0); | 650 this._pageResizer.update(Math.min(dipWidth, available.width), Ma
th.min(dipHeight, available.height), 0); |
651 } | 651 } |
652 } | 652 } |
653 | 653 |
654 // Do not emulate resolution more often than 10Hz. | 654 this._deviceMetricsThrottler.schedule(setDeviceMetricsOverride.bind(this
)); |
655 this._setDeviceMetricsTimers = (this._setDeviceMetricsTimers || 0) + 1; | |
656 if (overrideWidth || overrideHeight) | |
657 setTimeout(setDeviceMetricsOverride.bind(this), 100); | |
658 else | |
659 setDeviceMetricsOverride.call(this); | |
660 | 655 |
661 /** | 656 /** |
| 657 * @param {!WebInspector.Throttler.FinishCallback} finishCallback |
662 * @this {WebInspector.OverridesSupport} | 658 * @this {WebInspector.OverridesSupport} |
663 */ | 659 */ |
664 function setDeviceMetricsOverride() | 660 function setDeviceMetricsOverride(finishCallback) |
665 { | 661 { |
666 // Drop heavy intermediate commands. | |
667 this._setDeviceMetricsTimers--; | |
668 var isExpensive = overrideWidth || overrideHeight; | |
669 if (isExpensive && this._setDeviceMetricsTimers) { | |
670 var commandThreshold = 100; | |
671 var time = window.performance.now(); | |
672 if (time - this._lastExpensivePageAgentCommandTime < commandThre
shold) | |
673 return; | |
674 this._lastExpensivePageAgentCommandTime = time; | |
675 } | |
676 | |
677 PageAgent.setDeviceMetricsOverride( | 662 PageAgent.setDeviceMetricsOverride( |
678 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g
et(), | 663 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g
et(), |
679 this.settings.emulateViewport.get(), this._pageResizer ? false :
this.settings.deviceFitWindow.get(), | 664 this.settings.emulateViewport.get(), this._pageResizer ? false :
this.settings.deviceFitWindow.get(), |
680 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor(
overrideWidth || dipWidth, overrideHeight || dipHeight), | 665 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor(
overrideWidth || dipWidth, overrideHeight || dipHeight), |
681 apiCallback.bind(this)); | 666 apiCallback.bind(this, finishCallback)); |
682 } | 667 } |
683 | 668 |
684 this.maybeHasActiveOverridesChanged(); | 669 /** |
| 670 * @param {!WebInspector.Throttler.FinishCallback} finishCallback |
| 671 * @this {WebInspector.OverridesSupport} |
| 672 */ |
| 673 function clearDeviceMetricsOverride(finishCallback) |
| 674 { |
| 675 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this, finishCa
llback)); |
| 676 } |
685 | 677 |
686 /** | 678 /** |
| 679 * @param {!WebInspector.Throttler.FinishCallback} finishCallback |
687 * @param {?Protocol.Error} error | 680 * @param {?Protocol.Error} error |
688 * @this {WebInspector.OverridesSupport} | 681 * @this {WebInspector.OverridesSupport} |
689 */ | 682 */ |
690 function apiCallback(error) | 683 function apiCallback(finishCallback, error) |
691 { | 684 { |
692 if (error) { | 685 if (error) { |
693 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S
creen emulation is not available on this page.")); | 686 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S
creen emulation is not available on this page.")); |
694 this._deviceMetricsOverrideAppliedForTest(); | 687 this._deviceMetricsOverrideAppliedForTest(); |
| 688 finishCallback(); |
695 return; | 689 return; |
696 } | 690 } |
697 | 691 |
698 var overrideDeviceResolution = this.settings.overrideDeviceResolutio
n.get(); | 692 var overrideDeviceResolution = this.settings.overrideDeviceResolutio
n.get(); |
699 var viewportEnabled = this.settings.emulateViewport.get(); | 693 var viewportEnabled = this.settings.emulateViewport.get(); |
700 if (this._overrideDeviceResolution !== overrideDeviceResolution || t
his._emulateViewportEnabled !== viewportEnabled) | 694 if (this._overrideDeviceResolution !== overrideDeviceResolution || t
his._emulateViewportEnabled !== viewportEnabled) |
701 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("Y
ou might need to reload the page for proper user agent spoofing and viewport ren
dering.")); | 695 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("Y
ou might need to reload the page for proper user agent spoofing and viewport ren
dering.")); |
702 this._overrideDeviceResolution = overrideDeviceResolution; | 696 this._overrideDeviceResolution = overrideDeviceResolution; |
703 this._emulateViewportEnabled = viewportEnabled; | 697 this._emulateViewportEnabled = viewportEnabled; |
704 this._deviceMetricsOverrideAppliedForTest(); | 698 this._deviceMetricsOverrideAppliedForTest(); |
| 699 this.maybeHasActiveOverridesChanged(); |
| 700 finishCallback(); |
705 } | 701 } |
706 }, | 702 }, |
707 | 703 |
708 _deviceMetricsOverrideAppliedForTest: function() | 704 _deviceMetricsOverrideAppliedForTest: function() |
709 { | 705 { |
710 // Used for sniffing in tests. | 706 // Used for sniffing in tests. |
711 }, | 707 }, |
712 | 708 |
713 _geolocationPositionChanged: function() | 709 _geolocationPositionChanged: function() |
714 { | 710 { |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1089 }, | 1085 }, |
1090 | 1086 |
1091 __proto__: WebInspector.Object.prototype | 1087 __proto__: WebInspector.Object.prototype |
1092 } | 1088 } |
1093 | 1089 |
1094 | 1090 |
1095 /** | 1091 /** |
1096 * @type {!WebInspector.OverridesSupport} | 1092 * @type {!WebInspector.OverridesSupport} |
1097 */ | 1093 */ |
1098 WebInspector.overridesSupport; | 1094 WebInspector.overridesSupport; |
OLD | NEW |