mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 21:01:08 +00:00
Merge inbound to m-c. a=merge
This commit is contained in:
commit
e38fed0cd1
@ -1,5 +1,5 @@
|
||||
This is the PDF.js project output, https://github.com/mozilla/pdf.js
|
||||
|
||||
Current extension version is: 1.8.363
|
||||
Current extension version is: 1.8.384
|
||||
|
||||
Taken from upstream commit: 658fb03d
|
||||
Taken from upstream commit: 8d55e6a0
|
||||
|
@ -80,6 +80,7 @@ function initializeDefaultPreferences() {
|
||||
"defaultZoomValue": "",
|
||||
"sidebarViewOnLoad": 0,
|
||||
"enableHandToolOnLoad": false,
|
||||
"cursorToolOnLoad": 0,
|
||||
"enableWebGL": false,
|
||||
"pdfBugEnabled": false,
|
||||
"disableRange": false,
|
||||
|
@ -39,6 +39,7 @@ var DEFAULT_PREFERENCES =
|
||||
"defaultZoomValue": "",
|
||||
"sidebarViewOnLoad": 0,
|
||||
"enableHandToolOnLoad": false,
|
||||
"cursorToolOnLoad": 0,
|
||||
"enableWebGL": false,
|
||||
"pdfBugEnabled": false,
|
||||
"disableRange": false,
|
||||
|
@ -3405,8 +3405,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
|
||||
}();
|
||||
var version, build;
|
||||
{
|
||||
exports.version = version = '1.8.363';
|
||||
exports.build = build = '658fb03d';
|
||||
exports.version = version = '1.8.384';
|
||||
exports.build = build = '8d55e6a0';
|
||||
}
|
||||
exports.getDocument = getDocument;
|
||||
exports.LoopbackPort = LoopbackPort;
|
||||
@ -4408,8 +4408,8 @@ if (!_util.globalScope.PDFJS) {
|
||||
}
|
||||
var PDFJS = _util.globalScope.PDFJS;
|
||||
{
|
||||
PDFJS.version = '1.8.363';
|
||||
PDFJS.build = '658fb03d';
|
||||
PDFJS.version = '1.8.384';
|
||||
PDFJS.build = '8d55e6a0';
|
||||
}
|
||||
PDFJS.pdfBug = false;
|
||||
if (PDFJS.verbosity !== undefined) {
|
||||
@ -4782,7 +4782,7 @@ function compileType3Glyph(imgData) {
|
||||
return drawOutline;
|
||||
}
|
||||
var CanvasExtraState = function CanvasExtraStateClosure() {
|
||||
function CanvasExtraState(old) {
|
||||
function CanvasExtraState() {
|
||||
this.alphaIsShape = false;
|
||||
this.fontSize = 0;
|
||||
this.fontSizeScale = 1;
|
||||
@ -4807,7 +4807,6 @@ var CanvasExtraState = function CanvasExtraStateClosure() {
|
||||
this.lineWidth = 1;
|
||||
this.activeSMask = null;
|
||||
this.resumeSMaskCtx = null;
|
||||
this.old = old;
|
||||
}
|
||||
CanvasExtraState.prototype = {
|
||||
clone: function CanvasExtraState_clone() {
|
||||
@ -4983,6 +4982,22 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
|
||||
destCtx.lineDashOffset = sourceCtx.lineDashOffset;
|
||||
}
|
||||
}
|
||||
function resetCtxToDefault(ctx) {
|
||||
ctx.strokeStyle = '#000000';
|
||||
ctx.fillStyle = '#000000';
|
||||
ctx.fillRule = 'nonzero';
|
||||
ctx.globalAlpha = 1;
|
||||
ctx.lineWidth = 1;
|
||||
ctx.lineCap = 'butt';
|
||||
ctx.lineJoin = 'miter';
|
||||
ctx.miterLimit = 10;
|
||||
ctx.globalCompositeOperation = 'source-over';
|
||||
ctx.font = '10px sans-serif';
|
||||
if (ctx.setLineDash !== undefined) {
|
||||
ctx.setLineDash([]);
|
||||
ctx.lineDashOffset = 0;
|
||||
}
|
||||
}
|
||||
function composeSMaskBackdrop(bytes, r0, g0, b0) {
|
||||
var length = bytes.length;
|
||||
for (var i = 3; i < length; i += 4) {
|
||||
@ -5076,6 +5091,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
|
||||
this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);
|
||||
}
|
||||
this.ctx.save();
|
||||
resetCtxToDefault(this.ctx);
|
||||
if (transform) {
|
||||
this.ctx.transform.apply(this.ctx, transform);
|
||||
}
|
||||
@ -5937,7 +5953,6 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
|
||||
},
|
||||
beginAnnotations: function CanvasGraphics_beginAnnotations() {
|
||||
this.save();
|
||||
this.current = new CanvasExtraState();
|
||||
if (this.baseTransform) {
|
||||
this.ctx.setTransform.apply(this.ctx, this.baseTransform);
|
||||
}
|
||||
@ -5947,6 +5962,8 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
|
||||
},
|
||||
beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) {
|
||||
this.save();
|
||||
resetCtxToDefault(this.ctx);
|
||||
this.current = new CanvasExtraState();
|
||||
if ((0, _util.isArray)(rect) && rect.length === 4) {
|
||||
var width = rect[2] - rect[0];
|
||||
var height = rect[3] - rect[1];
|
||||
@ -6723,8 +6740,8 @@ exports.TilingPattern = TilingPattern;
|
||||
"use strict";
|
||||
|
||||
|
||||
var pdfjsVersion = '1.8.363';
|
||||
var pdfjsBuild = '658fb03d';
|
||||
var pdfjsVersion = '1.8.384';
|
||||
var pdfjsBuild = '8d55e6a0';
|
||||
var pdfjsSharedUtil = __w_pdfjs_require__(0);
|
||||
var pdfjsDisplayGlobal = __w_pdfjs_require__(8);
|
||||
var pdfjsDisplayAPI = __w_pdfjs_require__(3);
|
||||
|
@ -21842,9 +21842,9 @@ var Catalog = function CatalogClosure() {
|
||||
remoteDest = remoteDest.name;
|
||||
}
|
||||
if (isString(url)) {
|
||||
var baseUrl = url.split('#')[0];
|
||||
let baseUrl = url.split('#')[0];
|
||||
if (isString(remoteDest)) {
|
||||
url = baseUrl + '#' + (/^\d+$/.test(remoteDest) ? 'nameddest=' : '') + remoteDest;
|
||||
url = baseUrl + '#' + remoteDest;
|
||||
} else if (isArray(remoteDest)) {
|
||||
url = baseUrl + '#' + JSON.stringify(remoteDest);
|
||||
}
|
||||
@ -25065,23 +25065,31 @@ var CMap = function CMapClosure() {
|
||||
return this._map[code] !== undefined;
|
||||
},
|
||||
forEach(callback) {
|
||||
var map = this._map;
|
||||
var length = map.length;
|
||||
var i;
|
||||
let map = this._map;
|
||||
let length = map.length;
|
||||
if (length <= 0x10000) {
|
||||
for (i = 0; i < length; i++) {
|
||||
for (let i = 0; i < length; i++) {
|
||||
if (map[i] !== undefined) {
|
||||
callback(i, map[i]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i in this._map) {
|
||||
for (let i in map) {
|
||||
callback(i, map[i]);
|
||||
}
|
||||
}
|
||||
},
|
||||
charCodeOf(value) {
|
||||
return this._map.indexOf(value);
|
||||
let map = this._map;
|
||||
if (map.length <= 0x10000) {
|
||||
return map.indexOf(value);
|
||||
}
|
||||
for (let charCode in map) {
|
||||
if (map[charCode] === value) {
|
||||
return charCode | 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
},
|
||||
getMap() {
|
||||
return this._map;
|
||||
@ -27138,8 +27146,17 @@ var ToUnicodeMap = function ToUnicodeMapClosure() {
|
||||
get(i) {
|
||||
return this._map[i];
|
||||
},
|
||||
charCodeOf(v) {
|
||||
return this._map.indexOf(v);
|
||||
charCodeOf(value) {
|
||||
let map = this._map;
|
||||
if (map.length <= 0x10000) {
|
||||
return map.indexOf(value);
|
||||
}
|
||||
for (let charCode in map) {
|
||||
if (map[charCode] === value) {
|
||||
return charCode | 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
},
|
||||
amend(map) {
|
||||
for (var charCode in map) {
|
||||
@ -27287,7 +27304,7 @@ var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() {
|
||||
};
|
||||
return OpenTypeFileBuilder;
|
||||
}();
|
||||
var ProblematicCharRanges = new Int32Array([0x0000, 0x0020, 0x007F, 0x00A1, 0x00AD, 0x00AE, 0x0600, 0x0780, 0x08A0, 0x10A0, 0x1780, 0x1800, 0x1C00, 0x1C50, 0x2000, 0x2010, 0x2011, 0x2012, 0x2028, 0x2030, 0x205F, 0x2070, 0x25CC, 0x25CD, 0x3000, 0x3001, 0xAA60, 0xAA80, 0xFFF0, 0x10000]);
|
||||
var ProblematicCharRanges = new Int32Array([0x0000, 0x0020, 0x007F, 0x00A1, 0x00AD, 0x00AE, 0x0600, 0x0780, 0x08A0, 0x10A0, 0x1780, 0x1800, 0x1C00, 0x1C50, 0x2000, 0x2010, 0x2011, 0x2012, 0x2028, 0x2030, 0x205F, 0x2070, 0x25CC, 0x25CD, 0x3000, 0x3001, 0x3164, 0x3165, 0xAA60, 0xAA80, 0xFFF0, 0x10000]);
|
||||
var Font = function FontClosure() {
|
||||
function Font(name, file, properties) {
|
||||
var charCode, glyphName, unicode;
|
||||
@ -36645,8 +36662,8 @@ exports.Type1Parser = Type1Parser;
|
||||
"use strict";
|
||||
|
||||
|
||||
var pdfjsVersion = '1.8.363';
|
||||
var pdfjsBuild = '658fb03d';
|
||||
var pdfjsVersion = '1.8.384';
|
||||
var pdfjsBuild = '8d55e6a0';
|
||||
var pdfjsCoreWorker = __w_pdfjs_require__(17);
|
||||
;
|
||||
exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 461 B |
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
@ -1169,6 +1169,10 @@ html[dir="rtl"] .secondaryToolbarButton > span {
|
||||
content: url(images/secondaryToolbarButton-rotateCw.png);
|
||||
}
|
||||
|
||||
.secondaryToolbarButton.selectTool::before {
|
||||
content: url(images/secondaryToolbarButton-selectTool.png);
|
||||
}
|
||||
|
||||
.secondaryToolbarButton.handTool::before {
|
||||
content: url(images/secondaryToolbarButton-handTool.png);
|
||||
}
|
||||
@ -1874,6 +1878,10 @@ html[dir='rtl'] #documentPropertiesOverlay .row > * {
|
||||
content: url(images/secondaryToolbarButton-rotateCw@2x.png);
|
||||
}
|
||||
|
||||
.secondaryToolbarButton.selectTool::before {
|
||||
content: url(images/secondaryToolbarButton-selectTool@2x.png);
|
||||
}
|
||||
|
||||
.secondaryToolbarButton.handTool::before {
|
||||
content: url(images/secondaryToolbarButton-handTool@2x.png);
|
||||
}
|
||||
|
@ -139,13 +139,16 @@ See https://github.com/adobe-type-tools/cmap-resources
|
||||
|
||||
<div class="horizontalToolbarSeparator"></div>
|
||||
|
||||
<button id="toggleHandTool" class="secondaryToolbarButton handTool" title="Enable hand tool" tabindex="60" data-l10n-id="hand_tool_enable">
|
||||
<span data-l10n-id="hand_tool_enable_label">Enable hand tool</span>
|
||||
<button id="cursorSelectTool" class="secondaryToolbarButton selectTool toggled" title="Enable Text Selection Tool" tabindex="60" data-l10n-id="cursor_text_select_tool">
|
||||
<span data-l10n-id="cursor_text_select_tool_label">Text Selection Tool</span>
|
||||
</button>
|
||||
<button id="cursorHandTool" class="secondaryToolbarButton handTool" title="Enable Hand Tool" tabindex="61" data-l10n-id="cursor_hand_tool">
|
||||
<span data-l10n-id="cursor_hand_tool_label">Hand Tool</span>
|
||||
</button>
|
||||
|
||||
<div class="horizontalToolbarSeparator"></div>
|
||||
|
||||
<button id="documentProperties" class="secondaryToolbarButton documentProperties" title="Document Properties…" tabindex="61" data-l10n-id="document_properties">
|
||||
<button id="documentProperties" class="secondaryToolbarButton documentProperties" title="Document Properties…" tabindex="62" data-l10n-id="document_properties">
|
||||
<span data-l10n-id="document_properties_label">Document Properties…</span>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -775,6 +775,8 @@ var _ui_utils = __webpack_require__(0);
|
||||
|
||||
var _pdfjs = __webpack_require__(1);
|
||||
|
||||
var _pdf_cursor_tools = __webpack_require__(7);
|
||||
|
||||
var _pdf_rendering_queue = __webpack_require__(3);
|
||||
|
||||
var _pdf_sidebar = __webpack_require__(21);
|
||||
@ -783,8 +785,6 @@ var _pdf_viewer = __webpack_require__(24);
|
||||
|
||||
var _dom_events = __webpack_require__(2);
|
||||
|
||||
var _hand_tool = __webpack_require__(12);
|
||||
|
||||
var _overlay_manager = __webpack_require__(5);
|
||||
|
||||
var _password_prompt = __webpack_require__(13);
|
||||
@ -795,7 +795,7 @@ var _pdf_document_properties = __webpack_require__(15);
|
||||
|
||||
var _pdf_find_bar = __webpack_require__(16);
|
||||
|
||||
var _pdf_find_controller = __webpack_require__(7);
|
||||
var _pdf_find_controller = __webpack_require__(8);
|
||||
|
||||
var _pdf_history = __webpack_require__(17);
|
||||
|
||||
@ -859,6 +859,7 @@ var PDFViewerApplication = {
|
||||
pdfSidebar: null,
|
||||
pdfOutlineViewer: null,
|
||||
pdfAttachmentViewer: null,
|
||||
pdfCursorTools: null,
|
||||
store: null,
|
||||
downloadManager: null,
|
||||
preferences: null,
|
||||
@ -1013,12 +1014,12 @@ var PDFViewerApplication = {
|
||||
findBarConfig.eventBus = eventBus;
|
||||
this.findBar = new _pdf_find_bar.PDFFindBar(findBarConfig);
|
||||
this.overlayManager = _overlay_manager.OverlayManager;
|
||||
this.handTool = new _hand_tool.HandTool({
|
||||
this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties);
|
||||
this.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({
|
||||
container,
|
||||
eventBus,
|
||||
preferences: this.preferences
|
||||
});
|
||||
this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties);
|
||||
this.toolbar = new _toolbar.Toolbar(appConfig.toolbar, container, eventBus);
|
||||
this.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus);
|
||||
if (this.supportsFullscreen) {
|
||||
@ -2197,10 +2198,11 @@ function webViewerKeyDown(evt) {
|
||||
ensureViewerFocused = true;
|
||||
}
|
||||
break;
|
||||
case 83:
|
||||
PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT);
|
||||
break;
|
||||
case 72:
|
||||
if (!isViewerInPresentationMode) {
|
||||
PDFViewerApplication.handTool.toggle();
|
||||
}
|
||||
PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND);
|
||||
break;
|
||||
case 82:
|
||||
PDFViewerApplication.rotatePages(90);
|
||||
@ -2377,10 +2379,6 @@ var _dom_events = __webpack_require__(2);
|
||||
|
||||
var _ui_utils = __webpack_require__(0);
|
||||
|
||||
var PageNumberRegExp = /^\d+$/;
|
||||
function isPageNumber(str) {
|
||||
return PageNumberRegExp.test(str);
|
||||
}
|
||||
var PDFLinkService = function PDFLinkServiceClosure() {
|
||||
function PDFLinkService(options) {
|
||||
options = options || {};
|
||||
@ -2466,12 +2464,12 @@ var PDFLinkService = function PDFLinkServiceClosure() {
|
||||
goToDestination(destination[0]);
|
||||
});
|
||||
},
|
||||
getDestinationHash: function PDFLinkService_getDestinationHash(dest) {
|
||||
getDestinationHash(dest) {
|
||||
if (typeof dest === 'string') {
|
||||
return this.getAnchorUrl('#' + (isPageNumber(dest) ? 'nameddest=' : '') + escape(dest));
|
||||
return this.getAnchorUrl('#' + escape(dest));
|
||||
}
|
||||
if (dest instanceof Array) {
|
||||
var str = JSON.stringify(dest);
|
||||
let str = JSON.stringify(dest);
|
||||
return this.getAnchorUrl('#' + escape(str));
|
||||
}
|
||||
return this.getAnchorUrl('');
|
||||
@ -2692,6 +2690,110 @@ exports.SimpleLinkService = SimpleLinkService;
|
||||
"use strict";
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.PDFCursorTools = exports.CursorTool = undefined;
|
||||
|
||||
var _grab_to_pan = __webpack_require__(12);
|
||||
|
||||
const CursorTool = {
|
||||
SELECT: 0,
|
||||
HAND: 1,
|
||||
ZOOM: 2
|
||||
};
|
||||
class PDFCursorTools {
|
||||
constructor({ container, eventBus, preferences }) {
|
||||
this.container = container;
|
||||
this.eventBus = eventBus;
|
||||
this.active = CursorTool.SELECT;
|
||||
this.activeBeforePresentationMode = null;
|
||||
this.handTool = new _grab_to_pan.GrabToPan({ element: this.container });
|
||||
this._addEventListeners();
|
||||
Promise.all([preferences.get('cursorToolOnLoad'), preferences.get('enableHandToolOnLoad')]).then(([cursorToolPref, handToolPref]) => {
|
||||
if (handToolPref === true) {
|
||||
preferences.set('enableHandToolOnLoad', false);
|
||||
if (cursorToolPref === CursorTool.SELECT) {
|
||||
cursorToolPref = CursorTool.HAND;
|
||||
preferences.set('cursorToolOnLoad', cursorToolPref).catch(() => {});
|
||||
}
|
||||
}
|
||||
this.switchTool(cursorToolPref);
|
||||
}).catch(() => {});
|
||||
}
|
||||
get activeTool() {
|
||||
return this.active;
|
||||
}
|
||||
switchTool(tool) {
|
||||
if (this.activeBeforePresentationMode !== null) {
|
||||
return;
|
||||
}
|
||||
if (tool === this.active) {
|
||||
return;
|
||||
}
|
||||
let disableActiveTool = () => {
|
||||
switch (this.active) {
|
||||
case CursorTool.SELECT:
|
||||
break;
|
||||
case CursorTool.HAND:
|
||||
this.handTool.deactivate();
|
||||
break;
|
||||
case CursorTool.ZOOM:
|
||||
}
|
||||
};
|
||||
switch (tool) {
|
||||
case CursorTool.SELECT:
|
||||
disableActiveTool();
|
||||
break;
|
||||
case CursorTool.HAND:
|
||||
disableActiveTool();
|
||||
this.handTool.activate();
|
||||
break;
|
||||
case CursorTool.ZOOM:
|
||||
default:
|
||||
console.error(`switchTool: "${tool}" is an unsupported value.`);
|
||||
return;
|
||||
}
|
||||
this.active = tool;
|
||||
this._dispatchEvent();
|
||||
}
|
||||
_dispatchEvent() {
|
||||
this.eventBus.dispatch('cursortoolchanged', {
|
||||
source: this,
|
||||
tool: this.active
|
||||
});
|
||||
}
|
||||
_addEventListeners() {
|
||||
this.eventBus.on('switchcursortool', evt => {
|
||||
this.switchTool(evt.tool);
|
||||
});
|
||||
this.eventBus.on('presentationmodechanged', evt => {
|
||||
if (evt.switchInProgress) {
|
||||
return;
|
||||
}
|
||||
let previouslyActive;
|
||||
if (evt.active) {
|
||||
previouslyActive = this.active;
|
||||
this.switchTool(CursorTool.SELECT);
|
||||
this.activeBeforePresentationMode = previouslyActive;
|
||||
} else {
|
||||
previouslyActive = this.activeBeforePresentationMode;
|
||||
this.activeBeforePresentationMode = null;
|
||||
this.switchTool(previouslyActive);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.CursorTool = CursorTool;
|
||||
exports.PDFCursorTools = PDFCursorTools;
|
||||
|
||||
/***/ }),
|
||||
/* 8 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
@ -3050,7 +3152,7 @@ exports.FindStates = FindStates;
|
||||
exports.PDFFindController = PDFFindController;
|
||||
|
||||
/***/ }),
|
||||
/* 8 */
|
||||
/* 9 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
@ -3136,7 +3238,7 @@ _app.PDFPrintServiceFactory.instance = {
|
||||
exports.FirefoxPrintService = FirefoxPrintService;
|
||||
|
||||
/***/ }),
|
||||
/* 9 */
|
||||
/* 10 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
@ -3360,7 +3462,7 @@ exports.DownloadManager = DownloadManager;
|
||||
exports.FirefoxCom = FirefoxCom;
|
||||
|
||||
/***/ }),
|
||||
/* 10 */
|
||||
/* 11 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
@ -3435,7 +3537,7 @@ exports.AnnotationLayerBuilder = AnnotationLayerBuilder;
|
||||
exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory;
|
||||
|
||||
/***/ }),
|
||||
/* 11 */
|
||||
/* 12 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
@ -3575,72 +3677,6 @@ function isLeftMouseReleased(event) {
|
||||
}
|
||||
exports.GrabToPan = GrabToPan;
|
||||
|
||||
/***/ }),
|
||||
/* 12 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.HandTool = undefined;
|
||||
|
||||
var _grab_to_pan = __webpack_require__(11);
|
||||
|
||||
var _ui_utils = __webpack_require__(0);
|
||||
|
||||
class HandTool {
|
||||
constructor({ container, eventBus, preferences }) {
|
||||
this.container = container;
|
||||
this.eventBus = eventBus;
|
||||
this.wasActive = false;
|
||||
this.handTool = new _grab_to_pan.GrabToPan({
|
||||
element: this.container,
|
||||
onActiveChanged: isActive => {
|
||||
this.eventBus.dispatch('handtoolchanged', { isActive });
|
||||
}
|
||||
});
|
||||
this.eventBus.on('togglehandtool', this.toggle.bind(this));
|
||||
let enableOnLoad = preferences.get('enableHandToolOnLoad');
|
||||
Promise.all([_ui_utils.localized, enableOnLoad]).then(values => {
|
||||
if (values[1] === true) {
|
||||
this.handTool.activate();
|
||||
}
|
||||
}).catch(function (reason) {});
|
||||
this.eventBus.on('presentationmodechanged', evt => {
|
||||
if (evt.switchInProgress) {
|
||||
return;
|
||||
}
|
||||
if (evt.active) {
|
||||
this.enterPresentationMode();
|
||||
} else {
|
||||
this.exitPresentationMode();
|
||||
}
|
||||
});
|
||||
}
|
||||
get isActive() {
|
||||
return !!this.handTool.active;
|
||||
}
|
||||
toggle() {
|
||||
this.handTool.toggle();
|
||||
}
|
||||
enterPresentationMode() {
|
||||
if (this.isActive) {
|
||||
this.wasActive = true;
|
||||
this.handTool.deactivate();
|
||||
}
|
||||
}
|
||||
exitPresentationMode() {
|
||||
if (this.wasActive) {
|
||||
this.wasActive = false;
|
||||
this.handTool.activate();
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.HandTool = HandTool;
|
||||
|
||||
/***/ }),
|
||||
/* 13 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
@ -3996,7 +4032,7 @@ Object.defineProperty(exports, "__esModule", {
|
||||
});
|
||||
exports.PDFFindBar = undefined;
|
||||
|
||||
var _pdf_find_controller = __webpack_require__(7);
|
||||
var _pdf_find_controller = __webpack_require__(8);
|
||||
|
||||
var _ui_utils = __webpack_require__(0);
|
||||
|
||||
@ -6130,7 +6166,7 @@ var _ui_utils = __webpack_require__(0);
|
||||
|
||||
var _pdf_rendering_queue = __webpack_require__(3);
|
||||
|
||||
var _annotation_layer_builder = __webpack_require__(10);
|
||||
var _annotation_layer_builder = __webpack_require__(11);
|
||||
|
||||
var _dom_events = __webpack_require__(2);
|
||||
|
||||
@ -6816,6 +6852,7 @@ function getDefaultPreferences() {
|
||||
"defaultZoomValue": "",
|
||||
"sidebarViewOnLoad": 0,
|
||||
"enableHandToolOnLoad": false,
|
||||
"cursorToolOnLoad": 0,
|
||||
"enableWebGL": false,
|
||||
"pdfBugEnabled": false,
|
||||
"disableRange": false,
|
||||
@ -6929,6 +6966,8 @@ Object.defineProperty(exports, "__esModule", {
|
||||
});
|
||||
exports.SecondaryToolbar = undefined;
|
||||
|
||||
var _pdf_cursor_tools = __webpack_require__(7);
|
||||
|
||||
var _ui_utils = __webpack_require__(0);
|
||||
|
||||
class SecondaryToolbar {
|
||||
@ -6973,8 +7012,14 @@ class SecondaryToolbar {
|
||||
eventName: 'rotateccw',
|
||||
close: false
|
||||
}, {
|
||||
element: options.toggleHandToolButton,
|
||||
eventName: 'togglehandtool',
|
||||
element: options.cursorSelectToolButton,
|
||||
eventName: 'switchcursortool',
|
||||
eventDetails: { tool: _pdf_cursor_tools.CursorTool.SELECT },
|
||||
close: true
|
||||
}, {
|
||||
element: options.cursorHandToolButton,
|
||||
eventName: 'switchcursortool',
|
||||
eventDetails: { tool: _pdf_cursor_tools.CursorTool.HAND },
|
||||
close: true
|
||||
}, {
|
||||
element: options.documentPropertiesButton,
|
||||
@ -6994,7 +7039,7 @@ class SecondaryToolbar {
|
||||
this.previousContainerHeight = null;
|
||||
this.reset();
|
||||
this._bindClickListeners();
|
||||
this._bindHandToolListener(options.toggleHandToolButton);
|
||||
this._bindCursorToolsListener(options);
|
||||
this.eventBus.on('resize', this._setMaxHeight.bind(this));
|
||||
}
|
||||
get isOpen() {
|
||||
@ -7022,10 +7067,14 @@ class SecondaryToolbar {
|
||||
_bindClickListeners() {
|
||||
this.toggleButton.addEventListener('click', this.toggle.bind(this));
|
||||
for (let button in this.buttons) {
|
||||
let { element, eventName, close } = this.buttons[button];
|
||||
let { element, eventName, close, eventDetails } = this.buttons[button];
|
||||
element.addEventListener('click', evt => {
|
||||
if (eventName !== null) {
|
||||
this.eventBus.dispatch(eventName, { source: this });
|
||||
let details = { source: this };
|
||||
for (let property in eventDetails) {
|
||||
details[property] = eventDetails[property];
|
||||
}
|
||||
this.eventBus.dispatch(eventName, details);
|
||||
}
|
||||
if (close) {
|
||||
this.close();
|
||||
@ -7033,19 +7082,17 @@ class SecondaryToolbar {
|
||||
});
|
||||
}
|
||||
}
|
||||
_bindHandToolListener(toggleHandToolButton) {
|
||||
let isHandToolActive = false;
|
||||
this.eventBus.on('handtoolchanged', function (evt) {
|
||||
if (isHandToolActive === evt.isActive) {
|
||||
return;
|
||||
}
|
||||
isHandToolActive = evt.isActive;
|
||||
if (isHandToolActive) {
|
||||
toggleHandToolButton.title = _ui_utils.mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool');
|
||||
toggleHandToolButton.firstElementChild.textContent = _ui_utils.mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool');
|
||||
} else {
|
||||
toggleHandToolButton.title = _ui_utils.mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool');
|
||||
toggleHandToolButton.firstElementChild.textContent = _ui_utils.mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool');
|
||||
_bindCursorToolsListener(buttons) {
|
||||
this.eventBus.on('cursortoolchanged', function (evt) {
|
||||
buttons.cursorSelectToolButton.classList.remove('toggled');
|
||||
buttons.cursorHandToolButton.classList.remove('toggled');
|
||||
switch (evt.tool) {
|
||||
case _pdf_cursor_tools.CursorTool.SELECT:
|
||||
buttons.cursorSelectToolButton.classList.add('toggled');
|
||||
break;
|
||||
case _pdf_cursor_tools.CursorTool.HAND:
|
||||
buttons.cursorHandToolButton.classList.add('toggled');
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -7635,8 +7682,8 @@ var pdfjsWebApp;
|
||||
pdfjsWebApp = __webpack_require__(4);
|
||||
}
|
||||
{
|
||||
__webpack_require__(10);
|
||||
__webpack_require__(9);
|
||||
__webpack_require__(8);
|
||||
}
|
||||
;
|
||||
;
|
||||
@ -7678,7 +7725,8 @@ function getViewerConfiguration() {
|
||||
lastPageButton: document.getElementById('lastPage'),
|
||||
pageRotateCwButton: document.getElementById('pageRotateCw'),
|
||||
pageRotateCcwButton: document.getElementById('pageRotateCcw'),
|
||||
toggleHandToolButton: document.getElementById('toggleHandTool'),
|
||||
cursorSelectToolButton: document.getElementById('cursorSelectTool'),
|
||||
cursorHandToolButton: document.getElementById('cursorHandTool'),
|
||||
documentPropertiesButton: document.getElementById('documentProperties')
|
||||
},
|
||||
fullscreen: {
|
||||
|
@ -60,10 +60,10 @@ page_rotate_ccw.title=Rotate Counterclockwise
|
||||
page_rotate_ccw.label=Rotate Counterclockwise
|
||||
page_rotate_ccw_label=Rotate Counterclockwise
|
||||
|
||||
hand_tool_enable.title=Enable hand tool
|
||||
hand_tool_enable_label=Enable hand tool
|
||||
hand_tool_disable.title=Disable hand tool
|
||||
hand_tool_disable_label=Disable hand tool
|
||||
cursor_text_select_tool.title=Enable Text Selection Tool
|
||||
cursor_text_select_tool_label=Text Selection Tool
|
||||
cursor_hand_tool.title=Enable Hand Tool
|
||||
cursor_hand_tool_label=Hand Tool
|
||||
|
||||
# Document properties dialog box
|
||||
document_properties.title=Document Properties…
|
||||
|
@ -1,6 +1,6 @@
|
||||
/******************************************************************************
|
||||
** This file is an amalgamation of many separate C source files from SQLite
|
||||
** version 3.19.1. By combining all the individual C code files into this
|
||||
** version 3.19.2. By combining all the individual C code files into this
|
||||
** single large file, the entire code can be compiled as a single translation
|
||||
** unit. This allows many compilers to do optimizations that would not be
|
||||
** possible if the files were compiled separately. Performance improvements
|
||||
@ -398,9 +398,9 @@ extern "C" {
|
||||
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
||||
** [sqlite_version()] and [sqlite_source_id()].
|
||||
*/
|
||||
#define SQLITE_VERSION "3.19.1"
|
||||
#define SQLITE_VERSION_NUMBER 3019001
|
||||
#define SQLITE_SOURCE_ID "2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86"
|
||||
#define SQLITE_VERSION "3.19.2"
|
||||
#define SQLITE_VERSION_NUMBER 3019002
|
||||
#define SQLITE_SOURCE_ID "2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9"
|
||||
|
||||
/*
|
||||
** CAPI3REF: Run-Time Library Version Numbers
|
||||
@ -92632,10 +92632,12 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
|
||||
testcase( pExpr->op==TK_AGG_COLUMN );
|
||||
if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){
|
||||
return WRC_Continue;
|
||||
}else{
|
||||
pWalker->eCode = 0;
|
||||
return WRC_Abort;
|
||||
}
|
||||
/* Fall through */
|
||||
case TK_IF_NULL_ROW:
|
||||
testcase( pExpr->op==TK_IF_NULL_ROW );
|
||||
pWalker->eCode = 0;
|
||||
return WRC_Abort;
|
||||
case TK_VARIABLE:
|
||||
if( pWalker->eCode==5 ){
|
||||
/* Silently convert bound parameters that appear inside of CREATE
|
||||
@ -120024,6 +120026,14 @@ static int flattenSubquery(
|
||||
return 0; /* Restriction (3) */
|
||||
}
|
||||
}
|
||||
#ifdef SQLITE_EXTRA_IFNULLROW
|
||||
else if( iFrom>0 && !isAgg ){
|
||||
/* Setting isLeftJoin to -1 causes OP_IfNullRow opcodes to be generated for
|
||||
** every reference to any result column from subquery in a join, even though
|
||||
** they are not necessary. This will stress-test the OP_IfNullRow opcode. */
|
||||
isLeftJoin = -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Restriction 17: If the sub-query is a compound SELECT, then it must
|
||||
** use only the UNION ALL operator. And none of the simple select queries
|
||||
@ -120277,7 +120287,7 @@ static int flattenSubquery(
|
||||
pSub->pOrderBy = 0;
|
||||
}
|
||||
pWhere = sqlite3ExprDup(db, pSub->pWhere, 0);
|
||||
if( isLeftJoin ){
|
||||
if( isLeftJoin>0 ){
|
||||
setJoinExpr(pWhere, iNewParent);
|
||||
}
|
||||
if( subqueryIsAgg ){
|
||||
@ -130286,11 +130296,11 @@ SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){
|
||||
Bitmask mask;
|
||||
if( p==0 ) return 0;
|
||||
if( p->op==TK_COLUMN ){
|
||||
mask = sqlite3WhereGetMask(pMaskSet, p->iTable);
|
||||
return mask;
|
||||
return sqlite3WhereGetMask(pMaskSet, p->iTable);
|
||||
}
|
||||
mask = (p->op==TK_IF_NULL_ROW) ? sqlite3WhereGetMask(pMaskSet, p->iTable) : 0;
|
||||
assert( !ExprHasProperty(p, EP_TokenOnly) );
|
||||
mask = p->pRight ? sqlite3WhereExprUsage(pMaskSet, p->pRight) : 0;
|
||||
if( p->pRight ) mask |= sqlite3WhereExprUsage(pMaskSet, p->pRight);
|
||||
if( p->pLeft ) mask |= sqlite3WhereExprUsage(pMaskSet, p->pLeft);
|
||||
if( ExprHasProperty(p, EP_xIsSelect) ){
|
||||
mask |= exprSelectUsage(pMaskSet, p->x.pSelect);
|
||||
@ -199046,7 +199056,7 @@ static void fts5SourceIdFunc(
|
||||
){
|
||||
assert( nArg==0 );
|
||||
UNUSED_PARAM2(nArg, apUnused);
|
||||
sqlite3_result_text(pCtx, "fts5: 2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86", -1, SQLITE_TRANSIENT);
|
||||
sqlite3_result_text(pCtx, "fts5: 2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9", -1, SQLITE_TRANSIENT);
|
||||
}
|
||||
|
||||
static int fts5Init(sqlite3 *db){
|
||||
|
@ -121,9 +121,9 @@ extern "C" {
|
||||
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
||||
** [sqlite_version()] and [sqlite_source_id()].
|
||||
*/
|
||||
#define SQLITE_VERSION "3.19.1"
|
||||
#define SQLITE_VERSION_NUMBER 3019001
|
||||
#define SQLITE_SOURCE_ID "2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86"
|
||||
#define SQLITE_VERSION "3.19.2"
|
||||
#define SQLITE_VERSION_NUMBER 3019002
|
||||
#define SQLITE_SOURCE_ID "2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9"
|
||||
|
||||
/*
|
||||
** CAPI3REF: Run-Time Library Version Numbers
|
||||
|
@ -258,9 +258,9 @@ Converter.prototype = {
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" href=\"css/main.css\">" +
|
||||
"<script data-main=\"viewer-config\" src=\"lib/require.js\"></script>" +
|
||||
"</head><body>" +
|
||||
"<div id=\"content\"></div>" +
|
||||
"<div id=\"json\">" + this.htmlEncode(json) + "</div>" +
|
||||
"<div id=\"headers\">" + this.htmlEncode(headers) + "</div>" +
|
||||
"<div id=\"content\">" +
|
||||
"<pre id=\"json\">" + this.htmlEncode(json) + "</pre>" +
|
||||
"</div><div id=\"headers\">" + this.htmlEncode(headers) + "</div>" +
|
||||
"</body></html>";
|
||||
},
|
||||
|
||||
|
@ -15,7 +15,6 @@ body {
|
||||
background-color: var(--theme-body-background);
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
*:focus {
|
||||
@ -28,7 +27,14 @@ pre {
|
||||
font-family: var(--monospace-font-family);
|
||||
}
|
||||
|
||||
#json,
|
||||
#content {
|
||||
display: flow-root;
|
||||
}
|
||||
|
||||
#json {
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
#headers {
|
||||
display: none;
|
||||
}
|
||||
|
@ -663,7 +663,7 @@ Element::GetStyledFrame()
|
||||
}
|
||||
|
||||
nsIScrollableFrame*
|
||||
Element::GetScrollFrame(nsIFrame **aStyledFrame, bool aFlushLayout)
|
||||
Element::GetScrollFrame(nsIFrame **aStyledFrame, FlushType aFlushType)
|
||||
{
|
||||
// it isn't clear what to return for SVG nodes, so just return nothing
|
||||
if (IsSVGElement()) {
|
||||
@ -673,9 +673,8 @@ Element::GetScrollFrame(nsIFrame **aStyledFrame, bool aFlushLayout)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Inline version of GetStyledFrame to use FlushType::None if needed.
|
||||
nsIFrame* frame =
|
||||
GetPrimaryFrame(aFlushLayout ? FlushType::Layout : FlushType::None);
|
||||
// Inline version of GetStyledFrame to use the given FlushType.
|
||||
nsIFrame* frame = GetPrimaryFrame(aFlushType);
|
||||
if (frame) {
|
||||
frame = nsLayoutUtils::GetStyleFrame(frame);
|
||||
}
|
||||
@ -683,30 +682,30 @@ Element::GetScrollFrame(nsIFrame **aStyledFrame, bool aFlushLayout)
|
||||
if (aStyledFrame) {
|
||||
*aStyledFrame = frame;
|
||||
}
|
||||
if (!frame) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// menu frames implement GetScrollTargetFrame but we don't want
|
||||
// to use it here. Similar for comboboxes.
|
||||
LayoutFrameType type = frame->Type();
|
||||
if (type != LayoutFrameType::Menu &&
|
||||
type != LayoutFrameType::ComboboxControl) {
|
||||
nsIScrollableFrame *scrollFrame = frame->GetScrollTargetFrame();
|
||||
if (scrollFrame)
|
||||
return scrollFrame;
|
||||
if (frame) {
|
||||
// menu frames implement GetScrollTargetFrame but we don't want
|
||||
// to use it here. Similar for comboboxes.
|
||||
LayoutFrameType type = frame->Type();
|
||||
if (type != LayoutFrameType::Menu &&
|
||||
type != LayoutFrameType::ComboboxControl) {
|
||||
nsIScrollableFrame *scrollFrame = frame->GetScrollTargetFrame();
|
||||
if (scrollFrame) {
|
||||
MOZ_ASSERT(!OwnerDoc()->IsScrollingElement(this),
|
||||
"How can we have a scrollframe if we're the "
|
||||
"scrollingElement for our document?");
|
||||
return scrollFrame;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nsIDocument* doc = OwnerDoc();
|
||||
bool quirksMode = doc->GetCompatibilityMode() == eCompatibility_NavQuirks;
|
||||
Element* elementWithRootScrollInfo =
|
||||
quirksMode ? doc->GetBodyElement() : doc->GetRootElement();
|
||||
if (this == elementWithRootScrollInfo) {
|
||||
// In quirks mode, the scroll info for the body element should map to the
|
||||
// root scrollable frame.
|
||||
// In strict mode, the scroll info for the root element should map to the
|
||||
// the root scrollable frame.
|
||||
return frame->PresContext()->PresShell()->GetRootScrollFrameAsScrollable();
|
||||
// Note: This IsScrollingElement() call can flush frames, if we're the body of
|
||||
// a quirks mode document.
|
||||
if (OwnerDoc()->IsScrollingElement(this)) {
|
||||
// Our scroll info should map to the root scrollable frame if there is one.
|
||||
if (nsIPresShell* shell = doc->GetShell()) {
|
||||
return shell->GetRootScrollFrameAsScrollable();
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
@ -856,7 +855,15 @@ Element::ScrollTop()
|
||||
void
|
||||
Element::SetScrollTop(int32_t aScrollTop)
|
||||
{
|
||||
nsIScrollableFrame* sf = GetScrollFrame();
|
||||
// When aScrollTop is 0, we don't need to flush layout to scroll to that
|
||||
// point; we know 0 is always in range. At least we think so... But we do
|
||||
// need to flush frames so we ensure we find the right scrollable frame if
|
||||
// there is one.
|
||||
//
|
||||
// If aScrollTop is nonzero, we need to flush layout because we need to figure
|
||||
// out what our real scrollTopMax is.
|
||||
FlushType flushType = aScrollTop == 0 ? FlushType::Frames : FlushType::Layout;
|
||||
nsIScrollableFrame* sf = GetScrollFrame(nullptr, flushType);
|
||||
if (sf) {
|
||||
nsIScrollableFrame::ScrollMode scrollMode = nsIScrollableFrame::INSTANT;
|
||||
if (sf->GetScrollbarStyles().mScrollBehavior == NS_STYLE_SCROLL_BEHAVIOR_SMOOTH) {
|
||||
@ -878,6 +885,9 @@ Element::ScrollLeft()
|
||||
void
|
||||
Element::SetScrollLeft(int32_t aScrollLeft)
|
||||
{
|
||||
// We can't assume things here based on the value of aScrollLeft, because
|
||||
// depending on our direction and layout 0 may or may not be in our scroll
|
||||
// range. So we need to flush layout no matter what.
|
||||
nsIScrollableFrame* sf = GetScrollFrame();
|
||||
if (sf) {
|
||||
nsIScrollableFrame::ScrollMode scrollMode = nsIScrollableFrame::INSTANT;
|
||||
@ -895,7 +905,7 @@ Element::SetScrollLeft(int32_t aScrollLeft)
|
||||
bool
|
||||
Element::ScrollByNoFlush(int32_t aDx, int32_t aDy)
|
||||
{
|
||||
nsIScrollableFrame* sf = GetScrollFrame(nullptr, false);
|
||||
nsIScrollableFrame* sf = GetScrollFrame(nullptr, FlushType::None);
|
||||
if (!sf) {
|
||||
return false;
|
||||
}
|
||||
@ -917,7 +927,7 @@ Element::ScrollByNoFlush(int32_t aDx, int32_t aDy)
|
||||
void
|
||||
Element::MozScrollSnap()
|
||||
{
|
||||
nsIScrollableFrame* sf = GetScrollFrame(nullptr, false);
|
||||
nsIScrollableFrame* sf = GetScrollFrame(nullptr, FlushType::None);
|
||||
if (sf) {
|
||||
sf->ScrollSnap();
|
||||
}
|
||||
|
@ -1593,7 +1593,7 @@ private:
|
||||
nsRect GetClientAreaRect();
|
||||
|
||||
nsIScrollableFrame* GetScrollFrame(nsIFrame **aStyledFrame = nullptr,
|
||||
bool aFlushLayout = true);
|
||||
FlushType aFlushType = FlushType::Layout);
|
||||
|
||||
// Data members
|
||||
EventStates mState;
|
||||
|
@ -10545,9 +10545,12 @@ nsDocument::CaretPositionFromPoint(float aX, float aY, nsISupports** aCaretPos)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static bool
|
||||
IsPotentiallyScrollable(HTMLBodyElement* aBody)
|
||||
bool
|
||||
nsIDocument::IsPotentiallyScrollable(HTMLBodyElement* aBody)
|
||||
{
|
||||
// We rely on correct frame information here, so need to flush frames.
|
||||
FlushPendingNotifications(FlushType::Frames);
|
||||
|
||||
// An element is potentially scrollable if all of the following conditions are
|
||||
// true:
|
||||
|
||||
@ -10580,8 +10583,8 @@ IsPotentiallyScrollable(HTMLBodyElement* aBody)
|
||||
Element*
|
||||
nsIDocument::GetScrollingElement()
|
||||
{
|
||||
// Keep this in sync with IsScrollingElement.
|
||||
if (GetCompatibilityMode() == eCompatibility_NavQuirks) {
|
||||
FlushPendingNotifications(FlushType::Layout);
|
||||
HTMLBodyElement* body = GetBodyElement();
|
||||
if (body && !IsPotentiallyScrollable(body)) {
|
||||
return body;
|
||||
@ -10593,6 +10596,27 @@ nsIDocument::GetScrollingElement()
|
||||
return GetRootElement();
|
||||
}
|
||||
|
||||
bool
|
||||
nsIDocument::IsScrollingElement(Element* aElement)
|
||||
{
|
||||
// Keep this in sync with GetScrollingElement.
|
||||
MOZ_ASSERT(aElement);
|
||||
|
||||
if (GetCompatibilityMode() != eCompatibility_NavQuirks) {
|
||||
return aElement == GetRootElement();
|
||||
}
|
||||
|
||||
HTMLBodyElement* body = GetBodyElement();
|
||||
if (aElement != body) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Now we know body is non-null, since aElement is not null. It's the
|
||||
// scrolling element for the document if it itself is not potentially
|
||||
// scrollable.
|
||||
return !IsPotentiallyScrollable(body);
|
||||
}
|
||||
|
||||
void
|
||||
nsIDocument::ObsoleteSheet(nsIURI *aSheetURI, ErrorResult& rv)
|
||||
{
|
||||
|
@ -2777,6 +2777,11 @@ public:
|
||||
CaretPositionFromPoint(float aX, float aY);
|
||||
|
||||
Element* GetScrollingElement();
|
||||
// A way to check whether a given element is what would get returned from
|
||||
// GetScrollingElement. It can be faster than comparing to the return value
|
||||
// of GetScrollingElement() due to being able to avoid flushes in various
|
||||
// cases. This method assumes that null is NOT passed.
|
||||
bool IsScrollingElement(Element* aElement);
|
||||
|
||||
// QuerySelector and QuerySelectorAll already defined on nsINode
|
||||
nsINodeList* GetAnonymousNodes(Element& aElement);
|
||||
@ -3028,6 +3033,9 @@ protected:
|
||||
// the relevant refresh driver.
|
||||
void UpdateFrameRequestCallbackSchedulingState(nsIPresShell* aOldShell = nullptr);
|
||||
|
||||
// Helper for GetScrollingElement/IsScrollingElement.
|
||||
bool IsPotentiallyScrollable(mozilla::dom::HTMLBodyElement* aBody);
|
||||
|
||||
nsCString mReferrer;
|
||||
nsString mLastModified;
|
||||
|
||||
|
@ -5872,31 +5872,34 @@ CanvasRenderingContext2D::GetImageDataArray(JSContext* aCx,
|
||||
IntRect srcRect(0, 0, mWidth, mHeight);
|
||||
IntRect destRect(aX, aY, aWidth, aHeight);
|
||||
IntRect srcReadRect = srcRect.Intersect(destRect);
|
||||
if (srcReadRect.IsEmpty()) {
|
||||
*aRetval = darray;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
RefPtr<DataSourceSurface> readback;
|
||||
DataSourceSurface::MappedSurface rawData;
|
||||
if (!srcReadRect.IsEmpty()) {
|
||||
RefPtr<SourceSurface> snapshot;
|
||||
if (!mTarget && mBufferProvider) {
|
||||
snapshot = mBufferProvider->BorrowSnapshot();
|
||||
} else {
|
||||
EnsureTarget();
|
||||
if (!IsTargetValid()) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
snapshot = mTarget->Snapshot();
|
||||
RefPtr<SourceSurface> snapshot;
|
||||
if (!mTarget && mBufferProvider) {
|
||||
snapshot = mBufferProvider->BorrowSnapshot();
|
||||
} else {
|
||||
EnsureTarget();
|
||||
if (!IsTargetValid()) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
snapshot = mTarget->Snapshot();
|
||||
}
|
||||
|
||||
if (snapshot) {
|
||||
readback = snapshot->GetDataSurface();
|
||||
}
|
||||
if (snapshot) {
|
||||
readback = snapshot->GetDataSurface();
|
||||
}
|
||||
|
||||
if (!mTarget && mBufferProvider) {
|
||||
mBufferProvider->ReturnSnapshot(snapshot.forget());
|
||||
}
|
||||
if (!mTarget && mBufferProvider) {
|
||||
mBufferProvider->ReturnSnapshot(snapshot.forget());
|
||||
}
|
||||
|
||||
if (!readback || !readback->Map(DataSourceSurface::READ, &rawData)) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
if (!readback || !readback->Map(DataSourceSurface::READ, &rawData)) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
IntRect dstWriteRect = srcReadRect;
|
||||
@ -5908,16 +5911,8 @@ CanvasRenderingContext2D::GetImageDataArray(JSContext* aCx,
|
||||
uint8_t* data = JS_GetUint8ClampedArrayData(darray, &isShared, nogc);
|
||||
MOZ_ASSERT(!isShared); // Should not happen, data was created above
|
||||
|
||||
uint8_t* src;
|
||||
uint32_t srcStride;
|
||||
if (readback) {
|
||||
srcStride = rawData.mStride;
|
||||
src = rawData.mData + srcReadRect.y * srcStride + srcReadRect.x * 4;
|
||||
} else {
|
||||
src = data;
|
||||
srcStride = aWidth * 4;
|
||||
}
|
||||
|
||||
uint32_t srcStride = rawData.mStride;
|
||||
uint8_t* src = rawData.mData + srcReadRect.y * srcStride + srcReadRect.x * 4;
|
||||
uint8_t* dst = data + dstWriteRect.y * (aWidth * 4) + dstWriteRect.x * 4;
|
||||
|
||||
if (mOpaque) {
|
||||
@ -5931,10 +5926,7 @@ CanvasRenderingContext2D::GetImageDataArray(JSContext* aCx,
|
||||
}
|
||||
}
|
||||
|
||||
if (readback) {
|
||||
readback->Unmap();
|
||||
}
|
||||
|
||||
readback->Unmap();
|
||||
*aRetval = darray;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -71,19 +71,20 @@ GetStringValue(HKEY aBaseKey, const nsAString& aStrSubKey,
|
||||
const nsString& flatValueName = PromiseFlatString(aValueName);
|
||||
LPCWSTR valueName = aValueName.IsEmpty() ? nullptr : flatValueName.get();
|
||||
|
||||
DWORD type = 0;
|
||||
DWORD numBytes = 0;
|
||||
LONG result = RegGetValue(aBaseKey, flatSubKey.get(), valueName,
|
||||
RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ, nullptr,
|
||||
nullptr, &numBytes);
|
||||
if (result != ERROR_SUCCESS) {
|
||||
RRF_RT_ANY, &type, nullptr, &numBytes);
|
||||
if (result != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int numChars = (numBytes + 1) / sizeof(wchar_t);
|
||||
aOutput.SetLength(numChars);
|
||||
|
||||
result = RegGetValue(aBaseKey, flatSubKey.get(), valueName,
|
||||
RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ,
|
||||
DWORD acceptFlag = type == REG_SZ ? RRF_RT_REG_SZ : RRF_RT_REG_EXPAND_SZ;
|
||||
|
||||
result = RegGetValue(aBaseKey, flatSubKey.get(), valueName, acceptFlag,
|
||||
nullptr, aOutput.BeginWriting(), &numBytes);
|
||||
if (result == ERROR_SUCCESS) {
|
||||
// Truncate null terminator
|
||||
|
@ -505,10 +505,7 @@ MainThreadHandoff::OnWalkInterface(REFIID aIid, PVOID* aInterface,
|
||||
|
||||
// First make sure that aInterface isn't a proxy - we don't want to wrap
|
||||
// those.
|
||||
if (IsProxy(origInterface.get())) {
|
||||
*aInterface = origInterface.release();
|
||||
return S_OK;
|
||||
}
|
||||
MOZ_ASSERT(!IsProxy(origInterface.get()));
|
||||
|
||||
RefPtr<IInterceptor> interceptor;
|
||||
HRESULT hr = mInterceptor->Resolve(IID_IInterceptor,
|
||||
|
54
layout/generic/crashtests/1367413-1.html
Normal file
54
layout/generic/crashtests/1367413-1.html
Normal file
@ -0,0 +1,54 @@
|
||||
<!DOCTYPE HTML>
|
||||
<title>Test for dynamic re-pagination of absolutely positioned elements</title>
|
||||
<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
|
||||
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
|
||||
<style>
|
||||
|
||||
#multicol {
|
||||
columns: 3;
|
||||
column-fill: auto;
|
||||
column-gap: 15px;
|
||||
height: 500px;
|
||||
width: 300px;
|
||||
background: yellow;
|
||||
}
|
||||
|
||||
#relpos {
|
||||
position: relative;
|
||||
background: aqua;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
#abspos {
|
||||
position: absolute;
|
||||
top: 60px;
|
||||
right: 0;
|
||||
height: 80px;
|
||||
width: 50px;
|
||||
background: blue;
|
||||
transform: scale(0.9);
|
||||
}
|
||||
|
||||
#overflow {
|
||||
height: 100px;
|
||||
width: 30px;
|
||||
background: grey;
|
||||
}
|
||||
</style>
|
||||
<body style="width: 700px">
|
||||
|
||||
<div id="multicol">
|
||||
<div id="relpos">
|
||||
<div id="abspos"><div id="overflow"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
var mc = document.getElementById("multicol");
|
||||
mc.offsetHeight; // flush layout
|
||||
mc.style.height = "140px";
|
||||
mc.offsetHeight; // flush layout
|
||||
mc.parentNode.style.width = "800px";
|
||||
|
||||
</script>
|
@ -652,3 +652,4 @@ load 1304441.html
|
||||
load 1316649.html
|
||||
load 1349650.html
|
||||
asserts-if(browserIsRemote,0-5) load 1349816-1.html # bug 1350352
|
||||
load 1367413-1.html
|
||||
|
@ -149,7 +149,9 @@ nsAbsoluteContainingBlock::Reflow(nsContainerFrame* aDelegatingFrame,
|
||||
nscoord kidBEnd = kidFrame->GetLogicalRect(cb.Size()).BEnd(kidWM);
|
||||
nscoord kidOverflowBEnd =
|
||||
LogicalRect(containerWM,
|
||||
kidFrame->GetScrollableOverflowRectRelativeToParent(),
|
||||
// Use ...RelativeToSelf to ignore transforms
|
||||
kidFrame->GetScrollableOverflowRectRelativeToSelf() +
|
||||
kidFrame->GetPosition(),
|
||||
aContainingBlock.Size()).BEnd(containerWM);
|
||||
MOZ_ASSERT(kidOverflowBEnd >= kidBEnd);
|
||||
if (kidOverflowBEnd > availBSize ||
|
||||
|
15
layout/reftests/bugs/1364360-1-ref.html
Normal file
15
layout/reftests/bugs/1364360-1-ref.html
Normal file
@ -0,0 +1,15 @@
|
||||
<!-- Quirks mode on purpose -->
|
||||
<html>
|
||||
<body style="margin: 0; padding: 0; border: none;"></body>
|
||||
<script>
|
||||
var html = document.documentElement;
|
||||
var div = document.createElement("div");
|
||||
div.style.height = "4000px";
|
||||
html.appendChild(div);
|
||||
html.appendChild(document.createTextNode("text"));
|
||||
div = document.createElement("div");
|
||||
div.style.height = "4000px";
|
||||
html.appendChild(div);
|
||||
document.body.scrollTop = 4000;
|
||||
</script>
|
||||
</html>
|
15
layout/reftests/bugs/1364360-1.html
Normal file
15
layout/reftests/bugs/1364360-1.html
Normal file
@ -0,0 +1,15 @@
|
||||
<!-- Quirks mode on purpose -->
|
||||
<html>
|
||||
<body style="display:none;"></body>
|
||||
<script>
|
||||
var html = document.documentElement;
|
||||
var div = document.createElement("div");
|
||||
div.style.height = "4000px";
|
||||
html.appendChild(div);
|
||||
html.appendChild(document.createTextNode("text"));
|
||||
div = document.createElement("div");
|
||||
div.style.height = "4000px";
|
||||
html.appendChild(div);
|
||||
document.body.scrollTop = 4000;
|
||||
</script>
|
||||
</html>
|
@ -2003,4 +2003,5 @@ fails-if(styloVsGecko) == 1322512-1.html 1322512-1-ref.html
|
||||
== 1364280-2b.html 1364280-2-ref.html
|
||||
== 1364280-2c.html 1364280-2-ref.html
|
||||
== 1364335.html 1364335-ref.html
|
||||
== 1364360-1.html 1364360-1-ref.html
|
||||
== 1366144.html 1366144-ref.html
|
||||
|
16
mobile/android/config/mozconfigs/android-aarch64/debug
Normal file
16
mobile/android/config/mozconfigs/android-aarch64/debug
Normal file
@ -0,0 +1,16 @@
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common"
|
||||
|
||||
# Global options
|
||||
ac_add_options --enable-debug
|
||||
ac_add_options --enable-marionette
|
||||
|
||||
# Android
|
||||
ac_add_options --with-android-min-sdk=21
|
||||
ac_add_options --target=aarch64-linux-android
|
||||
|
||||
export MOZILLA_OFFICIAL=1
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
ac_add_options --with-branding=mobile/android/branding/nightly
|
||||
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
|
@ -0,0 +1,32 @@
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common"
|
||||
|
||||
# L10n
|
||||
ac_add_options --with-l10n-base=../../l10n-central
|
||||
|
||||
# Global options
|
||||
ac_add_options --disable-tests
|
||||
|
||||
# Android
|
||||
ac_add_options --with-android-min-sdk=21
|
||||
ac_add_options --target=aarch64-linux-android
|
||||
|
||||
ac_add_options --with-system-zlib
|
||||
ac_add_options --enable-updater
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
ac_add_options --with-branding=mobile/android/branding/nightly
|
||||
|
||||
ac_add_options --disable-stdcxx-compat
|
||||
|
||||
# Don't autoclobber l10n, as this can lead to missing binaries and broken builds
|
||||
# Bug 1283438
|
||||
mk_add_options AUTOCLOBBER=
|
||||
|
||||
# Disable Keyfile Loading (and checks) since l10n doesn't need these keys
|
||||
# This overrides the settings in the common android mozconfig
|
||||
ac_add_options --without-mozilla-api-keyfile
|
||||
ac_add_options --without-adjust-sdk-keyfile
|
||||
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
|
@ -0,0 +1,28 @@
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common"
|
||||
|
||||
# L10n
|
||||
ac_add_options --with-l10n-base=../../l10n-central
|
||||
|
||||
# Global options
|
||||
ac_add_options --disable-tests
|
||||
|
||||
# Android
|
||||
ac_add_options --with-android-min-sdk=21
|
||||
ac_add_options --target=aarch64-linux-android
|
||||
|
||||
ac_add_options --with-system-zlib
|
||||
ac_add_options --enable-updater
|
||||
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
|
||||
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
ac_add_options --with-branding=mobile/android/branding/beta
|
||||
|
||||
ac_add_options --disable-stdcxx-compat
|
||||
|
||||
# Don't autoclobber l10n, as this can lead to missing binaries and broken builds
|
||||
# Bug 1283438
|
||||
mk_add_options AUTOCLOBBER=
|
||||
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
|
18
mobile/android/config/mozconfigs/android-aarch64/nightly
Normal file
18
mobile/android/config/mozconfigs/android-aarch64/nightly
Normal file
@ -0,0 +1,18 @@
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common"
|
||||
|
||||
ac_add_options --enable-profiling
|
||||
|
||||
# Android
|
||||
ac_add_options --with-android-min-sdk=21
|
||||
ac_add_options --target=aarch64-linux-android
|
||||
|
||||
ac_add_options --with-branding=mobile/android/branding/nightly
|
||||
|
||||
# This will overwrite the default of stripping everything and keep the symbol table.
|
||||
# This is useful for profiling with eideticker. See bug 788680
|
||||
STRIP_FLAGS="--strip-debug"
|
||||
|
||||
export MOZILLA_OFFICIAL=1
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
|
16
mobile/android/config/mozconfigs/android-aarch64/release
Normal file
16
mobile/android/config/mozconfigs/android-aarch64/release
Normal file
@ -0,0 +1,16 @@
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common"
|
||||
|
||||
# Android
|
||||
ac_add_options --with-android-min-sdk=21
|
||||
ac_add_options --target=aarch64-linux-android
|
||||
|
||||
ac_add_options --with-branding=mobile/android/branding/beta
|
||||
|
||||
ac_add_options --enable-updater
|
||||
|
||||
export MOZILLA_OFFICIAL=1
|
||||
export MOZ_TELEMETRY_REPORTING=1
|
||||
|
||||
ac_add_options --enable-official-branding
|
||||
|
||||
. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
|
@ -3114,21 +3114,10 @@ pref("dom.ipc.plugins.unloadTimeoutSecs", 30);
|
||||
// Asynchronous plugin initialization is on hold.
|
||||
pref("dom.ipc.plugins.asyncInit.enabled", false);
|
||||
|
||||
#ifdef RELEASE_OR_BETA
|
||||
#ifdef _AMD64_
|
||||
// Allow Flash async drawing mode in 64-bit release builds
|
||||
pref("dom.ipc.plugins.asyncdrawing.enabled", true);
|
||||
// Force the accelerated direct path for a subset of Flash wmode values
|
||||
pref("dom.ipc.plugins.forcedirect.enabled", true);
|
||||
#else
|
||||
// Disable async drawing for 32-bit release builds
|
||||
pref("dom.ipc.plugins.asyncdrawing.enabled", false);
|
||||
#endif // _AMD64_
|
||||
#else
|
||||
// Enable in dev channels
|
||||
pref("dom.ipc.plugins.asyncdrawing.enabled", true);
|
||||
pref("dom.ipc.plugins.forcedirect.enabled", true);
|
||||
#endif
|
||||
|
||||
#ifdef RELEASE_OR_BETA
|
||||
pref("dom.ipc.processCount", 1);
|
||||
|
@ -66,7 +66,7 @@ W32API_VERSION=3.14
|
||||
GCONF_VERSION=1.2.1
|
||||
STARTUP_NOTIFICATION_VERSION=0.8
|
||||
DBUS_VERSION=0.60
|
||||
SQLITE_VERSION=3.19.1
|
||||
SQLITE_VERSION=3.19.2
|
||||
|
||||
dnl Set various checks
|
||||
dnl ========================================================
|
||||
|
@ -271,3 +271,55 @@ android-api-15-gradle/opt:
|
||||
secrets: true
|
||||
custom-build-variant-cfg: api-15-gradle
|
||||
tooltool-downloads: internal
|
||||
|
||||
android-aarch64/opt:
|
||||
description: "Android 5.0 AArch64 Opt"
|
||||
index:
|
||||
product: mobile
|
||||
job-name: android-aarch64-opt
|
||||
treeherder:
|
||||
platform: android-5-0-aarch64/opt
|
||||
symbol: tc(B)
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-android
|
||||
worker:
|
||||
implementation: docker-worker
|
||||
max-run-time: 7200
|
||||
run:
|
||||
using: mozharness
|
||||
actions: [get-secrets build generate-build-stats multi-l10n update]
|
||||
config:
|
||||
- builds/releng_base_android_64_builds.py
|
||||
- disable_signing.py
|
||||
- platform_supports_post_upload_to_latest.py
|
||||
script: "mozharness/scripts/fx_desktop_build.py"
|
||||
secrets: true
|
||||
custom-build-variant-cfg: aarch64
|
||||
tooltool-downloads: internal
|
||||
|
||||
android-aarch64-nightly/opt:
|
||||
description: "Android 5.0 AArch64 Nightly"
|
||||
attributes:
|
||||
nightly: true
|
||||
index:
|
||||
product: mobile
|
||||
job-name: android-aarch64-opt
|
||||
type: nightly
|
||||
treeherder:
|
||||
platform: android-5-0-aarch64/opt
|
||||
symbol: tc(N)
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-android
|
||||
worker:
|
||||
implementation: docker-worker
|
||||
max-run-time: 7200
|
||||
run:
|
||||
using: mozharness
|
||||
actions: [get-secrets build generate-build-stats multi-l10n update]
|
||||
config:
|
||||
- builds/releng_base_android_64_builds.py
|
||||
- disable_signing.py
|
||||
- platform_supports_post_upload_to_latest.py
|
||||
- taskcluster_nightly.py
|
||||
script: "mozharness/scripts/fx_desktop_build.py"
|
||||
secrets: true
|
||||
custom-build-variant-cfg: aarch64
|
||||
tooltool-downloads: internal
|
||||
|
@ -16,6 +16,7 @@ only-for-build-platforms:
|
||||
- linux64/debug
|
||||
- linux64-nightly/opt
|
||||
- linux-nightly/opt
|
||||
- android-aarch64-nightly/opt
|
||||
- android-api-15/opt
|
||||
- android-api-15-nightly/opt
|
||||
- android-api-15-old-id-nightly/opt
|
||||
|
@ -207,8 +207,12 @@ def target_tasks_nightly_fennec(full_task_graph, parameters):
|
||||
and, eventually, uploading the tasks to balrog."""
|
||||
def filter(task):
|
||||
platform = task.attributes.get('build_platform')
|
||||
if platform in ('android-api-15-nightly', 'android-x86-nightly', 'android-nightly',
|
||||
'android-api-15-old-id-nightly', 'android-x86-old-id-nightly'):
|
||||
if platform in ('android-aarch64-nightly',
|
||||
'android-api-15-nightly',
|
||||
'android-api-15-old-id-nightly',
|
||||
'android-nightly',
|
||||
'android-x86-nightly',
|
||||
'android-x86-old-id-nightly'):
|
||||
if not task.attributes.get('nightly', False):
|
||||
return False
|
||||
return filter_for_project(task, parameters)
|
||||
|
@ -106,6 +106,7 @@ UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
|
||||
'linux64-devedition-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||
'linux-devedition-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||
'android-x86-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||
'android-aarch64-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||
'android-api-15-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||
'android-x86-old-id-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||
'android-api-15-old-id-nightly': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||
@ -115,6 +116,7 @@ UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
|
||||
'linux-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
|
||||
'android-x86-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
|
||||
'android-x86-old-id-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
|
||||
'android-aarch64-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
|
||||
'android-api-15-nightly-l10n': ["balrog_props.json"],
|
||||
'android-api-15-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
|
||||
'android-api-15-old-id-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
|
||||
@ -138,6 +140,7 @@ UPSTREAM_ARTIFACT_SIGNED_PATHS = {
|
||||
"target.tar.bz2.asc",
|
||||
],
|
||||
'android-x86-nightly': ["en-US/target.apk"],
|
||||
'android-aarch64-nightly': ["en-US/target.apk"],
|
||||
'android-api-15-nightly': ["en-US/target.apk"],
|
||||
'android-x86-old-id-nightly': ["en-US/target.apk"],
|
||||
'android-api-15-old-id-nightly': ["en-US/target.apk"],
|
||||
@ -156,6 +159,7 @@ UPSTREAM_ARTIFACT_SIGNED_PATHS = {
|
||||
],
|
||||
'android-x86-nightly-multi': ["target.apk"],
|
||||
'android-x86-old-id-nightly-multi': ["target.apk"],
|
||||
'android-aarch64-nightly-multi': ["target.apk"],
|
||||
'android-api-15-nightly-l10n': ["target.apk"],
|
||||
'android-api-15-nightly-multi': ["target.apk"],
|
||||
'android-api-15-old-id-nightly-multi': ["target.apk"],
|
||||
|
@ -16,6 +16,7 @@ from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
# please keep me in lexical order
|
||||
JOB_NAME_WHITELIST = set([
|
||||
'android-aarch64-opt',
|
||||
'android-api-15-debug',
|
||||
'android-api-15-gradle-dependencies-opt',
|
||||
'android-api-15-gradle-opt',
|
||||
|
@ -11,6 +11,7 @@ from taskgraph.util.schema import validate_schema
|
||||
|
||||
REQUIRED_ARCHITECTURES = {
|
||||
'android-x86-nightly',
|
||||
'android-aarch64-nightly',
|
||||
'android-api-15-nightly',
|
||||
}
|
||||
PLATFORM_REGEX = re.compile(r'signing-android-(\S+)-nightly')
|
||||
|
@ -0,0 +1,9 @@
|
||||
config = {
|
||||
'base_name': 'Android aarch64 API 21+ %(branch)s',
|
||||
'stage_platform': 'android-aarch64',
|
||||
'build_type': 'aarch64-opt',
|
||||
'src_mozconfig': 'mobile/android/config/mozconfigs/android-aarch64/nightly',
|
||||
'tooltool_manifest_src': 'mobile/android/config/tooltool-manifests/android/releng.manifest',
|
||||
'multi_locale_config_platform': 'android',
|
||||
'artifact_flag_build_variant_in_try': 'aarch64-artifact',
|
||||
}
|
@ -374,6 +374,7 @@ class BuildOptionParser(object):
|
||||
'x86-old-id': 'builds/releng_sub_%s_configs/%s_x86_old_id.py',
|
||||
'x86-artifact': 'builds/releng_sub_%s_configs/%s_x86_artifact.py',
|
||||
'api-15-partner-sample1': 'builds/releng_sub_%s_configs/%s_api_15_partner_sample1.py',
|
||||
'aarch64': 'builds/releng_sub_%s_configs/%s_aarch64.py',
|
||||
'android-test': 'builds/releng_sub_%s_configs/%s_test.py',
|
||||
'android-checkstyle': 'builds/releng_sub_%s_configs/%s_checkstyle.py',
|
||||
'android-lint': 'builds/releng_sub_%s_configs/%s_lint.py',
|
||||
|
@ -5,7 +5,7 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
if CONFIG['OS_TARGET'] != 'Android':
|
||||
Program('pingsender')
|
||||
GeckoProgram('pingsender', linkage=None)
|
||||
|
||||
UNIFIED_SOURCES += [
|
||||
'pingsender.cpp',
|
||||
@ -32,6 +32,7 @@ else:
|
||||
'pingsender_unix_common.cpp',
|
||||
]
|
||||
|
||||
|
||||
# Don't use the STL wrappers; we don't link with -lmozalloc, and it really
|
||||
# doesn't matter here anyway.
|
||||
DISABLE_STL_WRAPPING = True
|
||||
|
Loading…
Reference in New Issue
Block a user