Bug 1287007 - Refactor test_ext_schemas_api_injection.js
When the background API move to a separate implementation,
then the schema APIs will be generated (and ChildAPIManager
will just delegate the implementation to the parent process).
The purpose of the test is to verify that nested namespaces and
null-feturn values work, so just use the base classes instead of a
concrete implementation for BaseContext / SchemaAPIManager instead of
setting up a full extension.
MozReview-Commit-ID: CB5s7Ae24zS
--- a/toolkit/components/extensions/test/xpcshell/test_ext_schemas_api_injection.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_schemas_api_injection.js
@@ -1,15 +1,17 @@
"use strict";
+Components.utils.import("resource://gre/modules/ExtensionUtils.jsm");
Components.utils.import("resource://gre/modules/Schemas.jsm");
let {
- Management,
-} = Components.utils.import("resource://gre/modules/Extension.jsm", {});
+ BaseContext,
+ SchemaAPIManager,
+} = ExtensionUtils;
let nestedNamespaceJson = [
{
"namespace": "backgroundAPI.testnamespace",
"functions": [
{
"name": "create",
"type": "function",
@@ -37,67 +39,64 @@ let nestedNamespaceJson = [
"type": "string",
},
],
},
],
},
];
+let global = this;
+class StubContext extends BaseContext {
+ constructor() {
+ let fakeExtension = {id: "test@web.extension"};
+ super("addon_child", fakeExtension);
+ this.sandbox = Cu.Sandbox(global);
+ this.viewType = "background";
+ }
+
+ get cloneScope() {
+ return this.sandbox;
+ }
+}
+
add_task(function* testSchemaAPIInjection() {
let url = "data:," + JSON.stringify(nestedNamespaceJson);
// Load the schema of the fake APIs.
yield Schemas.load(url);
+ let apiManager = new SchemaAPIManager("addon");
+
// Register an API that will skip the background page.
- Management.registerSchemaAPI("noBackgroundAPI.testnamespace", "addon_child", context => {
- if (context.type !== "background") {
- return {
- noBackgroundAPI: {
- testnamespace: {
- create(title) {},
- },
- },
- };
- }
-
+ apiManager.registerSchemaAPI("noBackgroundAPI.testnamespace", "addon_child", context => {
// This API should not be available in this context, return null so that
// the schema wrapper is removed as well.
return null;
});
// Register an API that will skip any but the background page.
- Management.registerSchemaAPI("backgroundAPI.testnamespace", "addon_child", context => {
- if (context.type === "background") {
+ apiManager.registerSchemaAPI("backgroundAPI.testnamespace", "addon_child", context => {
+ if (context.viewType === "background") {
return {
backgroundAPI: {
testnamespace: {
create(title) {
return title;
},
},
},
};
}
// This API should not be available in this context, return null so that
// the schema wrapper is removed as well.
return null;
});
- let extension = ExtensionTestUtils.loadExtension({
- background() {
- if (browser.noBackgroundAPI) {
- browser.test.notifyFail("skipAPIonNull.done");
- } else {
- const res = browser.backgroundAPI.testnamespace.create("param-value");
- browser.test.assertEq("param-value", res,
- "Got the expected result from the fake API method");
- browser.test.notifyPass("skipAPIonNull.done");
- }
- },
- });
+ let context = new StubContext();
+ let browserObj = {};
+ apiManager.generateAPIs(context, browserObj);
- yield extension.startup();
- yield extension.awaitFinish("skipAPIonNull.done");
- yield extension.unload();
+ do_check_eq(browserObj.noBackgroundAPI, undefined);
+ const res = browserObj.backgroundAPI.testnamespace.create("param-value");
+ do_check_eq(res, "param-value");
});