Skip to content

Commit 3fb3a39

Browse files
committed
Merge remote branch 'upstream/master' into extension_chrome
2 parents 08af0c7 + 4d0fe2d commit 3fb3a39

File tree

8 files changed

+1452
-228
lines changed

8 files changed

+1452
-228
lines changed

extensions/firefox/components/pdfContentHandler.js

Lines changed: 13 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -20,135 +20,40 @@ function log(aMsg) {
2020
dump(msg + '\n');
2121
}
2222

23-
function fireEventTo(aName, aData, aWindow) {
24-
let window = aWindow.wrappedJSObject;
25-
let evt = window.document.createEvent('CustomEvent');
26-
evt.initCustomEvent('pdf' + aName, false, false, aData);
27-
window.document.dispatchEvent(evt);
28-
}
29-
30-
function loadDocument(aWindow, aDocumentUrl) {
31-
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
32-
.createInstance(Ci.nsIXMLHttpRequest);
33-
xhr.onprogress = function updateProgress(evt) {
34-
if (evt.lengthComputable)
35-
fireEventTo(evt.type, evt.loaded / evt.total, aWindow);
36-
};
37-
38-
xhr.onerror = function error(evt) {
39-
fireEventTo(evt.type, false, aWindow);
40-
};
41-
42-
xhr.onload = function load(evt) {
43-
let data = (xhr.mozResponseArrayBuffer || xhr.mozResponse ||
44-
xhr.responseArrayBuffer || xhr.response);
45-
try {
46-
let view = new Uint8Array(data);
47-
48-
let window = aWindow.wrappedJSObject;
49-
let arrayBuffer = new window.ArrayBuffer(data.byteLength);
50-
let view2 = new window.Uint8Array(arrayBuffer);
51-
view2.set(view);
52-
53-
fireEventTo(evt.type, arrayBuffer, aWindow);
54-
} catch (e) {
55-
log('Error - ' + e);
56-
}
57-
};
58-
59-
xhr.open('GET', aDocumentUrl);
60-
xhr.responseType = 'arraybuffer';
61-
xhr.send(null);
62-
}
63-
64-
let WebProgressListener = {
65-
init: function WebProgressListenerInit(aWindow, aUrl) {
66-
this._locationHasChanged = false;
67-
this._documentUrl = aUrl;
68-
69-
let flags = Ci.nsIWebProgress.NOTIFY_LOCATION |
70-
Ci.nsIWebProgress.NOTIFY_STATE_NETWORK |
71-
Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT;
72-
73-
let docShell = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
74-
.getInterface(Ci.nsIWebNavigation)
75-
.QueryInterface(Ci.nsIDocShell);
76-
let webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
77-
.getInterface(Ci.nsIWebProgress);
78-
try {
79-
webProgress.removeProgressListener(this);
80-
} catch (e) {}
81-
webProgress.addProgressListener(this, flags);
82-
},
83-
84-
onStateChange: function onStateChange(aWebProgress, aRequest, aStateFlags,
85-
aStatus) {
86-
const complete = Ci.nsIWebProgressListener.STATE_IS_WINDOW +
87-
Ci.nsIWebProgressListener.STATE_STOP;
88-
if ((aStateFlags & complete) == complete && this._locationHasChanged) {
89-
aWebProgress.removeProgressListener(this);
90-
loadDocument(aWebProgress.DOMWindow, this._documentUrl);
91-
}
92-
},
93-
94-
onProgressChange: function onProgressChange(aWebProgress, aRequest, aCurSelf,
95-
aMaxSelf, aCurTotal, aMaxTotal) {
96-
},
97-
98-
onLocationChange: function onLocationChange(aWebProgress, aRequest,
99-
aLocationURI) {
100-
this._locationHasChanged = true;
101-
},
102-
103-
onStatusChange: function onStatusChange(aWebProgress, aRequest, aStatus,
104-
aMessage) {
105-
},
106-
107-
onSecurityChange: function onSecurityChange(aWebProgress, aRequest, aState) {
108-
},
109-
110-
QueryInterface: function QueryInterface(aIID) {
111-
if (aIID.equals(Ci.nsIWebProgressListener) ||
112-
aIID.equals(Ci.nsISupportsWeakReference) ||
113-
aIID.equals(Ci.nsISupports)) {
114-
return this;
115-
}
116-
117-
throw Components.results.NS_ERROR_NO_INTERFACE;
118-
}
119-
};
120-
121-
23+
const NS_ERROR_WONT_HANDLE_CONTENT = 0x805d0001;
12224
function pdfContentHandler() {
12325
}
12426

12527
pdfContentHandler.prototype = {
12628
handleContent: function handleContent(aMimetype, aContext, aRequest) {
12729
if (aMimetype != PDF_CONTENT_TYPE)
128-
throw Cr.NS_ERROR_WONT_HANDLE_CONTENT;
30+
throw NS_ERROR_WONT_HANDLE_CONTENT;
12931

13032
if (!(aRequest instanceof Ci.nsIChannel))
131-
throw Cr.NS_ERROR_WONT_HANDLE_CONTENT;
33+
throw NS_ERROR_WONT_HANDLE_CONTENT;
13234

13335
let window = null;
13436
let callbacks = aRequest.notificationCallbacks ||
13537
aRequest.loadGroup.notificationCallbacks;
13638
if (!callbacks)
13739
return;
13840

139-
aRequest.cancel(Cr.NS_BINDING_ABORTED);
140-
let uri = aRequest.URI;
141-
14241
window = callbacks.getInterface(Ci.nsIDOMWindow);
143-
WebProgressListener.init(window, uri.spec);
14442

43+
let url = null;
14544
try {
146-
let url = Services.prefs.getCharPref('extensions.pdf.js.url');
147-
url = url.replace('%s', uri.spec);
148-
window.location = url;
45+
url = Services.prefs.getCharPref('extensions.pdf.js.url');
14946
} catch (e) {
15047
log('Error retrieving the pdf.js base url - ' + e);
48+
throw NS_ERROR_WONT_HANDLE_CONTENT;
15149
}
50+
51+
let targetUrl = aRequest.URI.spec;
52+
if (targetUrl.indexOf('?pdfjs.action=download') >= 0)
53+
throw NS_ERROR_WONT_HANDLE_CONTENT;
54+
55+
aRequest.cancel(Cr.NS_BINDING_ABORTED);
56+
window.location = url.replace('%s', targetUrl);
15257
},
15358

15459
classID: Components.ID('{2278dfd0-b75c-11e0-8257-1ba3d93c9f1a}'),
@@ -157,4 +62,3 @@ pdfContentHandler.prototype = {
15762

15863
var NSGetFactory = XPCOMUtils.generateNSGetFactory([pdfContentHandler]);
15964

160-

pdf.js

Lines changed: 39 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,6 +2021,25 @@ var CCITTFaxStream = (function ccittFaxStream() {
20212021
return EOF;
20222022
};
20232023

2024+
var findTableCode = function ccittFaxStreamFindTableCode(start, end, table,
2025+
limit) {
2026+
for (var i = start; i <= end; ++i) {
2027+
var code = this.lookBits(i);
2028+
if (code == EOF)
2029+
return [true, 1];
2030+
if (i < end)
2031+
code <<= end - i;
2032+
if (code >= limit) {
2033+
var p = table[code - ((limit == ccittEOL) ? 0 : limit)];
2034+
if (p[0] == i) {
2035+
this.eatBits(i);
2036+
return [true, p[1]];
2037+
}
2038+
}
2039+
}
2040+
return [false, 0];
2041+
};
2042+
20242043
constructor.prototype.getWhiteCode = function ccittFaxStreamGetWhiteCode() {
20252044
var code = 0;
20262045
var p;
@@ -2040,31 +2059,13 @@ var CCITTFaxStream = (function ccittFaxStream() {
20402059
return p[1];
20412060
}
20422061
} else {
2043-
for (var n = 1; n <= 9; ++n) {
2044-
code = this.lookBits(n);
2045-
if (code == EOF)
2046-
return 1;
2062+
var result = findTableCode(1, 9, whiteTable2, ccittEOL);
2063+
if (result[0])
2064+
return result[1];
20472065

2048-
if (n < 9)
2049-
code <<= 9 - n;
2050-
p = whiteTable2[code];
2051-
if (p[0] == n) {
2052-
this.eatBits(n);
2053-
return p[0];
2054-
}
2055-
}
2056-
for (var n = 11; n <= 12; ++n) {
2057-
code = this.lookBits(n);
2058-
if (code == EOF)
2059-
return 1;
2060-
if (n < 12)
2061-
code <<= 12 - n;
2062-
p = whiteTable1[code];
2063-
if (p[0] == n) {
2064-
this.eatBits(n);
2065-
return p[1];
2066-
}
2067-
}
2066+
result = findTableCode(11, 12, whiteTable1, ccittEOL);
2067+
if (result[0])
2068+
return result[1];
20682069
}
20692070
warn('bad white code');
20702071
this.eatBits(1);
@@ -2089,45 +2090,17 @@ var CCITTFaxStream = (function ccittFaxStream() {
20892090
return p[1];
20902091
}
20912092
} else {
2092-
var n;
2093-
for (n = 2; n <= 6; ++n) {
2094-
code = this.lookBits(n);
2095-
if (code == EOF)
2096-
return 1;
2097-
if (n < 6)
2098-
code <<= 6 - n;
2099-
p = blackTable3[code];
2100-
if (p[0] == n) {
2101-
this.eatBits(n);
2102-
return p[1];
2103-
}
2104-
}
2105-
for (n = 7; n <= 12; ++n) {
2106-
code = this.lookBits(n);
2107-
if (code == EOF)
2108-
return 1;
2109-
if (n < 12)
2110-
code <<= 12 - n;
2111-
if (code >= 64) {
2112-
p = blackTable2[code - 64];
2113-
if (p[0] == n) {
2114-
this.eatBits(n);
2115-
return p[1];
2116-
}
2117-
}
2118-
}
2119-
for (n = 10; n <= 13; ++n) {
2120-
code = this.lookBits(n);
2121-
if (code == EOF)
2122-
return 1;
2123-
if (n < 13)
2124-
code <<= 13 - n;
2125-
p = blackTable1[code];
2126-
if (p[0] == n) {
2127-
this.eatBits(n);
2128-
return p[1];
2129-
}
2130-
}
2093+
var result = findTableCode(2, 6, blackTable3, ccittEOL);
2094+
if (result[0])
2095+
return result[1];
2096+
2097+
result = findTableCode(7, 12, blackTable2, 64);
2098+
if (result[0])
2099+
return result[1];
2100+
2101+
result = findTableCode(10, 13, blackTable1, ccittEOL);
2102+
if (result[0])
2103+
return result[1];
21312104
}
21322105
warn('bad black code');
21332106
this.eatBits(1);
@@ -3634,15 +3607,16 @@ var Page = (function pagePage() {
36343607
gfx.execute(this.code, xref, resources);
36353608
gfx.endDrawing();
36363609
},
3637-
rotatePoint: function pageRotatePoint(x, y) {
3638-
var rotate = this.rotate;
3610+
rotatePoint: function pageRotatePoint(x, y, reverse) {
3611+
var rotate = reverse ? (360 - this.rotate) : this.rotate;
36393612
switch (rotate) {
36403613
case 180:
36413614
return {x: this.width - x, y: y};
36423615
case 90:
36433616
return {x: this.width - y, y: this.height - x};
36443617
case 270:
36453618
return {x: y, y: x};
3619+
case 360:
36463620
case 0:
36473621
default:
36483622
return {x: x, y: this.height - y};

test/driver.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ function nextTask() {
6666
cleanup();
6767

6868
if (currentTaskIdx == manifest.length) {
69-
return done();
69+
done();
70+
return;
7071
}
7172
var task = manifest[currentTaskIdx];
7273
task.round = 0;
@@ -86,7 +87,11 @@ function nextTask() {
8687
}
8788

8889
function isLastPage(task) {
89-
return task.pageNum > task.pdfDoc.numPages || task.pageNum > task.pageLimit;
90+
var limit = task.pageLimit || 0;
91+
if (!limit || limit > task.pdfDoc.numPages)
92+
limit = task.pdfDoc.numPages;
93+
94+
return task.pageNum > limit;
9095
}
9196

9297
function canvasToDataURL() {

0 commit comments

Comments
 (0)