File: test_contentPrefs_parentipc.js

package info (click to toggle)
wine-gecko-2.21 2.21%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 646,272 kB
  • ctags: 630,086
  • sloc: cpp: 2,895,786; ansic: 1,502,970; python: 156,675; asm: 115,373; java: 111,421; sh: 63,309; xml: 62,872; makefile: 58,685; perl: 19,182; objc: 3,461; yacc: 2,051; lex: 979; pascal: 929; exp: 449; php: 244; lisp: 228; awk: 211; sed: 26; csh: 21; ada: 16; ruby: 3
file content (88 lines) | stat: -rw-r--r-- 2,981 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

function run_test() {
  // Check received messages

  var cps = Cc["@mozilla.org/content-pref/service;1"].
            createInstance(Ci.nsIContentPrefService).
            wrappedJSObject;

  var messageHandler = cps;
  // FIXME: For now, use the wrappedJSObject hack, until bug
  //        593407 which will clean that up. After that, use
  //        the commented out line below it.
  messageHandler = cps.wrappedJSObject;
  //messageHandler = cps.QueryInterface(Ci.nsIMessageListener);

  // Cannot get values
  do_check_false(messageHandler.receiveMessage({
    name: "ContentPref:getPref",
    json: { group: 'group2', name: 'name' } }).succeeded);

  // Cannot set general values
  messageHandler.receiveMessage({ name: "ContentPref:setPref",
    json: { group: 'group2', name: 'name', value: 'someValue' } });
  do_check_eq(cps.getPref('group', 'name', null), undefined);

  // Can set whitelisted values
  do_check_true(messageHandler.receiveMessage({ name: "ContentPref:setPref",
    json: { group: 'group2', name: 'browser.upload.lastDir',
            value: 'someValue' } }).succeeded);
  do_check_eq(cps.getPref('group2', 'browser.upload.lastDir', null), 'someValue');

  // Prepare for child tests

  // Manually listen to messages - the wakeup manager should do this
  // for us, but it doesn't run in xpcshell tests.
  var messageProxy = {
    receiveMessage: function(aMessage) {
      if (aMessage.name == 'ContentPref:QUIT') {
        // Undo mock storage.
        delete cps._mockStorage;
        delete cps._messageProxy;
        cps.setPref = cps.old_setPref;
        cps.getPref = cps.old_getPref;
        cps._dbInit = cps.old__dbInit;
        // Unlisten to messages
        mM.removeMessageListener("ContentPref:setPref", messageProxy);
        mM.removeMessageListener("ContentPref:getPref", messageProxy);
        mM.removeMessageListener("ContentPref:QUIT", messageProxy);
        do_test_finished();
        return true;
      } else {
        return messageHandler.receiveMessage(aMessage);
      }
    },
  };

  var mM = Cc["@mozilla.org/parentprocessmessagemanager;1"].
           getService(Ci.nsIMessageListenerManager);
  mM.addMessageListener("ContentPref:setPref", messageProxy);
  mM.addMessageListener("ContentPref:getPref", messageProxy);
  mM.addMessageListener("ContentPref:QUIT", messageProxy);

  // Mock storage. This is necessary because
  // the IPC xpcshell setup doesn't do well with the normal storage
  // engine.

  cps = cps.wrappedJSObject;
  cps._mockStorage = {};

  cps.old_setPref = cps.setPref;
  cps.setPref = function(aGroup, aName, aValue) {
    this._mockStorage[aGroup+':'+aName] = aValue;
  }

  cps.old_getPref = cps.getPref;
  cps.getPref = function(aGroup, aName) {
    return this._mockStorage[aGroup+':'+aName];
  }

  cps.old__dbInit = cps._dbInit;
  cps._dbInit = function(){};

  cps._messageProxy = messageProxy; // keep it alive
  do_test_pending();

  run_test_in_child("contentPrefs_childipc.js");
}