Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
5 Cu.import("resource://gre/modules/devtools/dbg-client.jsm");
7 var gClient;
8 var gDebuggee;
10 const xpcInspector = Cc["@mozilla.org/jsinspector;1"].getService(Ci.nsIJSInspector);
12 function run_test()
13 {
14 initTestDebuggerServer();
15 gDebuggee = testGlobal("test-1");
16 DebuggerServer.addTestGlobal(gDebuggee);
18 let transport = DebuggerServer.connectPipe();
19 gClient = new DebuggerClient(transport);
20 gClient.addListener("connected", function(aEvent, aType, aTraits) {
21 gClient.listTabs((aResponse) => {
22 do_check_true('tabs' in aResponse);
23 for (let tab of aResponse.tabs) {
24 if (tab.title == "test-1") {
25 test_attach_tab(tab.actor);
26 return false;
27 }
28 }
29 do_check_true(false); // We should have found our tab in the list.
30 return undefined;
31 });
32 });
34 gClient.connect();
36 do_test_pending();
37 }
39 // Attach to |aTabActor|, and check the response.
40 function test_attach_tab(aTabActor)
41 {
42 gClient.request({ to: aTabActor, type: "attach" }, function(aResponse) {
43 do_check_false("error" in aResponse);
44 do_check_eq(aResponse.from, aTabActor);
45 do_check_eq(aResponse.type, "tabAttached");
46 do_check_true(typeof aResponse.threadActor === "string");
48 test_attach_thread(aResponse.threadActor);
49 });
50 }
52 // Attach to |aThreadActor|, check the response, and resume it.
53 function test_attach_thread(aThreadActor)
54 {
55 gClient.request({ to: aThreadActor, type: "attach" }, function(aResponse) {
56 do_check_false("error" in aResponse);
57 do_check_eq(aResponse.from, aThreadActor);
58 do_check_eq(aResponse.type, "paused");
59 do_check_true("why" in aResponse);
60 do_check_eq(aResponse.why.type, "attached");
62 test_resume_thread(aThreadActor);
63 });
64 }
66 // Resume |aThreadActor|, and see that it stops at the 'debugger'
67 // statement.
68 function test_resume_thread(aThreadActor)
69 {
70 // Allow the client to resume execution.
71 gClient.request({ to: aThreadActor, type: "resume" }, function (aResponse) {
72 do_check_false("error" in aResponse);
73 do_check_eq(aResponse.from, aThreadActor);
74 do_check_eq(aResponse.type, "resumed");
76 do_check_eq(xpcInspector.eventLoopNestLevel, 0);
78 // Now that we know we're resumed, we can make the debuggee do something.
79 Cu.evalInSandbox("var a = true; var b = false; debugger; var b = true;", gDebuggee);
80 // Now make sure that we've run the code after the debugger statement...
81 do_check_true(gDebuggee.b);
82 });
84 gClient.addListener("paused", function(aName, aPacket) {
85 do_check_eq(aName, "paused");
86 do_check_false("error" in aPacket);
87 do_check_eq(aPacket.from, aThreadActor);
88 do_check_eq(aPacket.type, "paused");
89 do_check_true("actor" in aPacket);
90 do_check_true("why" in aPacket)
91 do_check_eq(aPacket.why.type, "debuggerStatement");
93 // Reach around the protocol to check that the debuggee is in the state
94 // we expect.
95 do_check_true(gDebuggee.a);
96 do_check_false(gDebuggee.b);
98 do_check_eq(xpcInspector.eventLoopNestLevel, 1);
100 // Let the debuggee continue execution.
101 gClient.request({ to: aThreadActor, type: "resume" }, cleanup);
102 });
103 }
105 function cleanup()
106 {
107 gClient.addListener("closed", function(aEvent, aResult) {
108 do_test_finished();
109 });
111 try {
112 let xpcInspector = Cc["@mozilla.org/jsinspector;1"].getService(Ci.nsIJSInspector);
113 do_check_eq(xpcInspector.eventLoopNestLevel, 0);
114 } catch(e) {
115 dump(e);
116 }
118 gClient.close();
119 }