mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
chore: update browser_patches to 9768715bd (#36191)
This commit is contained in:
parent
a0479cb24b
commit
85519de71b
@ -1,3 +1,3 @@
|
||||
REMOTE_URL="https://github.com/mozilla/gecko-dev"
|
||||
BASE_BRANCH="release"
|
||||
BASE_REVISION="5e1efb776a56e399f6810204a2eca13f18a3eba6"
|
||||
BASE_REVISION="9cbfae27052e4aaeb064d2d08e7e869f31ee4288"
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
|
||||
const uuidGen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
|
||||
|
||||
class Helper {
|
||||
export class Helper {
|
||||
decorateAsEventEmitter(objectToDecorate) {
|
||||
const { EventEmitter } = ChromeUtils.import('resource://gre/modules/EventEmitter.jsm');
|
||||
const { EventEmitter } = ChromeUtils.importESModule('resource://gre/modules/EventEmitter.sys.mjs');
|
||||
const emitter = new EventEmitter();
|
||||
objectToDecorate.on = emitter.on.bind(emitter);
|
||||
objectToDecorate.addEventListener = emitter.on.bind(emitter);
|
||||
@ -172,7 +172,7 @@ class Helper {
|
||||
|
||||
const helper = new Helper();
|
||||
|
||||
class EventWatcher {
|
||||
export class EventWatcher {
|
||||
constructor(receiver, eventNames, pendingEventWatchers = new Set()) {
|
||||
this._pendingEventWatchers = pendingEventWatchers;
|
||||
this._pendingEventWatchers.add(this);
|
||||
@ -233,7 +233,3 @@ class EventWatcher {
|
||||
}
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = [ "Helper", "EventWatcher" ];
|
||||
this.Helper = Helper;
|
||||
this.EventWatcher = EventWatcher;
|
||||
|
||||
|
||||
@ -1,13 +1,11 @@
|
||||
"use strict";
|
||||
|
||||
const { TargetRegistry } = ChromeUtils.import('chrome://juggler/content/TargetRegistry.js');
|
||||
const { Helper } = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const { TargetRegistry } = ChromeUtils.importESModule('chrome://juggler/content/TargetRegistry.js');
|
||||
const { Helper } = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
|
||||
const helper = new Helper();
|
||||
|
||||
var EXPORTED_SYMBOLS = ['JugglerFrameParent'];
|
||||
|
||||
class JugglerFrameParent extends JSWindowActorParent {
|
||||
export class JugglerFrameParent extends JSWindowActorParent {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
|
||||
const { ChannelEventSinkFactory } = ChromeUtils.import("chrome://remote/content/cdp/observers/ChannelEventSink.jsm");
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const {NetUtil} = ChromeUtils.importESModule('resource://gre/modules/NetUtil.sys.mjs');
|
||||
const { ChannelEventSinkFactory } = ChromeUtils.importESModule("chrome://remote/content/cdp/observers/ChannelEventSink.sys.mjs");
|
||||
|
||||
|
||||
const Cc = Components.classes;
|
||||
@ -28,7 +28,7 @@ const MAX_RESPONSE_STORAGE_SIZE = 100 * 1024 * 1024;
|
||||
|
||||
const pageNetworkSymbol = Symbol('PageNetwork');
|
||||
|
||||
class PageNetwork {
|
||||
export class PageNetwork {
|
||||
static forPageTarget(target) {
|
||||
if (!target)
|
||||
return undefined;
|
||||
@ -143,9 +143,10 @@ class NetworkRequest {
|
||||
const target = this._networkObserver._targetRegistry.targetForBrowserId(browsingContext.browserId);
|
||||
this._pageNetwork = PageNetwork.forPageTarget(target);
|
||||
}
|
||||
this._expectingInterception = false;
|
||||
this._shouldYieldInterceptionToServiceWorker = false;
|
||||
this._expectingResumedRequest = undefined; // { method, headers, postData }
|
||||
this._overriddenHeadersForRedirect = redirectedFrom?._overriddenHeadersForRedirect;
|
||||
this._sentOnRequest = false;
|
||||
this._sentOnResponse = false;
|
||||
this._fulfilled = false;
|
||||
|
||||
@ -318,9 +319,8 @@ class NetworkRequest {
|
||||
const interceptController = this._fallThroughInterceptController();
|
||||
if (interceptController && interceptController.shouldPrepareForIntercept(aURI, channel)) {
|
||||
// We assume that interceptController is a service worker if there is one,
|
||||
// and yield interception to it. We are not going to intercept ourselves,
|
||||
// so we send onRequest now.
|
||||
this._sendOnRequest(false);
|
||||
// and yield interception to it.
|
||||
this._shouldYieldInterceptionToServiceWorker = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -329,12 +329,6 @@ class NetworkRequest {
|
||||
return false;
|
||||
}
|
||||
|
||||
// We do not want to intercept any redirects, because we are not able
|
||||
// to intercept subresource redirects, and it's unreliable for main requests.
|
||||
// We do not sendOnRequest here, because redirects do that in constructor.
|
||||
if (this.redirectedFromId)
|
||||
return false;
|
||||
|
||||
const shouldIntercept = this._shouldIntercept();
|
||||
if (!shouldIntercept) {
|
||||
// We are not intercepting - ready to issue onRequest.
|
||||
@ -342,21 +336,24 @@ class NetworkRequest {
|
||||
return false;
|
||||
}
|
||||
|
||||
this._expectingInterception = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
// nsINetworkInterceptController
|
||||
channelIntercepted(intercepted) {
|
||||
if (!this._expectingInterception) {
|
||||
// We are not intercepting, fall-through.
|
||||
const interceptController = this._fallThroughInterceptController();
|
||||
if (interceptController)
|
||||
interceptController.channelIntercepted(intercepted);
|
||||
// Yield to a service worker if determined so in shouldPrepareForIntercept().
|
||||
const serviceWorker = this._shouldYieldInterceptionToServiceWorker ? this._fallThroughInterceptController() : undefined;
|
||||
// Clear the flag to avoid an infinite loop. After service worker, we should intercept ourselves.
|
||||
this._shouldYieldInterceptionToServiceWorker = false;
|
||||
|
||||
if (serviceWorker) {
|
||||
const interceptedChannel = intercepted.QueryInterface(Ci.nsIInterceptedChannel);
|
||||
// If service worker will not actually intercept the request, we want to be called again.
|
||||
interceptedChannel.interceptAfterServiceWorkerResets();
|
||||
serviceWorker.channelIntercepted(intercepted);
|
||||
return;
|
||||
}
|
||||
|
||||
this._expectingInterception = false;
|
||||
this._interceptedChannel = intercepted.QueryInterface(Ci.nsIInterceptedChannel);
|
||||
|
||||
const pageNetwork = this._pageNetwork;
|
||||
@ -410,6 +407,7 @@ class NetworkRequest {
|
||||
// See https://github.com/microsoft/playwright/issues/9418#issuecomment-944836244
|
||||
if (aRequest !== this.httpChannel)
|
||||
return;
|
||||
this._sendOnRequest(false);
|
||||
try {
|
||||
this._originalListener.onStartRequest(aRequest);
|
||||
} catch (e) {
|
||||
@ -447,6 +445,10 @@ class NetworkRequest {
|
||||
}
|
||||
|
||||
_shouldIntercept() {
|
||||
// We do not want to intercept any redirects, because we are not able
|
||||
// to intercept subresource redirects, and it's unreliable for main requests.
|
||||
if (this.redirectedFromId)
|
||||
return false;
|
||||
const pageNetwork = this._pageNetwork;
|
||||
if (!pageNetwork)
|
||||
return false;
|
||||
@ -467,8 +469,15 @@ class NetworkRequest {
|
||||
}
|
||||
|
||||
_sendOnRequest(isIntercepted) {
|
||||
// Note: we call _sendOnRequest either after we intercepted the request,
|
||||
// or at the first moment we know that we are not going to intercept.
|
||||
if (this._sentOnRequest) {
|
||||
// We can come here twice because:
|
||||
// - Redirects call _sendOnRequest in the constructor and from inside interception.
|
||||
// - All other requests might call _sendOnRequest from onStartRequest and from inside interception.
|
||||
// - All requests call _sendOnRequest from _sendOnResponse to avoid responses without requests.
|
||||
return;
|
||||
}
|
||||
this._sentOnRequest = true;
|
||||
|
||||
const pageNetwork = this._pageNetwork;
|
||||
if (!pageNetwork)
|
||||
return;
|
||||
@ -491,11 +500,21 @@ class NetworkRequest {
|
||||
}
|
||||
|
||||
_sendOnResponse(fromCache, opt_statusCode, opt_statusText) {
|
||||
// For internal redirects, and perhaps something else that we lack test coverage for,
|
||||
// we can arrive here before onStartRequest has fired. Make sure we
|
||||
// notify about the request first.
|
||||
this._sendOnRequest(false);
|
||||
|
||||
if (this._sentOnResponse) {
|
||||
// We can come here twice because of internal redirects, e.g. service workers.
|
||||
// We can come here twice because of an internal redirect, for example:
|
||||
// - request was intercepted by a service worker;
|
||||
// - HSTS redirect;
|
||||
// - CORS preflight;
|
||||
// - who knows what else?
|
||||
return;
|
||||
}
|
||||
this._sentOnResponse = true;
|
||||
|
||||
const pageNetwork = this._pageNetwork;
|
||||
if (!pageNetwork)
|
||||
return;
|
||||
@ -576,7 +595,7 @@ class NetworkRequest {
|
||||
}
|
||||
}
|
||||
|
||||
class NetworkObserver {
|
||||
export class NetworkObserver {
|
||||
static instance() {
|
||||
return NetworkObserver._instance || null;
|
||||
}
|
||||
@ -776,6 +795,10 @@ function clearRequestHeaders(httpChannel) {
|
||||
// We cannot remove the "host" header.
|
||||
if (header.name.toLowerCase() === 'host')
|
||||
continue;
|
||||
// Keep the "cookie" header. If there is an override, it will be set anyway.
|
||||
// Otherwise, we may delete a cookie that was set for a redirect.
|
||||
if (header.name.toLowerCase() === 'cookie')
|
||||
continue;
|
||||
httpChannel.setRequestHeader(header.name, '', false /* merge */);
|
||||
}
|
||||
}
|
||||
@ -964,6 +987,3 @@ PageNetwork.Events = {
|
||||
RequestFailed: Symbol('PageNetwork.Events.RequestFailed'),
|
||||
};
|
||||
|
||||
var EXPORTED_SYMBOLS = ['NetworkObserver', 'PageNetwork'];
|
||||
this.NetworkObserver = NetworkObserver;
|
||||
this.PageNetwork = PageNetwork;
|
||||
|
||||
@ -79,7 +79,7 @@ class SimpleChannel {
|
||||
|
||||
_setTimeout(cb, timeout) {
|
||||
// Lazy load on first call.
|
||||
this._setTimeout = ChromeUtils.import('resource://gre/modules/Timer.jsm').setTimeout;
|
||||
this._setTimeout = ChromeUtils.importESModule('resource://gre/modules/Timer.sys.mjs').setTimeout;
|
||||
this._setTimeout(cb, timeout);
|
||||
}
|
||||
|
||||
@ -251,6 +251,3 @@ class SimpleChannel {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ['SimpleChannel'];
|
||||
this.SimpleChannel = SimpleChannel;
|
||||
|
||||
@ -2,12 +2,11 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
|
||||
const {Preferences} = ChromeUtils.import("resource://gre/modules/Preferences.jsm");
|
||||
const {ContextualIdentityService} = ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm");
|
||||
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
|
||||
const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const {Preferences} = ChromeUtils.importESModule("resource://gre/modules/Preferences.sys.mjs");
|
||||
const {ContextualIdentityService} = ChromeUtils.importESModule("resource://gre/modules/ContextualIdentityService.sys.mjs");
|
||||
const {NetUtil} = ChromeUtils.importESModule('resource://gre/modules/NetUtil.sys.mjs');
|
||||
const {AppConstants} = ChromeUtils.importESModule("resource://gre/modules/AppConstants.sys.mjs");
|
||||
|
||||
const Cr = Components.results;
|
||||
|
||||
@ -23,6 +22,7 @@ const ALL_PERMISSIONS = [
|
||||
|
||||
let globalTabAndWindowActivationChain = Promise.resolve();
|
||||
// This is a workaround for https://github.com/microsoft/playwright/issues/34586
|
||||
let didCreateFirstPage = false;
|
||||
let globalNewPageChain = Promise.resolve();
|
||||
|
||||
class DownloadInterceptor {
|
||||
@ -104,7 +104,7 @@ class DownloadInterceptor {
|
||||
|
||||
const screencastService = Cc['@mozilla.org/juggler/screencast;1'].getService(Ci.nsIScreencastService);
|
||||
|
||||
class TargetRegistry {
|
||||
export class TargetRegistry {
|
||||
static instance() {
|
||||
return TargetRegistry._instance || null;
|
||||
}
|
||||
@ -310,61 +310,68 @@ class TargetRegistry {
|
||||
}
|
||||
|
||||
async newPage({browserContextId}) {
|
||||
const result = globalNewPageChain.then(async () => {
|
||||
const browserContext = this.browserContextForId(browserContextId);
|
||||
const features = "chrome,dialog=no,all";
|
||||
// See _callWithURIToLoad in browser.js for the structure of window.arguments
|
||||
// window.arguments[1]: unused (bug 871161)
|
||||
// [2]: referrerInfo (nsIReferrerInfo)
|
||||
// [3]: postData (nsIInputStream)
|
||||
// [4]: allowThirdPartyFixup (bool)
|
||||
// [5]: userContextId (int)
|
||||
// [6]: originPrincipal (nsIPrincipal)
|
||||
// [7]: originStoragePrincipal (nsIPrincipal)
|
||||
// [8]: triggeringPrincipal (nsIPrincipal)
|
||||
// [9]: allowInheritPrincipal (bool)
|
||||
// [10]: csp (nsIContentSecurityPolicy)
|
||||
// [11]: nsOpenWindowInfo
|
||||
const args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
|
||||
const urlSupports = Cc["@mozilla.org/supports-string;1"].createInstance(
|
||||
Ci.nsISupportsString
|
||||
);
|
||||
urlSupports.data = 'about:blank';
|
||||
args.appendElement(urlSupports); // 0
|
||||
args.appendElement(undefined); // 1
|
||||
args.appendElement(undefined); // 2
|
||||
args.appendElement(undefined); // 3
|
||||
args.appendElement(undefined); // 4
|
||||
const userContextIdSupports = Cc[
|
||||
"@mozilla.org/supports-PRUint32;1"
|
||||
].createInstance(Ci.nsISupportsPRUint32);
|
||||
userContextIdSupports.data = browserContext.userContextId;
|
||||
args.appendElement(userContextIdSupports); // 5
|
||||
args.appendElement(undefined); // 6
|
||||
args.appendElement(undefined); // 7
|
||||
args.appendElement(Services.scriptSecurityManager.getSystemPrincipal()); // 8
|
||||
|
||||
const window = Services.ww.openWindow(null, AppConstants.BROWSER_CHROME_URL, '_blank', features, args);
|
||||
await waitForWindowReady(window);
|
||||
if (window.gBrowser.browsers.length !== 1)
|
||||
throw new Error(`Unexpected number of tabs in the new window: ${window.gBrowser.browsers.length}`);
|
||||
const browser = window.gBrowser.browsers[0];
|
||||
let target = this._browserToTarget.get(browser);
|
||||
while (!target) {
|
||||
await helper.awaitEvent(this, TargetRegistry.Events.TargetCreated);
|
||||
target = this._browserToTarget.get(browser);
|
||||
}
|
||||
browser.focus();
|
||||
if (browserContext.crossProcessCookie.settings.timezoneId) {
|
||||
if (await target.hasFailedToOverrideTimezone())
|
||||
throw new Error('Failed to override timezone');
|
||||
}
|
||||
return target.id();
|
||||
});
|
||||
// When creating the very first page, we cannot create multiple in parallel.
|
||||
// See https://github.com/microsoft/playwright/issues/34586.
|
||||
if (didCreateFirstPage)
|
||||
return this._newPageInternal({browserContextId});
|
||||
const result = globalNewPageChain.then(() => this._newPageInternal({browserContextId}));
|
||||
globalNewPageChain = result.catch(error => { /* swallow errors to keep chain running */ });
|
||||
return result;
|
||||
}
|
||||
|
||||
async _newPageInternal({browserContextId}) {
|
||||
const browserContext = this.browserContextForId(browserContextId);
|
||||
const features = "chrome,dialog=no,all";
|
||||
// See _callWithURIToLoad in browser.js for the structure of window.arguments
|
||||
// window.arguments[1]: unused (bug 871161)
|
||||
// [2]: referrerInfo (nsIReferrerInfo)
|
||||
// [3]: postData (nsIInputStream)
|
||||
// [4]: allowThirdPartyFixup (bool)
|
||||
// [5]: userContextId (int)
|
||||
// [6]: originPrincipal (nsIPrincipal)
|
||||
// [7]: originStoragePrincipal (nsIPrincipal)
|
||||
// [8]: triggeringPrincipal (nsIPrincipal)
|
||||
// [9]: allowInheritPrincipal (bool)
|
||||
// [10]: csp (nsIContentSecurityPolicy)
|
||||
// [11]: nsOpenWindowInfo
|
||||
const args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
|
||||
const urlSupports = Cc["@mozilla.org/supports-string;1"].createInstance(
|
||||
Ci.nsISupportsString
|
||||
);
|
||||
urlSupports.data = 'about:blank';
|
||||
args.appendElement(urlSupports); // 0
|
||||
args.appendElement(undefined); // 1
|
||||
args.appendElement(undefined); // 2
|
||||
args.appendElement(undefined); // 3
|
||||
args.appendElement(undefined); // 4
|
||||
const userContextIdSupports = Cc[
|
||||
"@mozilla.org/supports-PRUint32;1"
|
||||
].createInstance(Ci.nsISupportsPRUint32);
|
||||
userContextIdSupports.data = browserContext.userContextId;
|
||||
args.appendElement(userContextIdSupports); // 5
|
||||
args.appendElement(undefined); // 6
|
||||
args.appendElement(undefined); // 7
|
||||
args.appendElement(Services.scriptSecurityManager.getSystemPrincipal()); // 8
|
||||
|
||||
const window = Services.ww.openWindow(null, AppConstants.BROWSER_CHROME_URL, '_blank', features, args);
|
||||
await waitForWindowReady(window);
|
||||
if (window.gBrowser.browsers.length !== 1)
|
||||
throw new Error(`Unexpected number of tabs in the new window: ${window.gBrowser.browsers.length}`);
|
||||
const browser = window.gBrowser.browsers[0];
|
||||
let target = this._browserToTarget.get(browser);
|
||||
while (!target) {
|
||||
await helper.awaitEvent(this, TargetRegistry.Events.TargetCreated);
|
||||
target = this._browserToTarget.get(browser);
|
||||
}
|
||||
browser.focus();
|
||||
if (browserContext.crossProcessCookie.settings.timezoneId) {
|
||||
if (await target.hasFailedToOverrideTimezone())
|
||||
throw new Error('Failed to override timezone');
|
||||
}
|
||||
didCreateFirstPage = true;
|
||||
return target.id();
|
||||
}
|
||||
|
||||
targets() {
|
||||
return Array.from(this._browserToTarget.values());
|
||||
}
|
||||
@ -378,7 +385,7 @@ class TargetRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
class PageTarget {
|
||||
export class PageTarget {
|
||||
constructor(registry, win, tab, browserContext, opener) {
|
||||
helper.decorateAsEventEmitter(this);
|
||||
|
||||
@ -1286,7 +1293,3 @@ TargetRegistry.Events = {
|
||||
DownloadFinished: Symbol('TargetRegistry.Events.DownloadFinished'),
|
||||
ScreencastStopped: Symbol('TargetRegistry.ScreencastStopped'),
|
||||
};
|
||||
|
||||
var EXPORTED_SYMBOLS = ['TargetRegistry', 'PageTarget'];
|
||||
this.TargetRegistry = TargetRegistry;
|
||||
this.PageTarget = PageTarget;
|
||||
|
||||
@ -2,16 +2,17 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
var EXPORTED_SYMBOLS = ["Juggler", "JugglerFactory"];
|
||||
// Load SimpleChannel in browser-process global.
|
||||
Services.scriptloader.loadSubScript('chrome://juggler/content/SimpleChannel.js');
|
||||
|
||||
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const {ComponentUtils} = ChromeUtils.import("resource://gre/modules/ComponentUtils.jsm");
|
||||
const {Dispatcher} = ChromeUtils.import("chrome://juggler/content/protocol/Dispatcher.js");
|
||||
const {BrowserHandler} = ChromeUtils.import("chrome://juggler/content/protocol/BrowserHandler.js");
|
||||
const {NetworkObserver} = ChromeUtils.import("chrome://juggler/content/NetworkObserver.js");
|
||||
const {TargetRegistry} = ChromeUtils.import("chrome://juggler/content/TargetRegistry.js");
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {ActorManagerParent} = ChromeUtils.import('resource://gre/modules/ActorManagerParent.jsm');
|
||||
const {XPCOMUtils} = ChromeUtils.importESModule("resource://gre/modules/XPCOMUtils.sys.mjs");
|
||||
const {ComponentUtils} = ChromeUtils.importESModule("resource://gre/modules/ComponentUtils.sys.mjs");
|
||||
const {Dispatcher} = ChromeUtils.importESModule("chrome://juggler/content/protocol/Dispatcher.js");
|
||||
const {BrowserHandler} = ChromeUtils.importESModule("chrome://juggler/content/protocol/BrowserHandler.js");
|
||||
const {NetworkObserver} = ChromeUtils.importESModule("chrome://juggler/content/NetworkObserver.js");
|
||||
const {TargetRegistry} = ChromeUtils.importESModule("chrome://juggler/content/TargetRegistry.js");
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const {ActorManagerParent} = ChromeUtils.importESModule('resource://gre/modules/ActorManagerParent.sys.mjs');
|
||||
const helper = new Helper();
|
||||
|
||||
const Cc = Components.classes;
|
||||
@ -21,10 +22,10 @@ const Ci = Components.interfaces;
|
||||
ActorManagerParent.addJSWindowActors({
|
||||
JugglerFrame: {
|
||||
parent: {
|
||||
moduleURI: 'chrome://juggler/content/JugglerFrameParent.jsm',
|
||||
esModuleURI: 'chrome://juggler/content/JugglerFrameParent.jsm',
|
||||
},
|
||||
child: {
|
||||
moduleURI: 'chrome://juggler/content/content/JugglerFrameChild.jsm',
|
||||
esModuleURI: 'chrome://juggler/content/content/JugglerFrameChild.jsm',
|
||||
events: {
|
||||
// Normally, we instantiate an actor when a new window is created.
|
||||
DOMWindowCreated: {},
|
||||
@ -45,7 +46,7 @@ ActorManagerParent.addJSWindowActors({
|
||||
let browserStartupFinishedCallback;
|
||||
let browserStartupFinishedPromise = new Promise(x => browserStartupFinishedCallback = x);
|
||||
|
||||
class Juggler {
|
||||
export class Juggler {
|
||||
get classDescription() { return "Sample command-line handler"; }
|
||||
get classID() { return Components.ID('{f7a74a33-e2ab-422d-b022-4fb213dd2639}'); }
|
||||
get contractID() { return "@mozilla.org/remote/juggler;1" }
|
||||
@ -154,7 +155,7 @@ class Juggler {
|
||||
const jugglerInstance = new Juggler();
|
||||
|
||||
// This is used by the XPCOM codepath which expects a constructor
|
||||
var JugglerFactory = function() {
|
||||
export var JugglerFactory = function() {
|
||||
return jugglerInstance;
|
||||
};
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ Classes = [
|
||||
"command-line-handler": "m-remote",
|
||||
"profile-after-change": "Juggler",
|
||||
},
|
||||
"jsm": "chrome://juggler/content/components/Juggler.js",
|
||||
"esModule": "chrome://juggler/content/components/Juggler.js",
|
||||
"constructor": "JugglerFactory",
|
||||
},
|
||||
]
|
||||
|
||||
@ -7,13 +7,11 @@ const Ci = Components.interfaces;
|
||||
const Cr = Components.results;
|
||||
const Cu = Components.utils;
|
||||
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
|
||||
const {Runtime} = ChromeUtils.import('chrome://juggler/content/content/Runtime.js');
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
|
||||
const helper = new Helper();
|
||||
|
||||
class FrameTree {
|
||||
export class FrameTree {
|
||||
constructor(rootBrowsingContext) {
|
||||
helper.decorateAsEventEmitter(this);
|
||||
|
||||
@ -690,6 +688,3 @@ function channelId(channel) {
|
||||
}
|
||||
|
||||
|
||||
var EXPORTED_SYMBOLS = ['FrameTree'];
|
||||
this.FrameTree = FrameTree;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
const { Helper } = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const { initialize } = ChromeUtils.import('chrome://juggler/content/content/main.js');
|
||||
const { Helper } = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const { initialize } = ChromeUtils.importESModule('chrome://juggler/content/content/main.js');
|
||||
|
||||
const Ci = Components.interfaces;
|
||||
const helper = new Helper();
|
||||
@ -10,7 +10,7 @@ let sameProcessInstanceNumber = 0;
|
||||
|
||||
const topBrowingContextToAgents = new Map();
|
||||
|
||||
class JugglerFrameChild extends JSWindowActorChild {
|
||||
export class JugglerFrameChild extends JSWindowActorChild {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@ -83,4 +83,3 @@ class JugglerFrameChild extends JSWindowActorChild {
|
||||
receiveMessage() { }
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ['JugglerFrameChild'];
|
||||
|
||||
@ -8,9 +8,9 @@ const Ci = Components.interfaces;
|
||||
const Cr = Components.results;
|
||||
const Cu = Components.utils;
|
||||
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
|
||||
const {setTimeout} = ChromeUtils.import('resource://gre/modules/Timer.jsm');
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const {NetUtil} = ChromeUtils.importESModule('resource://gre/modules/NetUtil.sys.mjs');
|
||||
const {setTimeout} = ChromeUtils.importESModule('resource://gre/modules/Timer.sys.mjs');
|
||||
|
||||
const dragService = Cc["@mozilla.org/widget/dragservice;1"].getService(
|
||||
Ci.nsIDragService
|
||||
@ -51,7 +51,7 @@ class WorkerData {
|
||||
}
|
||||
}
|
||||
|
||||
class PageAgent {
|
||||
export class PageAgent {
|
||||
constructor(browserChannel, frameTree) {
|
||||
this._browserChannel = browserChannel;
|
||||
this._browserPage = browserChannel.connect('page');
|
||||
@ -575,7 +575,7 @@ class PageAgent {
|
||||
// We crash by using js-ctypes and dereferencing
|
||||
// a bad pointer. The crash should happen immediately
|
||||
// upon loading this frame script.
|
||||
const { ctypes } = ChromeUtils.import('resource://gre/modules/ctypes.jsm');
|
||||
const { ctypes } = ChromeUtils.importESModule('resource://gre/modules/ctypes.sys.mjs');
|
||||
ChromeUtils.privateNoteIntentionalCrash();
|
||||
const zero = new ctypes.intptr_t(8);
|
||||
const badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t));
|
||||
@ -709,6 +709,3 @@ class PageAgent {
|
||||
}
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ['PageAgent'];
|
||||
this.PageAgent = PageAgent;
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@
|
||||
|
||||
if (!this.Debugger) {
|
||||
// Worker has a Debugger defined already.
|
||||
const {addDebuggerToGlobal} = ChromeUtils.import("resource://gre/modules/jsdebugger.jsm", {});
|
||||
addDebuggerToGlobal(Components.utils.getGlobalForObject(this));
|
||||
const {addDebuggerToGlobal} = ChromeUtils.importESModule("resource://gre/modules/jsdebugger.sys.mjs");
|
||||
addDebuggerToGlobal(Components.utils.getGlobalForObject(globalThis));
|
||||
}
|
||||
|
||||
let lastId = 0;
|
||||
@ -596,5 +596,5 @@ function emitEvent(event, ...args) {
|
||||
listener.call(null, ...args);
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ['Runtime'];
|
||||
this.Runtime = Runtime;
|
||||
// Export Runtime to global.
|
||||
globalThis.Runtime = Runtime;
|
||||
|
||||
@ -2,14 +2,20 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {FrameTree} = ChromeUtils.import('chrome://juggler/content/content/FrameTree.js');
|
||||
const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
|
||||
const {PageAgent} = ChromeUtils.import('chrome://juggler/content/content/PageAgent.js');
|
||||
// Load SimpleChannel and Runtime in content process's global.
|
||||
// NOTE: since these have to exist in both Worker and main threads, and we do
|
||||
// not know a way to load ES Modules in worker threads, we have to use the loadSubScript
|
||||
// utility instead.
|
||||
Services.scriptloader.loadSubScript('chrome://juggler/content/SimpleChannel.js');
|
||||
Services.scriptloader.loadSubScript('chrome://juggler/content/content/Runtime.js');
|
||||
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const {FrameTree} = ChromeUtils.importESModule('chrome://juggler/content/content/FrameTree.js');
|
||||
const {PageAgent} = ChromeUtils.importESModule('chrome://juggler/content/content/PageAgent.js');
|
||||
|
||||
const helper = new Helper();
|
||||
|
||||
function initialize(browsingContext, docShell) {
|
||||
export function initialize(browsingContext, docShell) {
|
||||
const data = { channel: undefined, pageAgent: undefined, frameTree: undefined, failedToOverrideTimezone: false };
|
||||
|
||||
const applySetting = {
|
||||
@ -114,6 +120,3 @@ function initialize(browsingContext, docShell) {
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ['initialize'];
|
||||
this.initialize = initialize;
|
||||
|
||||
@ -4,15 +4,15 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const {AddonManager} = ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
|
||||
const {TargetRegistry} = ChromeUtils.import("chrome://juggler/content/TargetRegistry.js");
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {PageHandler} = ChromeUtils.import("chrome://juggler/content/protocol/PageHandler.js");
|
||||
const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
|
||||
const {AddonManager} = ChromeUtils.importESModule("resource://gre/modules/AddonManager.sys.mjs");
|
||||
const {TargetRegistry} = ChromeUtils.importESModule("chrome://juggler/content/TargetRegistry.js");
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const {PageHandler} = ChromeUtils.importESModule("chrome://juggler/content/protocol/PageHandler.js");
|
||||
const {AppConstants} = ChromeUtils.importESModule("resource://gre/modules/AppConstants.sys.mjs");
|
||||
|
||||
const helper = new Helper();
|
||||
|
||||
class BrowserHandler {
|
||||
export class BrowserHandler {
|
||||
constructor(session, dispatcher, targetRegistry, startCompletePromise, onclose) {
|
||||
this._session = session;
|
||||
this._dispatcher = dispatcher;
|
||||
@ -313,6 +313,3 @@ async function waitForWindowClosed(browserWindow) {
|
||||
function nullToUndefined(value) {
|
||||
return value === null ? undefined : value;
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ['BrowserHandler'];
|
||||
this.BrowserHandler = BrowserHandler;
|
||||
|
||||
@ -2,12 +2,13 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const {protocol, checkScheme} = ChromeUtils.import("chrome://juggler/content/protocol/Protocol.js");
|
||||
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {protocol} = ChromeUtils.importESModule("chrome://juggler/content/protocol/Protocol.js");
|
||||
const {checkScheme} = ChromeUtils.importESModule("chrome://juggler/content/protocol/PrimitiveTypes.js");
|
||||
const {Helper} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
|
||||
const helper = new Helper();
|
||||
|
||||
class Dispatcher {
|
||||
export class Dispatcher {
|
||||
/**
|
||||
* @param {Connection} connection
|
||||
*/
|
||||
@ -132,7 +133,3 @@ class ProtocolSession {
|
||||
return await this._handler[method](params);
|
||||
}
|
||||
}
|
||||
|
||||
this.EXPORTED_SYMBOLS = ['Dispatcher'];
|
||||
this.Dispatcher = Dispatcher;
|
||||
|
||||
|
||||
@ -4,11 +4,11 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const {Helper, EventWatcher} = ChromeUtils.import('chrome://juggler/content/Helper.js');
|
||||
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
|
||||
const {NetworkObserver, PageNetwork} = ChromeUtils.import('chrome://juggler/content/NetworkObserver.js');
|
||||
const {PageTarget} = ChromeUtils.import('chrome://juggler/content/TargetRegistry.js');
|
||||
const {setTimeout} = ChromeUtils.import('resource://gre/modules/Timer.jsm');
|
||||
const {Helper, EventWatcher} = ChromeUtils.importESModule('chrome://juggler/content/Helper.js');
|
||||
const {NetUtil} = ChromeUtils.importESModule('resource://gre/modules/NetUtil.sys.mjs');
|
||||
const {NetworkObserver, PageNetwork} = ChromeUtils.importESModule('chrome://juggler/content/NetworkObserver.js');
|
||||
const {PageTarget} = ChromeUtils.importESModule('chrome://juggler/content/TargetRegistry.js');
|
||||
const {setTimeout} = ChromeUtils.importESModule('resource://gre/modules/Timer.sys.mjs');
|
||||
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
@ -65,7 +65,7 @@ class WorkerHandler {
|
||||
}
|
||||
}
|
||||
|
||||
class PageHandler {
|
||||
export class PageHandler {
|
||||
constructor(target, session, contentChannel) {
|
||||
this._session = session;
|
||||
this._contentChannel = contentChannel;
|
||||
@ -691,6 +691,3 @@ class PageHandler {
|
||||
return await worker.sendMessage(JSON.parse(message));
|
||||
}
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ['PageHandler'];
|
||||
this.PageHandler = PageHandler;
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const t = {};
|
||||
export const t = {};
|
||||
|
||||
t.String = function(x, details = {}, path = ['<root>']) {
|
||||
if (typeof x === 'string' || typeof x === 'String')
|
||||
@ -96,7 +96,7 @@ function beauty(path, obj) {
|
||||
return `property "${path.join('.')}" - ${JSON.stringify(obj, null, 2)}`;
|
||||
}
|
||||
|
||||
function checkScheme(scheme, x, details = {}, path = ['<root>']) {
|
||||
export function checkScheme(scheme, x, details = {}, path = ['<root>']) {
|
||||
if (!scheme)
|
||||
throw new Error(`ILLDEFINED SCHEME: ${path.join('.')}`);
|
||||
if (typeof scheme === 'object') {
|
||||
@ -142,6 +142,3 @@ test(t.Either(t.String, t.Number), {});
|
||||
|
||||
*/
|
||||
|
||||
this.t = t;
|
||||
this.checkScheme = checkScheme;
|
||||
this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
|
||||
const {t} = ChromeUtils.importESModule('chrome://juggler/content/protocol/PrimitiveTypes.js');
|
||||
|
||||
// Protocol-specific types.
|
||||
const browserTypes = {};
|
||||
@ -1018,8 +1018,6 @@ const Accessibility = {
|
||||
}
|
||||
}
|
||||
|
||||
this.protocol = {
|
||||
export const protocol = {
|
||||
domains: {Browser, Heap, Page, Runtime, Network, Accessibility},
|
||||
};
|
||||
this.checkScheme = checkScheme;
|
||||
this.EXPORTED_SYMBOLS = ['protocol', 'checkScheme'];
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -96,6 +96,14 @@ pref("geo.provider.testing", true);
|
||||
pref("media.getdisplaymedia.screencapturekit.enabled", false);
|
||||
pref("media.getdisplaymedia.screencapturekit.picker.enabled", false);
|
||||
|
||||
// Allow proxying loopback URLs; see https://phabricator.services.mozilla.com/D237187
|
||||
pref("network.proxy.allow_hijacking_localhost", true);
|
||||
pref("network.proxy.testing_localhost_is_secure_when_hijacked", true);
|
||||
|
||||
// Disable double-dispatching of "input" event for the text composition.
|
||||
// See https://phabricator.services.mozilla.com/D234620 for details.
|
||||
pref("dom.input_events.dispatch_before_compositionend", false);
|
||||
|
||||
// Enable software-backed webgl. See https://phabricator.services.mozilla.com/D164016
|
||||
pref("webgl.forbid-software", false);
|
||||
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
REMOTE_URL="https://github.com/WebKit/WebKit.git"
|
||||
BASE_BRANCH="main"
|
||||
BASE_REVISION="ba8bcf39b0a89706b998447abba82590ad50fc36"
|
||||
BASE_REVISION="4dd862e5ce1c10d77f72be94260164c5f13aafbd"
|
||||
|
||||
@ -140,7 +140,7 @@ void MainWindow::createToolbar(HINSTANCE hInstance)
|
||||
SendMessage(m_hToolbarWnd, TB_ADDBUTTONS, _countof(tbButtons), reinterpret_cast<LPARAM>(&tbButtons));
|
||||
ShowWindow(m_hToolbarWnd, true);
|
||||
|
||||
m_hURLBarWnd = CreateWindow(L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, 0, 0, 0, 0, m_hToolbarWnd, 0, hInstance, 0);
|
||||
m_hURLBarWnd = CreateWindow(L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL, 0, 0, 0, 0, m_hToolbarWnd, 0, hInstance, 0);
|
||||
|
||||
DefEditProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(m_hURLBarWnd, GWLP_WNDPROC));
|
||||
SetWindowLongPtr(m_hURLBarWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(EditProc));
|
||||
@ -210,7 +210,9 @@ bool MainWindow::init(HINSTANCE hInstance, WKPageConfigurationRef conf)
|
||||
resizeSubViews();
|
||||
|
||||
if (s_headless) {
|
||||
auto menu = GetMenu(m_hMainWnd);
|
||||
SetMenu(m_hMainWnd, NULL);
|
||||
DestroyMenu(menu);
|
||||
} else {
|
||||
SetFocus(m_hURLBarWnd);
|
||||
ShowWindow(m_hMainWnd, SW_SHOW);
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 111 KiB |
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user