Bug 1299846 - Complete the implementation of chrome.idle.queryState, r?kmag draft
authorBob Silverberg <bsilverberg@mozilla.com>
Thu, 01 Sep 2016 09:28:56 -0400
changeset 408905 e7b43954f3a44e2a95273e94f7d9976a2ad9ee33
parent 408409 b7f7ae14590aced450bb0b0469dfb38edd2c0ace
child 530207 a91b2afa155e4955a4f684cdfc87dfe5364358fb
push id28317
push userbmo:bob.silverberg@gmail.com
push dateThu, 01 Sep 2016 20:11:14 +0000
reviewerskmag
bugs1299846
milestone51.0a1
Bug 1299846 - Complete the implementation of chrome.idle.queryState, r?kmag MozReview-Commit-ID: jYsePeTluZ
toolkit/components/extensions/ext-idle.js
toolkit/components/extensions/test/xpcshell/test_ext_idle.js
--- a/toolkit/components/extensions/ext-idle.js
+++ b/toolkit/components/extensions/ext-idle.js
@@ -1,11 +1,18 @@
 "use strict";
 
+XPCOMUtils.defineLazyServiceGetter(this, "idleService",
+                                   "@mozilla.org/widget/idleservice;1",
+                                   "nsIIdleService");
+
 extensions.registerSchemaAPI("idle", "addon_parent", context => {
   return {
     idle: {
       queryState: function(detectionIntervalInSeconds) {
-        return Promise.resolve("active");
+        if (idleService.idleTime < detectionIntervalInSeconds * 1000) {
+          return Promise.resolve("active");
+        }
+        return Promise.resolve("idle");
       },
     },
   };
 });
--- a/toolkit/components/extensions/test/xpcshell/test_ext_idle.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_idle.js
@@ -1,30 +1,65 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
 "use strict";
 
-add_task(function* testIdle() {
+Cu.import("resource://testing-common/MockRegistrar.jsm");
+
+let idleService = {
+  QueryInterface: XPCOMUtils.generateQI([Ci.nsIIdleService]),
+  idleTime: 19999,
+};
+
+add_task(function* setup() {
+  let fakeIdleService = MockRegistrar.register("@mozilla.org/widget/idleservice;1", idleService);
+  do_register_cleanup(() => {
+    MockRegistrar.unregister(fakeIdleService);
+  });
+});
+
+add_task(function* testIdleActive() {
   function background() {
-    browser.idle.queryState(15).then(status => {
-      browser.test.assertEq("active", status, "Expected status");
+    browser.idle.queryState(20).then(status => {
+      browser.test.assertEq("active", status, "Idle status is active");
       browser.test.notifyPass("idle");
     },
-    e => {
-      browser.test.fail(`Error: ${e} :: ${e.stack}`);
+    err => {
+      browser.test.fail(`Error: ${err} :: ${err.stack}`);
       browser.test.notifyFail("idle");
     });
   }
 
   let extension = ExtensionTestUtils.loadExtension({
     background,
-
     manifest: {
       permissions: ["idle"],
     },
   });
 
   yield extension.startup();
-
   yield extension.awaitFinish("idle");
-
   yield extension.unload();
 });
+
+add_task(function* testIdleIdle() {
+  function background() {
+    browser.idle.queryState(15).then(status => {
+      browser.test.assertEq("idle", status, "Idle status is idle");
+      browser.test.notifyPass("idle");
+    },
+    err => {
+      browser.test.fail(`Error: ${err} :: ${err.stack}`);
+      browser.test.notifyFail("idle");
+    });
+  }
+
+  let extension = ExtensionTestUtils.loadExtension({
+    background,
+    manifest: {
+      permissions: ["idle"],
+    },
+  });
+
+  yield extension.startup();
+  yield extension.awaitFinish("idle");
+  yield extension.unload();
+});