Skip to content
This repository has been archived by the owner on Jul 30, 2022. It is now read-only.

Commit

Permalink
[WM]: fetch link[rel=monetization] content
Browse files Browse the repository at this point in the history
Only top-level browsing context is supported presently.
Handles DOMLinkChanged, DOMLinkAdded, DOMLinkRemoved events.
Handles visibilitychange events (no background monetization allowed).

Info: Merged branch "wm-link-tag" into "webmonetization".
  • Loading branch information
sidvishnoi committed Nov 19, 2020
1 parent 43780b6 commit 1b7b1c7
Show file tree
Hide file tree
Showing 5 changed files with 526 additions and 1 deletion.
42 changes: 41 additions & 1 deletion browser/actors/LinkHandlerChild.jsm
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,26 @@ ChromeUtils.defineModuleGetter(
"FaviconLoader",
"resource:///modules/FaviconLoader.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"MonetizationLoader",
"resource:///modules/MonetizationLoader.jsm"
);

class LinkHandlerChild extends JSWindowActorChild {
constructor() {
super();

this.seenTabIcon = false;
this._iconLoader = null;
this._monetizationLoader = null;
}

get monetizationLoader() {
if (!this._monetizationLoader) {
this._monetizationLoader = new MonetizationLoader(this);
}
return this._monetizationLoader;
}

get iconLoader() {
Expand Down Expand Up @@ -59,6 +72,7 @@ class LinkHandlerChild extends JSWindowActorChild {
if (this._iconLoader) {
this._iconLoader.onPageShow();
}
this._monetizationLoader?.onPageShow(this.document);
}

onPageShow(event) {
Expand All @@ -71,6 +85,8 @@ class LinkHandlerChild extends JSWindowActorChild {
if (this._iconLoader) {
this._iconLoader.onPageShow();
}

this._monetizationLoader?.onPageShow(this.document);
}

onPageHide(event) {
Expand All @@ -81,8 +97,27 @@ class LinkHandlerChild extends JSWindowActorChild {
if (this._iconLoader) {
this._iconLoader.onPageHide();
}

this.seenTabIcon = false;

this._monetizationLoader?.onPageHide(this.document);
}

onVisibilityChange(event) {
if (
event.target != this.document ||
this.document.ownerGlobal != this.contentWindow
) {
// Verify if these cases are even possible.
return;
}

// TODO: there must be a better way t
const url = this.document.location;
if (url.protocol !== "https:" && url.protocol !== "http:") {
return;
}

this.monetizationLoader.onVisbilityChange(this.document);
}

onLinkEvent(event) {
Expand Down Expand Up @@ -161,6 +196,9 @@ class LinkHandlerChild extends JSWindowActorChild {
}
}
break;
case "monetization":
this.monetizationLoader.onLinkEvent(link.ownerDocument);
break;
}
}
}
Expand All @@ -171,6 +209,8 @@ class LinkHandlerChild extends JSWindowActorChild {
return this.onPageShow(event);
case "pagehide":
return this.onPageHide(event);
case "visibilitychange":
return this.onVisibilityChange(event);
case "DOMHeadElementParsed":
return this.onHeadParsed(event);
default:
Expand Down
7 changes: 7 additions & 0 deletions browser/actors/LinkHandlerParent.jsm
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,13 @@ class LinkHandlerParent extends JSWindowActorParent {
);
}
break;

case "Link:SetMonetization":
case "Link:SetFailedMonetization":
case "Link:UnsetMonetization": {
console.info(aMsg.name, aMsg.data);
break;
}
}
}

Expand Down
2 changes: 2 additions & 0 deletions browser/components/BrowserGlue.jsm
Original file line number Diff line number Diff line change
Expand Up @@ -523,8 +523,10 @@ let JSWINDOWACTORS = {
DOMHeadElementParsed: {},
DOMLinkAdded: {},
DOMLinkChanged: {},
DOMLinkRemoved: {},
pageshow: {},
pagehide: {},
visibilitychange: {},
},
},
},
Expand Down
Loading

0 comments on commit 1b7b1c7

Please sign in to comment.