1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* 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/. */
/* eslint-disable no-restricted-globals */
"use strict";
const EXPORTED_SYMBOLS = ["MarionetteEventsChild"];
const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
event: "chrome://marionette/content/event.js",
Log: "chrome://marionette/content/log.js",
});
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
class MarionetteEventsChild extends JSWindowActorChild {
get innerWindowId() {
return this.manager.innerWindowId;
}
actorCreated() {
logger.trace(
`[${this.browsingContext.id}] MarionetteEvents actor created ` +
`for window id ${this.innerWindowId}`
);
}
handleEvent({ target, type }) {
// Ignore invalid combinations of load events and document's readyState.
if (
(type === "DOMContentLoaded" && target.readyState != "interactive") ||
(type === "pageshow" && target.readyState != "complete")
) {
logger.warn(
`Ignoring event '${type}' because document has an invalid ` +
`readyState of '${target.readyState}'.`
);
return;
}
switch (type) {
case "beforeunload":
case "DOMContentLoaded":
case "hashchange":
case "pagehide":
case "pageshow":
case "popstate":
this.sendAsyncMessage("MarionetteEventsChild:PageLoadEvent", {
browsingContext: this.browsingContext,
documentURI: target.documentURI,
readyState: target.readyState,
type,
windowId: this.innerWindowId,
});
break;
// Listen for click event to indicate one click has happened, so actions
// code can send dblclick event
case "click":
event.DoubleClickTracker.setClick();
break;
case "dblclick":
case "unload":
event.DoubleClickTracker.resetClick();
break;
}
}
}
|