Browse Source

Bug 1015115 - switch to cloneInto in pdf.js, r?yury

Gijs Kruitbosch 11 years ago committed by Yury Delendik
parent
commit
da93e65d8c
  1. 33
      extensions/firefox/content/PdfStreamConverter.jsm

33
extensions/firefox/content/PdfStreamConverter.jsm

@ -160,6 +160,18 @@ function getLocalizedString(strings, id, property) {
return id; return id;
} }
function makeContentReadable(obj, window) {
if (Cu.cloneInto) {
return Cu.cloneInto(obj, window);
}
var expose = {};
for (let k in obj) {
expose[k] = "r";
}
obj.__exposedProps__ = expose;
return obj;
}
// PDF data storage // PDF data storage
function PdfDataListener(length) { function PdfDataListener(length) {
this.length = length; // less than 0, if length is unknown this.length = length; // less than 0, if length is unknown
@ -704,9 +716,7 @@ RequestListener.prototype.receive = function(event) {
} }
if (sync) { if (sync) {
var response = actions[action].call(this.actions, data); var response = actions[action].call(this.actions, data);
var detail = event.detail; event.detail.response = response;
detail.__exposedProps__ = {response: 'r'};
detail.response = response;
} else { } else {
var response; var response;
if (!event.detail.callback) { if (!event.detail.callback) {
@ -716,9 +726,8 @@ RequestListener.prototype.receive = function(event) {
response = function sendResponse(response) { response = function sendResponse(response) {
try { try {
var listener = doc.createEvent('CustomEvent'); var listener = doc.createEvent('CustomEvent');
listener.initCustomEvent('pdf.js.response', true, false, let detail = makeContentReadable({response: response}, doc.defaultView);
{response: response, listener.initCustomEvent('pdf.js.response', true, false, detail);
__exposedProps__: {response: 'r'}});
return message.dispatchEvent(listener); return message.dispatchEvent(listener);
} catch (e) { } catch (e) {
// doc is no longer accessible because the requestor is already // doc is no longer accessible because the requestor is already
@ -761,13 +770,13 @@ FindEventManager.prototype.handleEvent = function(e) {
var contentWindow = this.contentWindow; var contentWindow = this.contentWindow;
// Only forward the events if they are for our dom window. // Only forward the events if they are for our dom window.
if (chromeWindow.gBrowser.selectedBrowser.contentWindow === contentWindow) { if (chromeWindow.gBrowser.selectedBrowser.contentWindow === contentWindow) {
var detail = e.detail; var detail = {
detail.__exposedProps__ = { query: e.detail.query,
query: 'r', caseSensitive: e.detail.caseSensitive,
caseSensitive: 'r', highlightAll: e.detail.highlightAll,
highlightAll: 'r', findPrevious: e.detail.findPrevious
findPrevious: 'r'
}; };
detail = makeContentReadable(detail, contentWindow);
var forward = contentWindow.document.createEvent('CustomEvent'); var forward = contentWindow.document.createEvent('CustomEvent');
forward.initCustomEvent(e.type, true, true, detail); forward.initCustomEvent(e.type, true, true, detail);
contentWindow.dispatchEvent(forward); contentWindow.dispatchEvent(forward);

Loading…
Cancel
Save