browser/components/sessionstore/test/content.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:6c7c7a5cc13c
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 "use strict";
6
7 let Cu = Components.utils;
8 let Ci = Components.interfaces;
9
10 Cu.import("resource:///modules/sessionstore/FrameTree.jsm", this);
11 let gFrameTree = new FrameTree(this);
12
13 gFrameTree.addObserver({
14 onFrameTreeReset: function () {
15 sendAsyncMessage("ss-test:onFrameTreeReset");
16 },
17
18 onFrameTreeCollected: function () {
19 sendAsyncMessage("ss-test:onFrameTreeCollected");
20 }
21 });
22
23 /**
24 * This frame script is only loaded for sessionstore mochitests. It enables us
25 * to modify and query docShell data when running with multiple processes.
26 */
27
28 addEventListener("hashchange", function () {
29 sendAsyncMessage("ss-test:hashchange");
30 });
31
32 addEventListener("MozStorageChanged", function () {
33 sendSyncMessage("ss-test:MozStorageChanged");
34 });
35
36 addMessageListener("ss-test:modifySessionStorage", function (msg) {
37 for (let key of Object.keys(msg.data)) {
38 content.sessionStorage[key] = msg.data[key];
39 }
40 });
41
42 addMessageListener("ss-test:modifySessionStorage2", function (msg) {
43 for (let key of Object.keys(msg.data)) {
44 content.frames[0].sessionStorage[key] = msg.data[key];
45 }
46 });
47
48 addMessageListener("ss-test:purgeDomainData", function ({data: domain}) {
49 Services.obs.notifyObservers(null, "browser:purge-domain-data", domain);
50 content.setTimeout(() => sendAsyncMessage("ss-test:purgeDomainData"));
51 });
52
53 addMessageListener("ss-test:purgeSessionHistory", function () {
54 Services.obs.notifyObservers(null, "browser:purge-session-history", "");
55 content.setTimeout(() => sendAsyncMessage("ss-test:purgeSessionHistory"));
56 });
57
58 addMessageListener("ss-test:getStyleSheets", function (msg) {
59 let sheets = content.document.styleSheets;
60 let titles = Array.map(sheets, ss => [ss.title, ss.disabled]);
61 sendSyncMessage("ss-test:getStyleSheets", titles);
62 });
63
64 addMessageListener("ss-test:enableStyleSheetsForSet", function (msg) {
65 content.document.enableStyleSheetsForSet(msg.data);
66 sendAsyncMessage("ss-test:enableStyleSheetsForSet");
67 });
68
69 addMessageListener("ss-test:enableSubDocumentStyleSheetsForSet", function (msg) {
70 let iframe = content.document.getElementById(msg.data.id);
71 iframe.contentDocument.enableStyleSheetsForSet(msg.data.set);
72 sendAsyncMessage("ss-test:enableSubDocumentStyleSheetsForSet");
73 });
74
75 addMessageListener("ss-test:getAuthorStyleDisabled", function (msg) {
76 let {authorStyleDisabled} =
77 docShell.contentViewer.QueryInterface(Ci.nsIMarkupDocumentViewer);
78 sendSyncMessage("ss-test:getAuthorStyleDisabled", authorStyleDisabled);
79 });
80
81 addMessageListener("ss-test:setAuthorStyleDisabled", function (msg) {
82 let markupDocumentViewer =
83 docShell.contentViewer.QueryInterface(Ci.nsIMarkupDocumentViewer);
84 markupDocumentViewer.authorStyleDisabled = msg.data;
85 sendSyncMessage("ss-test:setAuthorStyleDisabled");
86 });
87
88 addMessageListener("ss-test:setUsePrivateBrowsing", function (msg) {
89 let loadContext =
90 docShell.QueryInterface(Ci.nsILoadContext);
91 loadContext.usePrivateBrowsing = msg.data;
92 sendAsyncMessage("ss-test:setUsePrivateBrowsing");
93 });
94
95 addMessageListener("ss-test:getScrollPosition", function (msg) {
96 let frame = content;
97 if (msg.data.hasOwnProperty("frame")) {
98 frame = content.frames[msg.data.frame];
99 }
100 let {scrollX: x, scrollY: y} = frame;
101 sendAsyncMessage("ss-test:getScrollPosition", {x: x, y: y});
102 });
103
104 addMessageListener("ss-test:setScrollPosition", function (msg) {
105 let frame = content;
106 let {x, y} = msg.data;
107 if (msg.data.hasOwnProperty("frame")) {
108 frame = content.frames[msg.data.frame];
109 }
110 frame.scrollTo(x, y);
111
112 frame.addEventListener("scroll", function onScroll(event) {
113 if (frame.document == event.target) {
114 frame.removeEventListener("scroll", onScroll);
115 sendAsyncMessage("ss-test:setScrollPosition");
116 }
117 });
118 });
119
120 addMessageListener("ss-test:createDynamicFrames", function ({data}) {
121 function createIFrame(rows) {
122 let frames = content.document.getElementById(data.id);
123 frames.setAttribute("rows", rows);
124
125 let frame = content.document.createElement("frame");
126 frame.setAttribute("src", data.url);
127 frames.appendChild(frame);
128 }
129
130 addEventListener("DOMContentLoaded", function onContentLoaded(event) {
131 if (content.document == event.target) {
132 removeEventListener("DOMContentLoaded", onContentLoaded, true);
133 // DOMContentLoaded is fired right after we finished parsing the document.
134 createIFrame("33%, 33%, 33%");
135 }
136 }, true);
137
138 addEventListener("load", function onLoad(event) {
139 if (content.document == event.target) {
140 removeEventListener("load", onLoad, true);
141
142 // Creating this frame on the same tick as the load event
143 // means that it must not be included in the frame tree.
144 createIFrame("25%, 25%, 25%, 25%");
145 }
146 }, true);
147
148 sendAsyncMessage("ss-test:createDynamicFrames");
149 });
150
151 addMessageListener("ss-test:removeLastFrame", function ({data}) {
152 let frames = content.document.getElementById(data.id);
153 frames.lastElementChild.remove();
154 sendAsyncMessage("ss-test:removeLastFrame");
155 });
156
157 addMessageListener("ss-test:mapFrameTree", function (msg) {
158 let result = gFrameTree.map(frame => ({href: frame.location.href}));
159 sendAsyncMessage("ss-test:mapFrameTree", result);
160 });
161
162 addMessageListener("ss-test:click", function ({data}) {
163 content.document.getElementById(data.id).click();
164 sendAsyncMessage("ss-test:click");
165 });
166
167 addMessageListener("ss-test:historyPushState", function ({data}) {
168 content.window.history.
169 pushState(data.stateObj || {}, data.title || "", data.url);
170
171 sendAsyncMessage("ss-test:historyPushState");
172 });
173
174 addMessageListener("ss-test:historyReplaceState", function ({data}) {
175 content.window.history.
176 replaceState(data.stateObj || {}, data.title || "", data.url);
177
178 sendAsyncMessage("ss-test:historyReplaceState");
179 });

mercurial