1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/sessionstore/test/content.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,179 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +"use strict"; 1.9 + 1.10 +let Cu = Components.utils; 1.11 +let Ci = Components.interfaces; 1.12 + 1.13 +Cu.import("resource:///modules/sessionstore/FrameTree.jsm", this); 1.14 +let gFrameTree = new FrameTree(this); 1.15 + 1.16 +gFrameTree.addObserver({ 1.17 + onFrameTreeReset: function () { 1.18 + sendAsyncMessage("ss-test:onFrameTreeReset"); 1.19 + }, 1.20 + 1.21 + onFrameTreeCollected: function () { 1.22 + sendAsyncMessage("ss-test:onFrameTreeCollected"); 1.23 + } 1.24 +}); 1.25 + 1.26 +/** 1.27 + * This frame script is only loaded for sessionstore mochitests. It enables us 1.28 + * to modify and query docShell data when running with multiple processes. 1.29 + */ 1.30 + 1.31 +addEventListener("hashchange", function () { 1.32 + sendAsyncMessage("ss-test:hashchange"); 1.33 +}); 1.34 + 1.35 +addEventListener("MozStorageChanged", function () { 1.36 + sendSyncMessage("ss-test:MozStorageChanged"); 1.37 +}); 1.38 + 1.39 +addMessageListener("ss-test:modifySessionStorage", function (msg) { 1.40 + for (let key of Object.keys(msg.data)) { 1.41 + content.sessionStorage[key] = msg.data[key]; 1.42 + } 1.43 +}); 1.44 + 1.45 +addMessageListener("ss-test:modifySessionStorage2", function (msg) { 1.46 + for (let key of Object.keys(msg.data)) { 1.47 + content.frames[0].sessionStorage[key] = msg.data[key]; 1.48 + } 1.49 +}); 1.50 + 1.51 +addMessageListener("ss-test:purgeDomainData", function ({data: domain}) { 1.52 + Services.obs.notifyObservers(null, "browser:purge-domain-data", domain); 1.53 + content.setTimeout(() => sendAsyncMessage("ss-test:purgeDomainData")); 1.54 +}); 1.55 + 1.56 +addMessageListener("ss-test:purgeSessionHistory", function () { 1.57 + Services.obs.notifyObservers(null, "browser:purge-session-history", ""); 1.58 + content.setTimeout(() => sendAsyncMessage("ss-test:purgeSessionHistory")); 1.59 +}); 1.60 + 1.61 +addMessageListener("ss-test:getStyleSheets", function (msg) { 1.62 + let sheets = content.document.styleSheets; 1.63 + let titles = Array.map(sheets, ss => [ss.title, ss.disabled]); 1.64 + sendSyncMessage("ss-test:getStyleSheets", titles); 1.65 +}); 1.66 + 1.67 +addMessageListener("ss-test:enableStyleSheetsForSet", function (msg) { 1.68 + content.document.enableStyleSheetsForSet(msg.data); 1.69 + sendAsyncMessage("ss-test:enableStyleSheetsForSet"); 1.70 +}); 1.71 + 1.72 +addMessageListener("ss-test:enableSubDocumentStyleSheetsForSet", function (msg) { 1.73 + let iframe = content.document.getElementById(msg.data.id); 1.74 + iframe.contentDocument.enableStyleSheetsForSet(msg.data.set); 1.75 + sendAsyncMessage("ss-test:enableSubDocumentStyleSheetsForSet"); 1.76 +}); 1.77 + 1.78 +addMessageListener("ss-test:getAuthorStyleDisabled", function (msg) { 1.79 + let {authorStyleDisabled} = 1.80 + docShell.contentViewer.QueryInterface(Ci.nsIMarkupDocumentViewer); 1.81 + sendSyncMessage("ss-test:getAuthorStyleDisabled", authorStyleDisabled); 1.82 +}); 1.83 + 1.84 +addMessageListener("ss-test:setAuthorStyleDisabled", function (msg) { 1.85 + let markupDocumentViewer = 1.86 + docShell.contentViewer.QueryInterface(Ci.nsIMarkupDocumentViewer); 1.87 + markupDocumentViewer.authorStyleDisabled = msg.data; 1.88 + sendSyncMessage("ss-test:setAuthorStyleDisabled"); 1.89 +}); 1.90 + 1.91 +addMessageListener("ss-test:setUsePrivateBrowsing", function (msg) { 1.92 + let loadContext = 1.93 + docShell.QueryInterface(Ci.nsILoadContext); 1.94 + loadContext.usePrivateBrowsing = msg.data; 1.95 + sendAsyncMessage("ss-test:setUsePrivateBrowsing"); 1.96 +}); 1.97 + 1.98 +addMessageListener("ss-test:getScrollPosition", function (msg) { 1.99 + let frame = content; 1.100 + if (msg.data.hasOwnProperty("frame")) { 1.101 + frame = content.frames[msg.data.frame]; 1.102 + } 1.103 + let {scrollX: x, scrollY: y} = frame; 1.104 + sendAsyncMessage("ss-test:getScrollPosition", {x: x, y: y}); 1.105 +}); 1.106 + 1.107 +addMessageListener("ss-test:setScrollPosition", function (msg) { 1.108 + let frame = content; 1.109 + let {x, y} = msg.data; 1.110 + if (msg.data.hasOwnProperty("frame")) { 1.111 + frame = content.frames[msg.data.frame]; 1.112 + } 1.113 + frame.scrollTo(x, y); 1.114 + 1.115 + frame.addEventListener("scroll", function onScroll(event) { 1.116 + if (frame.document == event.target) { 1.117 + frame.removeEventListener("scroll", onScroll); 1.118 + sendAsyncMessage("ss-test:setScrollPosition"); 1.119 + } 1.120 + }); 1.121 +}); 1.122 + 1.123 +addMessageListener("ss-test:createDynamicFrames", function ({data}) { 1.124 + function createIFrame(rows) { 1.125 + let frames = content.document.getElementById(data.id); 1.126 + frames.setAttribute("rows", rows); 1.127 + 1.128 + let frame = content.document.createElement("frame"); 1.129 + frame.setAttribute("src", data.url); 1.130 + frames.appendChild(frame); 1.131 + } 1.132 + 1.133 + addEventListener("DOMContentLoaded", function onContentLoaded(event) { 1.134 + if (content.document == event.target) { 1.135 + removeEventListener("DOMContentLoaded", onContentLoaded, true); 1.136 + // DOMContentLoaded is fired right after we finished parsing the document. 1.137 + createIFrame("33%, 33%, 33%"); 1.138 + } 1.139 + }, true); 1.140 + 1.141 + addEventListener("load", function onLoad(event) { 1.142 + if (content.document == event.target) { 1.143 + removeEventListener("load", onLoad, true); 1.144 + 1.145 + // Creating this frame on the same tick as the load event 1.146 + // means that it must not be included in the frame tree. 1.147 + createIFrame("25%, 25%, 25%, 25%"); 1.148 + } 1.149 + }, true); 1.150 + 1.151 + sendAsyncMessage("ss-test:createDynamicFrames"); 1.152 +}); 1.153 + 1.154 +addMessageListener("ss-test:removeLastFrame", function ({data}) { 1.155 + let frames = content.document.getElementById(data.id); 1.156 + frames.lastElementChild.remove(); 1.157 + sendAsyncMessage("ss-test:removeLastFrame"); 1.158 +}); 1.159 + 1.160 +addMessageListener("ss-test:mapFrameTree", function (msg) { 1.161 + let result = gFrameTree.map(frame => ({href: frame.location.href})); 1.162 + sendAsyncMessage("ss-test:mapFrameTree", result); 1.163 +}); 1.164 + 1.165 +addMessageListener("ss-test:click", function ({data}) { 1.166 + content.document.getElementById(data.id).click(); 1.167 + sendAsyncMessage("ss-test:click"); 1.168 +}); 1.169 + 1.170 +addMessageListener("ss-test:historyPushState", function ({data}) { 1.171 + content.window.history. 1.172 + pushState(data.stateObj || {}, data.title || "", data.url); 1.173 + 1.174 + sendAsyncMessage("ss-test:historyPushState"); 1.175 +}); 1.176 + 1.177 +addMessageListener("ss-test:historyReplaceState", function ({data}) { 1.178 + content.window.history. 1.179 + replaceState(data.stateObj || {}, data.title || "", data.url); 1.180 + 1.181 + sendAsyncMessage("ss-test:historyReplaceState"); 1.182 +});