@@ -2402,10 +2402,10 @@ index 0000000000000000000000000000000000000000..ba34976ad05e7f5f1a99777f76ac08b1
2402
2402
+ this.SimpleChannel = SimpleChannel;
2403
2403
diff --git a/juggler/TargetRegistry.js b/juggler/TargetRegistry.js
2404
2404
new file mode 100644
2405
- index 0000000000000000000000000000000000000000..ffa7a3eb7db0508bce20f59535fee808a3ee2859
2405
+ index 0000000000000000000000000000000000000000..bbd2983755282e514c17824c210e9ab49a1bbad0
2406
2406
--- /dev/null
2407
2407
+++ b/juggler/TargetRegistry.js
2408
- @@ -0,0 +1,648 @@
2408
+ @@ -0,0 +1,676 @@
2409
2409
+ const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
2410
2410
+ const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
2411
2411
+ const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
@@ -2595,8 +2595,8 @@ index 0000000000000000000000000000000000000000..ffa7a3eb7db0508bce20f59535fee808
2595
2595
+ const tab = event.target;
2596
2596
+ const userContextId = tab.userContextId;
2597
2597
+ const browserContext = this._userContextIdToBrowserContext.get(userContextId);
2598
- + if (browserContext && browserContext.settings.defaultViewport )
2599
- + setViewportSizeForBrowser(browserContext.settings.defaultViewport.viewportSize , tab.linkedBrowser);
2598
+ + if (browserContext && browserContext.defaultViewportSize )
2599
+ + setViewportSizeForBrowser(browserContext.defaultViewportSize , tab.linkedBrowser);
2600
2600
+ };
2601
2601
+
2602
2602
+ const onTabCloseListener = event => {
@@ -2731,6 +2731,7 @@ index 0000000000000000000000000000000000000000..ffa7a3eb7db0508bce20f59535fee808
2731
2731
+ this._tab = tab;
2732
2732
+ this._linkedBrowser = linkedBrowser;
2733
2733
+ this._browserContext = browserContext;
2734
+ + this._viewportSize = undefined;
2734
2735
+ this._url = '';
2735
2736
+ this._openerId = opener ? opener.id() : undefined;
2736
2737
+ this._channel = SimpleChannel.createForMessageManager(`browser::page[${this._targetId}]`, this._linkedBrowser.messageManager);
@@ -2745,8 +2746,10 @@ index 0000000000000000000000000000000000000000..ffa7a3eb7db0508bce20f59535fee808
2745
2746
+ ];
2746
2747
+
2747
2748
+ this._disposed = false;
2748
- + if (browserContext)
2749
+ + if (browserContext) {
2749
2750
+ browserContext.pages.add(this);
2751
+ + browserContext._firstPageCallback();
2752
+ + }
2750
2753
+ this._registry._browserToTarget.set(this._linkedBrowser, this);
2751
2754
+ this._registry._browserBrowsingContextToTarget.set(this._linkedBrowser.browsingContext, this);
2752
2755
+ }
@@ -2759,8 +2762,13 @@ index 0000000000000000000000000000000000000000..ffa7a3eb7db0508bce20f59535fee808
2759
2762
+ return this._browserContext;
2760
2763
+ }
2761
2764
+
2762
- + setViewportSize(viewportSize) {
2763
- + return setViewportSizeForBrowser(viewportSize, this._linkedBrowser);
2765
+ + async setViewportSize(viewportSize) {
2766
+ + this._viewportSize = viewportSize;
2767
+ + const actualSize = setViewportSizeForBrowser(viewportSize, this._linkedBrowser);
2768
+ + await this._channel.connect('').send('awaitViewportDimensions', {
2769
+ + width: actualSize.width,
2770
+ + height: actualSize.height
2771
+ + });
2764
2772
+ }
2765
2773
+
2766
2774
+ connectSession(session) {
@@ -2859,10 +2867,12 @@ index 0000000000000000000000000000000000000000..ffa7a3eb7db0508bce20f59535fee808
2859
2867
+ this.requestInterceptionEnabled = undefined;
2860
2868
+ this.ignoreHTTPSErrors = undefined;
2861
2869
+ this.downloadOptions = undefined;
2870
+ + this.defaultViewportSize = undefined;
2862
2871
+ this.scriptsToEvaluateOnNewDocument = [];
2863
2872
+ this.bindings = [];
2864
2873
+ this.settings = {};
2865
2874
+ this.pages = new Set();
2875
+ + this._firstPagePromise = new Promise(f => this._firstPageCallback = f);
2866
2876
+ }
2867
2877
+
2868
2878
+ async destroy() {
@@ -2900,6 +2910,24 @@ index 0000000000000000000000000000000000000000..ffa7a3eb7db0508bce20f59535fee808
2900
2910
+ }
2901
2911
+ }
2902
2912
+
2913
+ + async setDefaultViewport(viewport) {
2914
+ + this.defaultViewportSize = viewport ? viewport.viewportSize : undefined;
2915
+ + if (!this.userContextId) {
2916
+ + // First page in the default context comes before onTabOpenListener
2917
+ + // so we don't set default viewport. Wait for it here and ensure the viewport.
2918
+ + await this._firstPagePromise;
2919
+ + }
2920
+ + const promises = Array.from(this.pages).map(async page => {
2921
+ + // Resize to new default, unless the page has a custom viewport.
2922
+ + if (!page._viewportSize)
2923
+ + await page.setViewportSize(this.defaultViewportSize);
2924
+ + });
2925
+ + await Promise.all([
2926
+ + this.applySetting('deviceScaleFactor', viewport ? viewport.deviceScaleFactor : undefined),
2927
+ + ...promises,
2928
+ + ]);
2929
+ + }
2930
+ +
2903
2931
+ async addScriptToEvaluateOnNewDocument(script) {
2904
2932
+ this.scriptsToEvaluateOnNewDocument.push(script);
2905
2933
+ await Promise.all(Array.from(this.pages).map(page => page.addScriptToEvaluateOnNewDocument(script)));
@@ -3699,10 +3727,10 @@ index 0000000000000000000000000000000000000000..155d0770ddf704728829272a41a31ce8
3699
3727
+
3700
3728
diff --git a/juggler/content/PageAgent.js b/juggler/content/PageAgent.js
3701
3729
new file mode 100644
3702
- index 0000000000000000000000000000000000000000..73b6ee4d266ff648acd0a8dfb8909f9b0c76c28d
3730
+ index 0000000000000000000000000000000000000000..7828bbea9a32fc7bf161c1bc814b900bdc19a2a9
3703
3731
--- /dev/null
3704
3732
+++ b/juggler/content/PageAgent.js
3705
- @@ -0,0 +1,992 @@
3733
+ @@ -0,0 +1,977 @@
3706
3734
+ "use strict";
3707
3735
+ const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
3708
3736
+ const Ci = Components.interfaces;
@@ -3832,7 +3860,6 @@ index 0000000000000000000000000000000000000000..73b6ee4d266ff648acd0a8dfb8909f9b
3832
3860
+ addBinding: ({ name, script }) => this._frameTree.addBinding(name, script),
3833
3861
+ addScriptToEvaluateOnNewDocument: this._addScriptToEvaluateOnNewDocument.bind(this),
3834
3862
+ adoptNode: this._adoptNode.bind(this),
3835
- + awaitViewportDimensions: this._awaitViewportDimensions.bind(this),
3836
3863
+ crash: this._crash.bind(this),
3837
3864
+ describeNode: this._describeNode.bind(this),
3838
3865
+ dispatchKeyEvent: this._dispatchKeyEvent.bind(this),
@@ -3871,20 +3898,6 @@ index 0000000000000000000000000000000000000000..73b6ee4d266ff648acd0a8dfb8909f9b
3871
3898
+ this._dataTransfer = null;
3872
3899
+ }
3873
3900
+
3874
- + async _awaitViewportDimensions({width, height}) {
3875
- + const win = this._frameTree.mainFrame().domWindow();
3876
- + if (win.innerWidth === width && win.innerHeight === height)
3877
- + return;
3878
- + await new Promise(resolve => {
3879
- + const listener = helper.addEventListener(win, 'resize', () => {
3880
- + if (win.innerWidth === width && win.innerHeight === height) {
3881
- + helper.removeListeners([listener]);
3882
- + resolve();
3883
- + }
3884
- + });
3885
- + });
3886
- + }
3887
- +
3888
3901
+ _requestDetails({channelId}) {
3889
3902
+ return this._networkMonitor.requestDetails(channelId);
3890
3903
+ }
@@ -5492,10 +5505,10 @@ index 0000000000000000000000000000000000000000..3a386425d3796d0a6786dea193b3402d
5492
5505
+
5493
5506
diff --git a/juggler/content/main.js b/juggler/content/main.js
5494
5507
new file mode 100644
5495
- index 0000000000000000000000000000000000000000..ef33a19f8fd4f8abefac1470aa7c79b66d822860
5508
+ index 0000000000000000000000000000000000000000..70c47bb426876f4a89709ba61460149dae370efe
5496
5509
--- /dev/null
5497
5510
+++ b/juggler/content/main.js
5498
- @@ -0,0 +1,174 @@
5511
+ @@ -0,0 +1,188 @@
5499
5512
+ const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
5500
5513
+ const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
5501
5514
+ const {FrameTree} = ChromeUtils.import('chrome://juggler/content/content/FrameTree.js');
@@ -5585,9 +5598,9 @@ index 0000000000000000000000000000000000000000..ef33a19f8fd4f8abefac1470aa7c79b6
5585
5598
+ frameTree.setColorScheme(colorScheme);
5586
5599
+ },
5587
5600
+
5588
- + defaultViewport : (viewport ) => {
5589
- + docShell.contentViewer.overrideDPPX = viewport. deviceScaleFactor || this._initialDPPX;
5590
- + docShell.deviceSizeIsPageSize = true ;
5601
+ + deviceScaleFactor : (deviceScaleFactor ) => {
5602
+ + docShell.contentViewer.overrideDPPX = deviceScaleFactor || this._initialDPPX;
5603
+ + docShell.deviceSizeIsPageSize = !!deviceScaleFactor ;
5591
5604
+ },
5592
5605
+ };
5593
5606
+
@@ -5650,6 +5663,20 @@ index 0000000000000000000000000000000000000000..ef33a19f8fd4f8abefac1470aa7c79b6
5650
5663
+ return failedToOverrideTimezone;
5651
5664
+ },
5652
5665
+
5666
+ + async awaitViewportDimensions({width, height}) {
5667
+ + const win = docShell.domWindow;
5668
+ + if (win.innerWidth === width && win.innerHeight === height)
5669
+ + return;
5670
+ + await new Promise(resolve => {
5671
+ + const listener = helper.addEventListener(win, 'resize', () => {
5672
+ + if (win.innerWidth === width && win.innerHeight === height) {
5673
+ + helper.removeListeners([listener]);
5674
+ + resolve();
5675
+ + }
5676
+ + });
5677
+ + });
5678
+ + },
5679
+ +
5653
5680
+ dispose() {
5654
5681
+ },
5655
5682
+ });
@@ -5749,7 +5776,7 @@ index 0000000000000000000000000000000000000000..bf37558bccc48f4d90eadc971c1eb3e4
5749
5776
+ this.AccessibilityHandler = AccessibilityHandler;
5750
5777
diff --git a/juggler/protocol/BrowserHandler.js b/juggler/protocol/BrowserHandler.js
5751
5778
new file mode 100644
5752
- index 0000000000000000000000000000000000000000..1d304e2996c62df07d823b4cffd1eb309cba29ab
5779
+ index 0000000000000000000000000000000000000000..ad4bfcf776c2ae97957c8b0e675f920371955728
5753
5780
--- /dev/null
5754
5781
+++ b/juggler/protocol/BrowserHandler.js
5755
5782
@@ -0,0 +1,239 @@
@@ -5951,7 +5978,7 @@ index 0000000000000000000000000000000000000000..1d304e2996c62df07d823b4cffd1eb30
5951
5978
+ }
5952
5979
+
5953
5980
+ async setDefaultViewport({browserContextId, viewport}) {
5954
- + await this._targetRegistry.browserContextForId(browserContextId).applySetting('defaultViewport', nullToUndefined(viewport));
5981
+ + await this._targetRegistry.browserContextForId(browserContextId).setDefaultViewport( nullToUndefined(viewport));
5955
5982
+ }
5956
5983
+
5957
5984
+ async addScriptToEvaluateOnNewDocument({browserContextId, script}) {
@@ -6299,10 +6326,10 @@ index 0000000000000000000000000000000000000000..10ce1e9eb24879426ca11a21ffeb89f3
6299
6326
+ this.NetworkHandler = NetworkHandler;
6300
6327
diff --git a/juggler/protocol/PageHandler.js b/juggler/protocol/PageHandler.js
6301
6328
new file mode 100644
6302
- index 0000000000000000000000000000000000000000..95481cd1194918d0b539dc1872906070ef75b1be
6329
+ index 0000000000000000000000000000000000000000..2ad037e57ac4b0b97d85c55bcd08489d840205c1
6303
6330
--- /dev/null
6304
6331
+++ b/juggler/protocol/PageHandler.js
6305
- @@ -0,0 +1,345 @@
6332
+ @@ -0,0 +1,341 @@
6306
6333
+ "use strict";
6307
6334
+
6308
6335
+ const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
@@ -6440,11 +6467,7 @@ index 0000000000000000000000000000000000000000..95481cd1194918d0b539dc1872906070
6440
6467
+ }
6441
6468
+
6442
6469
+ async setViewportSize({viewportSize}) {
6443
- + const size = this._pageTarget.setViewportSize(viewportSize);
6444
- + await this._contentPage.send('awaitViewportDimensions', {
6445
- + width: size.width,
6446
- + height: size.height
6447
- + });
6470
+ + await this._pageTarget.setViewportSize(viewportSize === null ? undefined : viewportSize);
6448
6471
+ }
6449
6472
+
6450
6473
+ _updateModalDialogs() {
0 commit comments