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); | |
vsevik
2014/06/09 12:32:58
why not 100?
lushnikov
2014/06/09 13:07:26
Throttler is used here as a message serializer tha
| |
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), true); |
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 var immediately = !overrideWidth && !overrideHeight; |
655 this._setDeviceMetricsTimers = (this._setDeviceMetricsTimers || 0) + 1; | 655 this._deviceMetricsThrottler.schedule(setDeviceMetricsOverride.bind(this ), immediately); |
656 if (overrideWidth || overrideHeight) | |
657 setTimeout(setDeviceMetricsOverride.bind(this), 100); | |
658 else | |
659 setDeviceMetricsOverride.call(this); | |
vsevik
2014/06/09 12:32:57
This one is not called synchronously anymore, coul
lushnikov
2014/06/09 13:07:26
That's intentional, should be fine here.
| |
660 | 656 |
661 /** | 657 /** |
658 * @param {!WebInspector.Throttler.FinishCallback} finishCallback | |
662 * @this {WebInspector.OverridesSupport} | 659 * @this {WebInspector.OverridesSupport} |
663 */ | 660 */ |
664 function setDeviceMetricsOverride() | 661 function setDeviceMetricsOverride(finishCallback) |
665 { | 662 { |
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( | 663 PageAgent.setDeviceMetricsOverride( |
678 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g et(), | 664 overrideWidth, overrideHeight, this.settings.deviceScaleFactor.g et(), |
679 this.settings.emulateViewport.get(), this._pageResizer ? false : this.settings.deviceFitWindow.get(), | 665 this.settings.emulateViewport.get(), this._pageResizer ? false : this.settings.deviceFitWindow.get(), |
680 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor( overrideWidth || dipWidth, overrideHeight || dipHeight), | 666 this.settings.deviceTextAutosizing.get(), this._fontScaleFactor( overrideWidth || dipWidth, overrideHeight || dipHeight), |
681 apiCallback.bind(this)); | 667 apiCallback.bind(this, finishCallback)); |
682 } | 668 } |
683 | 669 |
684 this.maybeHasActiveOverridesChanged(); | 670 /** |
671 * @param {!WebInspector.Throttler.FinishCallback} finishCallback | |
672 * @this {WebInspector.OverridesSupport} | |
673 */ | |
674 function clearDeviceMetricsOverride(finishCallback) | |
675 { | |
676 PageAgent.clearDeviceMetricsOverride(apiCallback.bind(this, finishCa llback)); | |
677 } | |
685 | 678 |
686 /** | 679 /** |
680 * @param {!WebInspector.Throttler.FinishCallback} finishCallback | |
687 * @param {?Protocol.Error} error | 681 * @param {?Protocol.Error} error |
688 * @this {WebInspector.OverridesSupport} | 682 * @this {WebInspector.OverridesSupport} |
689 */ | 683 */ |
690 function apiCallback(error) | 684 function apiCallback(finishCallback, error) |
691 { | 685 { |
692 if (error) { | 686 if (error) { |
693 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S creen emulation is not available on this page.")); | 687 this._updateDeviceMetricsWarningMessage(WebInspector.UIString("S creen emulation is not available on this page.")); |
694 this._deviceMetricsOverrideAppliedForTest(); | 688 this._deviceMetricsOverrideAppliedForTest(); |
689 finishCallback(); | |
695 return; | 690 return; |
696 } | 691 } |
697 | 692 |
698 var overrideDeviceResolution = this.settings.overrideDeviceResolutio n.get(); | 693 var overrideDeviceResolution = this.settings.overrideDeviceResolutio n.get(); |
699 var viewportEnabled = this.settings.emulateViewport.get(); | 694 var viewportEnabled = this.settings.emulateViewport.get(); |
700 if (this._overrideDeviceResolution !== overrideDeviceResolution || t his._emulateViewportEnabled !== viewportEnabled) | 695 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.")); | 696 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; | 697 this._overrideDeviceResolution = overrideDeviceResolution; |
703 this._emulateViewportEnabled = viewportEnabled; | 698 this._emulateViewportEnabled = viewportEnabled; |
704 this._deviceMetricsOverrideAppliedForTest(); | 699 this._deviceMetricsOverrideAppliedForTest(); |
700 this.maybeHasActiveOverridesChanged(); | |
701 finishCallback(); | |
705 } | 702 } |
706 }, | 703 }, |
707 | 704 |
708 _deviceMetricsOverrideAppliedForTest: function() | 705 _deviceMetricsOverrideAppliedForTest: function() |
709 { | 706 { |
710 // Used for sniffing in tests. | 707 // Used for sniffing in tests. |
711 }, | 708 }, |
712 | 709 |
713 _geolocationPositionChanged: function() | 710 _geolocationPositionChanged: function() |
714 { | 711 { |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1089 }, | 1086 }, |
1090 | 1087 |
1091 __proto__: WebInspector.Object.prototype | 1088 __proto__: WebInspector.Object.prototype |
1092 } | 1089 } |
1093 | 1090 |
1094 | 1091 |
1095 /** | 1092 /** |
1096 * @type {!WebInspector.OverridesSupport} | 1093 * @type {!WebInspector.OverridesSupport} |
1097 */ | 1094 */ |
1098 WebInspector.overridesSupport; | 1095 WebInspector.overridesSupport; |
OLD | NEW |