зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1590752
, convert ContentMetaHandler.jsm into JSWindowActors, r=mconley
Differential Revision: https://phabricator.services.mozilla.com/D50584 --HG-- rename : browser/modules/ContentMetaHandler.jsm => browser/actors/ContentMetaChild.jsm extra : moz-landing-system : lando
This commit is contained in:
Родитель
c0b57094e7
Коммит
0d839af744
|
@ -3,6 +3,9 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
const EXPORTED_SYMBOLS = ["ContentMetaChild"];
|
||||
|
||||
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
const { XPCOMUtils } = ChromeUtils.import(
|
||||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
|
@ -75,32 +78,34 @@ function checkLoadURIStr(aURL) {
|
|||
return true;
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ["ContentMetaHandler"];
|
||||
|
||||
/*
|
||||
* This listens to DOMMetaAdded events and collects relevant metadata about the
|
||||
* meta tag received. Then, it sends the metadata gathered from the meta tags
|
||||
* and the url of the page as it's payload to be inserted into moz_places.
|
||||
*/
|
||||
class ContentMetaChild extends JSWindowActorChild {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
var ContentMetaHandler = {
|
||||
init(chromeGlobal) {
|
||||
// Store a locally-scoped (for this chromeGlobal) mapping of the best
|
||||
// description and preview image collected so far for a given URL
|
||||
const metaTags = new Map();
|
||||
chromeGlobal.addEventListener("DOMMetaAdded", event => {
|
||||
const metaTag = event.originalTarget;
|
||||
const window = metaTag.ownerGlobal;
|
||||
// Store a mapping of the best description and preview
|
||||
// image collected so far for a given URL.
|
||||
this.metaTags = new Map();
|
||||
}
|
||||
|
||||
// If there's no meta tag, or we're in a sub-frame, ignore this
|
||||
if (!metaTag || !metaTag.ownerDocument || window != window.top) {
|
||||
return;
|
||||
}
|
||||
this.handleMetaTag(metaTag, chromeGlobal, metaTags);
|
||||
});
|
||||
},
|
||||
handleEvent(event) {
|
||||
if (event.type != "DOMMetaAdded") {
|
||||
return;
|
||||
}
|
||||
|
||||
const metaTag = event.originalTarget;
|
||||
const window = metaTag.ownerGlobal;
|
||||
|
||||
// If there's no meta tag, ignore this. Also verify that the window
|
||||
// matches just to be safe.
|
||||
if (!metaTag || !metaTag.ownerDocument || window != this.contentWindow) {
|
||||
return;
|
||||
}
|
||||
|
||||
handleMetaTag(metaTag, chromeGlobal, metaTags) {
|
||||
const url = metaTag.ownerDocument.documentURI;
|
||||
|
||||
let name = metaTag.name;
|
||||
|
@ -111,7 +116,7 @@ var ContentMetaHandler = {
|
|||
|
||||
let tag = name || prop;
|
||||
|
||||
const entry = metaTags.get(url) || {
|
||||
const entry = this.metaTags.get(url) || {
|
||||
description: { value: null, currMaxScore: -1 },
|
||||
image: { value: null, currMaxScore: -1 },
|
||||
timeout: null,
|
||||
|
@ -144,8 +149,8 @@ var ContentMetaHandler = {
|
|||
return;
|
||||
}
|
||||
|
||||
if (!metaTags.has(url)) {
|
||||
metaTags.set(url, entry);
|
||||
if (!this.metaTags.has(url)) {
|
||||
this.metaTags.set(url, entry);
|
||||
}
|
||||
|
||||
if (entry.timeout) {
|
||||
|
@ -159,7 +164,7 @@ var ContentMetaHandler = {
|
|||
entry.timeout = null;
|
||||
|
||||
// Save description and preview image to moz_places
|
||||
chromeGlobal.sendAsyncMessage("Meta:SetPageInfo", {
|
||||
this.sendAsyncMessage("Meta:SetPageInfo", {
|
||||
url,
|
||||
description: entry.description.value,
|
||||
previewImageURL: entry.image.value,
|
||||
|
@ -173,11 +178,11 @@ var ContentMetaHandler = {
|
|||
Services.telemetry
|
||||
.getHistogramById("PAGE_METADATA_SIZE")
|
||||
.add(metadataSize);
|
||||
metaTags.delete(url);
|
||||
this.metaTags.delete(url);
|
||||
},
|
||||
TIMEOUT_DELAY,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT
|
||||
);
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/* 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/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
const EXPORTED_SYMBOLS = ["ContentMetaParent"];
|
||||
|
||||
class ContentMetaParent extends JSWindowActorParent {
|
||||
receiveMessage(message) {
|
||||
if (message.name == "Meta:SetPageInfo") {
|
||||
let browser = this.manager.browsingContext.top.embedderElement;
|
||||
if (browser) {
|
||||
if (browser.outerBrowser) {
|
||||
// Responsive design mode check
|
||||
browser = browser.outerBrowser;
|
||||
}
|
||||
|
||||
let gBrowser = browser.ownerGlobal.gBrowser;
|
||||
if (gBrowser) {
|
||||
gBrowser.setPageInfo(
|
||||
message.data.url,
|
||||
message.data.description,
|
||||
message.data.previewImageURL
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -28,6 +28,8 @@ FINAL_TARGET_FILES.actors += [
|
|||
'BrowserTabChild.jsm',
|
||||
'BrowserTabParent.jsm',
|
||||
'ClickHandlerChild.jsm',
|
||||
'ContentMetaChild.jsm',
|
||||
'ContentMetaParent.jsm',
|
||||
'ContentSearchChild.jsm',
|
||||
'ContextMenuChild.jsm',
|
||||
'ContextMenuParent.jsm',
|
||||
|
|
|
@ -4155,7 +4155,6 @@ const DOMEventHandler = {
|
|||
mm.addMessageListener("Link:SetIcon", this);
|
||||
mm.addMessageListener("Link:SetFailedIcon", this);
|
||||
mm.addMessageListener("Link:AddSearch", this);
|
||||
mm.addMessageListener("Meta:SetPageInfo", this);
|
||||
},
|
||||
|
||||
receiveMessage(aMsg) {
|
||||
|
@ -4186,19 +4185,9 @@ const DOMEventHandler = {
|
|||
case "Link:AddSearch":
|
||||
this.addSearch(aMsg.target, aMsg.data.engine, aMsg.data.url);
|
||||
break;
|
||||
|
||||
case "Meta:SetPageInfo":
|
||||
this.setPageInfo(aMsg.data);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
setPageInfo(aData) {
|
||||
const { url, description, previewImageURL } = aData;
|
||||
gBrowser.setPageInfo(url, description, previewImageURL);
|
||||
return true;
|
||||
},
|
||||
|
||||
setPendingIcon(aBrowser) {
|
||||
let tab = gBrowser.getTabForBrowser(aBrowser);
|
||||
if (tab.hasAttribute("busy")) {
|
||||
|
|
|
@ -9,15 +9,5 @@
|
|||
/* eslint-env mozilla/frame-script */
|
||||
/* eslint no-unused-vars: ["error", {args: "none"}] */
|
||||
|
||||
var { XPCOMUtils } = ChromeUtils.import(
|
||||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
ContentMetaHandler: "resource:///modules/ContentMetaHandler.jsm",
|
||||
});
|
||||
|
||||
ContentMetaHandler.init(this);
|
||||
|
||||
// This is a temporary hack to prevent regressions (bug 1471327).
|
||||
void content;
|
||||
|
|
|
@ -42,7 +42,6 @@ const whitelist = {
|
|||
// Browser front-end
|
||||
"resource:///actors/AboutReaderChild.jsm",
|
||||
"resource:///actors/BrowserTabChild.jsm",
|
||||
"resource:///modules/ContentMetaHandler.jsm",
|
||||
"resource:///actors/LinkHandlerChild.jsm",
|
||||
"resource:///actors/SearchTelemetryChild.jsm",
|
||||
"resource://gre/actors/AutoCompleteChild.jsm",
|
||||
|
|
|
@ -46,6 +46,20 @@ let ACTORS = {
|
|||
},
|
||||
},
|
||||
|
||||
// Collects description and icon information from meta tags.
|
||||
ContentMeta: {
|
||||
parent: {
|
||||
moduleURI: "resource:///actors/ContentMetaParent.jsm",
|
||||
},
|
||||
|
||||
child: {
|
||||
moduleURI: "resource:///actors/ContentMetaChild.jsm",
|
||||
events: {
|
||||
DOMMetaAdded: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
ContextMenu: {
|
||||
parent: {
|
||||
moduleURI: "resource:///actors/ContextMenuParent.jsm",
|
||||
|
|
|
@ -138,7 +138,6 @@ EXTRA_JS_MODULES += [
|
|||
'BrowserWindowTracker.jsm',
|
||||
'ContentClick.jsm',
|
||||
'ContentCrashHandlers.jsm',
|
||||
'ContentMetaHandler.jsm',
|
||||
'ContentObservers.js',
|
||||
'ContentSearch.jsm',
|
||||
'Discovery.jsm',
|
||||
|
|
Загрузка…
Ссылка в новой задаче