Merge inbound to m-c. a=merge

This commit is contained in:
Ryan VanderMeulen 2017-05-25 21:30:20 -04:00
commit e38fed0cd1
44 changed files with 652 additions and 248 deletions

View File

@ -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

View File

@ -80,6 +80,7 @@ function initializeDefaultPreferences() {
"defaultZoomValue": "",
"sidebarViewOnLoad": 0,
"enableHandToolOnLoad": false,
"cursorToolOnLoad": 0,
"enableWebGL": false,
"pdfBugEnabled": false,
"disableRange": false,

View File

@ -39,6 +39,7 @@ var DEFAULT_PREFERENCES =
"defaultZoomValue": "",
"sidebarViewOnLoad": 0,
"enableHandToolOnLoad": false,
"cursorToolOnLoad": 0,
"enableWebGL": false,
"pdfBugEnabled": false,
"disableRange": false,

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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>

View File

@ -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: {

View File

@ -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…

View File

@ -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){

View File

@ -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

View File

@ -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>";
},

View File

@ -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;
}

View File

@ -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();
}

View File

@ -1593,7 +1593,7 @@ private:
nsRect GetClientAreaRect();
nsIScrollableFrame* GetScrollFrame(nsIFrame **aStyledFrame = nullptr,
bool aFlushLayout = true);
FlushType aFlushType = FlushType::Layout);
// Data members
EventStates mState;

View File

@ -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)
{

View File

@ -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;

View File

@ -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;
}

View File

@ -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

View File

@ -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,

View 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>

View File

@ -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

View File

@ -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 ||

View 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>

View 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>

View File

@ -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

View 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"

View File

@ -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"

View File

@ -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"

View 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"

View 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"

View File

@ -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);

View File

@ -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 ========================================================

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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"],

View File

@ -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',

View File

@ -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')

View File

@ -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',
}

View File

@ -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',

View File

@ -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