browser/components/sessionstore/test/content.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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/. */
     5 "use strict";
     7 let Cu = Components.utils;
     8 let Ci = Components.interfaces;
    10 Cu.import("resource:///modules/sessionstore/FrameTree.jsm", this);
    11 let gFrameTree = new FrameTree(this);
    13 gFrameTree.addObserver({
    14   onFrameTreeReset: function () {
    15     sendAsyncMessage("ss-test:onFrameTreeReset");
    16   },
    18   onFrameTreeCollected: function () {
    19     sendAsyncMessage("ss-test:onFrameTreeCollected");
    20   }
    21 });
    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  */
    28 addEventListener("hashchange", function () {
    29   sendAsyncMessage("ss-test:hashchange");
    30 });
    32 addEventListener("MozStorageChanged", function () {
    33   sendSyncMessage("ss-test:MozStorageChanged");
    34 });
    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 });
    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 });
    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 });
    53 addMessageListener("ss-test:purgeSessionHistory", function () {
    54   Services.obs.notifyObservers(null, "browser:purge-session-history", "");
    55   content.setTimeout(() => sendAsyncMessage("ss-test:purgeSessionHistory"));
    56 });
    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 });
    64 addMessageListener("ss-test:enableStyleSheetsForSet", function (msg) {
    65   content.document.enableStyleSheetsForSet(msg.data);
    66   sendAsyncMessage("ss-test:enableStyleSheetsForSet");
    67 });
    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 });
    75 addMessageListener("ss-test:getAuthorStyleDisabled", function (msg) {
    76   let {authorStyleDisabled} =
    77     docShell.contentViewer.QueryInterface(Ci.nsIMarkupDocumentViewer);
    78   sendSyncMessage("ss-test:getAuthorStyleDisabled", authorStyleDisabled);
    79 });
    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 });
    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 });
    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 });
   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);
   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 });
   120 addMessageListener("ss-test:createDynamicFrames", function ({data}) {
   121   function createIFrame(rows) {
   122     let frames = content.document.getElementById(data.id);
   123     frames.setAttribute("rows", rows);
   125     let frame = content.document.createElement("frame");
   126     frame.setAttribute("src", data.url);
   127     frames.appendChild(frame);
   128   }
   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);
   138   addEventListener("load", function onLoad(event) {
   139     if (content.document == event.target) {
   140       removeEventListener("load", onLoad, true);
   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);
   148   sendAsyncMessage("ss-test:createDynamicFrames");
   149 });
   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 });
   157 addMessageListener("ss-test:mapFrameTree", function (msg) {
   158   let result = gFrameTree.map(frame => ({href: frame.location.href}));
   159   sendAsyncMessage("ss-test:mapFrameTree", result);
   160 });
   162 addMessageListener("ss-test:click", function ({data}) {
   163   content.document.getElementById(data.id).click();
   164   sendAsyncMessage("ss-test:click");
   165 });
   167 addMessageListener("ss-test:historyPushState", function ({data}) {
   168   content.window.history.
   169     pushState(data.stateObj || {}, data.title || "", data.url);
   171   sendAsyncMessage("ss-test:historyPushState");
   172 });
   174 addMessageListener("ss-test:historyReplaceState", function ({data}) {
   175   content.window.history.
   176     replaceState(data.stateObj || {}, data.title || "", data.url);
   178   sendAsyncMessage("ss-test:historyReplaceState");
   179 });

mercurial