Merge mozilla-central to autoland. a=merge CLOSED TREE

This commit is contained in:
Narcis Beleuzu 2019-05-10 01:17:29 +03:00
Родитель ba4f64421f f533451f22
Коммит b5a129f8e7
18 изменённых файлов: 229 добавлений и 93 удалений

Просмотреть файл

@ -1,5 +1,5 @@
This is the PDF.js project output, https://github.com/mozilla/pdf.js
Current extension version is: 2.2.160
Current extension version is: 2.2.167
Taken from upstream commit: 155304a0
Taken from upstream commit: ca2fee3d

Просмотреть файл

@ -123,8 +123,8 @@ return /******/ (function(modules) { // webpackBootstrap
"use strict";
var pdfjsVersion = '2.2.160';
var pdfjsBuild = '155304a0';
var pdfjsVersion = '2.2.167';
var pdfjsBuild = 'ca2fee3d';
var pdfjsSharedUtil = __w_pdfjs_require__(1);
@ -175,6 +175,7 @@ exports.getFilenameFromUrl = pdfjsDisplayDisplayUtils.getFilenameFromUrl;
exports.LinkTarget = pdfjsDisplayDisplayUtils.LinkTarget;
exports.addLinkAttributes = pdfjsDisplayDisplayUtils.addLinkAttributes;
exports.loadScript = pdfjsDisplayDisplayUtils.loadScript;
exports.PDFDateString = pdfjsDisplayDisplayUtils.PDFDateString;
exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions;
exports.apiCompatibilityParams = pdfjsDisplayAPICompatibility.apiCompatibilityParams;
@ -1303,7 +1304,7 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
return worker.messageHandler.sendWithPromise('GetDocRequest', {
docId,
apiVersion: '2.2.160',
apiVersion: '2.2.167',
source: {
data: source.data,
url: source.url,
@ -3097,9 +3098,9 @@ const InternalRenderTask = function InternalRenderTaskClosure() {
return InternalRenderTask;
}();
const version = '2.2.160';
const version = '2.2.167';
exports.version = version;
const build = '155304a0';
const build = 'ca2fee3d';
exports.build = build;
/***/ }),
@ -3119,7 +3120,7 @@ exports.isValidFetchUrl = isValidFetchUrl;
exports.loadScript = loadScript;
exports.deprecated = deprecated;
exports.releaseImageResources = releaseImageResources;
exports.DummyStatTimer = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;
exports.PDFDateString = exports.DummyStatTimer = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;
var _util = __w_pdfjs_require__(1);
@ -3516,6 +3517,56 @@ function releaseImageResources(img) {
img.removeAttribute('src');
}
let pdfDateStringRegex;
class PDFDateString {
static toDateObject(input) {
if (!input || !(0, _util.isString)(input)) {
return null;
}
if (!pdfDateStringRegex) {
pdfDateStringRegex = new RegExp('^D:' + '(\\d{4})' + '(\\d{2})?' + '(\\d{2})?' + '(\\d{2})?' + '(\\d{2})?' + '(\\d{2})?' + '([Z|+|-])?' + '(\\d{2})?' + '\'?' + '(\\d{2})?' + '\'?');
}
const matches = pdfDateStringRegex.exec(input);
if (!matches) {
return null;
}
const year = parseInt(matches[1], 10);
let month = parseInt(matches[2], 10);
month = month >= 1 && month <= 12 ? month - 1 : 0;
let day = parseInt(matches[3], 10);
day = day >= 1 && day <= 31 ? day : 1;
let hour = parseInt(matches[4], 10);
hour = hour >= 0 && hour <= 23 ? hour : 0;
let minute = parseInt(matches[5], 10);
minute = minute >= 0 && minute <= 59 ? minute : 0;
let second = parseInt(matches[6], 10);
second = second >= 0 && second <= 59 ? second : 0;
const universalTimeRelation = matches[7] || 'Z';
let offsetHour = parseInt(matches[8], 10);
offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
let offsetMinute = parseInt(matches[9], 10) || 0;
offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
if (universalTimeRelation === '-') {
hour += offsetHour;
minute += offsetMinute;
} else if (universalTimeRelation === '+') {
hour -= offsetHour;
minute -= offsetMinute;
}
return new Date(Date.UTC(year, month, day, hour, minute, second));
}
}
exports.PDFDateString = PDFDateString;
/***/ }),
/* 8 */
/***/ (function(module, exports, __w_pdfjs_require__) {
@ -8999,6 +9050,7 @@ class AnnotationElement {
trigger,
color: data.color,
title: data.title,
modificationDate: data.modificationDate,
contents: data.contents,
hideWrapper: true
});
@ -9296,6 +9348,7 @@ class PopupAnnotationElement extends AnnotationElement {
trigger: parentElement,
color: this.data.color,
title: this.data.title,
modificationDate: this.data.modificationDate,
contents: this.data.contents
});
let parentLeft = parseFloat(parentElement.style.left);
@ -9314,6 +9367,7 @@ class PopupElement {
this.trigger = parameters.trigger;
this.color = parameters.color;
this.title = parameters.title;
this.modificationDate = parameters.modificationDate;
this.contents = parameters.contents;
this.hideWrapper = parameters.hideWrapper || false;
this.pinned = false;
@ -9336,16 +9390,30 @@ class PopupElement {
popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0);
}
let contents = this._formatContents(this.contents);
let title = document.createElement('h1');
title.textContent = this.title;
popup.appendChild(title);
const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);
if (dateObject) {
const modificationDate = document.createElement('span');
modificationDate.textContent = '{{date}}, {{time}}';
modificationDate.dataset.l10nId = 'annotation_date_string';
modificationDate.dataset.l10nArgs = JSON.stringify({
date: dateObject.toLocaleDateString(),
time: dateObject.toLocaleTimeString()
});
popup.appendChild(modificationDate);
}
let contents = this._formatContents(this.contents);
popup.appendChild(contents);
this.trigger.addEventListener('click', this._toggle.bind(this));
this.trigger.addEventListener('mouseover', this._show.bind(this, false));
this.trigger.addEventListener('mouseout', this._hide.bind(this, false));
popup.addEventListener('click', this._hide.bind(this, true));
popup.appendChild(title);
popup.appendChild(contents);
wrapper.appendChild(popup);
return wrapper;
}

Просмотреть файл

@ -123,8 +123,8 @@ return /******/ (function(modules) { // webpackBootstrap
"use strict";
const pdfjsVersion = '2.2.160';
const pdfjsBuild = '155304a0';
const pdfjsVersion = '2.2.167';
const pdfjsBuild = 'ca2fee3d';
const pdfjsCoreWorker = __w_pdfjs_require__(1);
@ -378,7 +378,7 @@ var WorkerMessageHandler = {
var WorkerTasks = [];
const verbosity = (0, _util.getVerbosityLevel)();
let apiVersion = docParams.apiVersion;
let workerVersion = '2.2.160';
let workerVersion = '2.2.167';
if (apiVersion !== workerVersion) {
throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
@ -18318,6 +18318,8 @@ function getTransformMatrix(rect, bbox, matrix) {
class Annotation {
constructor(params) {
let dict = params.dict;
this.setCreationDate(dict.get('CreationDate'));
this.setModificationDate(dict.get('M'));
this.setFlags(dict.get('F'));
this.setRectangle(dict.getArray('Rect'));
this.setColor(dict.getArray('C'));
@ -18327,8 +18329,10 @@ class Annotation {
annotationFlags: this.flags,
borderStyle: this.borderStyle,
color: this.color,
creationDate: this.creationDate,
hasAppearance: !!this.appearance,
id: params.id,
modificationDate: this.modificationDate,
rect: this.rectangle,
subtype: params.subtype
};
@ -18362,6 +18366,14 @@ class Annotation {
return this._isPrintable(this.flags);
}
setCreationDate(creationDate) {
this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;
}
setModificationDate(modificationDate) {
this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;
}
setFlags(flags) {
this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
}
@ -18948,6 +18960,20 @@ class PopupAnnotation extends Annotation {
this.data.title = (0, _util.stringToPDFString)(parentItem.get('T') || '');
this.data.contents = (0, _util.stringToPDFString)(parentItem.get('Contents') || '');
if (!parentItem.has('CreationDate')) {
this.data.creationDate = null;
} else {
this.setCreationDate(parentItem.get('CreationDate'));
this.data.creationDate = this.creationDate;
}
if (!parentItem.has('M')) {
this.data.modificationDate = null;
} else {
this.setModificationDate(parentItem.get('M'));
this.data.modificationDate = this.modificationDate;
}
if (!parentItem.has('C')) {
this.data.color = null;
} else {
@ -20582,7 +20608,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
}
},
handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args, cs, patterns, resources, task) {
async handleColorN(operatorList, fn, args, cs, patterns, resources, task) {
var patternName = args[args.length - 1];
var pattern;
@ -20598,14 +20624,13 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
var matrix = dict.getArray('Matrix');
pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory);
operatorList.addOp(fn, pattern.getIR());
return Promise.resolve();
return undefined;
}
return Promise.reject(new Error('Unknown PatternType: ' + typeNum));
throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
}
operatorList.addOp(fn, args);
return Promise.resolve();
throw new _util.FormatError(`Unknown PatternName: ${patternName}`);
},
getOperatorList({

Просмотреть файл

@ -222,25 +222,33 @@
z-index: 200;
max-width: 20em;
background-color: #FFFF99;
box-shadow: 0px 2px 5px #333;
box-shadow: 0px 2px 5px #888;
border-radius: 2px;
padding: 0.6em;
padding: 6px;
margin-left: 5px;
cursor: pointer;
font: message-box;
font-size: 9px;
word-wrap: break-word;
}
.annotationLayer .popup > * {
font-size: 9px;
}
.annotationLayer .popup h1 {
font-size: 1em;
border-bottom: 1px solid #000000;
margin: 0;
padding-bottom: 0.2em;
display: inline-block;
}
.annotationLayer .popup span {
display: inline-block;
margin-left: 5px;
}
.annotationLayer .popup p {
margin: 0;
padding-top: 0.2em;
border-top: 1px solid #333;
margin-top: 2px;
padding-top: 2px;
}
.annotationLayer .highlightAnnotation,

Просмотреть файл

@ -4550,10 +4550,10 @@ Object.defineProperty(exports, "__esModule", {
});
exports.PDFDocumentProperties = void 0;
var _ui_utils = __webpack_require__(2);
var _pdfjsLib = __webpack_require__(4);
var _ui_utils = __webpack_require__(2);
const DEFAULT_FIELD_CONTENT = '-';
const NON_METRIC_LOCALES = ['en-us', 'en-lr', 'my'];
const US_PAGE_NAMES = {
@ -4817,42 +4817,17 @@ class PDFDocumentProperties {
}
_parseDate(inputDate) {
if (!inputDate) {
return;
}
const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);
let dateToParse = inputDate;
if (dateToParse.substring(0, 2) === 'D:') {
dateToParse = dateToParse.substring(2);
}
let year = parseInt(dateToParse.substring(0, 4), 10);
let month = parseInt(dateToParse.substring(4, 6), 10) - 1;
let day = parseInt(dateToParse.substring(6, 8), 10);
let hours = parseInt(dateToParse.substring(8, 10), 10);
let minutes = parseInt(dateToParse.substring(10, 12), 10);
let seconds = parseInt(dateToParse.substring(12, 14), 10);
let utRel = dateToParse.substring(14, 15);
let offsetHours = parseInt(dateToParse.substring(15, 17), 10);
let offsetMinutes = parseInt(dateToParse.substring(18, 20), 10);
if (utRel === '-') {
hours += offsetHours;
minutes += offsetMinutes;
} else if (utRel === '+') {
hours -= offsetHours;
minutes -= offsetMinutes;
}
let date = new Date(Date.UTC(year, month, day, hours, minutes, seconds));
let dateString = date.toLocaleDateString();
let timeString = date.toLocaleTimeString();
if (dateObject) {
const dateString = dateObject.toLocaleDateString();
const timeString = dateObject.toLocaleTimeString();
return this.l10n.get('document_properties_date_string', {
date: dateString,
time: timeString
}, '{{date}}, {{time}}');
}
}
_parseLinearization(isLinearized) {
return this.l10n.get('document_properties_linearized_' + (isLinearized ? 'yes' : 'no'), null, isLinearized ? 'Yes' : 'No');

Просмотреть файл

@ -20,7 +20,7 @@ origin:
# Human-readable identifier for this version/release
# Generally "version NNN", "tag SSS", "bookmark SSS"
release: version 2.2.160
release: version 2.2.167
# The package's license, where possible using the mnemonic from
# https://spdx.org/licenses/

Просмотреть файл

@ -226,6 +226,10 @@ invalid_file_error=Invalid or corrupted PDF file.
missing_file_error=Missing PDF file.
unexpected_response_error=Unexpected server response.
# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
# replaced by the modification date, and time, of the annotation.
annotation_date_string={{date}}, {{time}}
# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
# "{{type}}" will be replaced with an annotation type from a list defined in
# the PDF spec (32000-1:2008 Table 169 – Annotation types).

Просмотреть файл

@ -7,6 +7,7 @@
interface nsIPrincipal;
webidl Element;
webidl WindowGlobalParent;
[builtinclass, scriptable, uuid(8e49f7b0-1f98-4939-bf91-e9c39cd56434)]
interface nsIRemoteTab : nsISupports
@ -68,6 +69,11 @@ interface nsIRemoteTab : nsISupports
*/
readonly attribute boolean hasPresented;
/**
* Gets all of the WindowGlobalParent actors for this remote tab.
*/
readonly attribute Array<WindowGlobalParent> windowGlobalParents;
/**
* Ensures that the content process which has this remote tab has all of the
* permissions required to load a document with the given principal.

Просмотреть файл

@ -5,6 +5,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/dom/BrowserBridgeParent.h"
#include "mozilla/dom/BrowserParent.h"
#include "mozilla/dom/ContentParent.h"
#include "mozilla/dom/ContentProcessManager.h"
#include "mozilla/dom/CanonicalBrowsingContext.h"
@ -99,6 +100,15 @@ nsresult BrowserBridgeParent::Init(const nsString& aPresentationURL,
return NS_OK;
}
CanonicalBrowsingContext* BrowserBridgeParent::GetBrowsingContext() {
return mBrowserParent->GetBrowsingContext();
}
BrowserParent* BrowserBridgeParent::Manager() {
MOZ_ASSERT(mIPCOpen);
return static_cast<BrowserParent*>(PBrowserBridgeParent::Manager());
}
void BrowserBridgeParent::Destroy() {
if (mBrowserParent) {
mBrowserParent->Destroy();

Просмотреть файл

@ -8,11 +8,12 @@
#define mozilla_dom_BrowserBridgeParent_h
#include "mozilla/dom/PBrowserBridgeParent.h"
#include "mozilla/dom/BrowserParent.h"
namespace mozilla {
namespace dom {
class BrowserParent;
/**
* BrowserBridgeParent implements the parent actor part of the PBrowserBridge
* protocol. See PBrowserBridge for more information.
@ -30,15 +31,10 @@ class BrowserBridgeParent : public PBrowserBridgeParent {
BrowserParent* GetBrowserParent() { return mBrowserParent; }
CanonicalBrowsingContext* GetBrowsingContext() {
return mBrowserParent->GetBrowsingContext();
}
CanonicalBrowsingContext* GetBrowsingContext();
// Get our manager actor.
BrowserParent* Manager() {
MOZ_ASSERT(mIPCOpen);
return static_cast<BrowserParent*>(PBrowserBridgeParent::Manager());
}
BrowserParent* Manager();
// Tear down this BrowserBridgeParent.
void Destroy();

Просмотреть файл

@ -540,14 +540,9 @@ void BrowserParent::SetOwnerElement(Element* aElement) {
mBrowsingContext->SetEmbedderElement(mFrameElement);
}
// Ensure all BrowserParent actors within BrowserBridges are also updated.
const auto& browserBridges = ManagedPBrowserBridgeParent();
for (auto iter = browserBridges.ConstIter(); !iter.Done(); iter.Next()) {
BrowserBridgeParent* browserBridge =
static_cast<BrowserBridgeParent*>(iter.Get()->GetKey());
browserBridge->GetBrowserParent()->SetOwnerElement(aElement);
}
VisitChildren([aElement](BrowserBridgeParent* aBrowser) {
aBrowser->GetBrowserParent()->SetOwnerElement(aElement);
});
}
NS_IMETHODIMP BrowserParent::GetOwnerElement(Element** aElement) {
@ -3254,6 +3249,21 @@ void BrowserParent::NavigateByKey(bool aForward, bool aForDocumentNavigation) {
Unused << SendNavigateByKey(aForward, aForDocumentNavigation);
}
NS_IMETHODIMP
BrowserParent::GetWindowGlobalParents(
nsTArray<RefPtr<WindowGlobalParent>>& aWindowGlobalParents) {
VisitAll([&aWindowGlobalParents](BrowserParent* aBrowser) {
const auto& windowGlobalParents = aBrowser->ManagedPWindowGlobalParent();
for (auto iter = windowGlobalParents.ConstIter(); !iter.Done();
iter.Next()) {
WindowGlobalParent* windowGlobalParent =
static_cast<WindowGlobalParent*>(iter.Get()->GetKey());
aWindowGlobalParents.AppendElement(windowGlobalParent);
}
});
return NS_OK;
}
NS_IMETHODIMP
BrowserParent::TransmitPermissionsForPrincipal(nsIPrincipal* aPrincipal) {
return Manager()->TransmitPermissionsForPrincipal(aPrincipal);

Просмотреть файл

@ -11,6 +11,7 @@
#include "LiveResizeListener.h"
#include "mozilla/ContentCache.h"
#include "mozilla/dom/ipc/IdType.h"
#include "mozilla/dom/BrowserBridgeParent.h"
#include "mozilla/dom/PBrowserParent.h"
#include "mozilla/dom/PContent.h"
#include "mozilla/dom/PFilePickerParent.h"
@ -72,7 +73,6 @@ class ClonedMessageData;
class ContentParent;
class Element;
class DataTransfer;
class BrowserBridgeParent;
namespace ipc {
class StructuredCloneData;
@ -187,6 +187,46 @@ class BrowserParent final : public PBrowserParent,
*/
bool IsDestroyed() const { return mIsDestroyed; }
/*
* Visit each BrowserParent in the tree formed by PBrowser and
* PBrowserBridge, including `this`.
*/
template <typename Callback>
void VisitAll(Callback aCallback) {
aCallback(this);
VisitAllDescendants(aCallback);
}
/*
* Visit each BrowserParent in the tree formed by PBrowser and
* PBrowserBridge, excluding `this`.
*/
template <typename Callback>
void VisitAllDescendants(Callback aCallback) {
const auto& browserBridges = ManagedPBrowserBridgeParent();
for (auto iter = browserBridges.ConstIter(); !iter.Done(); iter.Next()) {
BrowserBridgeParent* browserBridge =
static_cast<BrowserBridgeParent*>(iter.Get()->GetKey());
BrowserParent* browserParent = browserBridge->GetBrowserParent();
aCallback(browserParent);
browserParent->VisitAllDescendants(aCallback);
}
}
/*
* Visit each BrowserBridgeParent that is a child of this BrowserParent.
*/
template <typename Callback>
void VisitChildren(Callback aCallback) {
const auto& browserBridges = ManagedPBrowserBridgeParent();
for (auto iter = browserBridges.ConstIter(); !iter.Done(); iter.Next()) {
BrowserBridgeParent* browserBridge =
static_cast<BrowserBridgeParent*>(iter.Get()->GetKey());
aCallback(browserBridge);
}
}
void SetOwnerElement(Element* aElement);
void SetBrowserDOMWindow(nsIBrowserDOMWindow* aBrowserDOMWindow) {

Просмотреть файл

@ -96,6 +96,7 @@ class SVGTests : public nsISupports {
already_AddRefed<DOMSVGStringList> RequiredFeatures();
already_AddRefed<DOMSVGStringList> RequiredExtensions();
already_AddRefed<DOMSVGStringList> SystemLanguage();
bool HasExtension(const nsAString& aExtension) const;
virtual SVGElement* AsSVGElement() = 0;

Просмотреть файл

@ -16,7 +16,5 @@ interface SVGTests {
readonly attribute SVGStringList requiredFeatures;
readonly attribute SVGStringList requiredExtensions;
readonly attribute SVGStringList systemLanguage;
boolean hasExtension(DOMString extension);
};

Просмотреть файл

@ -42,9 +42,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=744830
ok(chromeBR.height > contentBR.height, "Chrome content height should be bigger than content due to layout");
ok(!iframeEl.contentDocument.getElementById('svgel').hasExtension("http://www.w3.org/1998/Math/MathML"), 'SVG namespace support is disabled in content iframe');
ok(chromeIframeEl.contentDocument.getElementById('svgel').hasExtension("http://www.w3.org/1998/Math/MathML"), 'SVG namespace support is enabled in chrome iframe');
SpecialPowers.setBoolPref("mathml.disabled", initialPrefValue);
});
</script>

Просмотреть файл

@ -38,9 +38,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=744830
const contentBR = iframeEl.contentDocument.body.getBoundingClientRect();
ok(chromeBR.height > contentBR.height, "Chrome content height should be bigger than content due to layout");
ok(!("hasExtension" in iframeEl.contentDocument.getElementById('svgel')), 'SVG is disabled so no hasExtension support is available in content iframe');
ok(chromeIframeEl.contentDocument.getElementById('svgel').hasExtension("http://www.w3.org/1998/Math/MathML"), 'SVG namespace support is enabled in chrome iframe');
url = "http://mochi.test:8888/chrome/layout/svg/tests/svg_example_script.svg";
const iframeElScript = document.createElement("iframe");
let loadPromiseScript = ContentTaskUtils.waitForEvent(iframeElScript, "load", false);

Просмотреть файл

@ -0,0 +1,4 @@
[required-extensions-1.html]
[Testing foreignObject.hasExtension('http://www.w3.org/1998/Math/MathML')]
expected: FAIL

Просмотреть файл

@ -8,9 +8,6 @@
[SVGGraphicsElement.prototype.getTransformToElement must be removed]
expected: FAIL
[SVGGraphicsElement.prototype.hasExtension must be removed]
expected: FAIL
[SVGGraphicsElement.prototype.requiredFeatures must be removed]
expected: FAIL