Merge m-c to autoland, a=merge

MozReview-Commit-ID: AcDLWqQhcBe
This commit is contained in:
Wes Kocher 2017-03-15 14:29:24 -07:00
Родитель 3ec2d298ad 06af2f1e92
Коммит 1d6765414b
64 изменённых файлов: 16980 добавлений и 15346 удалений

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

@ -1722,7 +1722,7 @@
</emItem>
<emItem blockID="d33f6d48-a555-49dd-96ff-8d75473403a8" id="mozilla_cc2@internetdownloadmanager.com">
<prefs/>
<versionRange minVersion="0" maxVersion="6.26.11" severity="1">
<versionRange minVersion="0" maxVersion="6.26.11" severity="3">
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
<versionRange maxVersion="*" minVersion="53.0a1"/>
</targetApplication>

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

@ -142,6 +142,76 @@ add_task(function* testBadPermissions() {
yield BrowserTestUtils.removeTab(tab1);
});
add_task(function* testMatchDataURI() {
const target = ExtensionTestUtils.loadExtension({
files: {
"page.html": `<!DOCTYPE html>
<meta charset="utf-8">
<script src="page.js"></script>
<iframe id="inherited" src="data:text/html;charset=utf-8,inherited"></iframe>
`,
"page.js": function() {
browser.test.onMessage.addListener((msg, url) => {
window.location.href = url;
});
},
},
background() {
browser.tabs.create({active: true, url: browser.runtime.getURL("page.html")});
},
});
const scripts = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["<all_urls>", "webNavigation"],
},
background() {
browser.webNavigation.onCompleted.addListener(({url, frameId}) => {
browser.test.log(`Document loading complete: ${url}`);
if (frameId === 0) {
browser.test.sendMessage("tab-ready", url);
}
});
browser.test.onMessage.addListener(async msg => {
browser.test.assertRejects(
browser.tabs.executeScript({
code: "location.href;",
allFrames: true,
}),
/No window matching/,
"Should not execute in `data:` frame");
browser.test.sendMessage("done");
});
},
});
yield scripts.startup();
yield target.startup();
// Test extension page with a data: iframe.
const page = yield scripts.awaitMessage("tab-ready");
ok(page.endsWith("page.html"), "Extension page loaded into a tab");
scripts.sendMessage("execute");
yield scripts.awaitMessage("done");
// Test extension tab navigated to a data: URI.
const data = "data:text/html;charset=utf-8,also-inherits";
target.sendMessage("navigate", data);
const url = yield scripts.awaitMessage("tab-ready");
is(url, data, "Extension tab navigated to a data: URI");
scripts.sendMessage("execute");
yield scripts.awaitMessage("done");
yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
yield scripts.unload();
yield target.unload();
});
add_task(function* testBadURL() {
async function background() {
let promises = [

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

@ -298,6 +298,10 @@ BoxModel.prototype = {
}
}
if (property.substring(0, 9) == "position-") {
properties[0].name = property.substring(9);
}
session.setProperties(properties).catch(e => console.error(e));
},
done: (value, commit) => {

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

@ -83,6 +83,15 @@ module.exports = createClass({
return value;
},
getPositionValue(property) {
let { layout } = this.props.boxModel;
if (layout.position === "static") {
return "-";
}
return layout[property] ? parseFloat(layout[property]) : "-";
},
onHighlightMouseOver(event) {
let region = event.target.getAttribute("data-box");
if (!region) {
@ -99,7 +108,7 @@ module.exports = createClass({
render() {
let { boxModel, onShowBoxModelEditor } = this.props;
let { layout } = boxModel;
let { height, width } = layout;
let { height, width, position } = layout;
let borderTop = this.getBorderOrPaddingValue("border-top-width");
let borderRight = this.getBorderOrPaddingValue("border-right-width");
@ -111,6 +120,12 @@ module.exports = createClass({
let paddingBottom = this.getBorderOrPaddingValue("padding-bottom");
let paddingLeft = this.getBorderOrPaddingValue("padding-left");
let displayPosition = layout.position && layout.position != "static";
let positionTop = this.getPositionValue("top");
let positionRight = this.getPositionValue("right");
let positionBottom = this.getPositionValue("bottom");
let positionLeft = this.getPositionValue("left");
let marginTop = this.getMarginValue("margin-top", "top");
let marginRight = this.getMarginValue("margin-right", "right");
let marginBottom = this.getMarginValue("margin-bottom", "bottom");
@ -125,56 +140,112 @@ module.exports = createClass({
onMouseOver: this.onHighlightMouseOver,
onMouseOut: this.props.onHideBoxModelHighlighter,
},
dom.span(
{
className: "boxmodel-legend",
"data-box": "margin",
title: BOXMODEL_L10N.getStr("boxmodel.margin"),
},
BOXMODEL_L10N.getStr("boxmodel.margin")
),
displayPosition ?
dom.span(
{
className: "boxmodel-legend",
"data-box": "position",
title: BOXMODEL_L10N.getFormatStr("boxmodel.position", position),
},
BOXMODEL_L10N.getFormatStr("boxmodel.position", position)
)
:
null,
dom.div(
{
className: "boxmodel-margins",
"data-box": "margin",
title: BOXMODEL_L10N.getStr("boxmodel.margin"),
className: "boxmodel-box"
},
dom.span(
{
className: "boxmodel-legend",
"data-box": "border",
title: BOXMODEL_L10N.getStr("boxmodel.border"),
"data-box": "margin",
title: BOXMODEL_L10N.getStr("boxmodel.margin"),
},
BOXMODEL_L10N.getStr("boxmodel.border")
BOXMODEL_L10N.getStr("boxmodel.margin")
),
dom.div(
{
className: "boxmodel-borders",
"data-box": "border",
title: BOXMODEL_L10N.getStr("boxmodel.border"),
className: "boxmodel-margins",
"data-box": "margin",
title: BOXMODEL_L10N.getStr("boxmodel.margin"),
},
dom.span(
{
className: "boxmodel-legend",
"data-box": "padding",
title: BOXMODEL_L10N.getStr("boxmodel.padding"),
"data-box": "border",
title: BOXMODEL_L10N.getStr("boxmodel.border"),
},
BOXMODEL_L10N.getStr("boxmodel.padding")
BOXMODEL_L10N.getStr("boxmodel.border")
),
dom.div(
{
className: "boxmodel-paddings",
"data-box": "padding",
title: BOXMODEL_L10N.getStr("boxmodel.padding"),
className: "boxmodel-borders",
"data-box": "border",
title: BOXMODEL_L10N.getStr("boxmodel.border"),
},
dom.div({
className: "boxmodel-content",
"data-box": "content",
title: BOXMODEL_L10N.getStr("boxmodel.content"),
})
dom.span(
{
className: "boxmodel-legend",
"data-box": "padding",
title: BOXMODEL_L10N.getStr("boxmodel.padding"),
},
BOXMODEL_L10N.getStr("boxmodel.padding")
),
dom.div(
{
className: "boxmodel-paddings",
"data-box": "padding",
title: BOXMODEL_L10N.getStr("boxmodel.padding"),
},
dom.div({
className: "boxmodel-content",
"data-box": "content",
title: BOXMODEL_L10N.getStr("boxmodel.content"),
})
)
)
)
),
displayPosition ?
BoxModelEditable({
box: "position",
direction: "top",
property: "position-top",
textContent: positionTop,
onShowBoxModelEditor,
})
:
null,
displayPosition ?
BoxModelEditable({
box: "position",
direction: "right",
property: "position-right",
textContent: positionRight,
onShowBoxModelEditor,
})
:
null,
displayPosition ?
BoxModelEditable({
box: "position",
direction: "bottom",
property: "position-bottom",
textContent: positionBottom,
onShowBoxModelEditor,
})
:
null,
displayPosition ?
BoxModelEditable({
box: "position",
direction: "left",
property: "position-left",
textContent: positionLeft,
onShowBoxModelEditor,
})
:
null,
BoxModelEditable({
box: "margin",
direction: "top",

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

@ -15,6 +15,10 @@
# displayed as a label.
boxmodel.title=Box Model
# LOCALIZATION NOTE (boxmodel.position) This refers to the position in the box model and
# might be displayed as a label or as a tooltip.
boxmodel.position=position: %S
# LOCALIZATION NOTE (boxmodel.margin) This refers to the margin in the box model and
# might be displayed as a label or as a tooltip.
boxmodel.margin=margin

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

@ -11,6 +11,7 @@
max-width: 400px;
margin: 0px auto;
padding: 0;
overflow: auto;
}
/* Header */
@ -30,14 +31,18 @@
.boxmodel-main {
position: relative;
box-sizing: border-box;
/* The regions are semi-transparent, so the white background is partly
visible */
background-color: white;
color: var(--theme-selection-color);
/* Make sure there is some space between the window's edges and the regions */
margin: 14px 14px 4px 14px;
width: calc(100% - 2 * 14px);
min-width: 240px;
}
.boxmodel-box {
margin: 25px;
/* The regions are semi-transparent, so the white background is partly
visible */
background-color: white;
}
.boxmodel-margin,
@ -83,12 +88,6 @@
background-color: #87ceeb;
}
.theme-firebug .boxmodel-main,
.theme-firebug .boxmodel-borders,
.theme-firebug .boxmodel-content {
border-style: solid;
}
.theme-firebug .boxmodel-main,
.theme-firebug .boxmodel-header {
font-family: var(--proportional-font-family);
@ -151,6 +150,8 @@
}
.boxmodel-size,
.boxmodel-position.boxmodel-left,
.boxmodel-position.boxmodel-right,
.boxmodel-margin.boxmodel-left,
.boxmodel-margin.boxmodel-right,
.boxmodel-border.boxmodel-left,
@ -165,6 +166,10 @@
width: calc(100% - 2px);
}
.boxmodel-position.boxmodel-top,
.boxmodel-position.boxmodel-bottom,
.boxmodel-position.boxmodel-left,
.boxmodel-position.boxmodel-right,
.boxmodel-margin.boxmodel-right,
.boxmodel-margin.boxmodel-left,
.boxmodel-border.boxmodel-left,
@ -175,27 +180,27 @@
}
.boxmodel-padding.boxmodel-left {
left: 35px;
left: 60px;
}
.boxmodel-padding.boxmodel-right {
right: 35px;
right: 60px;
}
.boxmodel-border.boxmodel-left {
left: 16px;
left: 41px;
}
.boxmodel-border.boxmodel-right {
right: 17px;
right: 42px;
}
.boxmodel-margin.boxmodel-right {
right: 0;
right: 25px;
}
.boxmodel-margin.boxmodel-left {
left: 0;
left: 25px;
}
.boxmodel-rotate.boxmodel-left:not(.boxmodel-editing) {
@ -206,6 +211,57 @@
transform: rotate(90deg);
}
.boxmodel-rotate.boxmodel-left.boxmodel-position:not(.boxmodel-editing) {
border-top: none;
border-right: 1px solid var(--theme-highlight-purple);
width: auto;
height: 30px;
}
.boxmodel-rotate.boxmodel-right.boxmodel-position:not(.boxmodel-editing) {
border-top: none;
border-left: 1px solid var(--theme-highlight-purple);
width: auto;
height: 30px;
}
/* Box Model Positioning: contains top, right, bottom, left */
.boxmodel-position {
color: var(--theme-highlight-purple);
}
.boxmodel-position.boxmodel-top,
.boxmodel-position.boxmodel-bottom {
border-left: 1px solid var(--theme-highlight-purple);
left: 49.5%;
padding-left: 1px;
}
.boxmodel-position.boxmodel-right,
.boxmodel-position.boxmodel-left {
border-top: 1px solid var(--theme-highlight-purple);
line-height: 15px;
top: 49.5%;
width: 30px;
}
.boxmodel-position.boxmodel-top {
top: -18px;
}
.boxmodel-position.boxmodel-right {
right: -9px;
}
.boxmodel-position.boxmodel-bottom {
bottom: -18px;
}
.boxmodel-position.boxmodel-left {
left: -9px;
}
/* Legend: displayed inside regions */
.boxmodel-legend {
@ -218,6 +274,11 @@
color: var(--theme-highlight-blue);
}
.boxmodel-legend[data-box="position"] {
color: var(--theme-highlight-purple);
margin: -18px -9px;
}
/* Editable fields */
.boxmodel-editable {

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

@ -6,6 +6,7 @@
height: 100%;
width: 100%;
overflow: auto;
min-width: 200px;
}
/**

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

@ -771,6 +771,10 @@ var PageStyleActor = protocol.ActorClassWithSpec(pageStyleSpec, {
let style = CssLogic.getComputedStyle(node.rawNode);
for (let prop of [
"position",
"top",
"right",
"bottom",
"left",
"margin-top",
"margin-right",
"margin-bottom",

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

@ -86,5 +86,52 @@ IntlUtils::GetDisplayNames(const Sequence<nsString>& aLocales,
}
}
void
IntlUtils::GetLocaleInfo(const Sequence<nsString>& aLocales,
LocaleInfo& aResult, ErrorResult& aError)
{
MOZ_ASSERT(nsContentUtils::IsCallerChrome() ||
nsContentUtils::IsCallerContentXBL());
nsCOMPtr<mozIMozIntl> mozIntl = do_GetService("@mozilla.org/mozintl;1");
if (!mozIntl) {
aError.Throw(NS_ERROR_UNEXPECTED);
return;
}
AutoJSAPI jsapi;
if (!jsapi.Init(xpc::PrivilegedJunkScope())) {
aError.Throw(NS_ERROR_FAILURE);
return;
}
JSContext* cx = jsapi.cx();
// Prepare parameter for getLocaleInfo().
JS::Rooted<JS::Value> locales(cx);
if (!ToJSValue(cx, aLocales, &locales)) {
aError.StealExceptionFromJSContext(cx);
return;
}
// Now call the method.
JS::Rooted<JS::Value> retVal(cx);
nsresult rv = mozIntl->GetLocaleInfo(locales, &retVal);
if (NS_FAILED(rv)) {
aError.Throw(rv);
return;
}
if (!retVal.isObject()) {
aError.Throw(NS_ERROR_FAILURE);
return;
}
// Return the result as LocaleInfo.
JSAutoCompartment ac(cx, &retVal.toObject());
if (!aResult.Init(cx, retVal)) {
aError.Throw(NS_ERROR_FAILURE);
}
}
} // dom namespace
} // mozilla namespace

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

@ -36,6 +36,11 @@ public:
mozilla::dom::DisplayNameResult& aResult,
mozilla::ErrorResult& aError);
void
GetLocaleInfo(const Sequence<nsString>& aLocales,
mozilla::dom::LocaleInfo& aResult,
mozilla::ErrorResult& aError);
private:
~IntlUtils();

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

@ -1144,7 +1144,7 @@ bool
ActivateOrDeactivateChild(TabParent* aParent, void* aArg)
{
bool active = static_cast<bool>(aArg);
Unused << aParent->Manager()->AsContentParent()->SendParentActivated(aParent, active);
Unused << aParent->Manager()->SendParentActivated(aParent, active);
return false;
}

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

@ -204,5 +204,26 @@ ContentBridgeChild::DeallocPFileDescriptorSetChild(PFileDescriptorSetChild* aAct
return nsIContentChild::DeallocPFileDescriptorSetChild(aActor);
}
mozilla::ipc::IPCResult
ContentBridgeChild::RecvActivate(PBrowserChild* aTab)
{
TabChild* tab = static_cast<TabChild*>(aTab);
return tab->RecvActivate();
}
mozilla::ipc::IPCResult
ContentBridgeChild::RecvDeactivate(PBrowserChild* aTab)
{
TabChild* tab = static_cast<TabChild*>(aTab);
return tab->RecvDeactivate();
}
mozilla::ipc::IPCResult
ContentBridgeChild::RecvParentActivated(PBrowserChild* aTab, const bool& aActivated)
{
TabChild* tab = static_cast<TabChild*>(aTab);
return tab->RecvParentActivated(aActivated);
}
} // namespace dom
} // namespace mozilla

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

@ -51,6 +51,13 @@ public:
virtual mozilla::ipc::PChildToParentStreamChild*
SendPChildToParentStreamConstructor(mozilla::ipc::PChildToParentStreamChild*) override;
virtual mozilla::ipc::IPCResult RecvActivate(PBrowserChild* aTab) override;
virtual mozilla::ipc::IPCResult RecvDeactivate(PBrowserChild* aTab) override;
virtual mozilla::ipc::IPCResult RecvParentActivated(PBrowserChild* aTab,
const bool& aActivated) override;
FORWARD_SHMEM_ALLOCATOR_TO(PContentBridgeChild)
protected:

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

@ -69,6 +69,22 @@ public:
virtual mozilla::ipc::PParentToChildStreamParent*
SendPParentToChildStreamConstructor(mozilla::ipc::PParentToChildStreamParent*) override;
virtual bool SendActivate(PBrowserParent* aTab) override
{
return PContentBridgeParent::SendActivate(aTab);
}
virtual bool SendDeactivate(PBrowserParent* aTab) override
{
return PContentBridgeParent::SendDeactivate(aTab);
}
virtual bool SendParentActivated(PBrowserParent* aTab,
const bool& aActivated) override
{
return PContentBridgeParent::SendParentActivated(aTab, aActivated);
}
protected:
virtual ~ContentBridgeParent();

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

@ -1966,9 +1966,12 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
extraArgs.push_back(idStr);
extraArgs.push_back(IsForBrowser() ? "-isForBrowser" : "-notForBrowser");
std::stringstream boolPrefs;
std::stringstream intPrefs;
std::stringstream stringPrefs;
char boolBuf[1024];
char intBuf[1024];
char strBuf[1024];
nsFixedCString boolPrefs(boolBuf, 1024, 0);
nsFixedCString intPrefs(intBuf, 1024, 0);
nsFixedCString stringPrefs(strBuf, 1024, 0);
size_t prefsLen;
ContentPrefs::GetContentPrefs(&prefsLen);
@ -1977,14 +1980,15 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
MOZ_ASSERT(i == 0 || strcmp(ContentPrefs::GetContentPref(i), ContentPrefs::GetContentPref(i - 1)) > 0);
switch (Preferences::GetType(ContentPrefs::GetContentPref(i))) {
case nsIPrefBranch::PREF_INT:
intPrefs << i << ':' << Preferences::GetInt(ContentPrefs::GetContentPref(i)) << '|';
intPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetInt(ContentPrefs::GetContentPref(i))));
break;
case nsIPrefBranch::PREF_BOOL:
boolPrefs << i << ':' << Preferences::GetBool(ContentPrefs::GetContentPref(i)) << '|';
boolPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetBool(ContentPrefs::GetContentPref(i))));
break;
case nsIPrefBranch::PREF_STRING: {
std::string value(Preferences::GetCString(ContentPrefs::GetContentPref(i)).get());
stringPrefs << i << ':' << value.length() << ':' << value << '|';
nsAdoptingCString value(Preferences::GetCString(ContentPrefs::GetContentPref(i)));
stringPrefs.Append(nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
}
break;
case nsIPrefBranch::PREF_INVALID:
@ -1996,11 +2000,11 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
}
extraArgs.push_back("-intPrefs");
extraArgs.push_back(intPrefs.str());
extraArgs.push_back(intPrefs.get());
extraArgs.push_back("-boolPrefs");
extraArgs.push_back(boolPrefs.str());
extraArgs.push_back(boolPrefs.get());
extraArgs.push_back("-stringPrefs");
extraArgs.push_back(stringPrefs.str());
extraArgs.push_back(stringPrefs.get());
if (gSafeMode) {
extraArgs.push_back("-safeMode");

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

@ -611,6 +611,23 @@ public:
const Principal& aPrincipal,
const bool& aUseTrackingProtection,
bool* aSuccess) override;
virtual bool SendActivate(PBrowserParent* aTab) override
{
return PContentParent::SendActivate(aTab);
}
virtual bool SendDeactivate(PBrowserParent* aTab) override
{
return PContentParent::SendDeactivate(aTab);
}
virtual bool SendParentActivated(PBrowserParent* aTab,
const bool& aActivated) override
{
return PContentParent::SendParentActivated(aTab, aActivated);
}
virtual bool
DeallocPURLClassifierParent(PURLClassifierParent* aActor) override;

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

@ -160,8 +160,10 @@ ContentProcess::Init(int aArgc, char* aArgv[])
char* str = aArgv[idx + 1];
while (*str) {
int32_t index = strtol(str, &str, 10);
MOZ_ASSERT(str[0] == ':');
str++;
MaybePrefValue value(PrefValue(static_cast<int32_t>(strtol(str, &str, 10))));
MOZ_ASSERT(str[0] == '|');
str++;
PrefSetting pref(nsCString(ContentPrefs::GetContentPref(index)), value, MaybePrefValue());
prefsArray.AppendElement(pref);
@ -173,8 +175,10 @@ ContentProcess::Init(int aArgc, char* aArgv[])
char* str = aArgv[idx + 1];
while (*str) {
int32_t index = strtol(str, &str, 10);
MOZ_ASSERT(str[0] == ':');
str++;
MaybePrefValue value(PrefValue(!!strtol(str, &str, 10)));
MOZ_ASSERT(str[0] == '|');
str++;
PrefSetting pref(nsCString(ContentPrefs::GetContentPref(index)), value, MaybePrefValue());
prefsArray.AppendElement(pref);
@ -186,13 +190,16 @@ ContentProcess::Init(int aArgc, char* aArgv[])
char* str = aArgv[idx + 1];
while (*str) {
int32_t index = strtol(str, &str, 10);
MOZ_ASSERT(str[0] == ':');
str++;
int32_t length = strtol(str, &str, 10);
MOZ_ASSERT(str[0] == ';');
str++;
MaybePrefValue value(PrefValue(nsCString(str, length)));
PrefSetting pref(nsCString(ContentPrefs::GetContentPref(index)), value, MaybePrefValue());
prefsArray.AppendElement(pref);
str += length + 1;
MOZ_ASSERT(*(str - 1) == '|');
}
SET_PREF_PHASE(END_INIT_PREFS);
foundStringPrefs = true;

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

@ -45,6 +45,16 @@ nested(upto inside_cpow) sync protocol PContentBridge
child:
async PParentToChildStream();
child:
/**
* Sending an activate message moves focus to the child.
*/
async Activate(PBrowser aTab);
async Deactivate(PBrowser aTab);
async ParentActivated(PBrowser aTab, bool aActivated);
parent:
sync SyncMessage(nsString aMessage, ClonedMessageData aData,
CpowEntry[] aCpows, Principal aPrincipal)

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

@ -358,6 +358,8 @@ public:
mozilla::ipc::IPCResult RecvDeactivate();
mozilla::ipc::IPCResult RecvParentActivated(const bool& aActivated);
virtual mozilla::ipc::IPCResult RecvMouseEvent(const nsString& aType,
const float& aX,
const float& aY,
@ -692,8 +694,6 @@ protected:
virtual mozilla::ipc::IPCResult RecvSuppressDisplayport(const bool& aEnabled) override;
mozilla::ipc::IPCResult RecvParentActivated(const bool& aActivated);
virtual mozilla::ipc::IPCResult RecvSetKeyboardIndicators(const UIStateChangeType& aShowAccelerators,
const UIStateChangeType& aShowFocusRings) override;

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

@ -859,7 +859,7 @@ void
TabParent::Activate()
{
if (!mIsDestroyed) {
Unused << Manager()->AsContentParent()->SendActivate(this);
Unused << Manager()->SendActivate(this);
}
}
@ -867,7 +867,7 @@ void
TabParent::Deactivate()
{
if (!mIsDestroyed) {
Unused << Manager()->AsContentParent()->SendDeactivate(this);
Unused << Manager()->SendDeactivate(this);
}
}

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

@ -91,6 +91,13 @@ public:
nsFrameMessageManager* GetMessageManager() const { return mMessageManager; }
virtual bool SendActivate(PBrowserParent* aTab) = 0;
virtual bool SendDeactivate(PBrowserParent* aTab) = 0;
virtual bool SendParentActivated(PBrowserParent* aTab,
const bool& aActivated) = 0;
virtual int32_t Pid() const = 0;
virtual mozilla::ipc::PParentToChildStreamParent*

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

@ -90,8 +90,15 @@ class Manifest {
}
async icon(expectedSize) {
return await ManifestIcons
if ('cached_icon' in this._store.data) {
return this._store.data.cached_icon;
}
const icon = await ManifestIcons
.browserFetchIcon(this._browser, this._store.data.manifest, expectedSize);
// Cache the icon so future requests do not go over the network
this._store.data.cached_icon = icon;
this._store.saveSoon();
return icon;
}
get scope() {
@ -116,6 +123,10 @@ class Manifest {
get start_url() {
return this._store.data.manifest.start_url;
}
get path() {
return this._path;
}
}
/*

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

@ -63,7 +63,7 @@ async function getIcon(aWindow, icons, expectedSize) {
return fetchIcon(aWindow, icons[index].src).catch(err => {
// Remove all icons with the failed source, the same source
// may have been used for multiple sizes
icons = icons.filter(x => x.src === icons[index].src);
icons = icons.filter(x => x.src !== icons[index].src);
return getIcon(aWindow, icons, expectedSize);
});
}

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

@ -65,6 +65,7 @@ skip-if = os == 'linux'
[test_geolocation.xul]
[test_indexedSetter.html]
[test_intlUtils_getDisplayNames.html]
[test_intlUtils_getLocaleInfo.html]
[test_moving_nodeList.xul]
[test_moving_xhr.xul]
[test_MozDomFullscreen_event.xul]

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

@ -0,0 +1,69 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1346084
-->
<head>
<title>Test for Bug 1346084 </title>
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1346084 ">Mozilla Bug 1346084</a>
<p id="display"></p>
<div id="content" style="display: none">
<script>
const Cc = Components.classes;
const Ci = Components.interfaces;
const localeService =
Cc["@mozilla.org/intl/localeservice;1"].getService(Ci.mozILocaleService);
const mozIntl = Cc["@mozilla.org/mozintl;1"].getService(Ci.mozIMozIntl);
let appLocale = localeService.getAppLocalesAsBCP47()[0];
let testData = [
{
locales: ["en-US"],
expected: {
locale: "en-US",
direction: "ltr",
}
},
{
locales: ["fr"],
expected: {
locale: "fr",
direction: "ltr",
}
},
{
locales: ["ar"],
expected: {
locale: "ar",
direction: "rtl",
}
},
// IntlUtils uses current app locales if locales is not provided.
{
locales: [],
expected: {
locale: appLocale,
direction: mozIntl.getLocaleInfo(appLocale).direction,
}
},
];
let intlUtils = window.intlUtils;
ok(intlUtils, "window.intlUtils should exist");
for (let { locales, expected } of testData) {
let result = intlUtils.getLocaleInfo(locales);
is(result.locale, expected.locale, "locale is " + expected.locale);
is(result.direction, expected.direction, "direction is " + expected.direction);
}
</script>
</body>
</html>

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

@ -13,6 +13,11 @@ dictionary DisplayNameResult {
record<DOMString, DOMString> values;
};
dictionary LocaleInfo {
DOMString locale;
DOMString direction;
};
/**
* The IntlUtils interface provides helper functions for localization.
*/
@ -47,4 +52,22 @@ interface IntlUtils {
[Throws]
DisplayNameResult getDisplayNames(sequence<DOMString> locales,
optional DisplayNameOptions options);
/**
* Helper function to retrieve useful information about a locale.
*
* The function takes one argument - locales which is a list of locale
* strings.
*
* It returns an object with properties:
*
* locale:
* a negotiated locale string
*
* direction:
* text direction, "ltr" or "rtl"
*
*/
[Throws]
LocaleInfo getLocaleInfo(sequence<DOMString> locales);
};

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

@ -1034,7 +1034,7 @@ void SkGpuDevice::drawBitmapTile(const SkBitmap& bitmap,
SkMatrix texMatrix;
// Compute a matrix that maps the rect we will draw to the src rect.
texMatrix.setRectToRect(dstRect, srcRect, SkMatrix::kStart_ScaleToFit);
texMatrix.setRectToRect(dstRect, srcRect, SkMatrix::kFill_ScaleToFit);
texMatrix.postScale(iw, ih);
// Construct a GrPaint by setting the bitmap texture as the first effect and then configuring

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

@ -0,0 +1,3 @@
// |jit-test| error: ReferenceError
for (let [k, map = send.log += "" + map] of map) {}

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

@ -1217,10 +1217,26 @@ GetPropIRGenerator::tryAttachStringChar(ValOperandId valId, ValOperandId indexId
if (!val_.isString())
return false;
JSString* str = val_.toString();
int32_t index = idVal_.toInt32();
if (size_t(index) >= str->length() ||
!str->isLinear() ||
if (index < 0)
return false;
JSString* str = val_.toString();
if (size_t(index) >= str->length())
return false;
// This follows JSString::getChar, otherwise we fail to attach getChar in a lot of cases.
if (str->isRope()) {
JSRope* rope = &str->asRope();
// Make sure the left side contains the index.
if (size_t(index) >= rope->leftChild()->length())
return false;
str = rope->leftChild();
}
if (!str->isLinear() ||
str->asLinear().latin1OrTwoByteChar(index) >= StaticStrings::UNIT_STATIC_LIMIT)
{
return false;

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

@ -1758,12 +1758,10 @@ CacheIRCompiler::emitLoadStringCharResult()
if (!addFailurePath(&failure))
return false;
masm.branchIfRope(str, failure->label());
// Bounds check, load string char.
masm.branch32(Assembler::BelowOrEqual, Address(str, JSString::offsetOfLength()),
index, failure->label());
masm.loadStringChar(str, index, scratch1);
masm.loadStringChar(str, index, scratch1, failure->label());
// Load StaticString for this char.
masm.branch32(Assembler::AboveOrEqual, scratch1, Imm32(StaticStrings::UNIT_STATIC_LIMIT),

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

@ -7966,10 +7966,7 @@ CodeGenerator::visitCharCodeAt(LCharCodeAt* lir)
Register output = ToRegister(lir->output());
OutOfLineCode* ool = oolCallVM(CharCodeAtInfo, lir, ArgList(str, index), StoreRegisterTo(output));
masm.branchIfRope(str, ool->entry());
masm.loadStringChar(str, index, output);
masm.loadStringChar(str, index, output, ool->entry());
masm.bind(ool->rejoin());
}

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

@ -3228,13 +3228,15 @@ IonBuilder::binaryArithTryConcat(bool* emitted, JSOp op, MDefinition* left, MDef
// The non-string input (if present) should be atleast easily coercible to string.
if (right->type() != MIRType::String &&
(right->mightBeType(MIRType::Symbol) || right->mightBeType(MIRType::Object)))
(right->mightBeType(MIRType::Symbol) || right->mightBeType(MIRType::Object) ||
right->mightBeMagicType()))
{
trackOptimizationOutcome(TrackedOutcome::OperandNotEasilyCoercibleToString);
return Ok();
}
if (left->type() != MIRType::String &&
(left->mightBeType(MIRType::Symbol) || left->mightBeType(MIRType::Object)))
(left->mightBeType(MIRType::Symbol) || left->mightBeType(MIRType::Object) ||
left->mightBeMagicType()))
{
trackOptimizationOutcome(TrackedOutcome::OperandNotEasilyCoercibleToString);
return Ok();

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

@ -395,6 +395,14 @@ MacroAssembler::branchIfRope(Register str, Label* label)
branchTest32(Assembler::Zero, flags, Imm32(JSString::TYPE_FLAGS_MASK), label);
}
void
MacroAssembler::branchIfNotRope(Register str, Label* label)
{
Address flags(str, JSString::offsetOfFlags());
static_assert(JSString::ROPE_FLAGS == 0, "Rope type flags must be 0");
branchTest32(Assembler::NonZero, flags, Imm32(JSString::TYPE_FLAGS_MASK), label);
}
void
MacroAssembler::branchLatin1String(Register string, Label* label)
{

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

@ -1383,12 +1383,29 @@ MacroAssembler::loadStringChars(Register str, Register dest)
}
void
MacroAssembler::loadStringChar(Register str, Register index, Register output)
MacroAssembler::loadStringChar(Register str, Register index, Register output, Label* fail)
{
MOZ_ASSERT(str != output);
MOZ_ASSERT(index != output);
loadStringChars(str, output);
movePtr(str, output);
// This follows JSString::getChar.
Label notRope;
branchIfNotRope(str, &notRope);
// Load leftChild.
loadPtr(Address(str, JSRope::offsetOfLeft()), output);
// Check if the index is contained in the leftChild.
// Todo: Handle index in the rightChild.
branch32(Assembler::BelowOrEqual, Address(output, JSString::offsetOfLength()), index, fail);
// If the left side is another rope, give up.
branchIfRope(output, fail);
bind(&notRope);
loadStringChars(output, output);
Label isLatin1, done;
branchLatin1String(str, &isLatin1);

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

@ -1113,6 +1113,7 @@ class MacroAssembler : public MacroAssemblerSpecific
inline void branchIfTrueBool(Register reg, Label* label);
inline void branchIfRope(Register str, Label* label);
inline void branchIfNotRope(Register str, Label* label);
inline void branchLatin1String(Register string, Label* label);
inline void branchTwoByteString(Register string, Label* label);
@ -1493,7 +1494,7 @@ class MacroAssembler : public MacroAssemblerSpecific
}
void loadStringChars(Register str, Register dest);
void loadStringChar(Register str, Register index, Register output);
void loadStringChar(Register str, Register index, Register output, Label* fail);
void loadJSContext(Register dest);
void loadJitActivation(Register dest) {

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

@ -1460,7 +1460,8 @@ class StringSegmentRange
{
// If malloc() shows up in any profiles from this vector, we can add a new
// StackAllocPolicy which stashes a reusable freed-at-gc buffer in the cx.
Rooted<StringVector> stack;
using StackVector = JS::GCVector<JSString*, 16>;
Rooted<StackVector> stack;
RootedLinearString cur;
bool settle(JSString* str) {
@ -1476,7 +1477,7 @@ class StringSegmentRange
public:
explicit StringSegmentRange(JSContext* cx)
: stack(cx, StringVector(cx)), cur(cx)
: stack(cx, StackVector(cx)), cur(cx)
{}
MOZ_MUST_USE bool init(JSString* str) {

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

@ -68,6 +68,7 @@
#include "gfxPlatform.h"
#include <algorithm>
#include <limits>
#include "mozilla/dom/AnonymousContent.h"
#include "mozilla/dom/HTMLVideoElement.h"
#include "mozilla/dom/HTMLImageElement.h"
#include "mozilla/dom/DOMRect.h"
@ -1157,15 +1158,55 @@ GetDisplayPortFromMarginsData(nsIContent* aContent,
}
static bool
ShouldDisableApzForElement(nsIContent* aContent)
HasVisibleAnonymousContents(nsIDocument* aDoc)
{
if (gfxPrefs::APZDisableForScrollLinkedEffects() && aContent) {
nsIDocument* doc = aContent->GetComposedDoc();
return (doc && doc->HasScrollLinkedEffect());
for (RefPtr<AnonymousContent>& ac : aDoc->GetAnonymousContents()) {
Element* elem = ac->GetContentNode();
// We check to see if the anonymous content node has a frame. If it doesn't,
// that means that's not visible to the user because e.g. it's display:none.
// For now we assume that if it has a frame, it is visible. We might be able
// to refine this further by adding complexity if it turns out this condition
// results in a lot of false positives.
if (elem && elem->GetPrimaryFrame()) {
return true;
}
}
return false;
}
bool
nsLayoutUtils::ShouldDisableApzForElement(nsIContent* aContent)
{
if (!aContent) {
return false;
}
nsIDocument* doc = aContent->GetComposedDoc();
nsIPresShell* rootShell = APZCCallbackHelper::GetRootContentDocumentPresShellForContent(aContent);
if (rootShell) {
if (nsIDocument* rootDoc = rootShell->GetDocument()) {
nsIContent* rootContent = rootShell->GetRootScrollFrame()
? rootShell->GetRootScrollFrame()->GetContent()
: rootDoc->GetDocumentElement();
// For the AccessibleCaret: disable APZ on any scrollable subframes that
// are not the root scrollframe of a document, if the document has any
// visible anonymous contents.
// If we find this is triggering in too many scenarios then we might
// want to tighten this check further. The main use cases for which we want
// to disable APZ as of this writing are listed in bug 1316318.
if (aContent != rootContent && HasVisibleAnonymousContents(rootDoc)) {
return true;
}
}
}
if (!doc) {
return false;
}
return gfxPrefs::APZDisableForScrollLinkedEffects() &&
doc->HasScrollLinkedEffect();
}
static bool
GetDisplayPortData(nsIContent* aContent,
DisplayPortPropertyData** aOutRectData,
@ -1230,7 +1271,8 @@ GetDisplayPortImpl(nsIContent* aContent, nsRect* aResult, float aMultiplier)
nsRect result;
if (rectData) {
result = GetDisplayPortFromRectData(aContent, rectData, aMultiplier);
} else if (APZCCallbackHelper::IsDisplayportSuppressed() || ShouldDisableApzForElement(aContent)) {
} else if (APZCCallbackHelper::IsDisplayportSuppressed() ||
nsLayoutUtils::ShouldDisableApzForElement(aContent)) {
DisplayPortMarginsPropertyData noMargins(ScreenMargin(), 1);
result = GetDisplayPortFromMarginsData(aContent, &noMargins, aMultiplier);
} else {

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

@ -2684,6 +2684,14 @@ public:
*/
static float GetCurrentAPZResolutionScale(nsIPresShell* aShell);
/**
* Returns true if we need to disable async scrolling for this particular
* element. Note that this does a partial disabling - the displayport still
* exists but uses a very small margin, and the compositor doesn't apply the
* async transform. However, the content may still be layerized.
*/
static bool ShouldDisableApzForElement(nsIContent* aContent);
/**
* Log a key/value pair for APZ testing during a paint.
* @param aManager The data will be written to the APZTestData associated

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

@ -2818,7 +2818,9 @@ ScrollFrameHelper::ScrollToImpl(nsPoint aPt, const nsRect& aRange, nsIAtom* aOri
ScrollVisual();
bool schedulePaint = true;
if (nsLayoutUtils::AsyncPanZoomEnabled(mOuter) && gfxPrefs::APZPaintSkipping()) {
if (nsLayoutUtils::AsyncPanZoomEnabled(mOuter) &&
!nsLayoutUtils::ShouldDisableApzForElement(content) &&
gfxPrefs::APZPaintSkipping()) {
// If APZ is enabled with paint-skipping, there are certain conditions in
// which we can skip paints:
// 1) If APZ triggered this scroll, and the tile-aligned displayport is

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

@ -54,6 +54,7 @@
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:relinquishTaskIdentity="true"
android:taskAffinity=""
android:exported="true"
android:excludeFromRecents="true" />
<!-- Fennec is shipped as the Android package named
@ -316,6 +317,8 @@
<activity android:name="org.mozilla.gecko.customtabs.CustomTabsActivity"
android:theme="@style/GeckoCustomTabs" />
#endif
<activity android:name="org.mozilla.gecko.webapps.WebAppActivity"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<!-- Service to handle requests from overlays. -->
<service android:name="org.mozilla.gecko.overlays.service.OverlayActionService" />

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

@ -2037,10 +2037,11 @@ public class BrowserApp extends GeckoApp
case "Website:AppInstalled":
final String name = message.getString("name");
final String startUrl = message.getString("start_url");
final String manifestPath = message.getString("manifest_path");
final Bitmap icon = FaviconDecoder
.decodeDataURI(getContext(), message.getString("icon"))
.getBestBitmap(GeckoAppShell.getPreferredIconSize());
createShortcut(name, startUrl, icon);
createAppShortcut(name, startUrl, manifestPath, icon);
break;
case "Updater:Launch":

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

@ -40,12 +40,14 @@ import org.mozilla.gecko.updater.UpdateServiceHelper;
import org.mozilla.gecko.util.ActivityResultHandler;
import org.mozilla.gecko.util.ActivityUtils;
import org.mozilla.gecko.util.BundleEventListener;
import org.mozilla.gecko.util.ColorUtil;
import org.mozilla.gecko.util.EventCallback;
import org.mozilla.gecko.util.FileUtils;
import org.mozilla.gecko.util.GeckoBundle;
import org.mozilla.gecko.util.HardwareUtils;
import org.mozilla.gecko.util.PrefUtils;
import org.mozilla.gecko.util.ThreadUtils;
import org.mozilla.gecko.webapps.WebAppActivity;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
@ -145,6 +147,7 @@ public abstract class GeckoApp
public static final String ACTION_ALERT_CALLBACK = "org.mozilla.gecko.ALERT_CALLBACK";
public static final String ACTION_HOMESCREEN_SHORTCUT = "org.mozilla.gecko.BOOKMARK";
public static final String ACTION_WEBAPP = "org.mozilla.gecko.WEBAPP";
public static final String ACTION_DEBUG = "org.mozilla.gecko.DEBUG";
public static final String ACTION_LAUNCH_SETTINGS = "org.mozilla.gecko.SETTINGS";
public static final String ACTION_LOAD = "org.mozilla.gecko.LOAD";
@ -2022,13 +2025,25 @@ public abstract class GeckoApp
}
public void createShortcut(final String aTitle, final String aURI, final Bitmap aIcon) {
// The intent to be launched by the shortcut.
Intent shortcutIntent = new Intent();
shortcutIntent.setAction(GeckoApp.ACTION_HOMESCREEN_SHORTCUT);
shortcutIntent.setData(Uri.parse(aURI));
shortcutIntent.setClassName(AppConstants.ANDROID_PACKAGE_NAME,
AppConstants.MOZ_ANDROID_BROWSER_INTENT_CLASS);
createHomescreenIcon(shortcutIntent, aTitle, aURI, aIcon);
}
public void createAppShortcut(final String aTitle, final String aURI, final String manifestPath, final Bitmap aIcon) {
Intent shortcutIntent = new Intent();
shortcutIntent.setAction(GeckoApp.ACTION_WEBAPP);
shortcutIntent.setData(Uri.parse(aURI));
shortcutIntent.putExtra("MANIFEST_PATH", manifestPath);
shortcutIntent.setClassName(AppConstants.ANDROID_PACKAGE_NAME, LauncherActivity.class.getName());
createHomescreenIcon(shortcutIntent, aTitle, aURI, aIcon);
}
public void createHomescreenIcon(final Intent shortcutIntent, final String aTitle,
final String aURI, final Bitmap aIcon) {
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, getLauncherIcon(aIcon, GeckoAppShell.getPreferredIconSize()));

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

@ -11,6 +11,7 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.customtabs.CustomTabsIntent;
import org.mozilla.gecko.webapps.WebAppActivity;
import org.mozilla.gecko.customtabs.CustomTabsActivity;
import org.mozilla.gecko.db.BrowserContract;
import org.mozilla.gecko.mozglue.SafeIntent;
@ -30,8 +31,12 @@ public class LauncherActivity extends Activity {
final SafeIntent safeIntent = new SafeIntent(getIntent());
// Is this web app?
if (isWebAppIntent(safeIntent)) {
dispatchWebAppIntent();
// If it's not a view intent, it won't be a custom tabs intent either. Just launch!
if (!isViewIntentWithURL(safeIntent)) {
} else if (!isViewIntentWithURL(safeIntent)) {
dispatchNormalIntent();
// Is this a custom tabs intent, and are custom tabs enabled?
@ -83,6 +88,15 @@ public class LauncherActivity extends Activity {
startActivity(intent);
}
private void dispatchWebAppIntent() {
Intent intent = new Intent(getIntent());
intent.setClassName(getApplicationContext(), WebAppActivity.class.getName());
filterFlags(intent);
startActivity(intent);
}
private static void filterFlags(Intent intent) {
// Explicitly remove the new task and clear task flags (Our browser activity is a single
// task activity and we never want to start a second task here). See bug 1280112.
@ -104,6 +118,10 @@ public class LauncherActivity extends Activity {
&& safeIntent.hasExtra(CustomTabsIntent.EXTRA_SESSION);
}
private static boolean isWebAppIntent(@NonNull final SafeIntent safeIntent) {
return GeckoApp.ACTION_WEBAPP.equals(safeIntent.getAction());
}
private boolean isCustomTabsEnabled() {
return GeckoSharedPrefs.forApp(this).getBoolean(GeckoPreferences.PREFS_CUSTOM_TABS, false);
}

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

@ -22,6 +22,7 @@ import org.mozilla.gecko.distribution.Distribution;
import org.mozilla.gecko.util.FileUtils;
import org.mozilla.gecko.util.GeckoJarReader;
import org.mozilla.gecko.util.HardwareUtils;
import org.mozilla.gecko.util.IOUtils;
import org.mozilla.gecko.util.RawResource;
import org.mozilla.gecko.util.StringUtils;
import org.mozilla.gecko.util.ThreadUtils;
@ -42,6 +43,8 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Locale;
import org.json.JSONObject;
import org.json.JSONArray;
/**
* This class is not thread-safe, except where otherwise noted.
@ -66,6 +69,9 @@ public class SearchEngineManager implements SharedPreferences.OnSharedPreference
// URL for the geo-ip location service. Keep in sync with "browser.search.geoip.url" perference in Gecko.
private static final String GEOIP_LOCATION_URL = "https://location.services.mozilla.com/v1/country?key=" + AppConstants.MOZ_MOZILLA_API_KEY;
// The API we're using requires a file size, so set an arbitrarily large one
public static final int MAX_LISTJSON_SIZE = 8192;
// This should go through GeckoInterface to get the UA, but the search activity
// doesn't use a GeckoView yet. Until it does, get the UA directly.
private static final String USER_AGENT = HardwareUtils.isTablet() ?
@ -559,7 +565,7 @@ public class SearchEngineManager implements SharedPreferences.OnSharedPreference
/**
* Creates a SearchEngine instance for a search plugin shipped in the locale.
*
* This method reads the list of search plugin file names from list.txt, then
* This method reads the list of search plugin file names from list.json, then
* iterates through the files, creating SearchEngine instances until it finds one
* with the right name. Unfortunately, we need to do this because there is no
* other way to map the search engine "name" to the file for the search plugin.
@ -568,33 +574,42 @@ public class SearchEngineManager implements SharedPreferences.OnSharedPreference
* @return SearchEngine instance for name.
*/
private SearchEngine createEngineFromLocale(String name) {
final InputStream in = getInputStreamFromSearchPluginsJar("list.txt");
final InputStream in = getInputStreamFromSearchPluginsJar("list.json");
if (in == null) {
return null;
}
final BufferedReader br = getBufferedReader(in);
JSONObject json;
try {
String identifier;
while ((identifier = br.readLine()) != null) {
final InputStream pluginIn = getInputStreamFromSearchPluginsJar(identifier + ".xml");
// pluginIn can be null if the xml file doesn't exist which
// can happen with :hidden plugins
json = new JSONObject(FileUtils.readStringFromInputStreamAndCloseStream(in, MAX_LISTJSON_SIZE));
} catch (IOException e) {
Log.e(LOG_TAG, "Error reading list.json", e);
return null;
} catch (JSONException e) {
Log.e(LOG_TAG, "Error parsing list.json", e);
return null;
} finally {
IOUtils.safeStreamClose(in);
}
try {
String region = GeckoSharedPrefs.forApp(context).getString(PREF_REGION_KEY, null);
JSONArray engines;
if (json.has(region)) {
engines = json.getJSONObject(region).getJSONArray("visibleDefaultEngines");
} else {
engines = json.getJSONObject("default").getJSONArray("visibleDefaultEngines");
}
for (int i = 0; i < engines.length(); i++) {
final InputStream pluginIn = getInputStreamFromSearchPluginsJar(engines.getString(i) + ".xml");
if (pluginIn != null) {
final SearchEngine engine = createEngineFromInputStream(identifier, pluginIn);
if (engine != null && engine.getName().equals(name)) {
return engine;
}
final SearchEngine engine = createEngineFromInputStream(engines.getString(i), pluginIn);
if (engine != null && engine.getName().equals(name)) {
return engine;
}
}
}
} catch (Throwable e) {
Log.e(LOG_TAG, "Error creating shipped search engine from name: " + name, e);
} finally {
try {
br.close();
} catch (IOException e) {
// Ignore.
}
}
return null;
}

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

@ -29,6 +29,19 @@ public class ColorUtil {
}
}
public static Integer parseStringColor(final String color) {
try {
if (color.length() < 7) {
return null;
}
return Color.argb(255,
Integer.valueOf(color.substring(1, 3), 16),
Integer.valueOf(color.substring(3, 5), 16),
Integer.valueOf(color.substring(5, 7), 16));
} catch (NumberFormatException e) { }
return null;
}
private static int darkenColor(final int color, final double fraction) {
return (int) Math.max(color - (color * fraction), 0);
}

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

@ -0,0 +1,112 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.webapps;
import java.io.File;
import java.io.IOException;
import android.app.ActivityManager;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.util.Log;
import org.json.JSONObject;
import org.json.JSONException;
import org.mozilla.gecko.AppConstants;
import org.mozilla.gecko.EventDispatcher;
import org.mozilla.gecko.GeckoApp;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.GeckoProfile;
import org.mozilla.gecko.icons.decoders.FaviconDecoder;
import org.mozilla.gecko.R;
import org.mozilla.gecko.util.ColorUtil;
import org.mozilla.gecko.util.EventCallback;
import org.mozilla.gecko.util.FileUtils;
import org.mozilla.gecko.util.GeckoBundle;
public class WebAppActivity extends GeckoApp {
public static final String INTENT_KEY = "IS_A_WEBAPP";
public static final String MANIFEST_PATH = "MANIFEST_PATH";
private static final String LOGTAG = "WebAppActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String manifestPath = getIntent().getStringExtra(WebAppActivity.MANIFEST_PATH);
if (manifestPath != null) {
updateFromManifest(manifestPath);
}
}
@Override
public int getLayout() {
return R.layout.webapp_activity;
}
private void updateFromManifest(String manifestPath) {
try {
final File manifestFile = new File(manifestPath);
final JSONObject manifest = FileUtils.readJSONObjectFromFile(manifestFile);
final JSONObject manifestField = (JSONObject) manifest.get("manifest");
final Integer color = readColorFromManifest(manifestField);
final String name = readNameFromManifest(manifestField);
final Bitmap icon = readIconFromManifest(manifest);
final ActivityManager.TaskDescription taskDescription = (color == null)
? new ActivityManager.TaskDescription(name, icon)
: new ActivityManager.TaskDescription(name, icon, color);
updateStatusBarColor(color);
setTaskDescription(taskDescription);
} catch (IOException | JSONException e) {
Log.e(LOGTAG, "Failed to read manifest", e);
}
}
private void updateStatusBarColor(final Integer themeColor) {
if (themeColor != null && !AppConstants.Versions.preLollipop) {
final Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(ColorUtil.darken(themeColor, 0.25));
}
}
private Integer readColorFromManifest(JSONObject manifest) throws JSONException {
final String colorStr = (String) manifest.get("theme_color");
if (colorStr != null) {
return ColorUtil.parseStringColor(colorStr);
}
return null;
}
private String readNameFromManifest(JSONObject manifest) throws JSONException {
String name = (String) manifest.get("name");
if (name == null) {
name = (String) manifest.get("short_name");
}
if (name == null) {
name = (String) manifest.get("start_url");
}
return name;
}
private Bitmap readIconFromManifest(JSONObject manifest) throws JSONException {
final String iconStr = (String) manifest.get("cached_icon");
if (iconStr != null) {
return FaviconDecoder
.decodeDataURI(getContext(), iconStr)
.getBestBitmap(GeckoAppShell.getPreferredIconSize());
}
return null;
}
}

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

@ -789,6 +789,7 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
'util/ResourceDrawableUtils.java',
'util/TouchTargetUtil.java',
'util/ViewUtil.java',
'webapps/WebAppActivity.java',
'widget/ActivityChooserModel.java',
'widget/AllCapsTextView.java',
'widget/AnchoredPopup.java',

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

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--
This layout is quite complex because GeckoApp accesses all view groups
in this tree. In a perfect world this should just include a GeckoView.
-->
<view class="org.mozilla.gecko.GeckoApp$MainLayout"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_below="@+id/toolbar"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<RelativeLayout android:id="@+id/gecko_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tablet_tab_strip"
android:layout_above="@+id/find_in_page">
<fragment class="org.mozilla.gecko.GeckoViewFragment"
android:id="@+id/layer_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"/>
</RelativeLayout>
</view>
</RelativeLayout>

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

@ -2208,7 +2208,8 @@ async function installManifest(browser, manifestUrl, iconSize) {
type: "Website:AppInstalled",
icon,
name: manifest.name,
start_url: manifest.start_url
start_url: manifest.start_url,
manifest_path: manifest.path
});
} catch (err) {
Cu.reportError("Failed to install: " + err.message);

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

@ -46,8 +46,7 @@ search-jar-default: search-jar
###########################################################################
## Searchlist plugin config
plugin-file-array = \
$(wildcard $(LOCALE_SRCDIR)/searchplugins/list.txt) \
$(srcdir)/en-US/searchplugins/list.txt \
$(srcdir)/search/list.json \
$(NULL)
###########################################################################
@ -80,8 +79,7 @@ GARBAGE += $(search-jar) $(search-jar-ts) $(search-jar-common)
# ---------------------------------------------------------------------------
# search-jar contains a list of providers for the search plugin
###########################################################################
SEARCH_PLUGINS = $(shell cat $(plugin_file))
SEARCH_PLUGINS := $(subst :hidden,,$(SEARCH_PLUGINS))
SEARCH_PLUGINS := $(shell $(call py_action,output_searchplugins_list,$(srcdir)/search/list.json $(AB_CD)))
$(call errorIfEmpty,SEARCH_PLUGINS)
search-jar-preqs = \
@ -96,6 +94,7 @@ $(search-jar): $(search-jar-preqs)
printf '$(AB_CD).jar:' > $@
ln -fn $@ .
printf '$(foreach plugin,$(SEARCH_PLUGINS),$(subst __PLUGIN_SUBST__,$(plugin), \n locale/$(AB_CD)/browser/searchplugins/__PLUGIN_SUBST__.xml (__PLUGIN_SUBST__.xml)))' >> $@
printf '\n locale/$(AB_CD)/browser/searchplugins/list.json (list.json)' >> $@
@echo >> $@
###################
@ -115,10 +114,12 @@ search-preqs =\
.PHONY: searchplugins
searchplugins: $(search-preqs)
$(call py_action,generate_searchjson,$(srcdir)/search/list.json $(AB_CD) $(tgt-gendir)/list.json)
$(call py_action,jar_maker,\
$(QUIET) -d $(FINAL_TARGET) \
-s $(topsrcdir)/$(relativesrcdir)/en-US/searchplugins \
-s $(LOCALE_SRCDIR)/searchplugins \
-s $(tgt-gendir) \
$(MAKE_JARS_FLAGS) $(search-jar))
$(TOUCH) $@

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

@ -7,7 +7,6 @@
@AB_CD@.jar:
% locale browser @AB_CD@ %locale/@AB_CD@/browser/
locale/@AB_CD@/browser/region.properties (%chrome/region.properties)
locale/@AB_CD@/browser/searchplugins/list.txt (%searchplugins/list.txt)
# Fennec-specific overrides of generic strings
locale/@AB_CD@/browser/netError.dtd (%overrides/netError.dtd)

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

@ -0,0 +1,696 @@
{
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "duckduckgo", "twitter", "wikipedia"
]
},
"regionOverrides": {
"US": {
"google": "google-nocodes"
},
"CA": {
"google": "google-nocodes"
},
"KZ": {
"google": "google-nocodes"
},
"BY": {
"google": "google-nocodes"
},
"RU": {
"google": "google-nocodes"
},
"TR": {
"google": "google-nocodes"
},
"UA": {
"google": "google-nocodes"
},
"CN": {
"google": "google-nocodes"
},
"TW": {
"google": "google-nocodes"
},
"HK": {
"google": "google-nocodes"
}
},
"locales": {
"an": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-es", "bing", "twitter", "wikipedia-an"
]
}
},
"ar": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "twitter", "wikipedia-ar"
]
}
},
"as": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "wikipedia-as"
]
}
},
"ast": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-es", "bing", "amazondotcom", "twitter", "wikipedia-ast"
]
}
},
"az": {
"default": {
"visibleDefaultEngines": [
"google", "bing", "amazondotcom", "azerdict", "duckduckgo", "wikipedia-az"
]
}
},
"be": {
"default": {
"visibleDefaultEngines": [
"google", "be.wikipedia.org", "bing", "yahoo", "yandex.by"
]
}
},
"bg": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "wikipedia-bg"
]
}
},
"bn-IN": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazondotcom", "rediff", "wikipedia-bn"
]
}
},
"br": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-france", "bing", "twitter", "wikipedia-br"
]
}
},
"ca": {
"default": {
"visibleDefaultEngines": [
"google", "twitter", "wikipedia-ca", "diec2"
]
}
},
"cak": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-espanol", "amazondotcom", "duckduckgo", "wikipedia-es"
]
}
},
"cs": {
"default": {
"visibleDefaultEngines": [
"google", "duckduckgo", "heureka-cz", "mapy-cz", "seznam-cz", "twitter", "wikipedia-cz"
]
}
},
"cy": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-en-GB", "bing", "amazon-en-GB", "duckduckgo", "wikipedia-cy"
]
}
},
"da": {
"default": {
"visibleDefaultEngines": [
"google", "amazon-co-uk", "twitter", "wikipedia-da"
]
}
},
"de": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-de", "bing", "amazon-de", "duckduckgo", "qwant", "twitter", "wikipedia-de"
]
}
},
"dsb": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-de", "bing", "amazon-de", "twitter", "wikipedia-dsb"
]
}
},
"el": {
"default": {
"visibleDefaultEngines": [
"google", "skroutz", "twitter", "wikipedia-el"
]
}
},
"en-GB": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-en-GB", "bing", "amazon-en-GB", "duckduckgo", "qwant", "twitter", "wikipedia"
]
}
},
"en-US": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "duckduckgo", "twitter", "wikipedia"
]
},
"US": {
"visibleDefaultEngines": [
"yahoo", "google-nocodes", "bing", "amazondotcom", "duckduckgo", "twitter", "wikipedia"
]
},
"CA": {
"visibleDefaultEngines": [
"google-nocodes", "yahoo", "bing", "amazondotcom", "duckduckgo", "twitter", "wikipedia"
]
}
},
"en-ZA": {
"default": {
"visibleDefaultEngines": [
"google", "twitter", "wikipedia"
]
}
},
"eo": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "duckduckgo", "reta-vortaro", "twitter", "wikipedia-eo"
]
}
},
"es-AR": {
"default": {
"visibleDefaultEngines": [
"google", "mercadolibre-ar", "twitter", "wikipedia-es"
]
}
},
"es-CL": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-cl", "bing", "drae", "mercadolibre-cl", "twitter", "wikipedia-es"
]
}
},
"es-ES": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-es", "bing", "duckduckgo", "twitter", "wikipedia-es"
]
}
},
"es-MX": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-mx", "bing", "amazondotcom", "duckduckgo", "mercadolibre-mx", "twitter", "wikipedia-es"
]
}
},
"et": {
"default": {
"visibleDefaultEngines": [
"google", "amazon-co-uk", "twitter", "wikipedia-et"
]
}
},
"eu": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-es", "bing", "elebila", "wikipedia-eu"
]
}
},
"fa": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "wikipedia-fa"
]
}
},
"ff": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-france", "bing", "amazon-france", "wikipedia-fr"
]
}
},
"fi": {
"default": {
"visibleDefaultEngines": [
"google", "amazondotcom", "twitter", "wikipedia-fi", "yahoo-fi"
]
}
},
"fr": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-france", "bing", "duckduckgo", "qwant", "twitter", "wikipedia-fr"
]
}
},
"fy-NL": {
"default": {
"visibleDefaultEngines": [
"google", "wikipedia-fy-NL", "bolcom-fy-NL"
]
}
},
"ga-IE": {
"default": {
"visibleDefaultEngines": [
"google", "amazon-en-GB", "tearma", "twitter", "wikipedia-ga-IE"
]
}
},
"gd": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-en-GB", "bing", "duckduckgo", "faclair-beag", "wikipedia-gd"
]
}
},
"gl": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-es", "bing", "amazondotcom", "twitter", "wikipedia-gl"
]
}
},
"gn": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-espanol", "bing", "amazondotcom", "twitter", "wikipedia-gn"
]
}
},
"gu-IN": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "wikipedia-gu"
]
}
},
"he": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "twitter", "wikipedia-he"
]
}
},
"hi-IN": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "twitter", "wikipedia-hi"
]
}
},
"hr": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazon-en-GB", "duckduckgo", "twitter", "wikipedia-hr"
]
}
},
"hsb": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-de", "bing", "amazon-de", "twitter", "wikipedia-hsb"
]
}
},
"hu": {
"default": {
"visibleDefaultEngines": [
"google", "sztaki-en-hu", "vatera", "twitter", "wikipedia-hu"
]
}
},
"hy-AM": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "list-am", "wikipedia-hy-AM"
]
}
},
"id": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-id", "bing", "twitter", "wikipedia-id"
]
}
},
"is": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "leit-is", "wikipedia-is"
]
}
},
"it": {
"default": {
"visibleDefaultEngines": [
"google", "twitter", "wikipedia-it"
]
}
},
"ja": {
"default": {
"visibleDefaultEngines": [
"google", "amazon-jp", "bing", "twitter-ja", "wikipedia-ja", "yahoo-jp"
]
}
},
"ka": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "duckduckgo", "wikipedia-ka"
]
}
},
"kab": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-france", "bing", "wikipedia-kab"
]
}
},
"kk": {
"default": {
"visibleDefaultEngines": [
"yandex", "google", "yahoo", "bing", "twitter", "wikipedia-kk"
]
}
},
"km": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "twitter", "wikipedia-km"
]
}
},
"kn": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "twitter", "wikipedia-kn", "wiktionary-kn"
]
}
},
"ko": {
"default": {
"visibleDefaultEngines": [
"google", "danawa-kr", "twitter", "daum-kr", "naver-kr"
]
}
},
"lij": {
"default": {
"visibleDefaultEngines": [
"google", "amazondotcom", "twitter", "wikipedia"
]
}
},
"lo": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "twitter", "wikipedia-lo"
]
}
},
"lt": {
"default": {
"visibleDefaultEngines": [
"google", "twitter", "wikipedia-lt"
]
}
},
"lv": {
"default": {
"visibleDefaultEngines": [
"google", "salidzinilv", "sslv", "twitter", "wikipedia-lv"
]
}
},
"mai": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "twitter", "wikipedia-hi"
]
}
},
"ml": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "duckduckgo", "twitter", "wikipedia-ml"
]
}
},
"mr": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "rediff", "wikipedia-mr"
]
}
},
"ms": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "twitter", "wikipedia-ms"
]
}
},
"my": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "twitter", "wikipedia-my"
]
}
},
"nb-NO": {
"default": {
"visibleDefaultEngines": [
"google", "duckduckgo", "gulesider-mobile-NO", "twitter", "wikipedia-NO"
]
}
},
"ne-NP": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "twitter", "wikipedia-ne"
]
}
},
"nl": {
"default": {
"visibleDefaultEngines": [
"google", "wikipedia-nl", "bolcom-nl"
]
}
},
"nn-NO": {
"default": {
"visibleDefaultEngines": [
"google", "duckduckgo", "gulesider-mobile-NO", "twitter", "wikipedia-NN"
]
}
},
"or": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "wikipedia-or", "wiktionary-or"
]
}
},
"pa-IN": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "wikipedia-pa"
]
}
},
"pl": {
"default": {
"visibleDefaultEngines": [
"google", "bing", "duckduckgo", "twitter", "wikipedia-pl"
]
}
},
"pt-BR": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-br", "bing", "twitter", "wikipedia-br"
]
}
},
"pt-PT": {
"default": {
"visibleDefaultEngines": [
"google", "wikipedia-ptpt"
]
}
},
"rm": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-ch", "bing", "duckduckgo", "leo_ende_de", "pledarigrond", "wikipedia-rm"
]
}
},
"ro": {
"default": {
"visibleDefaultEngines": [
"google", "twitter", "wikipedia-ro"
]
}
},
"ru": {
"default": {
"visibleDefaultEngines": [
"google", "yandex-ru", "twitter", "wikipedia-ru"
]
}
},
"sk": {
"default": {
"visibleDefaultEngines": [
"google", "azet-sk", "slovnik-sk", "twitter", "wikipedia-sk"
]
}
},
"sl": {
"default": {
"visibleDefaultEngines": [
"google", "ceneje", "odpiralni", "twitter", "wikipedia-sl"
]
}
},
"son": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-france", "bing", "amazon-fr", "twitter", "wikipedia-fr"
]
}
},
"sq": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazon-en-GB", "twitter", "wikipedia-sq"
]
}
},
"sr": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "duckduckgo", "twitter", "wikipedia-sr"
]
}
},
"sv-SE": {
"default": {
"visibleDefaultEngines": [
"google", "prisjakt-sv-SE", "twitter", "wikipedia-sv-SE"
]
}
},
"ta": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "duckduckgo", "wikipedia-ta", "wiktionary-ta"
]
}
},
"te": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "wikipedia-te", "wiktionary-te"
]
}
},
"th": {
"default": {
"visibleDefaultEngines": [
"google", "twitter", "wikipedia-th"
]
}
},
"tr": {
"default": {
"visibleDefaultEngines": [
"yandex-tr", "google", "twitter", "wikipedia-tr"
]
}
},
"trs": {
"default": {
"searchDefault": "Google",
"visibleDefaultEngines": [
"amazondotcom", "bing", "google", "twitter", "wikipedia-es", "yahoo-espanol"
]
}
},
"uk": {
"default": {
"visibleDefaultEngines": [
"google", "twitter", "wikipedia-uk", "yandex-market"
]
}
},
"ur": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo-in", "bing", "amazon-in", "duckduckgo", "twitter", "wikipedia-ur"
]
}
},
"uz": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "amazondotcom", "twitter", "wikipedia-uz"
]
}
},
"vi": {
"default": {
"visibleDefaultEngines": [
"google", "amazondotcom", "twitter", "wikipedia-vi"
]
}
},
"xh": {
"default": {
"visibleDefaultEngines": [
"google", "yahoo", "bing", "twitter", "wikipedia"
]
}
},
"zh-CN": {
"default": {
"visibleDefaultEngines": [
"google", "baidu", "bing", "taobao", "wikipedia-zh-CN"
]
}
},
"zh-TW": {
"default": {
"visibleDefaultEngines": [
"google", "bing", "duckduckgo", "wikipedia-zh-TW"
]
}
}
}
}

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

@ -477,5 +477,9 @@ ChildProcessInit(int argc, char* argv[])
extern "C" APKOPEN_EXPORT jboolean MOZ_JNICALL
Java_org_mozilla_gecko_mozglue_GeckoLoader_neonCompatible(JNIEnv *jenv, jclass jc)
{
#ifdef __ARM_EABI__
return mozilla::supports_neon();
#else
return true;
#endif // __ARM_EABI__
}

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

@ -1157,4 +1157,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1497971135298000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1498057610195000);

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

@ -6,7 +6,6 @@
0x0a.net: could not connect to host
0x1337.eu: could not connect to host
0x44.net: did not receive HSTS header
0x90.in: could not connect to host
0xa.in: could not connect to host
0xacab.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
0xb612.org: could not connect to host
@ -29,6 +28,7 @@
1xcess.com: did not receive HSTS header
206rc.net: max-age too low: 2592000
247loan.com: max-age too low: 0
247quickbooks.com: did not receive HSTS header
24hourpaint.com: could not connect to host
25daysof.io: could not connect to host
263.info: could not connect to host
@ -53,7 +53,6 @@
3yearloans.com: max-age too low: 0
404.sh: max-age too low: 0
42ms.org: could not connect to host
441jj.com: did not receive HSTS header
4455software.com: did not receive HSTS header
4679.space: could not connect to host
47ronin.com: did not receive HSTS header
@ -130,7 +129,7 @@ adhs-chaoten.net: did not receive HSTS header
admin.google.com: did not receive HSTS header (error ignored - included regardless)
admitcard.co.in: did not receive HSTS header
admsel.ec: could not connect to host
adopteunsiteflash.com: could not connect to host
adopteunsiteflash.com: did not receive HSTS header
adquisitio.co.uk: could not connect to host
adquisitio.de: could not connect to host
adquisitio.es: could not connect to host
@ -153,6 +152,7 @@ afp548.tk: could not connect to host
agalaxyfarfaraway.co.uk: could not connect to host
agbremen.de: did not receive HSTS header
agentseeker.ca: did not receive HSTS header
agowa338.de: could not connect to host
agrimap.com: did not receive HSTS header
agrios.de: did not receive HSTS header
agro-id.gov.ua: could not connect to host
@ -190,13 +190,12 @@ alethearose.com: did not receive HSTS header
alexandre.sh: did not receive HSTS header
alexisabarca.com: did not receive HSTS header
alexsergeyev.com: could not connect to host
alexvetter.de: did not receive HSTS header
alfa24.pro: could not connect to host
alittlebitcheeky.com: did not receive HSTS header
aljaspod.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
alkami.com: did not receive HSTS header
all-subtitles.com: did not receive HSTS header
all.tf: could not connect to host
all.tf: did not receive HSTS header
alldaymonitoring.com: could not connect to host
allforyou.at: could not connect to host
allinnote.com: could not connect to host
@ -237,7 +236,6 @@ andiplusben.com: could not connect to host
andreasbreitenlohner.de: did not receive HSTS header
andreastoneman.com: could not connect to host
andreigec.net: did not receive HSTS header
andrew.london: did not receive HSTS header
andrewbroekman.com: could not connect to host
andrewmichaud.beer: could not connect to host
andrewregan.me: could not connect to host
@ -274,6 +272,7 @@ antoniomarques.eu: did not receive HSTS header
antoniorequena.com.ve: could not connect to host
antscript.com: did not receive HSTS header
anycoin.me: could not connect to host
aosc.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
apachelounge.com: did not receive HSTS header
aparaatti.org: could not connect to host
apeasternpower.com: could not connect to host
@ -284,7 +283,6 @@ apis.world: did not receive HSTS header
apmg-certified.com: did not receive HSTS header
apmg-cyber.com: did not receive HSTS header
apnakliyat.com: did not receive HSTS header
apolloyl.com: could not connect to host
aponkralsunucu.com: could not connect to host
app-arena.com: did not receive HSTS header
app.lookout.com: did not receive HSTS header
@ -394,6 +392,7 @@ avinet.com: max-age too low: 0
avqueen.cn: did not receive HSTS header
avus-automobile.com: did not receive HSTS header
awg-mode.de: did not receive HSTS header
awxg.com: could not connect to host
axado.com.br: did not receive HSTS header
axeny.com: did not receive HSTS header
axg.io: could not connect to host
@ -402,6 +401,7 @@ azazy.net: max-age too low: 2592000
azprep.us: could not connect to host
azuxul.fr: could not connect to host
b3orion.com: max-age too low: 0
b422edu.com: could not connect to host
b64.club: could not connect to host
babettelandmesser.de: max-age too low: 0
baby-click.de: did not receive HSTS header
@ -852,7 +852,6 @@ clint.id.au: max-age too low: 0
clintonbloodworth.com: did not receive HSTS header
clintonbloodworth.io: could not connect to host
clintwilson.technology: max-age too low: 2592000
clip.mx: did not receive HSTS header
clipped4u.com: could not connect to host
cloud.wtf: could not connect to host
cloudapi.vc: could not connect to host
@ -862,16 +861,17 @@ clouddesktop.co.nz: could not connect to host
cloudey.net: did not receive HSTS header
cloudflare.com: did not receive HSTS header
cloudia.org: could not connect to host
cloudily.com: could not connect to host
cloudimag.es: could not connect to host
cloudlink.club: could not connect to host
cloudns.com.au: could not connect to host
cloudspotterapp.com: did not receive HSTS header
cloudstoragemaus.com: could not connect to host
cloudstorm.me: could not connect to host
cloudup.com: did not receive HSTS header
cloudwalk.io: did not receive HSTS header
cloverleaf.net: max-age too low: 0
clubmate.rocks: could not connect to host
cluster.id: could not connect to host
clvrwebdesign.com: did not receive HSTS header
clycat.ru: could not connect to host
clywedogmaths.co.uk: could not connect to host
@ -908,7 +908,6 @@ codewiththepros.org: could not connect to host
codiva.io: max-age too low: 2592000
coffeeetc.co.uk: did not receive HSTS header
coffeestrategies.com: max-age too low: 2592000
cohesive.io: did not receive HSTS header
coiffeurschnittstelle.ch: did not receive HSTS header
coindam.com: could not connect to host
coldlostsick.net: could not connect to host
@ -923,6 +922,7 @@ coloradocomputernetworking.net: could not connect to host
combron.nl: did not receive HSTS header
comfortdom.ua: did not receive HSTS header
comfortticket.de: did not receive HSTS header
comfy.moe: did not receive HSTS header
comicspines.com: could not connect to host
comotalk.com: could not connect to host
compalytics.com: could not connect to host
@ -964,7 +964,6 @@ correctpaardbatterijnietje.nl: did not receive HSTS header
corruption-mc.net: could not connect to host
corruption-rsps.net: could not connect to host
corruption-server.net: could not connect to host
cosmeticasimple.com: could not connect to host
count.sh: could not connect to host
couragewhispers.ca: did not receive HSTS header
coursdeprogrammation.com: could not connect to host
@ -1029,6 +1028,7 @@ cumshots-video.ru: could not connect to host
cunha.be: could not connect to host
cuntflaps.me: did not receive HSTS header
cuongquach.com: did not receive HSTS header
cup.al: could not connect to host
cupidmentor.com: did not receive HSTS header
curlyroots.com: did not receive HSTS header
curroapp.com: could not connect to host
@ -1082,6 +1082,7 @@ dashburst.com: did not receive HSTS header
dashnimorad.com: did not receive HSTS header
data-abundance.com: could not connect to host
datahove.no: did not receive HSTS header
dataisme.com: did not receive HSTS header
datajapan.co.jp: could not connect to host
datarank.com: max-age too low: 0
dataretention.solutions: could not connect to host
@ -1135,6 +1136,7 @@ demdis.org: could not connect to host
demilitarized.ninja: could not connect to host
democracychronicles.com: did not receive HSTS header
demotops.com: did not receive HSTS header
dengchangdong.com: did not receive HSTS header
dengyong.org: could not connect to host
denh.am: did not receive HSTS header
denisjean.fr: could not connect to host
@ -1182,12 +1184,12 @@ digitalriver.tk: could not connect to host
digitalskillswap.com: could not connect to host
dim.lighting: could not connect to host
dinamoelektrik.com: max-age too low: 0
dingcc.com: did not receive HSTS header
dinkum.online: could not connect to host
discoveringdocker.com: did not receive HSTS header
discovery.lookout.com: did not receive HSTS header
dislocated.de: did not receive HSTS header
disowned.net: max-age too low: 0
dissectcyber.com: could not connect to host
dissimulo.me: could not connect to host
ditrutoancau.vn: could not connect to host
dittvertshus.no: could not connect to host
@ -1213,7 +1215,6 @@ do.search.yahoo.com: did not receive HSTS header
dobet.in: could not connect to host
docid.io: could not connect to host
docket.news: could not connect to host
docs.google.com: did not receive HSTS header (error ignored - included regardless)
docset.io: could not connect to host
docufiel.com: could not connect to host
doeswindowssuckforeveryoneorjustme.com: could not connect to host
@ -1259,9 +1260,7 @@ dreadbyte.com: could not connect to host
dreid.org: did not receive HSTS header
drhopeson.com: could not connect to host
drishti.guru: could not connect to host
drive.google.com: did not receive HSTS header (error ignored - included regardless)
drkmtrx.xyz: could not connect to host
drobniuch.pl: could not connect to host
droidboss.com: did not receive HSTS header
dropcam.com: did not receive HSTS header
drtroyhendrickson.com: could not connect to host
@ -1323,7 +1322,6 @@ edmodo.com: did not receive HSTS header
edp-collaborative.com: max-age too low: 2500
eduvance.in: did not receive HSTS header
edwards.me.uk: could not connect to host
eelzak.nl: could not connect to host
effectiveosgi.com: could not connect to host
efficienthealth.com: did not receive HSTS header
effortlesshr.com: did not receive HSTS header
@ -1335,6 +1333,7 @@ ehito.ovh: could not connect to host
ehrenamt-skpfcw.de: could not connect to host
eicfood.com: could not connect to host
eidolonhost.com: did not receive HSTS header
eisp.it: could not connect to host
ekbanden.nl: could not connect to host
elaintehtaat.fi: did not receive HSTS header
elan-organics.com: did not receive HSTS header
@ -1367,6 +1366,7 @@ emmable.com: could not connect to host
emnitech.com: could not connect to host
empleosentorreon.mx: could not connect to host
empleostampico.com: did not receive HSTS header
empty-r.com: could not connect to host
enaah.de: could not connect to host
enargia.jp: max-age too low: 0
encode.host: did not receive HSTS header
@ -1382,6 +1382,7 @@ enersec.co.uk: could not connect to host
engelwerbung.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
engg.ca: could not connect to host
enginepit.com: could not connect to host
enginsight.com: did not receive HSTS header
enigmacpt.com: did not receive HSTS header
enigmail.net: did not receive HSTS header
enjoy-nepal.de: max-age too low: 0
@ -1439,10 +1440,12 @@ etula.ga: could not connect to host
etula.me: could not connect to host
euanbaines.com: did not receive HSTS header
eucl3d.com: did not receive HSTS header
euclideanpostulates.xyz: could not connect to host
eulerpi.io: could not connect to host
eupho.me: could not connect to host
euroshop24.net: could not connect to host
evafojtova.cz: did not receive HSTS header
evalesc.com: could not connect to host
evantage.org: could not connect to host
evdenevenakliyatankara.pw: did not receive HSTS header
everybooks.com: max-age too low: 60
@ -1461,7 +1464,6 @@ exitus.jp: max-age too low: 0
exno.co: could not connect to host
exon.io: did not receive HSTS header
exousiakaidunamis.xyz: did not receive HSTS header
expatads.com: did not receive HSTS header
expertmile.com: did not receive HSTS header
expoundite.net: did not receive HSTS header
expressfinance.co.za: did not receive HSTS header
@ -1517,7 +1519,6 @@ fedux.com.ar: could not connect to host
feezmodo.com: max-age too low: 0
felisslovakia.sk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
feliwyn.fr: did not receive HSTS header
felixklein.at: could not connect to host
feminists.co: could not connect to host
fenteo.com: could not connect to host
feragon.net: did not receive HSTS header
@ -1551,7 +1552,7 @@ firstdogonthemoon.com.au: did not receive HSTS header
firstforex.co.uk: did not receive HSTS header
fish2.me: did not receive HSTS header
fit4medien.de: did not receive HSTS header
fitbylo.com: could not connect to host
fitbylo.com: did not receive HSTS header
fitiapp.com: could not connect to host
fitnesswerk.de: could not connect to host
five.vn: did not receive HSTS header
@ -1595,7 +1596,7 @@ foreignexchangeresource.com: did not receive HSTS header
foreveralone.io: could not connect to host
forex-dan.com: did not receive HSTS header
forextimes.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
formazioneopen.it: did not receive HSTS header
formazioneopen.it: could not connect to host
formbetter.com: could not connect to host
formula.cf: could not connect to host
fotiu.com: could not connect to host
@ -1613,6 +1614,7 @@ foxtrot.pw: could not connect to host
fr33d0m.link: could not connect to host
francevpn.xyz: could not connect to host
frangor.info: did not receive HSTS header
frank.fyi: could not connect to host
frankwei.xyz: did not receive HSTS header
franta.biz: did not receive HSTS header
franta.email: did not receive HSTS header
@ -1620,7 +1622,6 @@ franzt.de: could not connect to host
frasys.io: did not receive HSTS header
fredvoyage.fr: did not receive HSTS header
freeflow.tv: could not connect to host
freemanning.de: did not receive HSTS header
freematthale.net: did not receive HSTS header
freemedforms.com: did not receive HSTS header
freesoftwaredriver.com: did not receive HSTS header
@ -1632,6 +1633,7 @@ frenzel.dk: could not connect to host
freqlabs.com: could not connect to host
freshfind.xyz: could not connect to host
freshlymind.com: did not receive HSTS header
fretscha.com: could not connect to host
frforms.com: did not receive HSTS header
friendica.ch: could not connect to host
friendlyfiregameshow.com: could not connect to host
@ -1656,6 +1658,7 @@ furiffic.com: did not receive HSTS header
furnation.com: could not connect to host
furry.be: max-age too low: 86400
fusedrops.com: could not connect to host
fushee.com: could not connect to host
fusionmate.com: could not connect to host
futbol11.com: did not receive HSTS header
futurenda.com: could not connect to host
@ -1675,6 +1678,7 @@ g5led.nl: could not connect to host
gabber.scot: could not connect to host
gaelleetarnaud.com: did not receive HSTS header
gafachi.com: could not connect to host
gaiserik.com: could not connect to host
gakkainavi.jp: did not receive HSTS header
gakkainavi4.com: could not connect to host
gakkainavi4.net: did not receive HSTS header
@ -1840,7 +1844,6 @@ gregorytlee.me: did not receive HSTS header
gremots.com: could not connect to host
greplin.com: could not connect to host
gresb.com: did not receive HSTS header
greyline.se: could not connect to host
gribani.com: could not connect to host
grigalanzsoftware.com: could not connect to host
gripopgriep.net: could not connect to host
@ -1859,6 +1862,7 @@ gtlfsonlinepay.com: did not receive HSTS header
gtraxapp.com: could not connect to host
gts-schulsoftware.de: did not receive HSTS header
guava.studio: did not receive HSTS header
guge.gq: could not connect to host
gugga.dk: did not receive HSTS header
guilde-vindicta.fr: did not receive HSTS header
gulenet.com: could not connect to host
@ -1866,6 +1870,8 @@ gunnarhafdal.com: did not receive HSTS header
gurom.lv: could not connect to host
gurusupe.com: could not connect to host
guso.gq: could not connect to host
guso.ml: could not connect to host
guso.tech: could not connect to host
gussi.is: did not receive HSTS header
gvt2.com: could not connect to host (error ignored - included regardless)
gvt3.com: could not connect to host (error ignored - included regardless)
@ -1885,7 +1891,6 @@ habbo.life: did not receive HSTS header
hablemosdetecnologia.com.ve: could not connect to host
hack.cz: could not connect to host
hack.li: could not connect to host
hackerchai.com: could not connect to host
hackerforever.com: did not receive HSTS header
hackerone-ext-adroll.com: could not connect to host
hackest.org: did not receive HSTS header
@ -2008,6 +2013,7 @@ hostedtalkgadget.google.com: did not receive HSTS header (error ignored - includ
hostgarou.com: did not receive HSTS header
hostinaus.com.au: could not connect to host
hostisan.com: did not receive HSTS header
hotartup.com: could not connect to host
hotchillibox.com: max-age too low: 0
hotchoc.io: did not receive HSTS header
houkago-step.com: did not receive HSTS header
@ -2018,6 +2024,7 @@ howtocuremysciatica.com: could not connect to host
hr-intranet.com: did not receive HSTS header
hsandbox.tech: max-age too low: 2592000
hsir.me: could not connect to host
hsts.com.br: could not connect to host
hsts.date: could not connect to host
http418.xyz: could not connect to host
httpstatuscode418.xyz: could not connect to host
@ -2031,6 +2038,7 @@ humeurs.net: could not connect to host
humpi.at: could not connect to host
humpteedumptee.in: did not receive HSTS header
huntshomeinspections.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
hup.blue: could not connect to host
hurricanelabs.com: did not receive HSTS header
huskybutt.dog: could not connect to host
hxying.com: could not connect to host
@ -2094,7 +2102,7 @@ ilikerainbows.co: could not connect to host
ilikerainbows.co.uk: could not connect to host
ilmconpm.de: did not receive HSTS header
ilona.graphics: max-age too low: 3600
iluvscotland.co.uk: could not connect to host
iluvscotland.co.uk: did not receive HSTS header
imakepoems.net: could not connect to host
imanolbarba.net: could not connect to host
ime.moe: could not connect to host
@ -2111,6 +2119,7 @@ immunicity.works: did not receive HSTS header
immunicity.world: did not receive HSTS header
imolug.org: did not receive HSTS header
imouto.my: max-age too low: 5184000
imouyang.com: did not receive HSTS header
imperialwebsolutions.com: did not receive HSTS header
imu.li: did not receive HSTS header
imusic.dk: did not receive HSTS header
@ -2138,7 +2147,6 @@ inksupply.com: did not receive HSTS header
inleaked.com: could not connect to host
inmyarea.com: max-age too low: 0
innophate-security.nl: could not connect to host
inquisitive.io: did not receive HSTS header
ins1gn1a.com: did not receive HSTS header
insane-bullets.com: could not connect to host
insane.zone: could not connect to host
@ -2146,11 +2154,13 @@ insite-feedback.com: did not receive HSTS header
inspire-av.com: did not receive HSTS header
inspiroinc.com: could not connect to host
instacart.com: did not receive HSTS header
installgentoo.net: could not connect to host
instantdev.io: could not connect to host
institutoflordelavida.com: could not connect to host
intel.li: could not connect to host
interference.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
interlun.com: could not connect to host
internect.co.za: did not receive HSTS header
internetcasinos.de: could not connect to host
internetcensus.org: could not connect to host
interserved.com: did not receive HSTS header
@ -2165,6 +2175,7 @@ inverselink.com: could not connect to host
invictusmc.uk: did not receive HSTS header
invite24.pro: could not connect to host
inwesttitle.com: max-age too low: 0
ioiart.eu: could not connect to host
ionx.co.uk: did not receive HSTS header
iop.intuit.com: max-age too low: 86400
iora.fr: could not connect to host
@ -2177,7 +2188,7 @@ iprody.com: could not connect to host
iptel.by: max-age too low: 0
iptel.ro: could not connect to host
ipv6cloud.club: could not connect to host
iqcn.co: did not receive HSTS header
iqcn.co: could not connect to host
iqualtech.com: did not receive HSTS header
iranianlawschool.com: could not connect to host
iraqidinar.org: did not receive HSTS header
@ -2201,7 +2212,6 @@ it-go.net: did not receive HSTS header
itechgeek.com: max-age too low: 0
ithakama.com: did not receive HSTS header
ithakama.cz: did not receive HSTS header
ithenrik.com: could not connect to host
itos.asia: did not receive HSTS header
itos.pl: did not receive HSTS header
itriskltd.com: could not connect to host
@ -2217,7 +2227,7 @@ ivi-fertility.com: max-age too low: 0
ivi.es: max-age too low: 0
ivk.website: could not connect to host
ivo.co.za: could not connect to host
ixec2.tk: did not receive HSTS header
ixec2.tk: could not connect to host
izdiwho.com: could not connect to host
izolight.ch: could not connect to host
izoox.com: did not receive HSTS header
@ -2241,6 +2251,7 @@ jamesconroyfinn.com: did not receive HSTS header
jamesdoell.com: could not connect to host
jamesdoylephoto.com: did not receive HSTS header
jamesf.xyz: could not connect to host
jamesheald.com: did not receive HSTS header
jamesmaurer.com: did not receive HSTS header
jamesmorrison.me: did not receive HSTS header
jamessan.com: did not receive HSTS header
@ -2312,6 +2323,7 @@ joedavison.me: could not connect to host
johannes-sprink.de: could not connect to host
johners.me: could not connect to host
johnrom.com: did not receive HSTS header
jollausers.de: could not connect to host
jonas-keidel.de: did not receive HSTS header
jonasgroth.se: did not receive HSTS header
jonathan.ir: could not connect to host
@ -2319,7 +2331,6 @@ jonn.me: could not connect to host
joostbovee.nl: did not receive HSTS header
jordanhamilton.me: could not connect to host
joretapo.fr: did not receive HSTS header
jornane.no: could not connect to host
josahrens.me: could not connect to host
joshi.su: could not connect to host
joshstroup.me: could not connect to host
@ -2354,7 +2365,6 @@ k-dev.de: could not connect to host
ka-clan.com: could not connect to host
kabinapp.com: could not connect to host
kabuabc.com: did not receive HSTS header
kabus.org: could not connect to host
kadioglumakina.com.tr: did not receive HSTS header
kaela.design: could not connect to host
kahopoon.net: could not connect to host
@ -2459,7 +2469,6 @@ krayx.com: could not connect to host
kreavis.com: did not receive HSTS header
kredite.sale: could not connect to host
kriegt.es: did not receive HSTS header
kristikala.nl: could not connect to host
krizevci.info: did not receive HSTS header
kroetenfuchs.de: could not connect to host
kropkait.pl: could not connect to host
@ -2492,7 +2501,6 @@ kz.search.yahoo.com: did not receive HSTS header
kzjnet.com: could not connect to host
l2guru.ru: could not connect to host
labaia.info: could not connect to host
labfox.de: could not connect to host
labina.com.tr: did not receive HSTS header
laboiteapc.fr: did not receive HSTS header
labordata.io: did not receive HSTS header
@ -2534,6 +2542,7 @@ leadership9.com: could not connect to host
leardev.de: did not receive HSTS header
learnfrenchfluently.com: did not receive HSTS header
learningorder.com: could not connect to host
lebal.se: did not receive HSTS header
lechiennoir.net: did not receive HSTS header
ledgerscope.net: could not connect to host
leermotorrijden.nl: max-age too low: 300
@ -2584,7 +2593,6 @@ lianye6.cc: could not connect to host
lianyexiuchang.in: could not connect to host
liaoshuma.com: could not connect to host
libanco.com: could not connect to host
libbitcoin.org: could not connect to host
libertyrp.org: could not connect to host
library.linode.com: did not receive HSTS header
librechan.net: could not connect to host
@ -2621,7 +2629,6 @@ linuxforyou.com: could not connect to host
linuxgeek.ro: could not connect to host
linuxmonitoring.net: did not receive HSTS header
liquorsanthe.in: could not connect to host
lisonfan.com: did not receive HSTS header
listafirmelor.com: could not connect to host
litespeed.io: could not connect to host
litz.ca: could not connect to host
@ -2629,8 +2636,6 @@ litzenberger.ca: could not connect to host
livedemo.io: could not connect to host
livej.am: could not connect to host
livi.co: did not receive HSTS header
livnev.me: could not connect to host
livnev.xyz: could not connect to host
loadingdeck.com: did not receive HSTS header
loadso.me: could not connect to host
loafbox.com: could not connect to host
@ -2666,6 +2671,7 @@ lt.search.yahoo.com: did not receive HSTS header
ltbytes.com: could not connect to host
lu.search.yahoo.com: did not receive HSTS header
lucaterzini.com: could not connect to host
ludwiggrill.de: could not connect to host
lufthansaexperts.com: max-age too low: 2592000
luine.xyz: did not receive HSTS header
luis-checa.com: could not connect to host
@ -2702,7 +2708,7 @@ mac-torrents.me: did not receive HSTS header
macchaberrycream.com: could not connect to host
macdj.tk: could not connect to host
macgeneral.de: did not receive HSTS header
macsandcheesedreams.com: did not receive HSTS header
macsandcheesedreams.com: could not connect to host
madars.org: did not receive HSTS header
maddin.ga: could not connect to host
madebymagnitude.com: did not receive HSTS header
@ -2731,8 +2737,7 @@ mamaxi.org: did not receive HSTS header
mammothmail.com: could not connect to host
mammothmail.net: could not connect to host
mammothmail.org: could not connect to host
managemynetsuite.com: could not connect to host
managewp.org: did not receive HSTS header
managemynetsuite.com: did not receive HSTS header
maniadeprazer.com.br: could not connect to host
manifestbin.com: did not receive HSTS header
manningbrothers.com: did not receive HSTS header
@ -2741,14 +2746,17 @@ mansion-note.com: did not receive HSTS header
maomaofuli.vip: could not connect to host
maple5.com: did not receive HSTS header
marchagen.nl: did not receive HSTS header
marcoececilia.it: could not connect to host
marcofinke.de: could not connect to host
marcontrol.com: did not receive HSTS header
marcosteixeira.tk: could not connect to host
marcuskoh.com: did not receive HSTS header
margaretrosefashions.co.uk: could not connect to host
mariannematthew.com: could not connect to host
marie-curie.fr: could not connect to host
marie-elisabeth.dk: did not receive HSTS header
marie-en-provence.com: did not receive HSTS header
marie.club: could not connect to host
markaconnor.com: could not connect to host
markayapilandirma.com: could not connect to host
market.android.com: did not receive HSTS header (error ignored - included regardless)
@ -3032,6 +3040,7 @@ mypension.ca: could not connect to host
myphonebox.de: could not connect to host
mysecretrewards.com: did not receive HSTS header
mystery-science-theater-3000.de: did not receive HSTS header
mythslegendscollection.com: did not receive HSTS header
mytweeps.com: could not connect to host
myvirtualserver.com: max-age too low: 2592000
myzone.com: did not receive HSTS header
@ -3082,7 +3091,6 @@ nedzad.me: could not connect to host
neels.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
neftaly.com: did not receive HSTS header
neilgreen.net: did not receive HSTS header
neillans.com: did not receive HSTS header
neko-life.com: did not receive HSTS header
neko-system.com: did not receive HSTS header
nemno.de: could not connect to host
@ -3097,6 +3105,7 @@ netherwind.eu: could not connect to host
netloanusa.com: max-age too low: 0
netmagik.com: did not receive HSTS header
nettefoundation.com: could not connect to host
networth.at: could not connect to host
networx-online.de: could not connect to host
netzbit.de: could not connect to host
netzpolitik.org: did not receive HSTS header
@ -3107,6 +3116,7 @@ neuronfactor.com: [Exception... "Component returned failure code: 0x80004005 (NS
neutralox.com: did not receive HSTS header
never-afk.de: did not receive HSTS header
neveta.com: could not connect to host
new.travel.pl: did not receive HSTS header
newcitygas.ca: max-age too low: 0
newgenerationplus.org: could not connect to host
newhdmovies.io: did not receive HSTS header
@ -3132,16 +3142,16 @@ nicoborghuis.nl: could not connect to host
nicolasbettag.me: did not receive HSTS header
niconiconi.xyz: could not connect to host
niconode.com: could not connect to host
niduxcomercial.com: could not connect to host
nien.chat: could not connect to host
nightwinds.tk: could not connect to host
nightx.uk: could not connect to host
niho.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
nikcub.com: could not connect to host
niklas.pw: could not connect to host
niklaslindblad.se: did not receive HSTS header
nikomo.fi: could not connect to host
ninchisho-online.com: did not receive HSTS header
ninhs.org: could not connect to host
ninhs.org: did not receive HSTS header
nippler.org: did not receive HSTS header
nippombashi.net: could not connect to host
nipponcareers.com: did not receive HSTS header
@ -3178,7 +3188,6 @@ notenoughtime.de: could not connect to host
nottheonion.net: did not receive HSTS header
nouvelle-vague-saint-cast.fr: did not receive HSTS header
novacoast.com: did not receive HSTS header
novascan.net: could not connect to host
novatrucking.de: could not connect to host
novawave.ca: did not receive HSTS header
nowak.ninja: did not receive HSTS header
@ -3267,6 +3276,7 @@ oneminutefilm.tv: could not connect to host
onepluscamps.com: could not connect to host
onespiritinc.com: did not receive HSTS header
onet.space: could not connect to host
onewpst.com: did not receive HSTS header
oniichan.us: did not receive HSTS header
online-casino.eu: did not receive HSTS header
online-wetten.de: did not receive HSTS header
@ -3299,7 +3309,7 @@ openshift.redhat.com: did not receive HSTS header
opensrd.com: could not connect to host
openxmpp.com: could not connect to host
opim.ca: did not receive HSTS header
opperwall.net: could not connect to host
opperwall.net: did not receive HSTS header
opsafewinter.net: could not connect to host
opsbears.com: did not receive HSTS header
optenhoefel.de: could not connect to host
@ -3321,6 +3331,7 @@ orleika.ml: could not connect to host
orthodoxy.lt: did not receive HSTS header
orwell1984.today: could not connect to host
osaiyuwu.com: could not connect to host
oskuro.net: could not connect to host
oslfoundation.org: could not connect to host
oslinux.net: did not receive HSTS header
osp.cx: could not connect to host
@ -3350,6 +3361,7 @@ owncloud.help: could not connect to host
ownmovies.fr: could not connect to host
oxygenabsorbers.com: did not receive HSTS header
oxynux.fr: could not connect to host
oxynux.xyz: could not connect to host
p.linode.com: could not connect to host
p8r.de: could not connect to host
pa.search.yahoo.com: did not receive HSTS header
@ -3368,7 +3380,7 @@ pamplona.tv: could not connect to host
pamsoft.pl: max-age too low: 0
panaceallc.net: could not connect to host
panamaequity.com: did not receive HSTS header
panamateakforestry.com: could not connect to host
panamateakforestry.com: did not receive HSTS header
panoranordic.net: could not connect to host
pansu.space: could not connect to host
pants-off.xyz: could not connect to host
@ -3454,6 +3466,7 @@ petsittersservices.com: could not connect to host
pettsy.com: could not connect to host
pewboards.com: could not connect to host
pexieapp.com: did not receive HSTS header
peytonfarrar.com: did not receive HSTS header
pflege.de: did not receive HSTS header
pgpm.io: could not connect to host
pharmgkb.org: could not connect to host
@ -3477,7 +3490,6 @@ piggott.me.uk: did not receive HSTS header
pilgermaske.org: did not receive HSTS header
piligrimname.com: could not connect to host
pillowandpepper.com: did not receive HSTS header
pimpmymac.ru: could not connect to host
pincodeit.com: could not connect to host
pippen.io: could not connect to host
piratedb.com: could not connect to host
@ -3506,6 +3518,7 @@ play.google.com: did not receive HSTS header (error ignored - included regardles
playflick.com: did not receive HSTS header
playkh.com: did not receive HSTS header
playmaker.io: could not connect to host
playmyplay.com: did not receive HSTS header
playnation.io: could not connect to host
pleier-it.de: did not receive HSTS header
pleier.it: could not connect to host
@ -3519,6 +3532,7 @@ ploup.net: could not connect to host
pluff.nl: could not connect to host
plur.com.au: did not receive HSTS header
pmnts.io: could not connect to host
pnona.cz: could not connect to host
po.gl: did not receive HSTS header
pocketsix.com: could not connect to host
pocloud.homelinux.net: could not connect to host
@ -3537,16 +3551,17 @@ polypho.nyc: could not connect to host
pompompoes.com: could not connect to host
pontualcomp.com: max-age too low: 2592000
poolsandstuff.com: did not receive HSTS header
poolvilla-margarita.net: did not receive HSTS header
poolvilla-margarita.net: could not connect to host
poon.tech: could not connect to host
porno-gif.ru: did not receive HSTS header
portalplatform.net: did not receive HSTS header
poshpak.com: max-age too low: 86400
postcodewise.co.uk: did not receive HSTS header
posterspy.com: did not receive HSTS header
postscheduler.org: could not connect to host
posylka.de: did not receive HSTS header
potatoheads.net: could not connect to host
potbar.com: could not connect to host
potlytics.com: could not connect to host
poussinooz.fr: could not connect to host
povitria.net: could not connect to host
power99press.com: did not receive HSTS header
@ -3672,10 +3687,11 @@ rastreador.com.es: did not receive HSTS header
ratajczak.fr: could not connect to host
rate-esport.de: could not connect to host
rationalism.com: could not connect to host
rauchenwald.net: did not receive HSTS header
rauchenwald.net: could not connect to host
raulfraile.net: could not connect to host
raven.lipetsk.ru: could not connect to host
rawet.se: could not connect to host
rawoil.com: could not connect to host
rawstorieslondon.com: could not connect to host
raydan.space: could not connect to host
raydobe.me: could not connect to host
@ -3692,7 +3708,6 @@ realmic.net: could not connect to host
realmofespionage.com: could not connect to host
reaper.rip: could not connect to host
reardenporn.com: could not connect to host
recolic.net: did not receive HSTS header
recommended.reviews: could not connect to host
redable.hosting: could not connect to host
redar.xyz: could not connect to host
@ -3709,6 +3724,7 @@ regalpalms.com: did not receive HSTS header
regenbogenwald.de: did not receive HSTS header
regenerescence.com: did not receive HSTS header
reggae-cdmx.com: did not receive HSTS header
rei.ki: could not connect to host
reic.me: could not connect to host
reisyukaku.org: did not receive HSTS header
reithguard-it.de: did not receive HSTS header
@ -3844,6 +3860,7 @@ s.how: did not receive HSTS header
safematix.com: could not connect to host
safemovescheme.co.uk: did not receive HSTS header
saferedirect.link: could not connect to host
safetyrisk.net: did not receive HSTS header
safewings-nh.nl: did not receive HSTS header
sageth.com: max-age too low: 0
sah3.net: could not connect to host
@ -3946,7 +3963,6 @@ securityinet.net: did not receive HSTS header
securityinet.org.il: did not receive HSTS header
securiviera.ch: did not receive HSTS header
sedrubal.de: could not connect to host
sedziapilkarski.pl: could not connect to host
seedboxers.net: did not receive HSTS header
seele.ca: could not connect to host
segulink.com: could not connect to host
@ -4018,7 +4034,6 @@ shooshosha.com: did not receive HSTS header
shopontarget.com: did not receive HSTS header
shoprose.ru: could not connect to host
shops.neonisi.com: could not connect to host
shortpath.com: could not connect to host
shortr.li: could not connect to host
showkeeper.tv: did not receive HSTS header
shu-kin.net: could not connect to host
@ -4054,15 +4069,13 @@ simpleai.net: max-age too low: 600
simplefraud.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
simplelearner.com: could not connect to host
simplepractice.com: did not receive HSTS header
simplixos.org: could not connect to host
simply-premium.com: max-age too low: 0
simply-premium.com: did not receive HSTS header
sin30.net: could not connect to host
sincron.org: could not connect to host
sinful.pw: could not connect to host
sinfulforums.net: could not connect to host
singul4rity.com: could not connect to host
sinosky.org: could not connect to host
siraweb.org: did not receive HSTS header
siriad.com: could not connect to host
sirius-lee.net: could not connect to host
sitennisclub.com: did not receive HSTS header
@ -4087,15 +4100,16 @@ slash-dev.de: did not receive HSTS header
slashand.co: did not receive HSTS header
slashem.me: did not receive HSTS header
slattery.co: could not connect to host
slauber.de: did not receive HSTS header
sleep10.com: could not connect to host
slicketl.com: did not receive HSTS header
slightfuture.click: could not connect to host
slix.io: could not connect to host
slope.haus: could not connect to host
slovakiana.sk: did not receive HSTS header
slowfood.es: could not connect to host
sluitkampzeist.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
slycurity.de: could not connect to host
smallchat.nl: could not connect to host
smart-mirror.de: did not receive HSTS header
smart-ov.nl: could not connect to host
smartcoin.com.br: could not connect to host
@ -4119,6 +4133,7 @@ snapworks.net: did not receive HSTS header
snel4u.nl: could not connect to host
snelwerk.be: did not receive HSTS header
sng.my: could not connect to host
sniderman.eu.org: could not connect to host
snille.com: could not connect to host
snip.host: could not connect to host
snoozedds.com: max-age too low: 600
@ -4151,7 +4166,6 @@ sonic.network: did not receive HSTS header
sonicrainboom.rocks: could not connect to host
soobi.org: did not receive HSTS header
soondy.com: did not receive HSTS header
sotiran.com: could not connect to host
sotor.de: did not receive HSTS header
soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
soulfulglamour.uk: could not connect to host
@ -4212,6 +4226,7 @@ ssl.rip: could not connect to host
ssmato.me: could not connect to host
ssnc.org: max-age too low: 300
sss3s.com: could not connect to host
sstewartgallus.com: could not connect to host
ssworld.ga: could not connect to host
stabletoken.com: could not connect to host
stadjerspasonline.nl: could not connect to host
@ -4225,6 +4240,7 @@ starsam80.net: could not connect to host
starttraffic.com: did not receive HSTS header
startuponcloud.com: max-age too low: 2678400
startuppeople.co.uk: did not receive HSTS header
stash.ai: did not receive HSTS header
state-sponsored-actors.net: could not connect to host
statementinsertsforless.com: did not receive HSTS header
stateofexception.io: could not connect to host
@ -4258,6 +4274,7 @@ stocktrade.de: could not connect to host
stoffe-monster.de: did not receive HSTS header
stole-my.bike: could not connect to host
stole-my.tv: could not connect to host
stomt.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
stopwoodfin.org: could not connect to host
storecove.com: did not receive HSTS header
storefrontify.com: did not receive HSTS header
@ -4288,12 +4305,12 @@ studybay.com: did not receive HSTS header
studydrive.net: did not receive HSTS header
studyhub.cf: did not receive HSTS header
stugb.de: did not receive HSTS header
stuntmen.xyz: could not connect to host
stw-group.at: could not connect to host
stylenda.com: could not connect to host
styles.pm: could not connect to host
subbing.work: could not connect to host
subdimension.org: could not connect to host
subeesu.com: could not connect to host
subrosa.io: could not connect to host
subsys.no: did not receive HSTS header
subtitle.rip: could not connect to host
@ -4345,6 +4362,7 @@ syntheticmotoroil.org: did not receive HSTS header
syriatalk.biz: could not connect to host
syriatalk.org: could not connect to host
syrocon.ch: could not connect to host
sysadmin.pm: could not connect to host
sysadmin.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
syso.name: could not connect to host
szaszm.tk: max-age too low: 0
@ -4448,6 +4466,7 @@ theamateurs.net: did not receive HSTS header
theater.cf: could not connect to host
theberkshirescompany.com: did not receive HSTS header
thebigfail.net: could not connect to host
thebigwave.de: could not connect to host
thebrotherswarde.com: could not connect to host
thecapitalbank.com: did not receive HSTS header
thecharlestonwaldorf.com: did not receive HSTS header
@ -4458,6 +4477,7 @@ thecrochetcottage.net: could not connect to host
thediaryofadam.com: did not receive HSTS header
theendofzion.com: did not receive HSTS header
theescapistswiki.com: could not connect to host
theeyeopener.com: did not receive HSTS header
theflowerbasketonline.com: could not connect to host
thefootballanalyst.com: could not connect to host
thefrozenfire.com: did not receive HSTS header
@ -4511,13 +4531,14 @@ tickreport.com: did not receive HSTS header
ticktock.today: did not receive HSTS header
tictactux.de: could not connect to host
tidmore.us: could not connect to host
tie-online.org: did not receive HSTS header
tiensnet.com: did not receive HSTS header
tightlineproductions.com: did not receive HSTS header
tikutiku.pl: could not connect to host
tildebot.com: could not connect to host
tilkah.com.au: could not connect to host
timbeilby.com: could not connect to host
timbuktutimber.com: could not connect to host
timbuktutimber.com: did not receive HSTS header
timcamara.com: did not receive HSTS header
time-river.xyz: could not connect to host
timestamp.io: did not receive HSTS header
@ -4527,6 +4548,7 @@ timotrans.eu: did not receive HSTS header
timowi.de: could not connect to host
timowi.net: could not connect to host
timwittenberg.com: could not connect to host
timysewyn.be: could not connect to host
tink.network: could not connect to host
tipbox.is: could not connect to host
tipsyk.ru: could not connect to host
@ -4548,6 +4570,7 @@ tmitchell.io: could not connect to host
tmprod.com: did not receive HSTS header
tncnanet.com.br: could not connect to host
tnrsca.jp: did not receive HSTS header
toast.al: could not connect to host
tobias-bielefeld.de: did not receive HSTS header
tobiasmathes.com: could not connect to host
tobiasmathes.name: could not connect to host
@ -4659,6 +4682,7 @@ tzappa.net: could not connect to host
u-blox.com: max-age too low: 0
ua.search.yahoo.com: did not receive HSTS header
uadp.pw: did not receive HSTS header
ubanquity.com: could not connect to host
uberfunction.com: did not receive HSTS header
ubicloud.de: could not connect to host
ubicv.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
@ -4704,7 +4728,7 @@ unknownphenomena.net: could not connect to host
unmanaged.space: did not receive HSTS header
unplugg3r.dk: could not connect to host
unravel.ie: could not connect to host
unsystem.net: could not connect to host
unsystem.net: did not receive HSTS header
unterschicht.tv: could not connect to host
unwiredbrain.com: could not connect to host
unyq.me: could not connect to host
@ -4717,7 +4741,6 @@ uprotect.it: could not connect to host
upstats.eu: could not connect to host
ur-lauber.de: did not receive HSTS header
urandom.eu.org: did not receive HSTS header
urbanstylestaging.com: did not receive HSTS header
urphp.com: could not connect to host
us-immigration.com: did not receive HSTS header
usaa.com: did not receive HSTS header
@ -4732,7 +4755,7 @@ ustr.gov: max-age too low: 86400
utilitarianism.net: did not receive HSTS header
utleieplassen.no: could not connect to host
utopiagalaxy.space: could not connect to host
utopianhomespa.com: could not connect to host
utopianhomespa.com: did not receive HSTS header
utumno.ch: could not connect to host
utvbloggen.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
uvarov.pw: did not receive HSTS header
@ -4775,6 +4798,7 @@ venixplays-stream.ml: could not connect to host
verifikatorindonesia.com: could not connect to host
vermontcareergateway.org: could not connect to host
versia.ru: did not receive HSTS header
verspai.de: could not connect to host
veryhax.de: could not connect to host
vetmgmt.com: could not connect to host
vfree.org: could not connect to host
@ -4794,7 +4818,6 @@ vigilo.ga: could not connect to host
vijos.org: did not receive HSTS header
viktor-machnik.de: could not connect to host
viktorsvantesson.net: did not receive HSTS header
vinasec.se: could not connect to host
vincentkooijman.at: did not receive HSTS header
vincentkooijman.nl: did not receive HSTS header
vincentpancol.com: could not connect to host
@ -4861,7 +4884,7 @@ wapjt.cn: could not connect to host
warandpeace.xyz: could not connect to host
warehost.de: did not receive HSTS header
warhistoryonline.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
warlions.info: could not connect to host
warlions.info: did not receive HSTS header
warped.com: did not receive HSTS header
warsentech.com: did not receive HSTS header
washingtonviews.com: did not receive HSTS header
@ -4947,7 +4970,6 @@ wilf1rst.com: could not connect to host
willcipriano.com: could not connect to host
william.si: did not receive HSTS header
willosagiede.com: did not receive HSTS header
willow.technology: could not connect to host
wimake.solutions: did not receive HSTS header
winaes.com: did not receive HSTS header
winclient.cn: could not connect to host
@ -4985,7 +5007,6 @@ wonderfall.xyz: could not connect to host
wonderhost.info: could not connect to host
wondershift.biz: did not receive HSTS header
woodmafia.com.au: max-age too low: 0
woontegelwinkel.nl: did not receive HSTS header
woording.com: could not connect to host
wootton95.com: could not connect to host
woresite.jp: did not receive HSTS header
@ -5000,7 +5021,6 @@ wphostingspot.com: did not receive HSTS header
wpmetadatastandardsproject.org: could not connect to host
writeapp.me: could not connect to host
wsscompany.com.ve: could not connect to host
wth.in: could not connect to host
wufu.org: did not receive HSTS header
wuhengmin.com: did not receive HSTS header
wurzelzwerg.net: could not connect to host
@ -5029,7 +5049,7 @@ www.surfeasy.com: did not receive HSTS header
www.zenpayroll.com: did not receive HSTS header
www3.info: did not receive HSTS header
wxukang.cn: could not connect to host
wyzphoto.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118" data: no]
wyzphoto.nl: could not connect to host
x2w.io: could not connect to host
x3led.com: could not connect to host
x509.pub: could not connect to host
@ -5051,6 +5071,7 @@ xiaody.me: could not connect to host
xiaolvmu.me: could not connect to host
xiaoxiao.im: could not connect to host
ximens.me: did not receive HSTS header
xing.ml: could not connect to host
xisa.it: could not connect to host
xiyu.moe: could not connect to host
xmppwocky.net: could not connect to host
@ -5066,7 +5087,7 @@ xn--80aaihqncaejjobbu6v.xn--p1ai: max-age too low: 10000
xn--9pr52k0p5a.com: did not receive HSTS header
xn--datenrettung-mnchen-jbc.com: did not receive HSTS header
xn--dmonenjger-q5ag.net: could not connect to host
xn--fischereiverein-mnsterhausen-i7c.de: could not connect to host
xn--knstler-n2a.tips: could not connect to host
xn--lgb3a8bcpn.cf: could not connect to host
xn--lgb3a8bcpn.ga: could not connect to host
xn--lgb3a8bcpn.gq: could not connect to host
@ -5135,6 +5156,7 @@ yu.gg: did not receive HSTS header
yuan.ga: did not receive HSTS header
yuhen.ru: did not receive HSTS header
yuko.moe: could not connect to host
yunpan.blue: could not connect to host
yunzhu.li: did not receive HSTS header
yunzhu.org: could not connect to host
yutabon.com: could not connect to host
@ -5150,7 +5172,6 @@ zamorano.edu: could not connect to host
zao.fi: could not connect to host
zap.yt: could not connect to host
zarooba.com: could not connect to host
zberger.com: could not connect to host
zbigniewgalucki.eu: did not receive HSTS header
zebrababy.cn: did not receive HSTS header
zefiris.org: did not receive HSTS header
@ -5187,12 +5208,12 @@ zoo24.de: did not receive HSTS header
zoomingin.net: max-age too low: 5184000
zoommailing.com: did not receive HSTS header
zorasvobodova.cz: did not receive HSTS header
zorgclustertool.nl: could not connect to host
zortium.report: could not connect to host
zoznamrealit.sk: did not receive HSTS header
zqhong.com: could not connect to host
ztan.tk: could not connect to host
ztcaoll222.cn: did not receive HSTS header
zten.org: could not connect to host
zulu7.com: could not connect to host
zvncloud.com: did not receive HSTS header
zwollemagazine.nl: did not receive HSTS header

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -9,4 +9,3 @@ crlf
{"id":"crlf"}
lfcr 00:00:00.000 --> 00:00:01.000
{"id":"lfcr"}

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

@ -18,6 +18,7 @@ skip-if = (os == 'android') # android doesn't have devtools
[test_chrome_ext_background_page.html]
skip-if = (toolkit == 'android') # android doesn't have devtools
[test_chrome_ext_eventpage_warning.html]
[test_chrome_ext_contentscript_data_uri.html]
[test_chrome_ext_contentscript_unrecognizedprop_warning.html]
[test_chrome_ext_hybrid_addons.html]
[test_chrome_ext_trustworthy_origin.html]

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

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html>
<head>
<title>Test content script matching a data: URI</title>
<script src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script src="chrome://mochikit/content/tests/SimpleTest/ExtensionTestUtils.js"></script>
<script src="head.js"></script>
<link rel="stylesheet" href="chrome://mochikit/contents/tests/SimpleTest/test.css"/>
</head>
<body>
<script>
"use strict";
add_task(function* test_contentscript_data_uri() {
const target = ExtensionTestUtils.loadExtension({
files: {
"page.html": `<!DOCTYPE html>
<meta charset="utf-8">
<iframe id="inherited" src="data:text/html;charset=utf-8,inherited"></iframe>
`,
},
background() {
browser.test.sendMessage("page", browser.runtime.getURL("page.html"));
},
});
const scripts = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["webNavigation"],
content_scripts: [{
all_frames: true,
matches: ["<all_urls>"],
run_at: "document_start",
css: ["all_urls.css"],
js: ["all_urls.js"],
}],
},
files: {
"all_urls.css": `
body { background: yellow; }
`,
"all_urls.js": function() {
document.body.style.color = "red";
browser.test.assertTrue(location.protocol !== "data:",
`Matched document not a data URI: ${location.href}`);
},
},
background() {
browser.webNavigation.onCompleted.addListener(({url, frameId}) => {
browser.test.log(`Document loading complete: ${url}`);
if (frameId === 0) {
browser.test.sendMessage("tab-ready", url);
}
});
},
});
yield target.startup();
yield scripts.startup();
// Test extension page with a data: iframe.
const page = yield target.awaitMessage("page");
const win = window.open(page);
yield scripts.awaitMessage("tab-ready");
is(win.location.href, page, "Extension page loaded into a tab");
is(win.document.readyState, "complete", "Page finished loading");
const iframe = win.document.getElementById("inherited").contentWindow;
is(iframe.document.readyState, "complete", "iframe finished loading");
const style1 = iframe.getComputedStyle(iframe.document.body);
is(style1.color, "rgb(0, 0, 0)", "iframe text color is unmodified");
is(style1.backgroundColor, "rgba(0, 0, 0, 0)", "iframe background unmodified");
// Test extension tab navigated to a data: URI.
const data = "data:text/html;charset=utf-8,also-inherits";
win.location.href = data;
yield scripts.awaitMessage("tab-ready");
is(win.location.href, data, "Extension tab navigated to a data: URI");
is(win.document.readyState, "complete", "Tab finished loading");
const style2 = win.getComputedStyle(win.document.body);
is(style2.color, "rgb(0, 0, 0)", "Tab text color is unmodified");
is(style2.backgroundColor, "rgba(0, 0, 0, 0)", "Tab background unmodified");
win.close();
yield target.unload();
yield scripts.unload();
});
</script>
</body>
</html>

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

@ -152,6 +152,16 @@ var snapshotFormatters = {
}));
},
features: function features(data) {
$.append($("features-tbody"), data.map(function(feature) {
return $.new("tr", [
$.new("td", feature.name),
$.new("td", feature.version),
$.new("td", feature.id),
]);
}));
},
experiments: function experiments(data) {
$.append($("experiments-tbody"), data.map(function(experiment) {
return $.new("tr", [

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

@ -299,6 +299,30 @@
#endif
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.featuresTitle;
</h2>
<table>
<thead>
<tr>
<th>
&aboutSupport.featureName;
</th>
<th>
&aboutSupport.featureVersion;
</th>
<th>
&aboutSupport.featureId;
</th>
</tr>
</thead>
<tbody id="features-tbody">
</tbody>
</table>
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.extensionsTitle;
</h2>

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

@ -25,6 +25,11 @@ This is likely the same like id.heading in crashes.dtd. -->
<!ENTITY aboutSupport.extensionVersion "Version">
<!ENTITY aboutSupport.extensionId "ID">
<!ENTITY aboutSupport.featuresTitle "&brandShortName; Features">
<!ENTITY aboutSupport.featureName "Name">
<!ENTITY aboutSupport.featureVersion "Version">
<!ENTITY aboutSupport.featureId "ID">
<!ENTITY aboutSupport.experimentsTitle "Experimental Features">
<!ENTITY aboutSupport.experimentName "Name">
<!ENTITY aboutSupport.experimentId "ID">

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

@ -242,6 +242,7 @@ var dataProviders = {
extensions: function extensions(done) {
AddonManager.getAddonsByTypes(["extension"], function(extensions) {
extensions = extensions.filter(e => !e.isSystem);
extensions.sort(function(a, b) {
if (a.isActive != b.isActive)
return b.isActive ? 1 : -1;
@ -266,6 +267,30 @@ var dataProviders = {
});
},
features: function features(done) {
AddonManager.getAddonsByTypes(["extension"], function(features) {
features = features.filter(f => f.isSystem);
features.sort(function(a, b) {
// In some unfortunate cases addon names can be null.
let aname = a.name || null;
let bname = b.name || null;
let lc = aname.localeCompare(bname);
if (lc != 0)
return lc;
if (a.version != b.version)
return a.version > b.version ? 1 : -1;
return 0;
});
let props = ["name", "version", "id"];
done(features.map(function(f) {
return props.reduce(function(fData, prop) {
fData[prop] = f[prop];
return fData;
}, {});
}));
});
},
experiments: function experiments(done) {
if (Experiments === undefined) {
done([]);

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

@ -205,6 +205,27 @@ const SNAPSHOT_SCHEMA = {
},
},
},
features: {
required: true,
type: "array",
items: {
type: "object",
properties: {
name: {
required: true,
type: "string",
},
version: {
required: true,
type: "string",
},
id: {
required: true,
type: "string",
},
},
},
},
modifiedPreferences: {
required: true,
type: "object",