Bug 1362996 - Implement browsingData.removeCache WebExtension API method on android. r?grisha, bsilverberg
MozReview-Commit-ID: ECRCqbdiGd0
--- a/mobile/android/components/extensions/ext-browsingData.js
+++ b/mobile/android/components/extensions/ext-browsingData.js
@@ -1,14 +1,16 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
Cu.import("resource://gre/modules/Task.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "Sanitizer",
+ "resource://gre/modules/Sanitizer.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "SharedPreferences",
"resource://gre/modules/SharedPreferences.jsm");
let clearCookies = async function(options) {
if (options.originTypes &&
(options.originTypes.protectedWeb || options.originTypes.extension)) {
@@ -84,12 +86,15 @@ this.browsingData = class extends Extens
}
// We do not provide option to delete history by time
// so, since value is given 0, which means Everything
return Promise.resolve({options: {since: 0}, dataToRemove, dataRemovalPermitted});
},
removeCookies(options) {
return clearCookies(options);
},
+ removeCache(options) {
+ return Sanitizer.clearItem("cache");
+ },
},
};
}
};
\ No newline at end of file
--- a/mobile/android/components/extensions/schemas/browsing_data.json
+++ b/mobile/android/components/extensions/schemas/browsing_data.json
@@ -202,17 +202,16 @@
}
]
},
{
"name": "removeCache",
"description": "Clears the browser's cache.",
"type": "function",
"async": "callback",
- "unsupported": true,
"parameters": [
{
"$ref": "RemovalOptions",
"name": "options"
},
{
"name": "callback",
"type": "function",
--- a/mobile/android/components/extensions/test/mochitest/chrome.ini
+++ b/mobile/android/components/extensions/test/mochitest/chrome.ini
@@ -1,13 +1,13 @@
[DEFAULT]
support-files =
head.js
../../../../../../toolkit/components/extensions/test/mochitest/chrome_cleanup_script.js
tags = webextensions
[test_ext_browserAction_getTitle_setTitle.html]
[test_ext_browserAction_onClicked.html]
-[test_ext_browsingData_cookies.html]
+[test_ext_browsingData_cookies_cache.html]
[test_ext_browsingData_settings.html]
[test_ext_pageAction_show_hide.html]
[test_ext_pageAction_getPopup_setPopup.html]
skip-if = os == 'android' # bug 1373170
rename from mobile/android/components/extensions/test/mochitest/test_ext_browsingData_cookies.html
rename to mobile/android/components/extensions/test/mochitest/test_ext_browsingData_cookies_cache.html
--- a/mobile/android/components/extensions/test/mochitest/test_ext_browsingData_cookies.html
+++ b/mobile/android/components/extensions/test/mochitest/test_ext_browsingData_cookies_cache.html
@@ -87,12 +87,56 @@ add_task(async function testCookies() {
}
await extension.startup();
await testRemovalMethod("removeCookies");
await extension.unload();
});
+
+add_task(async function testCache() {
+ function background() {
+ browser.test.onMessage.addListener(async msg => {
+ if (msg == "removeCache") {
+ await browser.browsingData.removeCache({});
+ }
+ browser.test.sendMessage("cacheRemoved");
+ });
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ background,
+ manifest: {
+ permissions: ["browsingData"],
+ },
+ });
+
+ // Returns a promise when 'cacheservice:empty-cache' event is fired
+ function topicObserved() {
+ return new Promise(resolve => {
+ let observe = (subject, topic, data) => {
+ Services.obs.removeObserver(observe, "cacheservice:empty-cache");
+ resolve(data);
+ };
+ Services.obs.addObserver(observe, "cacheservice:empty-cache");
+ });
+ }
+
+ async function testRemovalMethod(method) {
+ // We can assume the notification works properly, so we only need to observe
+ // the notification to know the cache was cleared.
+ let awaitNotification = topicObserved();
+ extension.sendMessage(method);
+ await awaitNotification;
+ await extension.awaitMessage("cacheRemoved");
+ }
+
+ await extension.startup();
+
+ await testRemovalMethod("removeCache");
+
+ await extension.unload();
+});
</script>
</body>
</html>
\ No newline at end of file