| Index: test/synchronizer.js | 
| =================================================================== | 
| --- a/test/synchronizer.js | 
| +++ b/test/synchronizer.js | 
| @@ -321,49 +321,49 @@ | 
| { | 
| return [Cr.NS_OK, 200, "[Adblock]\n!Redirect: http://example.com/redirected\nbar"]; | 
| }); | 
|  | 
| let requests; | 
|  | 
| this.runScheduledTasks(30).then(() => | 
| { | 
| -    test.equal(FilterStorage.subscriptions[0], subscription, "Invalid redirect ignored"); | 
| +    test.equal([...FilterStorage.subscriptions()][0], subscription, "Invalid redirect ignored"); | 
| test.equal(subscription.downloadStatus, "synchronize_connection_error", "Connection error recorded"); | 
| test.equal(subscription.errors, 2, "Number of download errors"); | 
|  | 
| requests = []; | 
|  | 
| this.registerHandler("/redirected", metadata => | 
| { | 
| requests.push(this.getTimeOffset()); | 
| return [Cr.NS_OK, 200, "[Adblock]\n! Expires: 8 hours\nbar"]; | 
| }); | 
|  | 
| resetSubscription(subscription); | 
| return this.runScheduledTasks(15); | 
| }).then(() => | 
| { | 
| -    test.equal(FilterStorage.subscriptions[0].url, "http://example.com/redirected", "Redirect followed"); | 
| +    test.equal([...FilterStorage.subscriptions()][0].url, "http://example.com/redirected", "Redirect followed"); | 
| test.deepEqual(requests, [0 + initialDelay, 8 + initialDelay], "Resulting requests"); | 
|  | 
| this.registerHandler("/redirected", metadata => | 
| { | 
| return [Cr.NS_OK, 200, "[Adblock]\n!Redirect: http://example.com/subscription\nbar"]; | 
| }); | 
|  | 
| subscription = Subscription.fromURL("http://example.com/subscription"); | 
| resetSubscription(subscription); | 
| -    FilterStorage.removeSubscription(FilterStorage.subscriptions[0]); | 
| +    FilterStorage.removeSubscription([...FilterStorage.subscriptions()][0]); | 
| FilterStorage.addSubscription(subscription); | 
|  | 
| return this.runScheduledTasks(2); | 
| }).then(() => | 
| { | 
| -    test.equal(FilterStorage.subscriptions[0], subscription, "Redirect not followed on redirect loop"); | 
| +    test.equal([...FilterStorage.subscriptions()][0], subscription, "Redirect not followed on redirect loop"); | 
| test.equal(subscription.downloadStatus, "synchronize_connection_error", "Download status after redirect loop"); | 
| }).catch(unexpectedError.bind(test)).then(() => test.done()); | 
| }; | 
|  | 
| exports.testFallback = function(test) | 
| { | 
| Prefs.subscriptions_fallbackerrors = 3; | 
| Prefs.subscriptions_fallbackurl = "http://example.com/fallback?%SUBSCRIPTION%&%CHANNELSTATUS%&%RESPONSESTATUS%"; | 
| @@ -402,68 +402,68 @@ | 
| { | 
| test.deepEqual(requests, [0 + initialDelay, 24 + initialDelay, 48 + initialDelay], "Stop trying if the fallback responds with Gone"); | 
| test.equal(fallbackParams, "http://example.com/subscription&0&404", "Fallback arguments"); | 
|  | 
| // Fallback redirecting to a missing file | 
|  | 
| subscription = Subscription.fromURL("http://example.com/subscription"); | 
| resetSubscription(subscription); | 
| -    FilterStorage.removeSubscription(FilterStorage.subscriptions[0]); | 
| +    FilterStorage.removeSubscription([...FilterStorage.subscriptions()][0]); | 
| FilterStorage.addSubscription(subscription); | 
| requests = []; | 
|  | 
| this.registerHandler("/fallback", metadata => | 
| { | 
| return [Cr.NS_OK, 200, "301 http://example.com/redirected"]; | 
| }); | 
| return this.runScheduledTasks(100); | 
| }).then(() => | 
| { | 
| -    test.equal(FilterStorage.subscriptions[0].url, "http://example.com/subscription", "Ignore invalid redirect from fallback"); | 
| +    test.equal([...FilterStorage.subscriptions()][0].url, "http://example.com/subscription", "Ignore invalid redirect from fallback"); | 
| test.deepEqual(requests, [0 + initialDelay, 24 + initialDelay, 48 + initialDelay, 72 + initialDelay, 96 + initialDelay], "Requests not affected by invalid redirect"); | 
|  | 
| // Fallback redirecting to an existing file | 
|  | 
| resetSubscription(subscription); | 
| requests = []; | 
| redirectedRequests = []; | 
| this.registerHandler("/redirected", metadata => | 
| { | 
| redirectedRequests.push(this.getTimeOffset()); | 
| return [Cr.NS_OK, 200, "[Adblock]\n!Expires: 1day\nfoo\nbar"]; | 
| }); | 
|  | 
| return this.runScheduledTasks(100); | 
| }).then(() => | 
| { | 
| -    test.equal(FilterStorage.subscriptions[0].url, "http://example.com/redirected", "Valid redirect from fallback is followed"); | 
| +    test.equal([...FilterStorage.subscriptions()][0].url, "http://example.com/redirected", "Valid redirect from fallback is followed"); | 
| test.deepEqual(requests, [0 + initialDelay, 24 + initialDelay, 48 + initialDelay], "Stop polling original URL after a valid redirect from fallback"); | 
| test.deepEqual(redirectedRequests, [48 + initialDelay, 72 + initialDelay, 96 + initialDelay], "Request new URL after a valid redirect from fallback"); | 
|  | 
| // Redirect loop | 
|  | 
| this.registerHandler("/subscription", metadata => | 
| { | 
| return [Cr.NS_OK, 200, "[Adblock]\n! Redirect: http://example.com/subscription2"]; | 
| }); | 
| this.registerHandler("/subscription2", metadata => | 
| { | 
| return [Cr.NS_OK, 200, "[Adblock]\n! Redirect: http://example.com/subscription"]; | 
| }); | 
|  | 
| subscription = Subscription.fromURL("http://example.com/subscription"); | 
| resetSubscription(subscription); | 
| -    FilterStorage.removeSubscription(FilterStorage.subscriptions[0]); | 
| +    FilterStorage.removeSubscription([...FilterStorage.subscriptions()][0]); | 
| FilterStorage.addSubscription(subscription); | 
|  | 
| return this.runScheduledTasks(100); | 
| }).then(() => | 
| { | 
| -    test.equal(FilterStorage.subscriptions[0].url, "http://example.com/redirected", "Fallback can still redirect even after a redirect loop"); | 
| +    test.equal([...FilterStorage.subscriptions()][0].url, "http://example.com/redirected", "Fallback can still redirect even after a redirect loop"); | 
| }).catch(unexpectedError.bind(test)).then(() => test.done()); | 
| }; | 
|  | 
| exports.testStateFields = function(test) | 
| { | 
| let subscription = Subscription.fromURL("http://example.com/subscription"); | 
| FilterStorage.addSubscription(subscription); | 
|  | 
|  |