forked from mirrors/gecko-dev
		
	This also removes any redundant Ci.nsISupports elements in the interface
lists.
This was done using the following script:
acecb401b7/processors/chromeutils-generateQI.jsm
MozReview-Commit-ID: AIx10P8GpZY
--HG--
extra : rebase_source : a29c07530586dc18ba040f19215475ac20fcfb3b
		
	
			
		
			
				
	
	
		
			167 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
/* eslint-env mozilla/frame-script */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 | 
						|
 | 
						|
function executeSoon(callback) {
 | 
						|
  Services.tm.dispatchToMainThread(callback);
 | 
						|
}
 | 
						|
 | 
						|
var historyListener = {
 | 
						|
  OnHistoryNewEntry() {
 | 
						|
    sendAsyncMessage("ss-test:OnHistoryNewEntry");
 | 
						|
  },
 | 
						|
 | 
						|
  OnHistoryGoBack() {
 | 
						|
    sendAsyncMessage("ss-test:OnHistoryGoBack");
 | 
						|
    return true;
 | 
						|
  },
 | 
						|
 | 
						|
  OnHistoryGoForward() {
 | 
						|
    sendAsyncMessage("ss-test:OnHistoryGoForward");
 | 
						|
    return true;
 | 
						|
  },
 | 
						|
 | 
						|
  OnHistoryGotoIndex() {
 | 
						|
    sendAsyncMessage("ss-test:OnHistoryGotoIndex");
 | 
						|
    return true;
 | 
						|
  },
 | 
						|
 | 
						|
  OnHistoryPurge() {
 | 
						|
    sendAsyncMessage("ss-test:OnHistoryPurge");
 | 
						|
    return true;
 | 
						|
  },
 | 
						|
 | 
						|
  OnHistoryReload() {
 | 
						|
    sendAsyncMessage("ss-test:OnHistoryReload");
 | 
						|
    return true;
 | 
						|
  },
 | 
						|
 | 
						|
  OnHistoryReplaceEntry() {
 | 
						|
    sendAsyncMessage("ss-test:OnHistoryReplaceEntry");
 | 
						|
  },
 | 
						|
 | 
						|
  QueryInterface: ChromeUtils.generateQI([
 | 
						|
    Ci.nsISHistoryListener,
 | 
						|
    Ci.nsISupportsWeakReference
 | 
						|
  ])
 | 
						|
};
 | 
						|
 | 
						|
var {sessionHistory} = docShell.QueryInterface(Ci.nsIWebNavigation);
 | 
						|
if (sessionHistory) {
 | 
						|
  sessionHistory.legacySHistory.addSHistoryListener(historyListener);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * This frame script is only loaded for sessionstore mochitests. It enables us
 | 
						|
 * to modify and query docShell data when running with multiple processes.
 | 
						|
 */
 | 
						|
 | 
						|
addEventListener("hashchange", function() {
 | 
						|
  sendAsyncMessage("ss-test:hashchange");
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:purgeDomainData", function({data: domain}) {
 | 
						|
  Services.obs.notifyObservers(null, "browser:purge-domain-data", domain);
 | 
						|
  content.setTimeout(() => sendAsyncMessage("ss-test:purgeDomainData"));
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:getStyleSheets", function(msg) {
 | 
						|
  let sheets = content.document.styleSheets;
 | 
						|
  let titles = Array.map(sheets, ss => [ss.title, ss.disabled]);
 | 
						|
  sendSyncMessage("ss-test:getStyleSheets", titles);
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:enableStyleSheetsForSet", function(msg) {
 | 
						|
  let sheets = content.document.styleSheets;
 | 
						|
  let change = false;
 | 
						|
  for (let i = 0; i < sheets.length; i++) {
 | 
						|
    if (sheets[i].disabled != (!msg.data.includes(sheets[i].title))) {
 | 
						|
      change = true;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  function observer() {
 | 
						|
    Services.obs.removeObserver(observer, "style-sheet-applicable-state-changed");
 | 
						|
 | 
						|
    // It's possible our observer will run before the one in
 | 
						|
    // content-sessionStore.js. Therefore, we run ours a little
 | 
						|
    // later.
 | 
						|
    executeSoon(() => sendAsyncMessage("ss-test:enableStyleSheetsForSet"));
 | 
						|
  }
 | 
						|
  if (change) {
 | 
						|
    // We don't want to reply until content-sessionStore.js has seen
 | 
						|
    // the change.
 | 
						|
    Services.obs.addObserver(observer, "style-sheet-applicable-state-changed");
 | 
						|
 | 
						|
    content.document.enableStyleSheetsForSet(msg.data);
 | 
						|
  } else {
 | 
						|
    sendAsyncMessage("ss-test:enableStyleSheetsForSet");
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:enableSubDocumentStyleSheetsForSet", function(msg) {
 | 
						|
  let iframe = content.document.getElementById(msg.data.id);
 | 
						|
  iframe.contentDocument.enableStyleSheetsForSet(msg.data.set);
 | 
						|
  sendAsyncMessage("ss-test:enableSubDocumentStyleSheetsForSet");
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:getAuthorStyleDisabled", function(msg) {
 | 
						|
  let {authorStyleDisabled} =
 | 
						|
    docShell.contentViewer;
 | 
						|
  sendSyncMessage("ss-test:getAuthorStyleDisabled", authorStyleDisabled);
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:setAuthorStyleDisabled", function(msg) {
 | 
						|
  let markupDocumentViewer =
 | 
						|
    docShell.contentViewer;
 | 
						|
  markupDocumentViewer.authorStyleDisabled = msg.data;
 | 
						|
  sendSyncMessage("ss-test:setAuthorStyleDisabled");
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:setUsePrivateBrowsing", function(msg) {
 | 
						|
  let loadContext =
 | 
						|
    docShell.QueryInterface(Ci.nsILoadContext);
 | 
						|
  loadContext.usePrivateBrowsing = msg.data;
 | 
						|
  sendAsyncMessage("ss-test:setUsePrivateBrowsing");
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:getScrollPosition", function(msg) {
 | 
						|
  let frame = content;
 | 
						|
  if (msg.data.hasOwnProperty("frame")) {
 | 
						|
    frame = content.frames[msg.data.frame];
 | 
						|
  }
 | 
						|
  let {scrollX: x, scrollY: y} = frame;
 | 
						|
  sendAsyncMessage("ss-test:getScrollPosition", {x, y});
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:setScrollPosition", function(msg) {
 | 
						|
  let frame = content;
 | 
						|
  let {x, y} = msg.data;
 | 
						|
  if (msg.data.hasOwnProperty("frame")) {
 | 
						|
    frame = content.frames[msg.data.frame];
 | 
						|
  }
 | 
						|
  frame.scrollTo(x, y);
 | 
						|
 | 
						|
  frame.addEventListener("scroll", function onScroll(event) {
 | 
						|
    if (frame.document == event.target) {
 | 
						|
      frame.removeEventListener("scroll", onScroll);
 | 
						|
      sendAsyncMessage("ss-test:setScrollPosition");
 | 
						|
    }
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
addMessageListener("ss-test:click", function({data}) {
 | 
						|
  content.document.getElementById(data.id).click();
 | 
						|
  sendAsyncMessage("ss-test:click");
 | 
						|
});
 | 
						|
 | 
						|
addEventListener("load", function(event) {
 | 
						|
  let subframe = event.target != content.document;
 | 
						|
  sendAsyncMessage("ss-test:loadEvent", {subframe, url: event.target.documentURI});
 | 
						|
}, true);
 |