Merge pull request #4858 from yurydelendik/cloneInto
Bug 1015115 - switch to cloneInto in pdf.js
This commit is contained in:
commit
a256ffffd4
@ -160,6 +160,25 @@ function getLocalizedString(strings, id, property) {
|
||||
return id;
|
||||
}
|
||||
|
||||
function makeContentReadable(obj, window) {
|
||||
//#if MOZCENTRAL
|
||||
return Cu.cloneInto(obj, window);
|
||||
//#else
|
||||
if (Cu.cloneInto) {
|
||||
return Cu.cloneInto(obj, window);
|
||||
}
|
||||
if (typeof obj !== 'object' || obj === null) {
|
||||
return obj;
|
||||
}
|
||||
var expose = {};
|
||||
for (let k in obj) {
|
||||
expose[k] = "r";
|
||||
}
|
||||
obj.__exposedProps__ = expose;
|
||||
return obj;
|
||||
//#endif
|
||||
}
|
||||
|
||||
// PDF data storage
|
||||
function PdfDataListener(length) {
|
||||
this.length = length; // less than 0, if length is unknown
|
||||
@ -686,7 +705,7 @@ var StandardChromeActions = (function StandardChromeActionsClosure() {
|
||||
return StandardChromeActions;
|
||||
})();
|
||||
|
||||
// Event listener to trigger chrome privedged code.
|
||||
// Event listener to trigger chrome privileged code.
|
||||
function RequestListener(actions) {
|
||||
this.actions = actions;
|
||||
}
|
||||
@ -704,21 +723,18 @@ RequestListener.prototype.receive = function(event) {
|
||||
}
|
||||
if (sync) {
|
||||
var response = actions[action].call(this.actions, data);
|
||||
var detail = event.detail;
|
||||
detail.__exposedProps__ = {response: 'r'};
|
||||
detail.response = response;
|
||||
event.detail.response = response;
|
||||
} else {
|
||||
var response;
|
||||
if (!event.detail.callback) {
|
||||
if (!event.detail.responseExpected) {
|
||||
doc.documentElement.removeChild(message);
|
||||
response = null;
|
||||
} else {
|
||||
response = function sendResponse(response) {
|
||||
try {
|
||||
var listener = doc.createEvent('CustomEvent');
|
||||
listener.initCustomEvent('pdf.js.response', true, false,
|
||||
{response: response,
|
||||
__exposedProps__: {response: 'r'}});
|
||||
let detail = makeContentReadable({response: response}, doc.defaultView);
|
||||
listener.initCustomEvent('pdf.js.response', true, false, detail);
|
||||
return message.dispatchEvent(listener);
|
||||
} catch (e) {
|
||||
// doc is no longer accessible because the requestor is already
|
||||
@ -761,13 +777,13 @@ FindEventManager.prototype.handleEvent = function(e) {
|
||||
var contentWindow = this.contentWindow;
|
||||
// Only forward the events if they are for our dom window.
|
||||
if (chromeWindow.gBrowser.selectedBrowser.contentWindow === contentWindow) {
|
||||
var detail = e.detail;
|
||||
detail.__exposedProps__ = {
|
||||
query: 'r',
|
||||
caseSensitive: 'r',
|
||||
highlightAll: 'r',
|
||||
findPrevious: 'r'
|
||||
var detail = {
|
||||
query: e.detail.query,
|
||||
caseSensitive: e.detail.caseSensitive,
|
||||
highlightAll: e.detail.highlightAll,
|
||||
findPrevious: e.detail.findPrevious
|
||||
};
|
||||
detail = makeContentReadable(detail, contentWindow);
|
||||
var forward = contentWindow.document.createEvent('CustomEvent');
|
||||
forward.initCustomEvent(e.type, true, true, detail);
|
||||
contentWindow.dispatchEvent(forward);
|
||||
|
@ -64,9 +64,12 @@ var FirefoxCom = (function FirefoxComClosure() {
|
||||
document.documentElement.appendChild(request);
|
||||
|
||||
var sender = document.createEvent('CustomEvent');
|
||||
sender.initCustomEvent('pdf.js.message', true, false,
|
||||
{action: action, data: data, sync: false,
|
||||
callback: callback});
|
||||
sender.initCustomEvent('pdf.js.message', true, false, {
|
||||
action: action,
|
||||
data: data,
|
||||
sync: false,
|
||||
responseExpected: !!callback
|
||||
});
|
||||
return request.dispatchEvent(sender);
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user