test_unregister_invalid_json.js (2564B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const userAgentID = "7f0af1bb-7e1f-4fb8-8e4a-e8de434abde3"; 7 8 function run_test() { 9 do_get_profile(); 10 setPrefs({ 11 userAgentID, 12 requestTimeout: 150, 13 retryBaseInterval: 150, 14 }); 15 run_next_test(); 16 } 17 18 add_task(async function test_unregister_invalid_json() { 19 let db = PushServiceWebSocket.newPushDB(); 20 registerCleanupFunction(() => { 21 return db.drop().then(_ => db.close()); 22 }); 23 let records = [ 24 { 25 channelID: "87902e90-c57e-4d18-8354-013f4a556559", 26 pushEndpoint: "https://example.org/update/1", 27 scope: "https://example.edu/page/1", 28 originAttributes: "", 29 version: 1, 30 quota: Infinity, 31 }, 32 { 33 channelID: "057caa8f-9b99-47ff-891c-adad18ce603e", 34 pushEndpoint: "https://example.com/update/2", 35 scope: "https://example.net/page/1", 36 originAttributes: "", 37 version: 1, 38 quota: Infinity, 39 }, 40 ]; 41 for (let record of records) { 42 await db.put(record); 43 } 44 45 let unregisterDone; 46 let unregisterPromise = new Promise( 47 resolve => (unregisterDone = after(2, resolve)) 48 ); 49 await PushService.init({ 50 serverURI: "wss://push.example.org/", 51 db, 52 makeWebSocket(uri) { 53 return new MockWebSocket(uri, { 54 onHello() { 55 this.serverSendMsg( 56 JSON.stringify({ 57 messageType: "hello", 58 status: 200, 59 uaid: userAgentID, 60 use_webpush: true, 61 }) 62 ); 63 }, 64 onUnregister() { 65 this.serverSendMsg(");alert(1);("); 66 unregisterDone(); 67 }, 68 }); 69 }, 70 }); 71 72 await Assert.rejects( 73 PushService.unregister({ 74 scope: "https://example.edu/page/1", 75 originAttributes: "", 76 }), 77 /Request timed out/, 78 "Expected error for first invalid JSON response" 79 ); 80 81 let record = await db.getByKeyID("87902e90-c57e-4d18-8354-013f4a556559"); 82 ok(!record, "Failed to delete unregistered record"); 83 84 await Assert.rejects( 85 PushService.unregister({ 86 scope: "https://example.net/page/1", 87 originAttributes: ChromeUtils.originAttributesToSuffix({ 88 inIsolatedMozBrowser: false, 89 }), 90 }), 91 /Request timed out/, 92 "Expected error for second invalid JSON response" 93 ); 94 95 record = await db.getByKeyID("057caa8f-9b99-47ff-891c-adad18ce603e"); 96 ok( 97 !record, 98 "Failed to delete unregistered record after receiving invalid JSON" 99 ); 100 101 await unregisterPromise; 102 });