browser/components/sessionstore/test/content.js

changeset 0
6474c204b198
     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 +});

mercurial