Bug 1280582 - Implement browser.history.onTitleChanged. r?bsilverberg
MozReview-Commit-ID: jzil9lDYnN
--- a/browser/components/extensions/ext-history.js
+++ b/browser/components/extensions/ext-history.js
@@ -108,17 +108,19 @@ function getObserver() {
lastVisitTime: time / 1000, // time from Places is microseconds,
visitCount,
typedCount: typed,
};
this.emit("visited", data);
},
onBeginUpdateBatch: function() {},
onEndUpdateBatch: function() {},
- onTitleChanged: function() {},
+ onTitleChanged: function(uri, title) {
+ this.emit("titleChanged", {url: uri.spec, title: title});
+ },
onClearHistory: function() {
this.emit("visitRemoved", {allHistory: true, urls: []});
},
onPageChanged: function() {},
onFrecencyChanged: function() {},
onManyFrecenciesChanged: function() {},
onDeleteVisits: function(uri, time, guid, reason) {
this.emit("visitRemoved", {allHistory: false, urls: [uri.spec]});
@@ -236,11 +238,22 @@ extensions.registerSchemaAPI("history",
fire.sync(data);
};
getObserver().on("visitRemoved", listener);
return () => {
getObserver().off("visitRemoved", listener);
};
}).api(),
+
+ onTitleChanged: new SingletonEventManager(context, "history.onTitleChanged", fire => {
+ let listener = (event, data) => {
+ fire.sync(data);
+ };
+
+ getObserver().on("titleChanged", listener);
+ return () => {
+ getObserver().off("titleChanged", listener);
+ };
+ }).api(),
},
};
});
--- a/browser/components/extensions/schemas/history.json
+++ b/browser/components/extensions/schemas/history.json
@@ -305,12 +305,33 @@
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
+ },
+ {
+ "name": "onTitleChanged",
+ "type": "function",
+ "description": "Fired when the title of a URL is changed in the browser history.",
+ "parameters": [
+ {
+ "name": "changed",
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string",
+ "description": "The URL for which the title has changed"
+ },
+ "title": {
+ "type": "string",
+ "description": "The new title for the URL."
+ }
+ }
+ }
+ ]
}
]
}
]
--- a/browser/components/extensions/test/xpcshell/test_ext_history.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_history.js
@@ -417,31 +417,43 @@ add_task(function* test_on_visited() {
{
url: DOUBLE_VISIT_URL,
title: `visit to ${DOUBLE_VISIT_URL}`,
visits: [
{date: new Date(visitDate += 1000)},
{date: new Date(visitDate += 1000)},
],
},
+ {
+ url: SINGLE_VISIT_URL,
+ title: "Title Changed",
+ visits: [
+ {date: new Date(visitDate)},
+ ],
+ },
];
function background() {
let onVisitedData = [];
browser.history.onVisited.addListener(data => {
if (data.url.includes("moz-extension")) {
return;
}
onVisitedData.push(data);
- if (onVisitedData.length == 3) {
+ if (onVisitedData.length == 4) {
browser.test.sendMessage("on-visited-data", onVisitedData);
}
});
+ // Verifying onTitleChange Event along with onVisited event
+ browser.history.onTitleChanged.addListener(data => {
+ browser.test.sendMessage("on-title-changed-data", data);
+ });
+
browser.test.sendMessage("ready");
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["history"],
},
background: `(${background})()`,
@@ -478,10 +490,19 @@ add_task(function* test_on_visited() {
expected.title = PAGE_INFOS[1].title;
expected.time = PAGE_INFOS[1].visits[0].date.getTime();
checkOnVisitedData(1, expected);
expected.time = PAGE_INFOS[1].visits[1].date.getTime();
expected.visitCount = 2;
checkOnVisitedData(2, expected);
+ expected.url = PAGE_INFOS[2].url;
+ expected.title = PAGE_INFOS[2].title;
+ expected.time = PAGE_INFOS[2].visits[0].date.getTime();
+ expected.visitCount = 2;
+ checkOnVisitedData(3, expected);
+
+ let onTitleChangedData = yield extension.awaitMessage("on-title-changed-data");
+ equal(onTitleChangedData.title, "Title Changed", "ontitleChanged received the expected title.");
+
yield extension.unload();
});