| OLD | NEW |
| 1 <script> | 1 <script> |
| 2 var settings = chrome.experimental.settings; | 2 var api = chrome.experimental.settings; |
| 3 var assertEq = chrome.test.assertEq; | 3 var assertEq = chrome.test.assertEq; |
| 4 var inIncognitoContext = chrome.extension.inIncognitoContext; | 4 var inIncognitoContext = chrome.extension.inIncognitoContext; |
| 5 | 5 |
| 6 // All notifications received. | 6 ['sync', 'local'].forEach(function(namespace) { |
| 7 var notifications = []; | 7 api[namespace].notifications = []; |
| 8 settings.onChanged.addListener(function(changes) { | 8 api.onChanged.addListener(function(changes, event_namespace) { |
| 9 changes.forEach(function(change) { | 9 if (event_namespace == namespace) { |
| 10 notifications.push(change); | 10 changes.forEach(function(change) { |
| 11 api[namespace].notifications.push(change); |
| 12 }); |
| 13 } |
| 11 }); | 14 }); |
| 12 }); | 15 }); |
| 13 | 16 |
| 14 // The test from C++ runs "actions", where each action is defined here. | 17 // The test from C++ runs "actions", where each action is defined here. |
| 15 // This allows the test to be tightly controlled between incognito and | 18 // This allows the test to be tightly controlled between incognito and |
| 16 // non-incognito modes. | 19 // non-incognito modes. |
| 17 // Each function accepts a callback which should be run when the settings | 20 // Each function accepts a callback which should be run when the settings |
| 18 // operation fully completes. | 21 // operation fully completes. |
| 19 var testActions = { | 22 var testActions = { |
| 20 noop: function(callback) { | 23 noop: function(callback) { |
| 21 settings.get("", callback); | 24 this.get("", callback); |
| 22 }, | 25 }, |
| 23 assertEmpty: function(callback) { | 26 assertEmpty: function(callback) { |
| 24 settings.get(null, function(settings) { | 27 this.get(null, function(settings) { |
| 25 chrome.test.assertEq({}, settings); | 28 chrome.test.assertEq({}, settings); |
| 26 callback(); | 29 callback(); |
| 27 }); | 30 }); |
| 28 }, | 31 }, |
| 29 assertFoo: function(callback) { | 32 assertFoo: function(callback) { |
| 30 settings.get(null, function(settings) { | 33 this.get(null, function(settings) { |
| 31 chrome.test.assertEq({foo: "bar"}, settings); | 34 chrome.test.assertEq({foo: "bar"}, settings); |
| 32 callback(); | 35 callback(); |
| 33 }); | 36 }); |
| 34 }, | 37 }, |
| 35 setFoo: function(callback) { | 38 setFoo: function(callback) { |
| 36 settings.set({foo: "bar"}, callback); | 39 this.set({foo: "bar"}, callback); |
| 37 }, | 40 }, |
| 38 removeFoo: function(callback) { | 41 removeFoo: function(callback) { |
| 39 settings.remove("foo", callback); | 42 this.remove("foo", callback); |
| 40 }, | 43 }, |
| 41 clear: function(callback) { | 44 clear: function(callback) { |
| 42 settings.clear(callback); | 45 this.clear(callback); |
| 43 }, | 46 }, |
| 44 assertNoNotifications: function(callback) { | 47 assertNoNotifications: function(callback) { |
| 45 assertEq([], notifications); | 48 assertEq([], this.notifications); |
| 46 callback(); | 49 callback(); |
| 47 }, | 50 }, |
| 48 clearNotifications: function(callback) { | 51 clearNotifications: function(callback) { |
| 49 notifications = []; | 52 this.notifications.length = 0; |
| 50 callback(); | 53 callback(); |
| 51 }, | 54 }, |
| 52 assertAddFooNotification: function(callback) { | 55 assertAddFooNotification: function(callback) { |
| 53 assertEq(1, notifications.length); | 56 assertEq([{ key: 'foo', newValue: 'bar' }], this.notifications); |
| 54 assertEq("foo", notifications[0].key); | |
| 55 assertEq(undefined, notifications[0].oldValue); | |
| 56 assertEq("bar", notifications[0].newValue); | |
| 57 callback(); | 57 callback(); |
| 58 }, | 58 }, |
| 59 assertDeleteFooNotification: function(callback) { | 59 assertDeleteFooNotification: function(callback) { |
| 60 assertEq(1, notifications.length); | 60 assertEq([{ key: 'foo', oldValue: 'bar' }], this.notifications); |
| 61 assertEq("foo", notifications[0].key); | |
| 62 assertEq("bar", notifications[0].oldValue); | |
| 63 assertEq(undefined, notifications[0].newValue); | |
| 64 callback(); | 61 callback(); |
| 65 } | 62 } |
| 66 }; | 63 }; |
| 67 | 64 |
| 68 // The only test we run. Runs "actions" (as defined above) until told | 65 // The only test we run. Runs "actions" (as defined above) until told |
| 69 // to stop (when the message has isFinalAction set to true). | 66 // to stop (when the message has isFinalAction set to true). |
| 70 function testEverything() { | 67 function testEverything() { |
| 71 function next() { | 68 function next() { |
| 72 var waiting = inIncognitoContext ? "waiting_incognito" : "waiting"; | 69 var waiting = inIncognitoContext ? "waiting_incognito" : "waiting"; |
| 73 chrome.test.sendMessage(waiting, function(messageJson) { | 70 chrome.test.sendMessage(waiting, function(messageJson) { |
| 74 var message = JSON.parse(messageJson); | 71 var message = JSON.parse(messageJson); |
| 75 var action = testActions[message.action]; | 72 var action = testActions[message.action]; |
| 76 action(message.isFinalAction ? chrome.test.succeed : next); | 73 if (!action) { |
| 74 chrome.test.fail("Unknown action: " + message.action); |
| 75 return; |
| 76 } |
| 77 action.bind(api[message.namespace])( |
| 78 message.isFinalAction ? chrome.test.succeed : next); |
| 77 }); | 79 }); |
| 78 } | 80 } |
| 79 next(); | 81 next(); |
| 80 } | 82 } |
| 81 | 83 |
| 82 chrome.test.runTests([testEverything]); | 84 chrome.test.runTests([testEverything]); |
| 83 </script> | 85 </script> |
| OLD | NEW |