mirror of
https://github.com/roytam1/mozilla45esr.git
synced 2026-05-26 06:25:03 +00:00
import changes from tenfourfox-history:
- M1301093 part 1 for URL bar (see also M1283329) (34bd3e08f) - #469: script blocking (plus blacklist a couple fonts on LATimes) (9b75c96b8) - #469: clean up, add more hosts to scriptblock (80eb1366d) - #463: initial plumbing for requestIdleCallback (334075d50) - #471: speculative fix (1cd209093) - update nytimes ATSUI font blacklist (25614a763) - #469: more hosts for basic adblock (ec682d148)
This commit is contained in:
@@ -905,8 +905,12 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
this._value = this.inputField.value;
|
||||
gBrowser.userTypedValue = this.value;
|
||||
this.valueIsTyped = true;
|
||||
this.gotResultForCurrentQuery = false;
|
||||
this.mController.handleText();
|
||||
// Only wait for a result when we are sure to get one. In some
|
||||
// cases, like when pasting the same exact text, we may not fire
|
||||
// a new search and we won't get a result.
|
||||
if (this.mController.handleText()) {
|
||||
this.gotResultForCurrentQuery = false;
|
||||
}
|
||||
}
|
||||
this.resetActionType();
|
||||
]]></body>
|
||||
@@ -955,7 +959,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
// a backspace on the text value instead of removing the result.
|
||||
if (this.popup.selectedIndex == 0 &&
|
||||
this.popup._isFirstResultHeuristic) {
|
||||
return this.mController.handleText();
|
||||
this.mController.handleText();
|
||||
return false;
|
||||
}
|
||||
return this.mController.handleDelete();
|
||||
]]></body>
|
||||
|
||||
@@ -680,7 +680,7 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
|
||||
nsAutoCString targetScheme;
|
||||
nsresult rv = targetBaseURI->GetScheme(targetScheme);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
|
||||
//-- Some callers do not allow loading javascript:
|
||||
if ((aFlags & nsIScriptSecurityManager::DISALLOW_SCRIPT) &&
|
||||
targetScheme.EqualsLiteral("javascript"))
|
||||
@@ -688,6 +688,235 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
|
||||
return NS_ERROR_DOM_BAD_URI;
|
||||
}
|
||||
|
||||
// TenFourFox issue 469
|
||||
// determine if this is a script we want to block
|
||||
if (mIsTenFourFoxAdBlockEnabled &&
|
||||
(targetScheme.EqualsLiteral("http") || targetScheme.EqualsLiteral("https"))) {
|
||||
nsAutoCString hostname;
|
||||
if (NS_SUCCEEDED(targetBaseURI->GetHost(hostname))) {
|
||||
ToLowerCase(hostname);
|
||||
#define BLOK(q) hostname.EqualsLiteral(q)
|
||||
if (0 ||
|
||||
// This is used as a data source by a lot of UIs,
|
||||
// so we shouldn't block it (e.g., nytimes).
|
||||
// Probably also shouldn't block googletagmanager.com
|
||||
// for the same reasons.
|
||||
//BLOK("www.googletagservices.com") ||
|
||||
|
||||
// blocking zdbb.net seems to be problematic
|
||||
// https://github.com/AdguardTeam/AdguardFilters/issues/1278
|
||||
|
||||
BLOK("c.amazon-adsystem.com") ||
|
||||
|
||||
BLOK("google-analytics.com") ||
|
||||
BLOK("www.google-analytics.com") ||
|
||||
BLOK("ssl.google-analytics.com") ||
|
||||
|
||||
BLOK("tpc.googlesyndication.com") ||
|
||||
BLOK("pagead.googlesyndication.com") ||
|
||||
BLOK("pagead2.googlesyndication.com") ||
|
||||
|
||||
BLOK("adservice.google.com") ||
|
||||
|
||||
BLOK("www.googleadservices.com") ||
|
||||
|
||||
BLOK("adrta.com") ||
|
||||
BLOK("p.adrta.com") ||
|
||||
BLOK("q.adrta.com") ||
|
||||
BLOK("cdn.adrta.com") ||
|
||||
BLOK("ipv6.adrta.com") ||
|
||||
|
||||
BLOK("ib.adnxs.com") ||
|
||||
BLOK("acdn.adnxs.com") ||
|
||||
BLOK("secure.adnxs.com") ||
|
||||
BLOK("yj-a.p.adnxs.com") ||
|
||||
BLOK("sharethrough.adnxs.com") ||
|
||||
|
||||
BLOK("c2.taboola.com") ||
|
||||
BLOK("nr.taboola.com") ||
|
||||
BLOK("cdn.taboola.com") ||
|
||||
BLOK("trc.taboola.com") ||
|
||||
|
||||
BLOK("b.scorecardresearch.com") ||
|
||||
BLOK("sb.scorecardresearch.com") ||
|
||||
|
||||
BLOK("ad.doubleclick.net") ||
|
||||
BLOK("static.doubleclick.net") ||
|
||||
BLOK("stats.g.doubleclick.net") ||
|
||||
BLOK("googleads.g.doubleclick.net") ||
|
||||
BLOK("securepubads.g.doubleclick.net") ||
|
||||
|
||||
BLOK("at.atwola.com") ||
|
||||
|
||||
BLOK("pixel.advertising.com") ||
|
||||
BLOK("dtm.advertising.com") ||
|
||||
|
||||
BLOK("sp.analytics.yahoo.com") ||
|
||||
BLOK("ads.yap.yahoo.com") ||
|
||||
|
||||
BLOK("cdn.gotraffic.net") ||
|
||||
|
||||
BLOK("cdn.rta247.com") ||
|
||||
|
||||
BLOK("widget.perfectmarket.com") ||
|
||||
|
||||
BLOK("cdn.doubleverify.com") ||
|
||||
BLOK("rtb0.doubleverify.com") ||
|
||||
BLOK("rtbcdn.doubleverify.com") ||
|
||||
|
||||
BLOK("cdn.flashtalking.com") ||
|
||||
BLOK("servedby.flashtalking.com") ||
|
||||
|
||||
BLOK("a.postrelease.com") ||
|
||||
BLOK("jadserve.postrelease.com") ||
|
||||
|
||||
BLOK("native.sharethrough.com") ||
|
||||
|
||||
BLOK("static.chartbeat.com") ||
|
||||
|
||||
BLOK("edge.quantserve.com") ||
|
||||
BLOK("secure.quantserve.com") ||
|
||||
|
||||
BLOK("rules.quantcount.com") ||
|
||||
|
||||
BLOK("api.viglink.com") ||
|
||||
BLOK("cdn.viglink.com") ||
|
||||
|
||||
BLOK("xcp.go.sonobi.com") ||
|
||||
|
||||
BLOK("s.ntv.io") ||
|
||||
|
||||
BLOK("cdn.segment.com") ||
|
||||
|
||||
BLOK("cdn-gl.imrworldwide.com") ||
|
||||
BLOK("secure-dcr.imrworldwide.com") ||
|
||||
|
||||
BLOK("labs-cdn.revcontent.com") ||
|
||||
BLOK("trends.revcontent.com") ||
|
||||
BLOK("cdn.revcontent.com") ||
|
||||
|
||||
BLOK("cas.criteo.com") ||
|
||||
BLOK("static.criteo.net") ||
|
||||
|
||||
BLOK("jsc.idealmedia.com") ||
|
||||
BLOK("servicer.idealmedia.com") ||
|
||||
|
||||
BLOK("js-agent.newrelic.com") ||
|
||||
BLOK("bam.nr-data.net") ||
|
||||
|
||||
BLOK("widgets.outbrain.com") ||
|
||||
BLOK("amplify.outbrain.com") ||
|
||||
|
||||
BLOK("cdn.krxd.net") ||
|
||||
BLOK("beacon.krxd.net") ||
|
||||
|
||||
BLOK("scdn.cxense.com") ||
|
||||
BLOK("rscdn.cxense.com") ||
|
||||
|
||||
BLOK("z.moatads.com") ||
|
||||
BLOK("s-jsonp.moatads.com") ||
|
||||
|
||||
BLOK("static.yieldmo.com") ||
|
||||
|
||||
BLOK("ads.rubiconproject.com") ||
|
||||
|
||||
BLOK("cdn.engine.4dsply.com") ||
|
||||
|
||||
BLOK("as-sec.casalemedia.com") ||
|
||||
|
||||
BLOK("loadm.exelator.com") ||
|
||||
|
||||
BLOK("sdk.streamrail.com") ||
|
||||
|
||||
BLOK("cdn.lockerdome.com") ||
|
||||
BLOK("cdn2.lockerdome.com") ||
|
||||
|
||||
BLOK("pi.pardot.com") ||
|
||||
|
||||
BLOK("js-sec.indexww.com") ||
|
||||
|
||||
BLOK("tags.tiqcdn.com") ||
|
||||
|
||||
BLOK("tag.bounceexchange.com") ||
|
||||
BLOK("api.bounceexchange.com") ||
|
||||
|
||||
BLOK("www.npttech.com") ||
|
||||
|
||||
BLOK("cdn.adsafeprotected.com") ||
|
||||
|
||||
BLOK("aka-cdn.adtechus.com") ||
|
||||
BLOK("adserver.adtechus.com") ||
|
||||
|
||||
BLOK("r.skimresources.com") ||
|
||||
BLOK("s.skimresources.com") ||
|
||||
BLOK("t.skimresources.com") ||
|
||||
|
||||
BLOK("contextual.media.net") ||
|
||||
|
||||
BLOK("edge.simplereach.com") ||
|
||||
|
||||
BLOK("js.adsrvr.org") ||
|
||||
|
||||
BLOK("script.crazyegg.com") ||
|
||||
|
||||
BLOK("launch.newsinc.com") ||
|
||||
|
||||
BLOK("c.go-mpulse.net") ||
|
||||
|
||||
BLOK("cdn5.userzoom.com") ||
|
||||
|
||||
BLOK("dx.steelhousemedia.com") ||
|
||||
BLOK("px.steelhousemedia.com") ||
|
||||
BLOK("ww.steelhousemedia.com") ||
|
||||
|
||||
BLOK("nexus.ensighten.com") ||
|
||||
|
||||
BLOK("cdn.mediavoice.com") ||
|
||||
BLOK("plugin.mediavoice.com") ||
|
||||
|
||||
BLOK("segment-data.zqtk.net") ||
|
||||
|
||||
BLOK("d.turn.com") ||
|
||||
|
||||
BLOK("i.yldbt.com") ||
|
||||
BLOK("cdn.yldbt.com") ||
|
||||
|
||||
BLOK("pippio.com") ||
|
||||
|
||||
BLOK("cdn.quantummetric.com") ||
|
||||
|
||||
BLOK("cdn.blueconic.net") ||
|
||||
|
||||
BLOK("www.zergnet.com") ||
|
||||
|
||||
BLOK("f.monetate.net") ||
|
||||
BLOK("sb.monetate.net") ||
|
||||
BLOK("se.monetate.net") ||
|
||||
|
||||
BLOK("tags.crwdcntrl.net") ||
|
||||
|
||||
BLOK("cdn.nsstatic.net") ||
|
||||
|
||||
BLOK("tags.bkrtx.com") ||
|
||||
|
||||
BLOK("yads.c.yimg.jp") ||
|
||||
BLOK("yjtag.yahoo.co.jp") ||
|
||||
BLOK("yads.yjtag.yahoo.co.jp") ||
|
||||
|
||||
BLOK("px-ya.ladsp.com") ||
|
||||
0) {
|
||||
#undef BLOK
|
||||
// Yup.
|
||||
#ifndef DEBUG
|
||||
if (mIsTenFourFoxAdBlockLoggingEnabled)
|
||||
#endif
|
||||
fprintf(stderr, "Warning: TenFourFox basic adblock intercepted script from %s.\n",
|
||||
hostname.get());
|
||||
return NS_ERROR_DOM_BAD_URI;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NS_NAMED_LITERAL_STRING(errorTag, "CheckLoadURIError");
|
||||
bool reportErrors = !(aFlags & nsIScriptSecurityManager::DONT_REPORT_ERRORS);
|
||||
|
||||
@@ -728,6 +957,7 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (hasFlags) {
|
||||
#if(0) // no B2G
|
||||
// Let apps load the whitelisted theme resources even if they don't
|
||||
// have the webapps-manage permission but have the themeable one.
|
||||
// Resources from the theme origin are also allowed to load from
|
||||
@@ -744,6 +974,7 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
|
||||
? NS_OK : NS_ERROR_DOM_BAD_URI;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// In this case, we allow opening only if the source and target URIS
|
||||
// are on the same domain, or the opening URI has the webapps
|
||||
// permision granted
|
||||
@@ -1246,6 +1477,7 @@ static const char* kObservedPrefs[] = {
|
||||
sJSEnabledPrefName,
|
||||
sFileOriginPolicyPrefName,
|
||||
"capability.policy.",
|
||||
"tenfourfox.adblock.",
|
||||
nullptr
|
||||
};
|
||||
|
||||
@@ -1264,6 +1496,8 @@ nsScriptSecurityManager::Observe(nsISupports* aObject, const char* aTopic,
|
||||
nsScriptSecurityManager::nsScriptSecurityManager(void)
|
||||
: mPrefInitialized(false)
|
||||
, mIsJavaScriptEnabled(false)
|
||||
, mIsTenFourFoxAdBlockEnabled(false)
|
||||
, mIsTenFourFoxAdBlockLoggingEnabled(false)
|
||||
{
|
||||
static_assert(sizeof(intptr_t) == sizeof(void*),
|
||||
"intptr_t and void* have different lengths on this platform. "
|
||||
@@ -1400,6 +1634,10 @@ nsScriptSecurityManager::ScriptSecurityPrefChanged()
|
||||
Preferences::GetBool(sJSEnabledPrefName, mIsJavaScriptEnabled);
|
||||
sStrictFileOriginPolicy =
|
||||
Preferences::GetBool(sFileOriginPolicyPrefName, false);
|
||||
mIsTenFourFoxAdBlockEnabled =
|
||||
Preferences::GetBool("tenfourfox.adblock.enabled", mIsTenFourFoxAdBlockEnabled);
|
||||
mIsTenFourFoxAdBlockLoggingEnabled =
|
||||
Preferences::GetBool("tenfourfox.adblock.logging.enabled", mIsTenFourFoxAdBlockLoggingEnabled);
|
||||
|
||||
//
|
||||
// Rebuild the set of principals for which we allow file:// URI loads. This
|
||||
|
||||
@@ -123,6 +123,8 @@ private:
|
||||
nsCOMPtr<nsIPrincipal> mSystemPrincipal;
|
||||
bool mPrefInitialized;
|
||||
bool mIsJavaScriptEnabled;
|
||||
bool mIsTenFourFoxAdBlockEnabled;
|
||||
bool mIsTenFourFoxAdBlockLoggingEnabled;
|
||||
nsTArray<nsCOMPtr<nsIURI>> mFileURIWhitelist;
|
||||
|
||||
// This machinery controls new-style domain policies. The old-style
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
||||
/* 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/. */
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "mozilla/dom/IdleDeadline.h"
|
||||
#include "mozilla/dom/IdleDeadlineBinding.h"
|
||||
#include "nsPerformance.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsDOMNavigationTiming.h"
|
||||
#include "nsPIDOMWindow.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(IdleDeadline, mWindow)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(IdleDeadline)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(IdleDeadline)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(IdleDeadline)
|
||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
IdleDeadline::IdleDeadline(nsPIDOMWindow* aWindow, bool aDidTimeout,
|
||||
DOMHighResTimeStamp aDeadline)
|
||||
: mWindow(aWindow)
|
||||
, mDidTimeout(aDidTimeout)
|
||||
, mDeadline(aDeadline)
|
||||
{
|
||||
}
|
||||
|
||||
IdleDeadline::~IdleDeadline()
|
||||
{
|
||||
}
|
||||
|
||||
JSObject*
|
||||
IdleDeadline::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return IdleDeadlineBinding::Wrap(aCx, this, aGivenProto);
|
||||
}
|
||||
|
||||
DOMHighResTimeStamp
|
||||
IdleDeadline::TimeRemaining()
|
||||
{
|
||||
if (mDidTimeout) {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
RefPtr<nsPerformance> performance = mWindow->GetPerformance();
|
||||
if (!performance) {
|
||||
// If there is no performance object the window is partially torn
|
||||
// down, so we can safely say that there is no time remaining.
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
return std::max(mDeadline - performance->Now(), 0.0);
|
||||
}
|
||||
|
||||
bool
|
||||
IdleDeadline::DidTimeout() const
|
||||
{
|
||||
return mDidTimeout;
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
@@ -0,0 +1,55 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
||||
/* 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/. */
|
||||
|
||||
#ifndef mozilla_dom_IdleDeadline_h
|
||||
#define mozilla_dom_IdleDeadline_h
|
||||
|
||||
#include "js/TypeDecls.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/ErrorResult.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
#include "mozilla/dom/BindingDeclarations.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsDOMNavigationTiming.h"
|
||||
#include "nsWrapperCache.h"
|
||||
|
||||
class nsPIDOMWindow;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class IdleDeadline final
|
||||
: public nsISupports
|
||||
, public nsWrapperCache
|
||||
{
|
||||
public:
|
||||
IdleDeadline(nsPIDOMWindow* aWindow, bool aDidTimeout,
|
||||
DOMHighResTimeStamp aDeadline);
|
||||
|
||||
nsPIDOMWindow* GetParentObject() const { return mWindow; }
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
DOMHighResTimeStamp TimeRemaining();
|
||||
bool DidTimeout() const;
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IdleDeadline)
|
||||
|
||||
private:
|
||||
~IdleDeadline();
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> mWindow;
|
||||
const bool mDidTimeout;
|
||||
const DOMHighResTimeStamp mDeadline;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_dom_IdleDeadline_h
|
||||
@@ -182,6 +182,7 @@ EXPORTS.mozilla.dom += [
|
||||
'FileReader.h',
|
||||
'FragmentOrElement.h',
|
||||
'FromParser.h',
|
||||
'IdleDeadline.h',
|
||||
'ImageEncoder.h',
|
||||
'ImportManager.h',
|
||||
'Link.h',
|
||||
@@ -247,6 +248,7 @@ UNIFIED_SOURCES += [
|
||||
'FileList.cpp',
|
||||
'FileReader.cpp',
|
||||
'FragmentOrElement.cpp',
|
||||
'IdleDeadline.cpp',
|
||||
'ImageEncoder.cpp',
|
||||
'ImportManager.cpp',
|
||||
'Link.cpp',
|
||||
|
||||
@@ -1143,6 +1143,7 @@ nsGlobalWindow::nsGlobalWindow(nsGlobalWindow *aOuterWindow)
|
||||
mTimeoutsSuspendDepth(0),
|
||||
mFocusMethod(0),
|
||||
mSerial(0),
|
||||
mIdleRequestCallbackCounter(1),
|
||||
#ifdef DEBUG
|
||||
mSetOpenerWindowCalled(false),
|
||||
#endif
|
||||
@@ -13858,3 +13859,35 @@ nsGlobalWindow::CreateImageBitmap(const ImageBitmapSource& aImage,
|
||||
{
|
||||
return ImageBitmap::Create(this, aImage, Some(gfx::IntRect(aSx, aSy, aSw, aSh)), aRv);
|
||||
}
|
||||
|
||||
/* Support for requestIdleCallback() from TenFourFox issue 463 */
|
||||
|
||||
uint32_t
|
||||
nsGlobalWindow::RequestIdleCallback(JSContext* aCx,
|
||||
IdleRequestCallback& aCallback,
|
||||
const IdleRequestOptions& aOptions,
|
||||
ErrorResult& aError)
|
||||
{
|
||||
MOZ_RELEASE_ASSERT(IsInnerWindow());
|
||||
AssertIsOnMainThread();
|
||||
|
||||
// uint32_t handle = ++mIdleRequestCallbackCounter;
|
||||
|
||||
fprintf(stderr, "::RequestIdleCallback() is not yet implemented\n");
|
||||
#if DEBUG
|
||||
MOZ_ASSERT(0);
|
||||
#endif
|
||||
return 0; // handle;
|
||||
}
|
||||
|
||||
void
|
||||
nsGlobalWindow::CancelIdleCallback(uint32_t aHandle)
|
||||
{
|
||||
MOZ_RELEASE_ASSERT(IsInnerWindow());
|
||||
|
||||
fprintf(stderr, "::CancelIdleCallback() is not yet implemented\n");
|
||||
#if DEBUG
|
||||
MOZ_ASSERT(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -118,6 +118,7 @@ class RequestOrUSVString;
|
||||
class Selection;
|
||||
class SpeechSynthesis;
|
||||
class WakeLock;
|
||||
class IdleRequestCallback;
|
||||
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GONK)
|
||||
class WindowOrientationObserver;
|
||||
#endif
|
||||
@@ -1042,6 +1043,13 @@ public:
|
||||
int32_t RequestAnimationFrame(mozilla::dom::FrameRequestCallback& aCallback,
|
||||
mozilla::ErrorResult& aError);
|
||||
void CancelAnimationFrame(int32_t aHandle, mozilla::ErrorResult& aError);
|
||||
|
||||
uint32_t RequestIdleCallback(JSContext* aCx,
|
||||
mozilla::dom::IdleRequestCallback& aCallback,
|
||||
const mozilla::dom::IdleRequestOptions& aOptions,
|
||||
mozilla::ErrorResult& aError);
|
||||
void CancelIdleCallback(uint32_t aHandle);
|
||||
|
||||
#ifdef MOZ_WEBSPEECH
|
||||
mozilla::dom::SpeechSynthesis*
|
||||
GetSpeechSynthesis(mozilla::ErrorResult& aError);
|
||||
@@ -1791,6 +1799,9 @@ protected:
|
||||
|
||||
uint32_t mSerial;
|
||||
|
||||
// requestIdleCallback() support
|
||||
uint32_t mIdleRequestCallbackCounter;
|
||||
|
||||
#ifdef DEBUG
|
||||
bool mSetOpenerWindowCalled;
|
||||
nsCOMPtr<nsIURI> mLastOpenedURI;
|
||||
|
||||
@@ -1610,6 +1610,9 @@ DOMInterfaces = {
|
||||
'binaryNames': {
|
||||
'postMessage': 'postMessageMoz',
|
||||
},
|
||||
'implicitJSContext': [
|
||||
'requestIdleCallback'
|
||||
],
|
||||
},
|
||||
|
||||
'WindowProxy': {
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* 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/.
|
||||
*
|
||||
* The origin of this IDL file is:
|
||||
* https://w3c.github.io/requestidlecallback/
|
||||
*/
|
||||
|
||||
[Pref="dom.requestIdleCallback.enabled"]
|
||||
interface IdleDeadline {
|
||||
DOMHighResTimeStamp timeRemaining();
|
||||
readonly attribute boolean didTimeout;
|
||||
};
|
||||
|
||||
@@ -494,3 +494,17 @@ interface ChromeWindow {
|
||||
Window implements ChromeWindow;
|
||||
Window implements GlobalFetch;
|
||||
Window implements ImageBitmapFactories;
|
||||
|
||||
partial interface Window {
|
||||
[Throws, Pref="dom.requestIdleCallback.enabled"]
|
||||
unsigned long requestIdleCallback(IdleRequestCallback callback,
|
||||
optional IdleRequestOptions options);
|
||||
[Pref="dom.requestIdleCallback.enabled"]
|
||||
void cancelIdleCallback(unsigned long handle);
|
||||
};
|
||||
|
||||
dictionary IdleRequestOptions {
|
||||
unsigned long timeout;
|
||||
};
|
||||
|
||||
callback IdleRequestCallback = void (IdleDeadline deadline);
|
||||
|
||||
@@ -264,6 +264,7 @@ WEBIDL_FILES = [
|
||||
'IDBRequest.webidl',
|
||||
'IDBTransaction.webidl',
|
||||
'IDBVersionChangeEvent.webidl',
|
||||
'IdleDeadline.webidl',
|
||||
'ImageBitmap.webidl',
|
||||
'ImageCapture.webidl',
|
||||
'ImageData.webidl',
|
||||
|
||||
@@ -1050,6 +1050,9 @@ pref("dom.disable_window_open_feature.status", true);
|
||||
|
||||
pref("dom.allow_scripts_to_close_windows", false);
|
||||
|
||||
// TenFourFox issue 463
|
||||
pref("dom.requestIdleCallback.enabled", false);
|
||||
|
||||
pref("dom.require_user_interaction_for_beforeunload", true);
|
||||
|
||||
pref("dom.disable_open_during_load", false);
|
||||
@@ -5140,3 +5143,6 @@ pref("dom.mozKillSwitch.enabled", false);
|
||||
pref("toolkit.pageThumbs.screenSizeDivisor", 7);
|
||||
pref("toolkit.pageThumbs.minWidth", 0);
|
||||
pref("toolkit.pageThumbs.minHeight", 0);
|
||||
|
||||
pref("tenfourfox.adblock.enabled", false);
|
||||
pref("tenfourfox.adblock.logging.enabled", true);
|
||||
|
||||
@@ -180,8 +180,9 @@ nsAutoCompleteController::StartSearch(const nsAString &aSearchString)
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAutoCompleteController::HandleText()
|
||||
nsAutoCompleteController::HandleText(bool *_retval)
|
||||
{
|
||||
*_retval = false;
|
||||
// Note: the events occur in the following order when IME is used.
|
||||
// 1. a compositionstart event(HandleStartComposition)
|
||||
// 2. some input events (HandleText), eCompositionState_Composing
|
||||
@@ -284,6 +285,7 @@ nsAutoCompleteController::HandleText()
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
*_retval = true;
|
||||
StartSearches();
|
||||
|
||||
return NS_OK;
|
||||
@@ -610,7 +612,8 @@ nsAutoCompleteController::HandleDelete(bool *_retval)
|
||||
input->GetPopupOpen(&isOpen);
|
||||
if (!isOpen || mRowCount <= 0) {
|
||||
// Nothing left to delete, proceed as normal
|
||||
HandleText();
|
||||
bool unused = false;
|
||||
HandleText(&unused);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -621,7 +624,8 @@ nsAutoCompleteController::HandleDelete(bool *_retval)
|
||||
popup->GetSelectedIndex(&index);
|
||||
if (index == -1) {
|
||||
// No row is selected in the list
|
||||
HandleText();
|
||||
bool unused = false;
|
||||
HandleText(&unused);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -1185,7 +1189,7 @@ nsAutoCompleteController::StartSearch(uint16_t aSearchType)
|
||||
nsAutoString searchParam;
|
||||
nsresult rv = input->GetSearchParam(searchParam);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
return rv;
|
||||
|
||||
// FormFill expects the searchParam to only contain the input element id,
|
||||
// other consumers may have other expectations, so this modifies it only
|
||||
|
||||
@@ -37,7 +37,7 @@ interface nsIAutoCompleteController : nsISupports
|
||||
*/
|
||||
void startSearch(in AString searchString);
|
||||
|
||||
/*
|
||||
/*
|
||||
* Stop all asynchronous searches
|
||||
*/
|
||||
void stopSearch();
|
||||
@@ -54,8 +54,10 @@ interface nsIAutoCompleteController : nsISupports
|
||||
* it's not in composing mode. DOM compositionend event is not good
|
||||
* timing for calling handleText(). DOM input event immediately after
|
||||
* DOM compositionend event is the best timing to call this.
|
||||
*
|
||||
* @return whether this handler started a new search.
|
||||
*/
|
||||
void handleText();
|
||||
boolean handleText();
|
||||
|
||||
/*
|
||||
* Notify the controller that the user wishes to enter the current text. If
|
||||
@@ -63,14 +65,16 @@ interface nsIAutoCompleteController : nsISupports
|
||||
* fill this value into the input field before continuing. If false, just
|
||||
* use the current value of the input field.
|
||||
*
|
||||
* @return True if the controller wishes to prevent event propagation and default event
|
||||
* @return Whether the controller wishes to prevent event propagation and
|
||||
* default event.
|
||||
*/
|
||||
boolean handleEnter(in boolean aIsPopupSelection);
|
||||
|
||||
/*
|
||||
* Notify the controller that the user wishes to revert autocomplete
|
||||
*
|
||||
* @return True if the controller wishes to prevent event propagation and default event
|
||||
* @return Whether the controller wishes to prevent event propagation and
|
||||
* default event.
|
||||
*/
|
||||
boolean handleEscape();
|
||||
|
||||
@@ -90,7 +94,7 @@ interface nsIAutoCompleteController : nsISupports
|
||||
*/
|
||||
void handleEndComposition();
|
||||
|
||||
/*
|
||||
/*
|
||||
* Handle tab. Just closes up.
|
||||
*/
|
||||
void handleTab();
|
||||
@@ -99,16 +103,19 @@ interface nsIAutoCompleteController : nsISupports
|
||||
* Notify the controller of the following key navigation events:
|
||||
* up, down, left, right, page up, page down
|
||||
*
|
||||
* @return True if the controller wishes to prevent event propagation and default event
|
||||
* @return Whether the controller wishes to prevent event propagation and
|
||||
* default event
|
||||
*/
|
||||
boolean handleKeyNavigation(in unsigned long key);
|
||||
|
||||
/*
|
||||
* Notify the controller that the user chose to delete the current
|
||||
* auto-complete result.
|
||||
*
|
||||
* @return Whether the controller removed a result item.
|
||||
*/
|
||||
boolean handleDelete();
|
||||
|
||||
|
||||
/*
|
||||
* Get the value of the result at a given index in the last completed search
|
||||
*/
|
||||
|
||||
@@ -821,8 +821,9 @@ nsFormFillController::HandleEvent(nsIDOMEvent* aEvent)
|
||||
return KeyPress(aEvent);
|
||||
}
|
||||
if (type.EqualsLiteral("input")) {
|
||||
bool unused = false;
|
||||
return (!mSuppressOnInput && mController && mFocusedInput) ?
|
||||
mController->HandleText() : NS_OK;
|
||||
mController->HandleText(&unused) : NS_OK;
|
||||
}
|
||||
if (type.EqualsLiteral("blur")) {
|
||||
if (mFocusedInput)
|
||||
@@ -932,6 +933,7 @@ nsFormFillController::KeyPress(nsIDOMEvent* aEvent)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
bool cancel = false;
|
||||
bool unused = false;
|
||||
|
||||
uint32_t k;
|
||||
keyEvent->GetKeyCode(&k);
|
||||
@@ -941,7 +943,7 @@ nsFormFillController::KeyPress(nsIDOMEvent* aEvent)
|
||||
mController->HandleDelete(&cancel);
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_BACK_SPACE:
|
||||
mController->HandleText();
|
||||
mController->HandleText(&unused);
|
||||
break;
|
||||
#else
|
||||
case nsIDOMKeyEvent::DOM_VK_BACK_SPACE:
|
||||
@@ -949,10 +951,11 @@ nsFormFillController::KeyPress(nsIDOMEvent* aEvent)
|
||||
bool isShift = false;
|
||||
keyEvent->GetShiftKey(&isShift);
|
||||
|
||||
if (isShift)
|
||||
if (isShift) {
|
||||
mController->HandleDelete(&cancel);
|
||||
else
|
||||
mController->HandleText();
|
||||
} else {
|
||||
mController->HandleText(&unused);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -1062,7 +1065,8 @@ nsFormFillController::MouseDown(nsIDOMEvent* aEvent)
|
||||
if (value.Length() > 0) {
|
||||
// Show the popup with a filtered result set
|
||||
mController->SetSearchString(EmptyString());
|
||||
mController->HandleText();
|
||||
bool unused = false;
|
||||
mController->HandleText(&unused);
|
||||
} else {
|
||||
// Show the popup with the complete result set. Can't use HandleText()
|
||||
// because it doesn't display the popup if the input is blank.
|
||||
|
||||
@@ -2978,6 +2978,7 @@ nsNativeThemeCocoa::DrawWidgetBackground(nsRenderingContext* aContext,
|
||||
// draw a focus ring
|
||||
if (eventState.HasState(NS_EVENT_STATE_FOCUS)) {
|
||||
NSGraphicsContext* savedContext = [NSGraphicsContext currentContext];
|
||||
if (MOZ_UNLIKELY(!savedContext)) break; // speculative fix issue 471
|
||||
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:cgContext flipped:YES]];
|
||||
CGContextSaveGState(cgContext);
|
||||
NSSetFocusRingStyle(NSFocusRingOnly);
|
||||
|
||||
Reference in New Issue
Block a user