Skip to content

Commit 440eb31

Browse files
authored
Adding support for v2 api version. (#329)
* Adding support for v2 api version. * adjusting styling * Added test for apiVersion change
1 parent 084a416 commit 440eb31

File tree

6 files changed

+70
-28
lines changed

6 files changed

+70
-28
lines changed

extension/content/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ <h2>Options</h2>
2525
<option value="dev-preview">Dev (preview)</option>
2626
<option value="local">Local</option>
2727
</select>
28+
<select id="apiVersion">
29+
<option value="v1">API v1</option>
30+
<option value="v2">API v2</option>
31+
</select>
2832
<span>
2933
<input type="checkbox" id="enable-signatures"/>
3034
<label for="enable-signatures">Signatures enabled</label>

extension/content/script.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ async function refreshUI(state) {
6767
collections,
6868
pollingEndpoint,
6969
environment,
70+
apiVersion,
7071
history,
7172
serverSettingIgnored,
7273
signaturesEnabled,
@@ -76,6 +77,8 @@ async function refreshUI(state) {
7677

7778
const environmentElt = document.getElementById("environment");
7879
environmentElt.value = environment;
80+
const apiVersionElt = document.getElementById("apiVersion");
81+
apiVersionElt.value = apiVersion;
7982
document.getElementById("environment-error").style.display =
8083
serverSettingIgnored ? "block" : "none";
8184
if (serverSettingIgnored) {
@@ -85,9 +88,9 @@ async function refreshUI(state) {
8588
.forEach((optionElt) => optionElt.setAttribute("disabled", "disabled"));
8689
}
8790

88-
document.getElementById("polling-url").textContent = new URL(
89-
pollingEndpoint,
90-
).origin;
91+
document.getElementById("polling-url").textContent = `${
92+
new URL(pollingEndpoint).origin
93+
}/${apiVersion}`;
9194
document.getElementById("polling-url").setAttribute("href", pollingEndpoint);
9295
document.getElementById("local-timestamp").textContent = localTimestamp;
9396
document.getElementById("server-timestamp").textContent = serverTimestamp;
@@ -217,7 +220,21 @@ async function main() {
217220
document.getElementById("environment").onchange = async (event) => {
218221
showGlobalError(null);
219222
showLoading(true);
220-
await remotesettings.switchEnvironment(event.target.value);
223+
const apiVersion = document.getElementById("apiVersion");
224+
await remotesettings.switchEnvironment(
225+
event.target.value,
226+
apiVersion.value,
227+
);
228+
};
229+
230+
document.getElementById("apiVersion").onchange = async (event) => {
231+
showGlobalError(null);
232+
showLoading(true);
233+
const environment = document.getElementById("environment");
234+
await remotesettings.switchEnvironment(
235+
environment.value,
236+
event.target.value,
237+
);
221238
};
222239

223240
document.getElementById("enable-signatures").onchange = async (event) => {

extension/content/style.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ section.bordered {
9595
padding-bottom: 10px;
9696
}
9797

98-
#environment {
98+
#environment, #apiVersion {
9999
text-align: center;
100100
}
101101

extension/experiments/remotesettings/api.js

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,31 @@ ChromeUtils.defineLazyGetter(this, "RemoteSettings", () => {
1717
const { EventManager } = ExtensionCommon;
1818
const { ExtensionError } = ExtensionUtils;
1919

20-
const SERVER_LOCAL = "http://localhost:8888/v1";
21-
const SERVER_PROD = "https://firefox.settings.services.mozilla.com/v1";
22-
const SERVER_STAGE = "https://firefox.settings.services.allizom.org/v1";
23-
const SERVER_DEV = "https://remote-settings-dev.allizom.org/v1";
20+
const SERVER_LOCAL = "http://localhost:8888";
21+
const SERVER_PROD = "https://firefox.settings.services.mozilla.com";
22+
const SERVER_STAGE = "https://firefox.settings.services.allizom.org";
23+
const SERVER_DEV = "https://remote-settings-dev.allizom.org";
2424
const MEGAPHONE_STAGE = "wss://autoconnect.stage.mozaws.net";
2525

2626
async function getState() {
2727
const inspected = await RemoteSettings.inspect();
2828

2929
const { collections, serverURL, previewMode } = inspected;
30-
let environment = "custom";
31-
switch (serverURL) {
32-
case SERVER_PROD:
33-
environment = "prod";
34-
break;
35-
case SERVER_STAGE:
36-
environment = "stage";
37-
break;
38-
case SERVER_DEV:
39-
environment = "dev";
40-
break;
41-
case SERVER_LOCAL:
42-
environment = "local";
43-
break;
30+
let environment = "custom",
31+
apiVersion = "v1";
32+
33+
if (serverURL.startsWith(SERVER_PROD)) {
34+
environment = "prod";
35+
} else if (serverURL.startsWith(SERVER_STAGE)) {
36+
environment = "stage";
37+
} else if (serverURL.startsWith(SERVER_DEV)) {
38+
environment = "dev";
39+
} else if (serverURL.startsWith(SERVER_LOCAL)) {
40+
environment = "local";
41+
}
42+
43+
if (serverURL.endsWith("v2")) {
44+
apiVersion = "v2";
4445
}
4546

4647
if (previewMode) {
@@ -77,6 +78,7 @@ async function getState() {
7778
return {
7879
...inspected,
7980
environment,
81+
apiVersion,
8082
serverSettingIgnored,
8183
signaturesEnabled,
8284
};
@@ -136,29 +138,29 @@ var remotesettings = class extends ExtensionAPI {
136138
* setEnvironment() will set the necessary internal preferences to switch from
137139
* an environment to another.
138140
*/
139-
async switchEnvironment(env) {
141+
async switchEnvironment(env, apiVersion = "v1") {
140142
if (env.includes("prod")) {
141143
Services.prefs.setCharPref(
142144
"services.settings.server",
143-
SERVER_PROD,
145+
`${SERVER_PROD}/${apiVersion}`,
144146
);
145147
Services.prefs.clearUserPref("dom.push.serverURL");
146148
} else if (env.includes("stage")) {
147149
Services.prefs.setCharPref(
148150
"services.settings.server",
149-
SERVER_STAGE,
151+
`${SERVER_STAGE}/${apiVersion}`,
150152
);
151153
Services.prefs.setCharPref("dom.push.serverURL", MEGAPHONE_STAGE);
152154
} else if (env.includes("dev")) {
153155
Services.prefs.setCharPref(
154156
"services.settings.server",
155-
SERVER_DEV,
157+
`${SERVER_DEV}/${apiVersion}`,
156158
);
157159
Services.prefs.clearUserPref("dom.push.serverURL");
158160
} else if (env.includes("local")) {
159161
Services.prefs.setCharPref(
160162
"services.settings.server",
161-
SERVER_LOCAL,
163+
`${SERVER_LOCAL}/${apiVersion}`,
162164
);
163165
Services.prefs.clearUserPref("dom.push.serverURL");
164166
}

extension/experiments/remotesettings/schema.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
"name": "env",
2828
"type": "string",
2929
"description": "One of 'dev', 'stage', or 'prod'"
30+
},{
31+
"name": "apiVersion",
32+
"type": "string",
33+
"description": "One of 'v1' or 'v2'"
3034
}
3135
]
3236
},

tests/selenium.spec.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,19 @@ describe("End to end browser tests", () => {
195195
expect(await firstTimestamp.getAttribute("class")).toContain("unsync");
196196
});
197197
});
198+
199+
test("Switch to v2 endpoint", async () => {
200+
await clickByCss("#apiVersion");
201+
await clickByCss('#apiVersion [value="v2"]');
202+
await waitForLoad();
203+
204+
// verify server URI changes as expected
205+
let serverLink = await driver.findElement(By.css("#polling-url"));
206+
expect(await serverLink.getText()).toMatch(/\/v2$/);
207+
208+
// verify table loads as expected
209+
expect(
210+
(await driver.findElements(By.css("#status tr"))).length,
211+
).toBeGreaterThan(1);
212+
});
198213
});

0 commit comments

Comments
 (0)