merge mozilla-inbound to mozilla-central. r=merge a=merge

MozReview-Commit-ID: 3xAWLzLkoZ3
This commit is contained in:
Sebastian Hengst 2017-04-09 20:32:42 +02:00
commit 1ac51ab409
104 changed files with 1535 additions and 575 deletions

View File

@ -4,6 +4,33 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Document Navigation')
with Files('crashtests/430628*'):
BUG_COMPONENT = ('Core', 'Editor')
with Files('crashtests/432114*'):
BUG_COMPONENT = ('Core', 'Editor')
with Files('crashtests/500328*'):
BUG_COMPONENT = ('Firefox', 'Bookmarks & History')
with Files('IHistory.h'):
BUG_COMPONENT = ('Toolkit', 'Places')
with Files('*LoadContext.*'):
BUG_COMPONENT = ('Core', 'Networking')
with Files('nsAboutRedirector.*'):
BUG_COMPONENT = ('Core', 'General')
with Files('nsILinkHandler.*'):
BUG_COMPONENT = ('Core', 'DOM: Core & HTML')
with Files('nsIScrollObserver.*'):
BUG_COMPONENT = ('Core', 'Panning and Zooming')
DIRS += [
'timeline',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'Developer Tools: Performance Tools (Profiler/Timeline)')
EXPORTS.mozilla += [
'AbstractTimelineMarker.h',
'AutoGlobalTimelineMarker.h',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Document Navigation')
DIRS += [
'base',
'shistory',

146
docshell/test/moz.build Normal file
View File

@ -0,0 +1,146 @@
with Files('**'):
BUG_COMPONENT = ('Core', 'Document Navigation')
with Files('browser/*_bug234628*'):
BUG_COMPONENT = ('Core', 'Internationalization')
with Files('browser/*_bug349769*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('browser/*_bug388121*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('browser/*_bug655270*'):
BUG_COMPONENT = ('Toolkit', 'Places')
with Files('browser/*_bug655273*'):
BUG_COMPONENT = ('Firefox', 'Menus')
with Files('browser/*_bug852909*'):
BUG_COMPONENT = ('Firefox', 'Menus')
with Files('browser/*bug92473*'):
BUG_COMPONENT = ('Core', 'Internationalization')
with Files('browser/*loadDisallowInherit*'):
BUG_COMPONENT = ('Firefox', 'Location Bar')
with Files('browser/*tab_touch_events*'):
BUG_COMPONENT = ('Core', 'DOM: Events')
with Files('browser/*timelineMarkers*'):
BUG_COMPONENT = ('Firefox', 'Developer Tools: Performance Tools (Profiler/Timeline)')
with Files('browser/*ua_emulation*'):
BUG_COMPONENT = ('Firefox', 'Developer Tools')
with Files('chrome/*112564*'):
BUG_COMPONENT = ('Core', 'Networking: HTTP')
with Files('chrome/*303267*'):
BUG_COMPONENT = ('Core', 'DOM: Core & HTML')
with Files('chrome/*453650*'):
BUG_COMPONENT = ('Core', 'Layout')
with Files('chrome/*565388*'):
BUG_COMPONENT = ('Core', 'Widget')
with Files('chrome/*582176*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('chrome/*608669*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('chrome/*690056*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('chrome/*92598*'):
BUG_COMPONENT = ('Core', 'Networking: HTTP')
with Files('chrome/*private_hidden_window*'):
BUG_COMPONENT = ('Firefox', 'Private Browsing')
with Files('iframesandbox/**'):
BUG_COMPONENT = ('Core', 'Security')
with Files('iframesandbox/*marquee_event_handlers*'):
BUG_COMPONENT = ('Core', 'DOM: Security')
with Files('navigation/*13871.html'):
BUG_COMPONENT = ('Core', 'Security')
with Files('navigation/*386782*'):
BUG_COMPONENT = ('Core', 'Editor')
with Files('navigation/*430624*'):
BUG_COMPONENT = ('Core', 'Editor')
with Files('navigation/*430723*'):
BUG_COMPONENT = ('Core', 'Keyboard: Navigation')
with Files('navigation/*child*'):
BUG_COMPONENT = ('Core', 'Security')
with Files('navigation/*opener*'):
BUG_COMPONENT = ('Core', 'Security')
with Files('navigation/*reserved*'):
BUG_COMPONENT = ('Core', 'Security')
with Files('navigation/*triggering*'):
BUG_COMPONENT = ('Core', 'DOM: Security')
with Files('unit/*442584*'):
BUG_COMPONENT = ('Core', 'Networking: Cache')
with Files('unit/*setUsePrivateBrowsing*'):
BUG_COMPONENT = ('Firefox', 'Extension Compatibility')
with Files('*1045096*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('*1151421*'):
BUG_COMPONENT = ('Core', 'DOM: Core & HTML')
with Files('*369814*'):
BUG_COMPONENT = ('Core', 'Networking: JAR')
with Files('*402210*'):
BUG_COMPONENT = ('Core', 'DOM: Security')
with Files('*509055*'):
BUG_COMPONENT = ('Core', 'History: Global')
with Files('*511449*'):
BUG_COMPONENT = ('Core', 'Widget: Cocoa')
with Files('*551225*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('*570341*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('*580069*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('*637644*'):
BUG_COMPONENT = ('Core', 'DOM: Core & HTML')
with Files('*640387*'):
BUG_COMPONENT = ('Core', 'DOM: Events')
with Files('*668513*'):
BUG_COMPONENT = ('Core', 'DOM')
with Files('*713825*'):
BUG_COMPONENT = ('Core', 'Internationalization')
with Files('*797909*'):
BUG_COMPONENT = ('Core', 'DOM: Core & HTML')
with Files('*forceinheritprincipal*'):
BUG_COMPONENT = ('Core', 'DOM: Security')

View File

@ -7,6 +7,7 @@
#include "WindowNamedPropertiesHandler.h"
#include "mozilla/dom/EventTargetBinding.h"
#include "mozilla/dom/WindowBinding.h"
#include "mozilla/Preferences.h"
#include "nsContentUtils.h"
#include "nsDOMClassInfo.h"
#include "nsDOMWindowList.h"
@ -237,11 +238,56 @@ WindowNamedPropertiesHandler::delete_(JSContext* aCx,
return aResult.failCantDeleteWindowNamedProperty();
}
static bool
IsWebExtensionContentScript(JSContext* aCx)
{
auto* priv = xpc::CompartmentPrivate::Get(JS::CurrentGlobalOrNull(aCx));
return priv->isWebExtensionContentScript;
}
static const int32_t kAlwaysAllowNamedPropertiesObject = 0;
static const int32_t kDisallowNamedPropertiesObjectForContentScripts = 1;
static const int32_t kDisallowNamedPropertiesObjectForXrays = 2;
static bool
AllowNamedPropertiesObject(JSContext* aCx)
{
static int32_t sAllowed;
static bool sAllowedCached = false;
if (!sAllowedCached) {
Preferences::AddIntVarCache(&sAllowed,
"dom.allow_named_properties_object_for_xrays",
kDisallowNamedPropertiesObjectForContentScripts);
sAllowedCached = true;
}
if (sAllowed == kDisallowNamedPropertiesObjectForXrays) {
return false;
}
if (sAllowed == kAlwaysAllowNamedPropertiesObject) {
return true;
}
if (sAllowed == kDisallowNamedPropertiesObjectForContentScripts) {
return !IsWebExtensionContentScript(aCx);
}
NS_WARNING("Unknown value for dom.allow_named_properties_object_for_xrays");
// Fail open for now.
return true;
}
static bool
ResolveWindowNamedProperty(JSContext* aCx, JS::Handle<JSObject*> aWrapper,
JS::Handle<JSObject*> aObj, JS::Handle<jsid> aId,
JS::MutableHandle<JS::PropertyDescriptor> aDesc)
{
if (!AllowNamedPropertiesObject(aCx)) {
return true;
}
{
JSAutoCompartment ac(aCx, aObj);
if (!js::GetProxyHandler(aObj)->getOwnPropertyDescriptor(aCx, aObj, aId,
@ -264,6 +310,10 @@ EnumerateWindowNamedProperties(JSContext* aCx, JS::Handle<JSObject*> aWrapper,
JS::Handle<JSObject*> aObj,
JS::AutoIdVector& aProps)
{
if (!AllowNamedPropertiesObject(aCx)) {
return true;
}
JSAutoCompartment ac(aCx, aObj);
return js::GetProxyHandler(aObj)->ownPropertyKeys(aCx, aObj, aProps);
}

View File

@ -294,6 +294,9 @@ bool nsContentUtils::sIsWebComponentsEnabled = false;
bool nsContentUtils::sPrivacyResistFingerprinting = false;
bool nsContentUtils::sSendPerformanceTimingNotifications = false;
bool nsContentUtils::sUseActivityCursor = false;
bool nsContentUtils::sAnimationsAPICoreEnabled = false;
bool nsContentUtils::sAnimationsAPIElementAnimateEnabled = false;
bool nsContentUtils::sGetBoxQuadsEnabled = false;
int32_t nsContentUtils::sPrivacyMaxInnerWidth = 1000;
int32_t nsContentUtils::sPrivacyMaxInnerHeight = 1000;
@ -630,6 +633,15 @@ nsContentUtils::Init()
Preferences::AddBoolVarCache(&sUseActivityCursor,
"ui.use_activity_cursor", false);
Preferences::AddBoolVarCache(&sAnimationsAPICoreEnabled,
"dom.animations-api.core.enabled", false);
Preferences::AddBoolVarCache(&sAnimationsAPIElementAnimateEnabled,
"dom.animations-api.element-animate.enabled", false);
Preferences::AddBoolVarCache(&sGetBoxQuadsEnabled,
"layout.css.getBoxQuads.enabled", false);
Element::InitCCCallbacks();
nsCOMPtr<nsIUUIDGenerator> uuidGenerator =

View File

@ -2146,6 +2146,30 @@ public:
return sUseActivityCursor;
}
/**
* Returns true if the DOM Animations API should be enabled.
*/
static bool AnimationsAPICoreEnabled()
{
return sAnimationsAPICoreEnabled;
}
/*
* Returns true if the DOM Animations Element.animate() API should be enabled.
*/
static bool AnimationsAPIElementAnimateEnabled()
{
return sAnimationsAPIElementAnimateEnabled;
}
/**
* Returns true if the getBoxQuads API should be enabled.
*/
static bool GetBoxQuadsEnabled()
{
return sGetBoxQuadsEnabled;
}
/**
* Return true if this doc is controlled by a ServiceWorker.
*/
@ -2947,6 +2971,9 @@ private:
static bool sPrivacyResistFingerprinting;
static bool sSendPerformanceTimingNotifications;
static bool sUseActivityCursor;
static bool sAnimationsAPICoreEnabled;
static bool sAnimationsAPIElementAnimateEnabled;
static bool sGetBoxQuadsEnabled;
static uint32_t sCookiesLifetimePolicy;
static uint32_t sCookiesBehavior;

View File

@ -3162,8 +3162,8 @@ nsDocument::IsElementAnimateEnabled(JSContext* aCx, JSObject* /*unused*/)
MOZ_ASSERT(NS_IsMainThread());
return nsContentUtils::IsSystemCaller(aCx) ||
Preferences::GetBool("dom.animations-api.core.enabled") ||
Preferences::GetBool("dom.animations-api.element-animate.enabled");
nsContentUtils::AnimationsAPICoreEnabled() ||
nsContentUtils::AnimationsAPIElementAnimateEnabled();
}
bool
@ -3172,7 +3172,7 @@ nsDocument::IsWebAnimationsEnabled(JSContext* aCx, JSObject* /*unused*/)
MOZ_ASSERT(NS_IsMainThread());
return nsContentUtils::IsSystemCaller(aCx) ||
Preferences::GetBool("dom.animations-api.core.enabled");
nsContentUtils::AnimationsAPICoreEnabled();
}
DocumentTimeline*

View File

@ -2984,7 +2984,7 @@ bool
nsINode::HasBoxQuadsSupport(JSContext* aCx, JSObject* /* unused */)
{
return xpc::AccessCheck::isChrome(js::GetContextCompartment(aCx)) ||
Preferences::GetBool("layout.css.getBoxQuads.enabled");
nsContentUtils::GetBoxQuadsEnabled();
}
nsINode*

View File

@ -902,16 +902,27 @@ void
TrackBuffersManager::InitializationSegmentReceived()
{
MOZ_ASSERT(mParser->HasCompleteInitData());
int64_t endInit = mParser->InitSegmentRange().mEnd;
if (mInputBuffer->Length() > mProcessedInput ||
int64_t(mProcessedInput - mInputBuffer->Length()) > endInit) {
// Something is not quite right with the data appended. Refuse it.
RejectAppend(MediaResult(NS_ERROR_FAILURE,
"Invalid state following initialization segment"),
__func__);
return;
}
mCurrentInputBuffer = new SourceBufferResource(mType);
// The demuxer isn't initialized yet ; we don't want to notify it
// that data has been appended yet ; so we simply append the init segment
// to the resource.
mCurrentInputBuffer->AppendData(mParser->InitData());
uint32_t length =
mParser->InitSegmentRange().mEnd - (mProcessedInput - mInputBuffer->Length());
uint32_t length = endInit - (mProcessedInput - mInputBuffer->Length());
if (mInputBuffer->Length() == length) {
mInputBuffer = nullptr;
} else {
MOZ_RELEASE_ASSERT(length <= mInputBuffer->Length());
mInputBuffer->RemoveElementsAt(0, length);
}
CreateDemuxerforMIMEType();

View File

@ -234,7 +234,7 @@ private:
RefPtr<SourceBufferResource> mCurrentInputBuffer;
RefPtr<MediaDataDemuxer> mInputDemuxer;
// Length already processed in current media segment.
uint32_t mProcessedInput;
uint64_t mProcessedInput;
Maybe<media::TimeUnit> mLastParsedEndTime;
void OnDemuxerInitDone(nsresult);

View File

@ -254,7 +254,7 @@ skip-if = toolkit == 'android' # Times out, not sure why (bug 1008445)
[test_dual_header.html]
[test_upgrade_insecure.html]
# no ssl support as well as websocket tests do not work (see test_websocket.html)
skip-if = toolkit == 'android'
skip-if = (toolkit == 'android') || (os != 'linux' && !debug) # Bug 1183300
[test_upgrade_insecure_reporting.html]
skip-if = toolkit == 'android'
[test_upgrade_insecure_referrer.html]

View File

@ -75,6 +75,31 @@ EnsureSurfaceStored(DrawEventRecorderPrivate *aRecorder, SourceSurface *aSurface
return;
}
class SourceSurfaceRecording : public SourceSurface
{
public:
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(SourceSurfaceRecording)
SourceSurfaceRecording(SourceSurface *aFinalSurface, DrawEventRecorderPrivate *aRecorder)
: mFinalSurface(aFinalSurface), mRecorder(aRecorder)
{
mRecorder->AddStoredObject(this);
}
~SourceSurfaceRecording()
{
mRecorder->RemoveStoredObject(this);
mRecorder->RecordEvent(RecordedSourceSurfaceDestruction(this));
}
virtual SurfaceType GetType() const { return SurfaceType::RECORDING; }
virtual IntSize GetSize() const { return mFinalSurface->GetSize(); }
virtual SurfaceFormat GetFormat() const { return mFinalSurface->GetFormat(); }
virtual already_AddRefed<DataSourceSurface> GetDataSurface() { return mFinalSurface->GetDataSurface(); }
RefPtr<SourceSurface> mFinalSurface;
RefPtr<DrawEventRecorderPrivate> mRecorder;
};
class GradientStopsRecording : public GradientStops
{
public:

View File

@ -331,31 +331,6 @@ private:
RefPtr<DrawTarget> mFinalDT;
};
class SourceSurfaceRecording : public SourceSurface
{
public:
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(SourceSurfaceRecording)
SourceSurfaceRecording(SourceSurface *aFinalSurface, DrawEventRecorderPrivate *aRecorder)
: mFinalSurface(aFinalSurface), mRecorder(aRecorder)
{
mRecorder->AddStoredObject(this);
}
~SourceSurfaceRecording()
{
mRecorder->RemoveStoredObject(this);
mRecorder->RecordEvent(RecordedSourceSurfaceDestruction(this));
}
virtual SurfaceType GetType() const { return SurfaceType::RECORDING; }
virtual IntSize GetSize() const { return mFinalSurface->GetSize(); }
virtual SurfaceFormat GetFormat() const { return mFinalSurface->GetFormat(); }
virtual already_AddRefed<DataSourceSurface> GetDataSurface() { return mFinalSurface->GetDataSurface(); }
RefPtr<SourceSurface> mFinalSurface;
RefPtr<DrawEventRecorderPrivate> mRecorder;
};
} // namespace gfx
} // namespace mozilla

View File

@ -1,99 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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 "InlineTranslator.h"
#include "gfxContext.h"
#include "nsDeviceContext.h"
#include "mozilla/gfx/RecordedEvent.h"
#include "mozilla/gfx/RecordingTypes.h"
#include "mozilla/UniquePtr.h"
using namespace mozilla::gfx;
namespace mozilla {
namespace gfx {
InlineTranslator::InlineTranslator(DrawTarget* aDT, Matrix aMatrix)
{
mBaseDT = aDT;
mBaseTransform = aMatrix;
}
bool
InlineTranslator::TranslateRecording(std::istream& aRecording)
{
uint32_t magicInt;
ReadElement(aRecording, magicInt);
if (magicInt != mozilla::gfx::kMagicInt) {
return false;
}
uint16_t majorRevision;
ReadElement(aRecording, majorRevision);
if (majorRevision != kMajorRevision) {
return false;
}
uint16_t minorRevision;
ReadElement(aRecording, minorRevision);
if (minorRevision > kMinorRevision) {
return false;
}
int32_t eventType;
ReadElement(aRecording, eventType);
while (aRecording.good()) {
UniquePtr<RecordedEvent> recordedEvent(
RecordedEvent::LoadEventFromStream(aRecording,
static_cast<RecordedEvent::EventType>(eventType)));
// Make sure that the whole event was read from the stream successfully.
if (!aRecording.good() || !recordedEvent) {
return false;
}
if (recordedEvent->GetType() == RecordedEvent::SETTRANSFORM) {
RecordedSetTransform* event = static_cast<RecordedSetTransform*>(recordedEvent.get());
mBaseDT->SetTransform(event->mTransform * mBaseTransform);
} else {
if (!recordedEvent->PlayEvent(this)) {
return false;
}
}
ReadElement(aRecording, eventType);
}
return true;
}
already_AddRefed<DrawTarget>
InlineTranslator::CreateDrawTarget(ReferencePtr aRefPtr,
const gfx::IntSize &aSize,
gfx::SurfaceFormat aFormat)
{
RefPtr<DrawTarget> drawTarget = mBaseDT;
return drawTarget.forget();
}
FontType
InlineTranslator::GetDesiredFontType()
{
switch (mBaseDT->GetBackendType()) {
case BackendType::DIRECT2D:
return FontType::DWRITE;
case BackendType::CAIRO:
return FontType::CAIRO;
case BackendType::SKIA:
return FontType::SKIA;
default:
return FontType::CAIRO;
}
}
} // namespace gfx
} // namespace mozilla

View File

@ -1,167 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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_layout_InlineTranslator_h
#define mozilla_layout_InlineTranslator_h
#include <istream>
#include "mozilla/gfx/2D.h"
#include "mozilla/gfx/Filters.h"
#include "mozilla/gfx/RecordedEvent.h"
#include "nsRefPtrHashtable.h"
namespace mozilla {
namespace gfx {
using gfx::Translator;
using gfx::ReferencePtr;
using gfx::DrawTarget;
using gfx::Path;
using gfx::SourceSurface;
using gfx::FilterNode;
using gfx::GradientStops;
using gfx::ScaledFont;
using gfx::NativeFontResource;
class InlineTranslator final : public Translator
{
public:
explicit InlineTranslator(DrawTarget* aDT, Matrix aMatrix);
bool TranslateRecording(std::istream& aRecording);
DrawTarget* LookupDrawTarget(ReferencePtr aRefPtr) final
{
return mBaseDT;
}
Path* LookupPath(ReferencePtr aRefPtr) final
{
Path* result = mPaths.GetWeak(aRefPtr);
MOZ_ASSERT(result);
return result;
}
SourceSurface* LookupSourceSurface(ReferencePtr aRefPtr) final
{
SourceSurface* result = mSourceSurfaces.GetWeak(aRefPtr);
MOZ_ASSERT(result);
return result;
}
FilterNode* LookupFilterNode(ReferencePtr aRefPtr) final
{
FilterNode* result = mFilterNodes.GetWeak(aRefPtr);
MOZ_ASSERT(result);
return result;
}
GradientStops* LookupGradientStops(ReferencePtr aRefPtr) final
{
GradientStops* result = mGradientStops.GetWeak(aRefPtr);
MOZ_ASSERT(result);
return result;
}
ScaledFont* LookupScaledFont(ReferencePtr aRefPtr) final
{
ScaledFont* result = mScaledFonts.GetWeak(aRefPtr);
MOZ_ASSERT(result);
return result;
}
NativeFontResource* LookupNativeFontResource(uint64_t aKey) final
{
NativeFontResource* result = mNativeFontResources.GetWeak(aKey);
MOZ_ASSERT(result);
return result;
}
void AddDrawTarget(ReferencePtr aRefPtr, DrawTarget *aDT) final { }
void AddPath(ReferencePtr aRefPtr, Path *aPath) final
{
mPaths.Put(aRefPtr, aPath);
}
void AddSourceSurface(ReferencePtr aRefPtr, SourceSurface *aSurface) final
{
mSourceSurfaces.Put(aRefPtr, aSurface);
}
void AddFilterNode(ReferencePtr aRefPtr, FilterNode *aFilter) final
{
mFilterNodes.Put(aRefPtr, aFilter);
}
void AddGradientStops(ReferencePtr aRefPtr, GradientStops *aStops) final
{
mGradientStops.Put(aRefPtr, aStops);
}
void AddScaledFont(ReferencePtr aRefPtr, ScaledFont *aScaledFont) final
{
mScaledFonts.Put(aRefPtr, aScaledFont);
}
void AddNativeFontResource(uint64_t aKey,
NativeFontResource *aScaledFontResouce) final
{
mNativeFontResources.Put(aKey, aScaledFontResouce);
}
void RemoveDrawTarget(ReferencePtr aRefPtr) final { }
void RemovePath(ReferencePtr aRefPtr) final
{
mPaths.Remove(aRefPtr);
}
void RemoveSourceSurface(ReferencePtr aRefPtr) final
{
mSourceSurfaces.Remove(aRefPtr);
}
void RemoveFilterNode(ReferencePtr aRefPtr) final
{
mFilterNodes.Remove(aRefPtr);
}
void RemoveGradientStops(ReferencePtr aRefPtr) final
{
mGradientStops.Remove(aRefPtr);
}
void RemoveScaledFont(ReferencePtr aRefPtr) final
{
mScaledFonts.Remove(aRefPtr);
}
already_AddRefed<DrawTarget> CreateDrawTarget(ReferencePtr aRefPtr,
const gfx::IntSize &aSize,
gfx::SurfaceFormat aFormat) final;
mozilla::gfx::DrawTarget* GetReferenceDrawTarget() final { return mBaseDT; }
mozilla::gfx::FontType GetDesiredFontType() final;
private:
RefPtr<DrawTarget> mBaseDT;
Matrix mBaseTransform;
nsRefPtrHashtable<nsPtrHashKey<void>, Path> mPaths;
nsRefPtrHashtable<nsPtrHashKey<void>, SourceSurface> mSourceSurfaces;
nsRefPtrHashtable<nsPtrHashKey<void>, FilterNode> mFilterNodes;
nsRefPtrHashtable<nsPtrHashKey<void>, GradientStops> mGradientStops;
nsRefPtrHashtable<nsPtrHashKey<void>, ScaledFont> mScaledFonts;
nsRefPtrHashtable<nsUint64HashKey, NativeFontResource> mNativeFontResources;
};
} // namespace gfx
} // namespace mozilla
#endif // mozilla_layout_InlineTranslator_h

View File

@ -699,12 +699,12 @@ public:
virtual void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
virtual std::string GetName() const { return "SetTransform"; }
Matrix mTransform;
private:
friend class RecordedEvent;
MOZ_IMPLICIT RecordedSetTransform(std::istream &aStream);
Matrix mTransform;
};
class RecordedDrawSurface : public RecordedDrawingEvent {

View File

@ -24,12 +24,10 @@ EXPORTS.mozilla.gfx += [
'CriticalSection.h',
'DataSurfaceHelpers.h',
'DrawEventRecorder.h',
'DrawTargetRecording.h',
'DrawTargetTiled.h',
'Filters.h',
'Helpers.h',
'HelpersCairo.h',
'InlineTranslator.h',
'IterableArena.h',
'JobScheduler.h',
'JobScheduler_posix.h',
@ -195,7 +193,6 @@ UNIFIED_SOURCES += [
SOURCES += [
'Factory.cpp', # Need to suppress warnings in Skia header files.
'InlineTranslator.cpp',
]
if CONFIG['CLANG_CXX']:

View File

@ -110,8 +110,8 @@ BasicCanvasLayer::Paint(DrawTarget* aDT,
if (needsYFlip) {
oldTM = aDT->GetTransform();
aDT->SetTransform(Matrix(oldTM).
PreTranslate(0.0f, mBounds.height).
PreScale(1.0f, -1.0f));
PreTranslate(0.0f, mBounds.height).
PreScale(1.0f, -1.0f));
}
FillRectWithMask(aDT, aDeviceOffset,

View File

@ -12,8 +12,6 @@
#include "mozilla/layers/CompositorTypes.h"
#include "mozilla/layers/ISurfaceAllocator.h"
#include "AutoMaskData.h"
#include "mozilla/gfx/InlineTranslator.h"
#include "mozilla/gfx/DrawTargetRecording.h"
namespace mozilla {
namespace layers {
@ -124,9 +122,6 @@ FillRectWithMask(DrawTarget* aDT,
const Matrix* aMaskTransform,
const Matrix* aSurfaceTransform)
{
MOZ_ASSERT(!aMaskSource || (aMaskSource && aMaskTransform),
"aMaskSource must not be passed without a transform");
if (aMaskSource && aMaskTransform) {
aDT->PushClipRect(aRect);
Matrix oldTransform = aDT->GetTransform();
@ -149,29 +144,6 @@ FillRectWithMask(DrawTarget* aDT,
return;
}
if (aSurface->GetType() == SurfaceType::RECORDING) {
MOZ_ASSERT(aOptions.mAlpha == 1.0 &&
aOptions.mCompositionOp == CompositionOp::OP_OVER);
aDT->PushClipRect(aRect);
Matrix oldTransform = aDT->GetTransform();
Matrix transform = oldTransform;
if (aSurfaceTransform) {
transform = (*aSurfaceTransform) * transform;
}
InlineTranslator* translator = new InlineTranslator(aDT, transform);
SourceSurfaceRecording* ss = static_cast<SourceSurfaceRecording*>(aSurface);
DrawEventRecorderMemory* mr = static_cast<DrawEventRecorderMemory*>(ss->mRecorder.get());
translator->TranslateRecording(mr->GetInputStream());
aDT->SetTransform(oldTransform);
aDT->PopClip();
return;
}
aDT->FillRect(aRect,
SurfacePattern(aSurface, aExtendMode,
aSurfaceTransform ? (*aSurfaceTransform) : Matrix(),

View File

@ -131,7 +131,6 @@ skip-if = os == 'android'
[test_changeOfSource2.html]
skip-if = os == 'android'
[test_discardAnimatedImage.html]
disabled = bug 1354499
[test_drawDiscardedImage.html]
[test_error_events.html]
[test_image_crossorigin_data_url.html]

View File

@ -289,6 +289,37 @@ CountDecimalDigits(size_t num)
return numDigits;
}
static const char*
StringKindHeader(JSString* str)
{
MOZ_ASSERT(str->isLinear());
if (str->isAtom()) {
if (str->isPermanentAtom())
return "permanent atom: ";
return "atom: ";
}
if (str->isFlat()) {
if (str->isExtensible())
return "extensible: ";
if (str->isUndepended())
return "undepended: ";
if (str->isInline()) {
if (str->isFatInline())
return "fat inline: ";
return "inline: ";
}
return "flat: ";
}
if (str->isDependent())
return "dependent: ";
if (str->isExternal())
return "external: ";
return "linear: ";
}
JS_PUBLIC_API(void)
JS_GetTraceThingInfo(char* buf, size_t bufsize, JSTracer* trc, void* thing,
JS::TraceKind kind, bool details)
@ -387,12 +418,13 @@ JS_GetTraceThingInfo(char* buf, size_t bufsize, JSTracer* trc, void* thing,
JSString* str = (JSString*)thing;
if (str->isLinear()) {
bool willFit = str->length() + strlen("<length > ") +
const char* header = StringKindHeader(str);
bool willFit = str->length() + strlen("<length > ") + strlen(header) +
CountDecimalDigits(str->length()) < bufsize;
n = snprintf(buf, bufsize, "<length %" PRIuSIZE "%s> ",
str->length(),
willFit ? "" : " (truncated)");
n = snprintf(buf, bufsize, "<%slength %" PRIuSIZE "%s> ",
header, str->length(),
willFit ? "" : " (truncated)");
buf += n;
bufsize -= n;

View File

@ -0,0 +1,22 @@
var arr1 = [];
var arr2 = [];
for (let i = 0; i < 10; i++) {
arr1.push(function f(x) {
if (x === 350)
bailout();
assertEq(f, arr1[i]);
return x + i;
});
arr2.push(function() {
return arr1[i].apply(null, arguments);
});
}
function test() {
for (var i = 0; i < 400; i++) {
for (var j = 0; j < arr2.length; j++) {
assertEq(arr2[j].call(null, i), i + j);
}
}
}
test();

View File

@ -258,11 +258,17 @@ IonBuilder::getSingleCallTarget(TemporaryTypeSet* calleeTypes)
if (!calleeTypes)
return nullptr;
JSObject* obj = calleeTypes->maybeSingleton();
if (!obj || !obj->is<JSFunction>())
TemporaryTypeSet::ObjectKey* key = calleeTypes->maybeSingleObject();
if (!key || key->clasp() != &JSFunction::class_)
return nullptr;
return &obj->as<JSFunction>();
if (key->isSingleton())
return &key->singleton()->as<JSFunction>();
if (JSFunction* fun = key->group()->maybeInterpretedFunction())
return fun;
return nullptr;
}
AbortReasonOr<Ok>
@ -5493,11 +5499,11 @@ IonBuilder::jsop_eval(uint32_t argc)
if (calleeTypes && calleeTypes->empty())
return jsop_call(argc, /* constructing = */ false, false);
JSFunction* singleton = getSingleCallTarget(calleeTypes);
if (!singleton)
return abort(AbortReason::Disable, "No singleton callee for eval()");
JSFunction* target = getSingleCallTarget(calleeTypes);
if (!target)
return abort(AbortReason::Disable, "No single callee for eval()");
if (script()->global().valueIsEval(ObjectValue(*singleton))) {
if (script()->global().valueIsEval(ObjectValue(*target))) {
if (argc != 1)
return abort(AbortReason::Disable, "Direct eval with more than one argument");

View File

@ -1754,6 +1754,15 @@ TemporaryTypeSet::maybeSingleton()
return getSingleton(0);
}
TemporaryTypeSet::ObjectKey*
TemporaryTypeSet::maybeSingleObject()
{
if (baseFlags() != 0 || baseObjectCount() != 1)
return nullptr;
return getObject(0);
}
JSObject*
HeapTypeSetKey::singleton(CompilerConstraintList* constraints)
{

View File

@ -834,6 +834,7 @@ class TemporaryTypeSet : public TypeSet
/* Get the single value which can appear in this type set, otherwise nullptr. */
JSObject* maybeSingleton();
ObjectKey* maybeSingleObject();
/* Whether any objects in the type set needs a barrier on id. */
bool propertyNeedsBarrier(CompilerConstraintList* constraints, jsid id);

View File

@ -0,0 +1,40 @@
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1273251
"use strict"
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/Services.jsm");
const XRAY_PREF = "dom.allow_named_properties_object_for_xrays";
add_task(function*() {
let webnav = Services.appShell.createWindowlessBrowser(false);
let docShell = webnav.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDocShell);
docShell.createAboutBlankContentViewer(null);
let window = webnav.getInterface(Ci.nsIDOMWindow);
let unwrapped = Cu.waiveXrays(window);
window.document.body.innerHTML = '<div id="foo"></div>';
equal(Preferences.get(XRAY_PREF), 1, "Should have pref=1 by default");
Preferences.set(XRAY_PREF, 0);
equal(typeof window.foo, "object", "Should have named X-ray property access with pref=0");
equal(typeof unwrapped.foo, "object", "Should always have non-X-ray named property access");
Preferences.set(XRAY_PREF, 1);
equal(typeof window.foo, "object", "Should have named X-ray property access with pref=1");
equal(typeof unwrapped.foo, "object", "Should always have non-X-ray named property access");
Preferences.set(XRAY_PREF, 2);
equal(window.foo, undefined, "Should not have named X-ray property access with pref=2");
equal(typeof unwrapped.foo, "object", "Should always have non-X-ray named property access");
webnav.close();
});

View File

@ -128,6 +128,7 @@ head = head_watchdog.js
[test_writeToGlobalPrototype.js]
[test_xpcwn_tamperproof.js]
[test_xrayed_iterator.js]
[test_xray_named_element_access.js]
[test_xray_SavedFrame.js]
[test_xray_SavedFrame-02.js]
[test_xray_regexp.js]

View File

@ -22,7 +22,6 @@
#include "nsDisplayList.h"
#include "nsHTMLCanvasFrame.h"
#include "mozilla/dom/HTMLCanvasElement.h"
#include "mozilla/gfx/DrawEventRecorder.h"
#include "nsICanvasRenderingContextInternal.h"
#include "nsServiceManagerUtils.h"
#include <algorithm>
@ -630,7 +629,7 @@ nsSimplePageSequenceFrame::PrePrintNextPage(nsITimerCallback* aCallback, bool* a
mCalledBeginPage = true;
RefPtr<gfxContext> renderingContext = dc->CreateReferenceRenderingContext();
RefPtr<gfxContext> renderingContext = dc->CreateRenderingContext();
NS_ENSURE_TRUE(renderingContext, NS_ERROR_OUT_OF_MEMORY);
DrawTarget* drawTarget = renderingContext->GetDrawTarget();
@ -642,12 +641,8 @@ nsSimplePageSequenceFrame::PrePrintNextPage(nsITimerCallback* aCallback, bool* a
HTMLCanvasElement* canvas = mCurrentCanvasList[i];
nsIntSize size = canvas->GetSize();
RefPtr<mozilla::gfx::DrawEventRecorder> recorder =
new mozilla::gfx::DrawEventRecorderMemory();
RefPtr<DrawTarget> canvasTarget =
drawTarget->CreateSimilarDrawTarget(size, drawTarget->GetFormat());
canvasTarget =
mozilla::gfx::Factory::CreateRecordingDrawTarget(recorder, canvasTarget);
if (!canvasTarget) {
continue;
}

View File

@ -567,30 +567,33 @@ libs:: classes.dex
$(INSTALL) classes.dex $(FINAL_TARGET)
# Generate Java binder interfaces from AIDL files.
aidl_src_path := $(srcdir)/aidl
aidl_target_path := generated
media_pkg := org/mozilla/gecko/media
$(aidl_target_path)/$(media_pkg)/%.java:$(aidl_geckoview_src_path)/$(media_pkg)/%.aidl
@echo "Processing AIDL: $< => $@"
$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(aidl_geckoview_src_path) -o$(aidl_target_path) $<
GECKOVIEW_AIDLS = \
org/mozilla/gecko/IGeckoEditableChild.aidl \
org/mozilla/gecko/IGeckoEditableParent.aidl \
org/mozilla/gecko/media/ICodec.java \
org/mozilla/gecko/media/ICodecCallbacks.java \
org/mozilla/gecko/media/IMediaDrmBridge.java \
org/mozilla/gecko/media/IMediaDrmBridgeCallbacks.java \
org/mozilla/gecko/media/IMediaManager.java \
org/mozilla/gecko/media/ICodec.aidl \
org/mozilla/gecko/media/ICodecCallbacks.aidl \
org/mozilla/gecko/media/IMediaDrmBridge.aidl \
org/mozilla/gecko/media/IMediaDrmBridgeCallbacks.aidl \
org/mozilla/gecko/media/IMediaManager.aidl \
org/mozilla/gecko/process/IChildProcess.aidl \
org/mozilla/gecko/process/IProcessManager.aidl \
$(NULL)
geckoview_aidl_src_path := $(topsrcdir)/mobile/android/geckoview/src/main/aidl
geckoview_aidl_target_path := generated
geckoview_aidl_targets := $(addprefix $(geckoview_aidl_target_path)/,$(GECKOVIEW_AIDLS:.aidl=.java))
geckoview_aidl_targets := $(addprefix $(geckoview_aidl_target_path)/,$(patsubst %.aidl,%.java,$(GECKOVIEW_AIDLS:.java=)))
$(geckoview_aidl_targets): $(geckoview_aidl_target_path)/%.java: $(geckoview_aidl_src_path)/%.aidl
@echo "Processing AIDL: $< => $@"
$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(geckoview_aidl_src_path) -o$(geckoview_aidl_target_path) $<
FENNEC_AIDLS = \
$(NULL)
fennec_aidl_src_path := $(srcdir)/aidl
fennec_aidl_target_path := generated
fennec_aidl_targets := $(addprefix $(fennec_aidl_target_path)/,$(patsubst %.aidl,%.java,$(FENNEC_AIDLS:.java=)))
$(fennec_aidl_targets): $(fennec_aidl_target_path)/%.java: $(fennec_aidl_src_path)/%.aidl
@echo "Processing AIDL: $< => $@"
$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(fennec_aidl_src_path) -I$(geckoview_aidl_src_path) -o$(fennec_aidl_target_path) $<

View File

@ -1,3 +1,4 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 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
@ -1237,6 +1238,13 @@ pref("dom.webapps.useCurrentProfile", false);
pref("dom.cycle_collector.incremental", true);
// Whether Xrays expose properties from the named properties object (aka global
// scope polluter). Values are:
// 0 = properties exposed on Xrays
// 1 = properties exposed on Xrays, except in web extension content scripts.
// 2 = properties not exposed on xrays
pref("dom.allow_named_properties_object_for_xrays", 1);
// Parsing perf prefs. For now just mimic what the old code did.
#ifndef XP_WIN
pref("content.sink.pending_event_mode", 0);

View File

@ -0,0 +1,94 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* 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 "nsBaseChannel.h"
#include "nsIInputStream.h"
#include "nsIRequest.h"
#include "SimpleChannel.h"
namespace mozilla {
namespace net {
// Like MOZ_TRY, but returns the unwrapped error value rather than a
// GenericErrorResult on failure.
#define TRY_VAR(target, expr) \
do { \
auto result = (expr); \
if (result.isErr()) { \
return result.unwrapErr(); \
} \
(target) = result.unwrap(); \
} while (0)
class SimpleChannel final : public nsBaseChannel
{
public:
explicit SimpleChannel(UniquePtr<SimpleChannelCallbacks>&& aCallbacks);
protected:
virtual ~SimpleChannel() {}
virtual nsresult OpenContentStream(bool async, nsIInputStream **streamOut,
nsIChannel** channel) override;
virtual nsresult BeginAsyncRead(nsIStreamListener* listener,
nsIRequest** request) override;
private:
UniquePtr<SimpleChannelCallbacks> mCallbacks;
};
SimpleChannel::SimpleChannel(UniquePtr<SimpleChannelCallbacks>&& aCallbacks)
: mCallbacks(Move(aCallbacks))
{
EnableSynthesizedProgressEvents(true);
}
nsresult
SimpleChannel::OpenContentStream(bool async, nsIInputStream **streamOut, nsIChannel** channel)
{
NS_ENSURE_TRUE(mCallbacks, NS_ERROR_UNEXPECTED);
nsCOMPtr<nsIInputStream> stream;
TRY_VAR(stream, mCallbacks->OpenContentStream(async, this));
MOZ_ASSERT(stream);
mCallbacks = nullptr;
*channel = nullptr;
stream.forget(streamOut);
return NS_OK;
}
nsresult
SimpleChannel::BeginAsyncRead(nsIStreamListener* listener, nsIRequest** request)
{
NS_ENSURE_TRUE(mCallbacks, NS_ERROR_UNEXPECTED);
nsCOMPtr<nsIRequest> req;
TRY_VAR(req, mCallbacks->StartAsyncRead(listener, this));
mCallbacks = nullptr;
req.forget(request);
return NS_OK;
}
#undef TRY_VAR
already_AddRefed<nsIChannel>
NS_NewSimpleChannelInternal(nsIURI* aURI, nsILoadInfo* aLoadInfo, UniquePtr<SimpleChannelCallbacks>&& aCallbacks)
{
RefPtr<SimpleChannel> chan = new SimpleChannel(Move(aCallbacks));
chan->SetURI(aURI);
MOZ_ALWAYS_SUCCEEDS(chan->SetLoadInfo(aLoadInfo));
return chan.forget();
}
} // namespace net
} // namespace mozilla

View File

@ -0,0 +1,110 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* 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 SimpleChannel_h
#define SimpleChannel_h
#include "mozilla/Result.h"
#include "mozilla/UniquePtr.h"
#include "nsCOMPtr.h"
class nsIChannel;
class nsIInputStream;
class nsILoadInfo;
class nsIRequest;
class nsIStreamListener;
class nsIURI;
//-----------------------------------------------------------------------------
namespace mozilla {
using InputStreamOrReason = Result<nsCOMPtr<nsIInputStream>, nsresult>;
using RequestOrReason = Result<nsCOMPtr<nsIRequest>, nsresult>;
namespace net {
class SimpleChannelCallbacks
{
public:
virtual InputStreamOrReason OpenContentStream(bool async, nsIChannel* channel) = 0;
virtual RequestOrReason StartAsyncRead(nsIStreamListener* stream, nsIChannel* channel) = 0;
virtual ~SimpleChannelCallbacks() {}
};
template <typename F1, typename F2, typename T>
class SimpleChannelCallbacksImpl final : public SimpleChannelCallbacks
{
public:
SimpleChannelCallbacksImpl(F1&& aStartAsyncRead, F2&& aOpenContentStream, T* context)
: mStartAsyncRead(aStartAsyncRead)
, mOpenContentStream(aOpenContentStream)
, mContext(context)
{}
virtual ~SimpleChannelCallbacksImpl() {}
virtual InputStreamOrReason OpenContentStream(bool async, nsIChannel* channel) override
{
return mOpenContentStream(async, channel, mContext);
}
virtual RequestOrReason StartAsyncRead(nsIStreamListener* listener, nsIChannel* channel) override
{
return mStartAsyncRead(listener, channel, mContext);
}
private:
F1 mStartAsyncRead;
F2 mOpenContentStream;
RefPtr<T> mContext;
};
already_AddRefed<nsIChannel>
NS_NewSimpleChannelInternal(nsIURI* aURI, nsILoadInfo* aLoadInfo, UniquePtr<SimpleChannelCallbacks>&& aCallbacks);
} // namespace net
} // namespace mozilla
/**
* Creates a simple channel which wraps an input stream created by the given
* callbacks. The callbacks are not called until the underlying AsyncOpen2 or
* Open2 methods are called, and correspond to the nsBaseChannel::StartAsyncRead
* and nsBaseChannel::OpenContentStream methods of the same names.
*
* The last two arguments of each callback are the created channel instance,
* and the ref-counted context object passed to NS_NewSimpleChannel. A strong
* reference to that object is guaranteed to be kept alive until after a
* callback successfully completes.
*/
template <typename T, typename F1, typename F2>
inline already_AddRefed<nsIChannel>
NS_NewSimpleChannel(nsIURI* aURI, nsILoadInfo* aLoadInfo, T* context, F1&& aStartAsyncRead, F2&& aOpenContentStream)
{
using namespace mozilla;
auto callbacks = MakeUnique<net::SimpleChannelCallbacksImpl<F1, F2, T>>(
Move(aStartAsyncRead), Move(aOpenContentStream), context);
return net::NS_NewSimpleChannelInternal(aURI, aLoadInfo, Move(callbacks));
}
template <typename T, typename F1>
inline already_AddRefed<nsIChannel>
NS_NewSimpleChannel(nsIURI* aURI, nsILoadInfo* aLoadInfo, T* context, F1&& aStartAsyncRead)
{
using namespace mozilla;
auto openContentStream = [] (bool async, nsIChannel* channel, T* context) {
return Err(NS_ERROR_NOT_IMPLEMENTED);
};
return NS_NewSimpleChannel(
aURI, aLoadInfo, context, Move(aStartAsyncRead), Move(openContentStream));
}
#endif // SimpleChannel_h

View File

@ -160,6 +160,7 @@ EXPORTS += [
'nsURIHashKey.h',
'nsURLHelper.h',
'nsURLParsers.h',
'SimpleChannel.h',
]
EXPORTS.mozilla += [
@ -249,6 +250,7 @@ UNIFIED_SOURCES += [
'RedirectChannelRegistrar.cpp',
'RequestContextService.cpp',
'SimpleBuffer.cpp',
'SimpleChannel.cpp',
'StreamingProtocolService.cpp',
'ThrottleQueue.cpp',
'ThrottlingService.cpp',

View File

@ -42,16 +42,17 @@ private:
nsIRequest *mRequest;
};
// Used to suspend data events from mPump within a function scope. This is
// Used to suspend data events from mRequest within a function scope. This is
// usually needed when a function makes callbacks that could process events.
#define SUSPEND_PUMP_FOR_SCOPE() \
ScopedRequestSuspender pump_suspender__(mPump)
ScopedRequestSuspender pump_suspender__(mRequest)
//-----------------------------------------------------------------------------
// nsBaseChannel
nsBaseChannel::nsBaseChannel()
: mLoadFlags(LOAD_NORMAL)
: mPumpingData(false)
, mLoadFlags(LOAD_NORMAL)
, mQueriedProgressSink(true)
, mSynthProgressEvents(false)
, mAllowThreadRetargeting(true)
@ -231,10 +232,21 @@ nsBaseChannel::PushStreamConverter(const char *fromType,
nsresult
nsBaseChannel::BeginPumpingData()
{
nsresult rv;
rv = BeginAsyncRead(this, getter_AddRefs(mRequest));
if (NS_SUCCEEDED(rv)) {
mPumpingData = true;
return NS_OK;
}
if (rv != NS_ERROR_NOT_IMPLEMENTED) {
return rv;
}
nsCOMPtr<nsIInputStream> stream;
nsCOMPtr<nsIChannel> channel;
nsresult rv = OpenContentStream(true, getter_AddRefs(stream),
getter_AddRefs(channel));
rv = OpenContentStream(true, getter_AddRefs(stream),
getter_AddRefs(channel));
if (NS_FAILED(rv))
return rv;
@ -255,8 +267,11 @@ nsBaseChannel::BeginPumpingData()
rv = nsInputStreamPump::Create(getter_AddRefs(mPump), stream, -1, -1, 0, 0,
true);
if (NS_SUCCEEDED(rv))
if (NS_SUCCEEDED(rv)) {
mPumpingData = true;
mRequest = mPump;
rv = mPump->AsyncRead(this, nullptr);
}
return rv;
}
@ -264,7 +279,7 @@ nsBaseChannel::BeginPumpingData()
void
nsBaseChannel::HandleAsyncRedirect(nsIChannel* newChannel)
{
NS_ASSERTION(!mPump, "Shouldn't have gotten here");
NS_ASSERTION(!mPumpingData, "Shouldn't have gotten here");
nsresult rv = mStatus;
if (NS_SUCCEEDED(mStatus)) {
@ -361,8 +376,8 @@ nsBaseChannel::IsPending(bool *result)
NS_IMETHODIMP
nsBaseChannel::GetStatus(nsresult *status)
{
if (mPump && NS_SUCCEEDED(mStatus)) {
mPump->GetStatus(status);
if (mRequest && NS_SUCCEEDED(mStatus)) {
mRequest->GetStatus(status);
} else {
*status = mStatus;
}
@ -378,8 +393,8 @@ nsBaseChannel::Cancel(nsresult status)
mStatus = status;
if (mPump)
mPump->Cancel(status);
if (mRequest)
mRequest->Cancel(status);
return NS_OK;
}
@ -387,15 +402,17 @@ nsBaseChannel::Cancel(nsresult status)
NS_IMETHODIMP
nsBaseChannel::Suspend()
{
NS_ENSURE_TRUE(mPump, NS_ERROR_NOT_INITIALIZED);
return mPump->Suspend();
NS_ENSURE_TRUE(mPumpingData, NS_ERROR_NOT_INITIALIZED);
NS_ENSURE_TRUE(mRequest, NS_ERROR_NOT_IMPLEMENTED);
return mRequest->Suspend();
}
NS_IMETHODIMP
nsBaseChannel::Resume()
{
NS_ENSURE_TRUE(mPump, NS_ERROR_NOT_INITIALIZED);
return mPump->Resume();
NS_ENSURE_TRUE(mPumpingData, NS_ERROR_NOT_INITIALIZED);
NS_ENSURE_TRUE(mRequest, NS_ERROR_NOT_IMPLEMENTED);
return mRequest->Resume();
}
NS_IMETHODIMP
@ -604,7 +621,7 @@ NS_IMETHODIMP
nsBaseChannel::Open(nsIInputStream **result)
{
NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_INITIALIZED);
NS_ENSURE_TRUE(!mPump, NS_ERROR_IN_PROGRESS);
NS_ENSURE_TRUE(!mPumpingData, NS_ERROR_IN_PROGRESS);
NS_ENSURE_TRUE(!mWasOpened, NS_ERROR_IN_PROGRESS);
nsCOMPtr<nsIChannel> chan;
@ -646,7 +663,7 @@ nsBaseChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctxt)
"security flags in loadInfo but asyncOpen2() not called");
NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_INITIALIZED);
NS_ENSURE_TRUE(!mPump, NS_ERROR_IN_PROGRESS);
NS_ENSURE_TRUE(!mPumpingData, NS_ERROR_IN_PROGRESS);
NS_ENSURE_TRUE(!mWasOpened, NS_ERROR_ALREADY_OPENED);
NS_ENSURE_ARG(listener);
@ -677,6 +694,8 @@ nsBaseChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctxt)
rv = BeginPumpingData();
if (NS_FAILED(rv)) {
mPump = nullptr;
mRequest = nullptr;
mPumpingData = false;
ChannelDone();
mCallbacks = nullptr;
return rv;
@ -717,7 +736,7 @@ nsBaseChannel::OnTransportStatus(nsITransport *transport, nsresult status,
{
// In some cases, we may wish to suppress transport-layer status events.
if (!mPump || NS_FAILED(mStatus)) {
if (!mPumpingData || NS_FAILED(mStatus)) {
return NS_OK;
}
@ -793,20 +812,22 @@ CallUnknownTypeSniffer(void *aClosure, const uint8_t *aData, uint32_t aCount)
NS_IMETHODIMP
nsBaseChannel::OnStartRequest(nsIRequest *request, nsISupports *ctxt)
{
MOZ_ASSERT(request == mPump);
MOZ_ASSERT_IF(mRequest, request == mRequest);
// If our content type is unknown, use the content type
// sniffer. If the sniffer is not available for some reason, then we just keep
// going as-is.
if (NS_SUCCEEDED(mStatus) &&
mContentType.EqualsLiteral(UNKNOWN_CONTENT_TYPE)) {
mPump->PeekStream(CallUnknownTypeSniffer, static_cast<nsIChannel*>(this));
if (mPump) {
// If our content type is unknown, use the content type
// sniffer. If the sniffer is not available for some reason, then we just keep
// going as-is.
if (NS_SUCCEEDED(mStatus) &&
mContentType.EqualsLiteral(UNKNOWN_CONTENT_TYPE)) {
mPump->PeekStream(CallUnknownTypeSniffer, static_cast<nsIChannel*>(this));
}
// Now, the general type sniffers. Skip this if we have none.
if (mLoadFlags & LOAD_CALL_CONTENT_SNIFFERS)
mPump->PeekStream(CallTypeSniffers, static_cast<nsIChannel*>(this));
}
// Now, the general type sniffers. Skip this if we have none.
if (mLoadFlags & LOAD_CALL_CONTENT_SNIFFERS)
mPump->PeekStream(CallTypeSniffers, static_cast<nsIChannel*>(this));
SUSPEND_PUMP_FOR_SCOPE();
if (mListener) // null in case of redirect
@ -825,6 +846,8 @@ nsBaseChannel::OnStopRequest(nsIRequest *request, nsISupports *ctxt,
// Cause Pending to return false.
mPump = nullptr;
mRequest = nullptr;
mPumpingData = false;
if (mListener) // null in case of redirect
mListener->OnStopRequest(this, mListenerContext, mStatus);
@ -913,13 +936,16 @@ nsBaseChannel::RetargetDeliveryTo(nsIEventTarget* aEventTarget)
{
MOZ_ASSERT(NS_IsMainThread());
NS_ENSURE_TRUE(mPump, NS_ERROR_NOT_INITIALIZED);
NS_ENSURE_TRUE(mRequest, NS_ERROR_NOT_INITIALIZED);
if (!mAllowThreadRetargeting) {
return NS_ERROR_NOT_IMPLEMENTED;
nsCOMPtr<nsIThreadRetargetableRequest> req;
if (mAllowThreadRetargeting) {
req = do_QueryInterface(mRequest);
}
return mPump->RetargetDeliveryTo(aEventTarget);
NS_ENSURE_TRUE(req, NS_ERROR_NOT_IMPLEMENTED);
return req->RetargetDeliveryTo(aEventTarget);
}
NS_IMETHODIMP

View File

@ -92,6 +92,19 @@ private:
virtual nsresult OpenContentStream(bool async, nsIInputStream **stream,
nsIChannel** channel) = 0;
// Implemented by subclass to begin pumping data for an async channel, in
// lieu of returning a stream. If implemented, OpenContentStream will never
// be called for async channels. If not implemented, AsyncOpen2 will fall
// back to OpenContentStream.
//
// On success, the callee must begin pumping data to the stream listener,
// and at some point call OnStartRequest followed by OnStopRequest.
// Additionally, it may provide a request object which may be used to
// suspend, resume, and cancel the underlying request.
virtual nsresult BeginAsyncRead(nsIStreamListener* listener, nsIRequest** request) {
return NS_ERROR_NOT_IMPLEMENTED;
}
// The basechannel calls this method from its OnTransportStatus method to
// determine whether to call nsIProgressEventSink::OnStatus in addition to
// nsIProgressEventSink::OnProgress. This method may be overriden by the
@ -164,7 +177,7 @@ public:
// This is a short-cut to calling nsIRequest::IsPending()
virtual bool Pending() const {
return mPump || mWaitingOnAsyncRedirect;
return mPumpingData || mWaitingOnAsyncRedirect;
}
// Helper function for querying the channel's notification callbacks.
@ -266,6 +279,8 @@ private:
friend class RedirectRunnable;
RefPtr<nsInputStreamPump> mPump;
RefPtr<nsIRequest> mRequest;
bool mPumpingData;
nsCOMPtr<nsIProgressEventSink> mProgressSink;
nsCOMPtr<nsIURI> mOriginalURI;
nsCOMPtr<nsISupports> mOwner;

View File

@ -240,7 +240,10 @@ nsInputStreamPump::Resume()
NS_ENSURE_TRUE(mSuspendCount > 0, NS_ERROR_UNEXPECTED);
NS_ENSURE_TRUE(mState != STATE_IDLE, NS_ERROR_UNEXPECTED);
if (--mSuspendCount == 0)
// There is a brief in-between state when we null out mAsyncStream in
// OnStateStop() before calling OnStopRequest, and only afterwards set
// STATE_IDLE, which we need to handle gracefully.
if (--mSuspendCount == 0 && mAsyncStream)
EnsureWaiting();
return NS_OK;
}

View File

@ -8,6 +8,8 @@
#include "nsThreadUtils.h"
#include <algorithm>
using namespace mozilla::net;
nsresult
nsSyncStreamListener::Init()
{

View File

@ -11,14 +11,12 @@
#include "nsIURL.h"
#include "nsIChannel.h"
#include "nsIStreamListener.h"
#include "nsIRequestObserver.h"
#include "nsIInputStreamChannel.h"
#include "nsIInputStream.h"
#include "nsIOutputStream.h"
#include "nsIStreamConverterService.h"
#include "nsIPipe.h"
#include "nsNetUtil.h"
#include "LoadInfo.h"
#include "SimpleChannel.h"
namespace mozilla {
namespace net {
@ -45,39 +43,6 @@ ExtensionProtocolHandler::GetFlagsForURI(nsIURI* aURI, uint32_t* aFlags)
return NS_OK;
}
class PipeCloser : public nsIRequestObserver
{
public:
NS_DECL_ISUPPORTS
explicit PipeCloser(nsIOutputStream* aOutputStream) :
mOutputStream(aOutputStream)
{
}
NS_IMETHOD OnStartRequest(nsIRequest*, nsISupports*) override
{
return NS_OK;
}
NS_IMETHOD OnStopRequest(nsIRequest*, nsISupports*, nsresult aStatusCode) override
{
NS_ENSURE_TRUE(mOutputStream, NS_ERROR_UNEXPECTED);
nsresult rv = mOutputStream->Close();
mOutputStream = nullptr;
return rv;
}
protected:
virtual ~PipeCloser() {}
private:
nsCOMPtr<nsIOutputStream> mOutputStream;
};
NS_IMPL_ISUPPORTS(PipeCloser, nsIRequestObserver)
bool
ExtensionProtocolHandler::ResolveSpecialCases(const nsACString& aHost,
const nsACString& aPath,
@ -111,6 +76,17 @@ ExtensionProtocolHandler::ResolveSpecialCases(const nsACString& aHost,
return false;
}
static inline Result<Ok, nsresult>
WrapNSResult(nsresult aRv)
{
if (NS_FAILED(aRv)) {
return Err(aRv);
}
return Ok();
}
#define NS_TRY(expr) MOZ_TRY(WrapNSResult(expr))
nsresult
ExtensionProtocolHandler::SubstituteChannel(nsIURI* aURI,
nsILoadInfo* aLoadInfo,
@ -130,50 +106,46 @@ ExtensionProtocolHandler::SubstituteChannel(nsIURI* aURI,
// Filter CSS files to replace locale message tokens with localized strings.
nsCOMPtr<nsIStreamConverterService> convService =
do_GetService(NS_STREAMCONVERTERSERVICE_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
bool haveLoadInfo = aLoadInfo;
nsCOMPtr<nsIChannel> channel = NS_NewSimpleChannel(
aURI, aLoadInfo, *result,
[haveLoadInfo] (nsIStreamListener* listener, nsIChannel* channel, nsIChannel* origChannel) -> RequestOrReason {
nsresult rv;
nsCOMPtr<nsIStreamConverterService> convService =
do_GetService(NS_STREAMCONVERTERSERVICE_CONTRACTID, &rv);
NS_TRY(rv);
const char* kFromType = "application/vnd.mozilla.webext.unlocalized";
const char* kToType = "text/css";
nsCOMPtr<nsIURI> uri;
NS_TRY(channel->GetURI(getter_AddRefs(uri)));
nsCOMPtr<nsIInputStream> inputStream;
nsCOMPtr<nsIOutputStream> outputStream;
rv = NS_NewPipe(getter_AddRefs(inputStream), getter_AddRefs(outputStream),
0, UINT32_MAX, true, false);
NS_ENSURE_SUCCESS(rv, rv);
const char* kFromType = "application/vnd.mozilla.webext.unlocalized";
const char* kToType = "text/css";
nsCOMPtr<nsIStreamListener> listener;
nsCOMPtr<nsIRequestObserver> observer = new PipeCloser(outputStream);
rv = NS_NewSimpleStreamListener(getter_AddRefs(listener), outputStream, observer);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIStreamListener> converter;
NS_TRY(convService->AsyncConvertData(kFromType, kToType, listener,
uri, getter_AddRefs(converter)));
if (haveLoadInfo) {
NS_TRY(origChannel->AsyncOpen2(converter));
} else {
NS_TRY(origChannel->AsyncOpen(converter, nullptr));
}
nsCOMPtr<nsIStreamListener> converter;
rv = convService->AsyncConvertData(kFromType, kToType, listener,
aURI, getter_AddRefs(converter));
NS_ENSURE_SUCCESS(rv, rv);
return RequestOrReason(origChannel);
});
NS_ENSURE_TRUE(channel, NS_ERROR_OUT_OF_MEMORY);
if (aLoadInfo) {
nsCOMPtr<nsILoadInfo> loadInfo =
static_cast<LoadInfo*>(aLoadInfo)->CloneForNewRequest();
(*result)->SetLoadInfo(loadInfo);
rv = (*result)->AsyncOpen2(converter);
} else {
rv = (*result)->AsyncOpen(converter, nullptr);
(*result)->SetLoadInfo(loadInfo);
}
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIChannel> channel;
rv = NS_NewInputStreamChannelInternal(getter_AddRefs(channel), aURI, inputStream,
NS_LITERAL_CSTRING("text/css"),
NS_LITERAL_CSTRING("utf-8"),
aLoadInfo);
NS_ENSURE_SUCCESS(rv, rv);
channel.swap(*result);
return NS_OK;
}
#undef NS_TRY
} // namespace net
} // namespace mozilla

View File

@ -4,4 +4,7 @@
# 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/.
with Files("**"):
BUG_COMPONENT = ('Core', 'Networking: Cache')
JAR_MANIFESTS += ['jar.mn']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Performance Monitoring')
JAR_MANIFESTS += ['jar.mn']
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'Extension Compatibility')
TEST_DIRS += ['tests']
EXTRA_COMPONENTS += [

View File

@ -4,4 +4,7 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Preferences')
JAR_MANIFESTS += ['jar.mn']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
DIRS += ['build']
XPIDL_SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Build Config')
EXPORTS += [
'nsToolkitCompsCID.h',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'DOM: Device Interfaces')
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
XPIDL_SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'DOM: Security')
EXTRA_JS_MODULES += [
'ContextualIdentityService.jsm',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
EXTRA_JS_MODULES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
XPIDL_SOURCES += [
'nsIDiskSpaceWatcher.idl',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'WebExtensions: General')
EXTRA_JS_MODULES += [
'Extension.jsm',
'ExtensionAPI.jsm',

View File

@ -0,0 +1,12 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div id="test">Sample text</div>
</body>
</html>

View File

@ -0,0 +1,72 @@
"use strict";
Cu.import("resource://gre/modules/Preferences.jsm");
const server = createHttpServer();
server.registerDirectory("/data/", do_get_file("data"));
const BASE_URL = `http://localhost:${server.identity.primaryPort}/data`;
const XRAY_PREF = "dom.allow_named_properties_object_for_xrays";
add_task(async function test_contentscript_xrays() {
async function contentScript() {
let deferred;
browser.test.onMessage.addListener(msg => {
if (msg === "pref-set") {
deferred.resolve();
}
});
function setPref(val) {
browser.test.sendMessage("set-pref", val);
return new Promise(resolve => { deferred = {resolve}; });
}
let unwrapped = window.wrappedJSObject;
await setPref(0);
browser.test.assertEq("object", typeof test, "Should have named X-ray property access with pref=0");
browser.test.assertEq("object", typeof window.test, "Should have named X-ray property access with pref=0");
browser.test.assertEq("object", typeof unwrapped.test, "Should always have non-X-ray named property access");
await setPref(1);
browser.test.assertEq("undefined", typeof test, "Should not have named X-ray property access with pref=1");
browser.test.assertEq(undefined, window.test, "Should not have named X-ray property access with pref=1");
browser.test.assertEq("object", typeof unwrapped.test, "Should always have non-X-ray named property access");
await setPref(2);
browser.test.assertEq("undefined", typeof test, "Should not have named X-ray property access with pref=2");
browser.test.assertEq(undefined, window.test, "Should not have named X-ray property access with pref=2");
browser.test.assertEq("object", typeof unwrapped.test, "Should always have non-X-ray named property access");
browser.test.notifyPass("contentScriptXrays");
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
content_scripts: [{
"matches": ["http://*/*/file_sample.html"],
"js": ["content_script.js"],
}],
},
files: {
"content_script.js": contentScript,
},
});
extension.onMessage("set-pref", value => {
Preferences.set(XRAY_PREF, value);
extension.sendMessage("pref-set");
});
equal(Preferences.get(XRAY_PREF), 1, "Should have pref=1 by default");
await extension.startup();
let contentPage = await ExtensionTestUtils.loadContentPage(`${BASE_URL}/file_sample.html`);
await extension.awaitFinish("contentScriptXrays");
await contentPage.close();
await extension.unload();
});

View File

@ -1,3 +1,4 @@
[test_ext_i18n.js]
[test_ext_i18n_css.js]
[test_ext_contentscript.js]
[test_ext_contentscript_xrays.js]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
XPIDL_SOURCES += [
'extIApplication.idl',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'RSS Discovery and Preview')
MOCHITEST_CHROME_MANIFESTS += ['test/chrome.ini']
XPIDL_SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Widget: Gtk')
XPIDL_MODULE = 'filepicker'
XPIDL_SOURCES += [
'nsIFileView.idl',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'OS.File')
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
SOURCES += [
'FinalizationWitnessService.cpp',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
XPIDL_SOURCES += [
'nsIFind.idl',
'nsIFindService.idl',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Graphics')
EXTRA_COMPONENTS += [
'GfxSanityTest.manifest',
'SanityTest.js',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'OS.File')
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
EXTRA_JS_MODULES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
# These component dirs are built for all apps (including suite)
if CONFIG['MOZ_ENABLE_XREMOTE']:
DIRS += ['remote']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Internationalization')
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']
XPIDL_SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
EXTRA_COMPONENTS += [
'mozProtocolHandler.js',
'mozProtocolHandler.manifest',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Reader Mode')
EXTRA_JS_MODULES.narrate = [
'NarrateControls.jsm',
'Narrator.jsm',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
XPIDL_SOURCES += [
'nsIParentalControlsService.idl',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'JavaScript Engine')
SOURCES += [
'PerfMeasurement.cpp',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Performance Monitoring')
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
XPIDL_MODULE = 'toolkit_perfmonitoring'

View File

@ -20,15 +20,18 @@
#include "nsILoadGroup.h"
#include "nsIStandardURL.h"
#include "nsIStringStream.h"
#include "nsIInputStream.h"
#include "nsISupportsUtils.h"
#include "nsIURI.h"
#include "nsNetUtil.h"
#include "nsIOutputStream.h"
#include "nsInputStreamPump.h"
#include "nsContentUtils.h"
#include "nsServiceManagerUtils.h"
#include "nsStringStream.h"
#include "SimpleChannel.h"
#include "mozilla/ScopeExit.h"
#include "mozilla/storage.h"
#include "nsIPipe.h"
#include "Helpers.h"
using namespace mozilla;
@ -68,20 +71,16 @@ namespace {
* happens at that point, the world must be against us, so we return nothing.
*/
class faviconAsyncLoader : public AsyncStatementCallback
, public nsIRequestObserver
{
public:
NS_DECL_ISUPPORTS_INHERITED
faviconAsyncLoader(nsIChannel *aChannel, nsIOutputStream *aOutputStream) :
faviconAsyncLoader(nsIChannel *aChannel, nsIStreamListener *aListener) :
mChannel(aChannel)
, mOutputStream(aOutputStream)
, mReturnDefaultIcon(true)
, mListener(aListener)
{
NS_ASSERTION(aChannel,
"Not providing a channel will result in crashes!");
NS_ASSERTION(aOutputStream,
"Not providing an output stream will result in crashes!");
NS_ASSERTION(aListener,
"Not providing a stream listener will result in crashes!");
}
//////////////////////////////////////////////////////////////////////////////
@ -110,80 +109,57 @@ public:
rv = row->GetBlob(0, &size, &favicon);
NS_ENSURE_SUCCESS(rv, rv);
uint32_t totalWritten = 0;
do {
uint32_t bytesWritten;
rv = mOutputStream->Write(
&(reinterpret_cast<const char *>(favicon)[totalWritten]),
size - totalWritten,
&bytesWritten
);
if (NS_FAILED(rv) || !bytesWritten)
break;
totalWritten += bytesWritten;
} while (size != totalWritten);
NS_ASSERTION(NS_FAILED(rv) || size == totalWritten,
"Failed to write all of our data out to the stream!");
nsCOMPtr<nsIInputStream> stream;
rv = NS_NewByteInputStream(getter_AddRefs(stream),
reinterpret_cast<char*>(favicon),
size, NS_ASSIGNMENT_ADOPT);
if (NS_FAILED(rv)) {
free(favicon);
return rv;
}
// Free our favicon array.
free(favicon);
// Handle an error to write if it occurred, but only after we've freed our
// favicon.
RefPtr<nsInputStreamPump> pump;
rv = nsInputStreamPump::Create(getter_AddRefs(pump), stream, -1, -1, 0, 0,
true);
NS_ENSURE_SUCCESS(rv, rv);
// At this point, we should have written out all of our data to our stream.
// HandleCompletion will close the output stream, so we are done here.
mReturnDefaultIcon = false;
MOZ_DIAGNOSTIC_ASSERT(mListener);
NS_ENSURE_TRUE(mListener, NS_ERROR_UNEXPECTED);
rv = pump->AsyncRead(mListener, nullptr);
NS_ENSURE_SUCCESS(rv, rv);
mListener = nullptr;
return NS_OK;
}
NS_IMETHOD HandleCompletion(uint16_t aReason) override
{
if (!mReturnDefaultIcon)
return mOutputStream->Close();
// If we've already written our icon data to the channel, there's nothing
// more to do. If we didn't, then return the default icon instead.
if (!mListener)
return NS_OK;
// We need to return our default icon, so we'll open up a new channel to get
// that data, and push it to our output stream. If at any point we get an
// error, we can't do anything, so we'll just close our output stream.
nsCOMPtr<nsIStreamListener> listener;
nsresult rv = NS_NewSimpleStreamListener(getter_AddRefs(listener),
mOutputStream, this);
NS_ENSURE_SUCCESS(rv, mOutputStream->Close());
auto cleanup = MakeScopeExit([&] () {
mListener = nullptr;
});
// we should pass the loadInfo of the original channel along
// to the new channel. Note that mChannel can not be null,
// constructor checks that.
nsCOMPtr<nsILoadInfo> loadInfo = mChannel->GetLoadInfo();
nsCOMPtr<nsIChannel> newChannel;
rv = GetDefaultIcon(loadInfo, getter_AddRefs(newChannel));
NS_ENSURE_SUCCESS(rv, mOutputStream->Close());
nsresult rv = GetDefaultIcon(loadInfo, getter_AddRefs(newChannel));
rv = newChannel->AsyncOpen2(listener);
NS_ENSURE_SUCCESS(rv, mOutputStream->Close());
if (NS_FAILED(rv)) {
mListener->OnStartRequest(mChannel, nullptr);
mListener->OnStopRequest(mChannel, nullptr, rv);
return rv;
}
return NS_OK;
}
mChannel->SetContentType(NS_LITERAL_CSTRING("image/png"));
//////////////////////////////////////////////////////////////////////////////
//// nsIRequestObserver
NS_IMETHOD OnStartRequest(nsIRequest *, nsISupports *) override
{
return NS_OK;
}
NS_IMETHOD OnStopRequest(nsIRequest *, nsISupports *, nsresult aStatusCode) override
{
// We always need to close our output stream, regardless of the status code.
(void)mOutputStream->Close();
// But, we'll warn about it not being successful if it wasn't.
NS_WARNING_ASSERTION(
NS_SUCCEEDED(aStatusCode),
"Got an error when trying to load our default favicon!");
return NS_OK;
return newChannel->AsyncOpen2(mListener);
}
protected:
@ -191,16 +167,9 @@ protected:
private:
nsCOMPtr<nsIChannel> mChannel;
nsCOMPtr<nsIOutputStream> mOutputStream;
bool mReturnDefaultIcon;
nsCOMPtr<nsIStreamListener> mListener;
};
NS_IMPL_ISUPPORTS_INHERITED(
faviconAsyncLoader,
AsyncStatementCallback,
nsIRequestObserver
)
} // namespace
////////////////////////////////////////////////////////////////////////////////
@ -331,36 +300,39 @@ nsresult
nsAnnoProtocolHandler::NewFaviconChannel(nsIURI *aURI, nsIURI *aAnnotationURI,
nsILoadInfo* aLoadInfo, nsIChannel **_channel)
{
// Create our pipe. This will give us our input stream and output stream
// that will be written to when we get data from the database.
nsCOMPtr<nsIInputStream> inputStream;
nsCOMPtr<nsIOutputStream> outputStream;
nsresult rv = NS_NewPipe(getter_AddRefs(inputStream),
getter_AddRefs(outputStream),
0, nsIFaviconService::MAX_FAVICON_BUFFER_SIZE,
true, true);
NS_ENSURE_SUCCESS(rv, GetDefaultIcon(aLoadInfo, _channel));
// Create our channel. We'll call SetContentType with the right type when
// we know what it actually is.
nsCOMPtr<nsIChannel> channel;
rv = NS_NewInputStreamChannelInternal(getter_AddRefs(channel),
aURI,
inputStream,
EmptyCString(), // aContentType
EmptyCString(), // aContentCharset
aLoadInfo);
NS_ENSURE_SUCCESS(rv, GetDefaultIcon(aLoadInfo, _channel));
nsCOMPtr<nsIChannel> channel = NS_NewSimpleChannel(
aURI, aLoadInfo, aAnnotationURI,
[] (nsIStreamListener* listener, nsIChannel* channel, nsIURI* annotationURI) {
auto fallback = [&] () -> RequestOrReason {
nsCOMPtr<nsIChannel> chan;
nsCOMPtr<nsILoadInfo> loadInfo = channel->GetLoadInfo();
nsresult rv = GetDefaultIcon(loadInfo, getter_AddRefs(chan));
NS_ENSURE_SUCCESS(rv, Err(rv));
// Now we go ahead and get our data asynchronously for the favicon.
nsCOMPtr<mozIStorageStatementCallback> callback =
new faviconAsyncLoader(channel, outputStream);
NS_ENSURE_TRUE(callback, GetDefaultIcon(aLoadInfo, _channel));
nsFaviconService* faviconService = nsFaviconService::GetFaviconService();
NS_ENSURE_TRUE(faviconService, GetDefaultIcon(aLoadInfo, _channel));
rv = chan->AsyncOpen2(listener);
NS_ENSURE_SUCCESS(rv, Err(rv));
rv = faviconService->GetFaviconDataAsync(aAnnotationURI, callback);
NS_ENSURE_SUCCESS(rv, GetDefaultIcon(aLoadInfo, _channel));
return RequestOrReason(chan.forget());
};
// Now we go ahead and get our data asynchronously for the favicon.
nsCOMPtr<mozIStorageStatementCallback> callback =
new faviconAsyncLoader(channel, listener);
nsFaviconService* faviconService = nsFaviconService::GetFaviconService();
// Any failures fallback to the default icon channel.
if (!callback || !faviconService)
return fallback();
nsresult rv = faviconService->GetFaviconDataAsync(annotationURI, callback);
if (NS_FAILED(rv))
return fallback();
return RequestOrReason(nullptr);
});
NS_ENSURE_TRUE(channel, NS_ERROR_OUT_OF_MEMORY);
channel.forget(_channel);
return NS_OK;

View File

@ -39,6 +39,7 @@ streamListener.prototype =
},
onDataAvailable(aRequest, aContext, aInputStream, aOffset, aCount) {
aRequest.cancel(Cr.NS_ERROR_ABORT);
throw Cr.NS_ERROR_ABORT;
}
};

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Printing')
toolkit = CONFIG['MOZ_WIDGET_TOOLKIT']
DIRS += ['ipc']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'DOM: Security')
XPIDL_SOURCES += [
'nsIPrivateBrowsingTrackingProtectionWhitelist.idl',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
EXTRA_COMPONENTS += [
'ContentProcessSingleton.js',
'MainProcessSingleton.js',

View File

@ -4,6 +4,10 @@
# 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/.
# possibly Notifications and Alerts
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
DIRS += ['src']
MOCHITEST_MANIFESTS += ['test/mochitest.ini']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'General')
EXPORTS.google.protobuf += [
'src/google/protobuf/descriptor.h',
'src/google/protobuf/descriptor.pb.h',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'JavaScript Engine')
SOURCES += [
'reflect.cpp',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Startup and Profile System')
XPIDL_SOURCES += [
'nsIRemoteService.idl',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Document Navigation')
EXTRA_COMPONENTS += [
'remotebrowserutils.manifest',
'RemoteWebNavigation.js',

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Form Manager')
MOCHITEST_MANIFESTS += ['test/mochitest.ini']
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
BROWSER_CHROME_MANIFESTS += ['test/browser/browser.ini']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'General')
XPIDL_MODULE = 'toolkit_securityreporter'
XPIDL_SOURCES += [

View File

@ -1,7 +0,0 @@
"use strict";
module.exports = {
"extends": [
"plugin:mozilla/xpcshell-test"
]
};

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Document Navigation')
SOURCES += [
'nsBrowserStatusFilter.cpp',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'New Tab Page')
BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Safe Browsing')
TEST_DIRS += ['tests']
XPIDL_SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
XPIDL_SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
EXTRA_COMPONENTS += [
'simpleServices.js',
'utils.manifest',

View File

@ -4,4 +4,7 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Preferences')
JAR_MANIFESTS += ['jar.mn']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Window Management')
TEST_DIRS += ['test']
if CONFIG['ENABLE_TESTS']:

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Core', 'Window Management')
TEST_DIRS += ['test']
XPIDL_SOURCES += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Startup and Profile System')
MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']

View File

@ -22,13 +22,266 @@ if CONFIG['MOZ_BUILD_APP'] == 'mobile/android':
JAR_MANIFESTS += ['jar.mn']
DEFINES['TOPOBJDIR'] = TOPOBJDIR
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('aboutTelemetry.*'):
BUG_COMPONENT = ('Toolkit', 'Telemetry')
with Files('customizeToolbar.*'):
BUG_COMPONENT = ('Toolkit', 'Toolbars and Toolbar Customization')
with Files('aboutwebrtc/*'):
BUG_COMPONENT = ('Core', 'WebRTC')
with Files('gmp-sources/*'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('tests/browser/browser_audio*'):
BUG_COMPONENT = ('Core', 'Audio/Video: Playback')
with Files('tests/browser/*block*'):
BUG_COMPONENT = ('Core', 'Audio/Video: Playback')
with Files('tests/browser/*silent*'):
BUG_COMPONENT = ('Core', 'Audio/Video: Playback')
with Files('tests/browser/*1170531*'):
BUG_COMPONENT = ('Firefox', 'Menus')
with Files('tests/browser/*1198465*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/browser/*451286*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/browser/*594509*'):
BUG_COMPONENT = ('Toolkit Graveyard', 'XULRunner')
with Files('tests/browser/*982298*'):
BUG_COMPONENT = ('Core', 'Layout')
with Files('tests/browser/browser_content_url_annotation.js'):
BUG_COMPONENT = ('Toolkit', 'Breakpad Integration')
with Files('tests/browser/browser_default_image_filename.js'):
BUG_COMPONENT = ('Firefox', 'File Handling')
with Files('tests/browser/*caret*'):
BUG_COMPONENT = ('Firefox', 'Keyboard Navigation')
with Files('tests/browser/*find*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/browser/browser_isSynthetic.js'):
BUG_COMPONENT = ('Firefox', 'Tabbed Browsing')
with Files('tests/browser/*mediaPlayback*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('tests/browser/*mute*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('tests/browser/*save*'):
BUG_COMPONENT = ('Firefox', 'File Handling')
with Files('tests/browser/*scroll*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('tests/chrome/**'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('tests/chrome/*networking*'):
BUG_COMPONENT = ('Core', 'Networking')
with Files('tests/chrome/*autocomplete*'):
BUG_COMPONENT = ('Toolkit', 'Autocomplete')
with Files('tests/chrome/*drop*'):
BUG_COMPONENT = ('Core', 'Drag and Drop')
with Files('tests/chrome/*1048178*'):
BUG_COMPONENT = ('Core', 'XUL')
with Files('tests/chrome/*253481*'):
BUG_COMPONENT = ('Core', 'Editor')
with Files('tests/chrome/*263683*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*304188*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*331215*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*360220*'):
BUG_COMPONENT = ('Firefox', 'RSS Discovery and Preview')
with Files('tests/chrome/*360437*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*409624*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*418874*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*429723*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*437844*'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('tests/chrome/rtlchrome/**'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('tests/chrome/*451540*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/*554279*'):
BUG_COMPONENT = ('Toolkit', 'Toolbars and Toolbar Customization')
with Files('tests/chrome/*585946*'):
BUG_COMPONENT = ('Toolkit', 'Toolbars and Toolbar Customization')
with Files('tests/chrome/*557987*'):
BUG_COMPONENT = ('Core', 'XP Toolkit/Widgets: Menus')
with Files('tests/chrome/*562554*'):
BUG_COMPONENT = ('Core', 'XP Toolkit/Widgets: Menus')
with Files('tests/chrome/*570192*'):
BUG_COMPONENT = ('Firefox', 'Session Restore')
with Files('tests/chrome/*findbar*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/chrome/test_preferences*'):
BUG_COMPONENT = ('Toolkit', 'Preferences')
with Files('tests/mochitest/*autocomplete*'):
BUG_COMPONENT = ('Toolkit', 'Autocomplete')
with Files('tests/mochitest/*mousecapture*'):
BUG_COMPONENT = ('Core', 'Event Handling')
with Files('tests/reftests/*progress*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('tests/reftests/*multiline*'):
BUG_COMPONENT = ('Core', 'XBL')
with Files('tests/reftests/*videocontrols*'):
BUG_COMPONENT = ('Toolkit', 'Video/Audio Controls')
with Files('tests/unit/**'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('tests/widgets/*audiocontrols*'):
BUG_COMPONENT = ('Toolkit', 'Video/Audio Controls')
with Files('tests/widgets/*1319301*'):
BUG_COMPONENT = ('Toolkit', 'Video/Audio Controls')
with Files('tests/widgets/*898940*'):
BUG_COMPONENT = ('Toolkit', 'Video/Audio Controls')
with Files('tests/widgets/*contextmenu*'):
BUG_COMPONENT = ('Firefox', 'Menus')
with Files('tests/widgets/*editor*'):
BUG_COMPONENT = ('Core', 'XP Toolkit/Widgets: XUL')
with Files('tests/widgets/*menubar*'):
BUG_COMPONENT = ('Core', 'XUL')
with Files('tests/widgets/*capture*'):
BUG_COMPONENT = ('Core', 'Event Handling')
with Files('tests/widgets/*popup*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('tests/widgets/*tree*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('tests/widgets/*videocontrols*'):
BUG_COMPONENT = ('Toolkit', 'Video/Audio Controls')
with Files('widgets/*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
DEFINES['TOPOBJDIR'] = TOPOBJDIR
with Files('TopLevelVideoDocument.js'):
BUG_COMPONENT = ('Toolkit', 'Video/Audio Controls')
with Files('about*'):
BUG_COMPONENT = ('Firefox', 'General')
with Files('aboutNetworking*'):
BUG_COMPONENT = ('Core', 'Networking')
with Files('aboutProfile*'):
BUG_COMPONENT = ('Toolkit', 'Startup and Profile System')
with Files('aboutRights*'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('aboutService*'):
BUG_COMPONENT = ('Core', 'DOM: Workers')
with Files('aboutSupport*'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('aboutTelemetry*'):
BUG_COMPONENT = ('Toolkit', 'Telemetry')
with Files('autocomplete.css'):
BUG_COMPONENT = ('Firefox', 'Search')
with Files('browser-*.js'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('buildconfig.html'):
BUG_COMPONENT = ('Toolkit', 'Build Config')
with Files('contentAreaUtils.js'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('customizeToolbar.*'):
BUG_COMPONENT = ('Toolkit', 'Toolbars and Toolbar Customization')
with Files('*picker*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('direction*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('edit*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('*find*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('globalOverlay.*'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('menulist.css'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('minimal-xul.css'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('plugins*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('resetProfile*'):
BUG_COMPONENT = ('Firefox', 'Migration')
with Files('textbox*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('timepicker*'):
BUG_COMPONENT = ('Toolkit', 'XUL Widgets')
with Files('treeUtils.js'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('viewZoomOverlay.js'):
BUG_COMPONENT = ('Toolkit', 'General')

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Build Config')
if CONFIG['MOZ_BUILD_APP'] == 'mobile/android':
DEFINES['MOZ_FENNEC'] = True

View File

@ -4,6 +4,160 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('addons/**'):
BUG_COMPONENT = ('Toolkit', 'WebExtensions: General')
with Files('docs/**'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
with Files('subprocess/**'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
with Files('tests/browser/*AsyncPrefs*'):
BUG_COMPONENT = ('Core', 'Security: Process Sandboxing')
with Files('tests/browser/*Finder*'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/xpcshell/test_Color.js'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/xpcshell/test_DeferredTask.js'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
with Files('tests/xpcshell/test_FinderIterator.js'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('tests/xpcshell/test_Integration.js'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
with Files('tests/xpcshell/test_JSONFile.js'):
BUG_COMPONENT = ('Toolkit', 'Form Manager')
with Files('tests/xpcshell/test_Match*.js'):
BUG_COMPONENT = ('Toolkit', 'WebExtentions: General')
with Files('tests/xpcshell/test_NewTabUtils.js'):
BUG_COMPONENT = ('Firefox', 'New Tab Page')
with Files('tests/xpcshell/test_UpdateUtils*.js'):
BUG_COMPONENT = ('Toolkit', 'General')
with Files('tests/xpcshell/test_client_id.js'):
BUG_COMPONENT = ('Toolkit', 'Telemetry')
with Files('tests/xpcshell/test_session_recorder.js'):
BUG_COMPONENT = ('Toolkit', 'Telemetry')
with Files('AsyncPrefs.jsm'):
BUG_COMPONENT = ('Core', 'Security: Process Sandboxing')
with Files('CharsetMenu.jsm'):
BUG_COMPONENT = ('Firefox', 'Toolbars and Customization')
with Files('ClientID.jsm'):
BUG_COMPONENT = ('Toolkit', 'Telemetry')
with Files('Color.jsm'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('Console.jsm'):
BUG_COMPONENT = ('Firefox', 'Developer Tools: Console')
with Files('DateTimePickerHelper.jsm'):
BUG_COMPONENT = ('Core', 'Layout: Form Controls ')
with Files('DeferredTask.jsm'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
with Files('Finder*.jsm'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('FormLikeFactory.jsm'):
BUG_COMPONENT = ('Toolkit', 'Password Manager')
with Files('IndexedDB.jsm'):
BUG_COMPONENT = ('Toolkit', 'Web Extensions: General')
with Files('InlineSpellChecker*.jsm'):
BUG_COMPONENT = ('Core', 'Spell Checker')
with Files('Integration.jsm'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
with Files('JSONFile.jsm'):
BUG_COMPONENT = ('Toolkit', 'Form Manager')
with Files('LightweightThemeConsumer.jsm'):
BUG_COMPONENT = ('Firefox', 'Toolbars and Customization')
with Files('LoadContextInfo.jsm'):
BUG_COMPONENT = ('Core', 'Networking: Cache')
with Files('Locale.jsm'):
BUG_COMPONENT = ('Core', 'Internationalization')
with Files('Memory.jsm'):
BUG_COMPONENT = ('Core', 'DOM: Content Processes')
with Files('NLP.jsm'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('NewTabUtils.jsm'):
BUG_COMPONENT = ('Firefox', 'Tabbed Browser')
with Files('ObjectUtils.jsm'):
BUG_COMPONENT = ('Toolkit', 'Telemetry')
with Files('PageMenu.jsm'):
BUG_COMPONENT = ('Firefox', 'Menus')
with Files('PermissionsUtils.jsm'):
BUG_COMPONENT = ('Toolkit', 'Add-ons Manager')
with Files('PopupNotifications.jsm'):
BUG_COMPONENT = ('Toolkit', 'Password Manager')
with Files('PrivateBrowsingUtils.jsm'):
BUG_COMPONENT = ('Firefox', 'Private Browsing')
with Files('Promise*.jsm'):
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
with Files('RemoteController.jsm'):
BUG_COMPONENT = ('Core', 'Widget')
with Files('RemoteFinder.jsm'):
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
with Files('RemoteSecurityUI.jsm'):
BUG_COMPONENT = ('Firefox', 'Tabbed Browser')
with Files('RemoteWebProgress.jsm'):
BUG_COMPONENT = ('Core', 'Document Navigation')
with Files('ResponsivenessMonitor.jsm'):
BUG_COMPONENT = ('Firefox', 'Migration')
with Files('SessionRecorder.jsm'):
BUG_COMPONENT = ('Toolkit', 'Telemetry')
with Files('ShortcutUtils.jsm'):
BUG_COMPONENT = ('Firefox', 'Toolbars and Customization')
with Files('Sqlite.jsm'):
BUG_COMPONENT = ('Toolkit', 'Storage')
with Files('UpdateUtils.jsm'):
BUG_COMPONENT = ('Toolkit', 'Add-ons Manager')
with Files('WindowsRegistry.jsm'):
BUG_COMPONENT = ('Toolkit', 'General')
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Downloads API')
TEST_DIRS += ['tests']
EXTRA_COMPONENTS += [

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'File Handling')
EXTRA_COMPONENTS += [
'nsContentDispatchChooser.js',
'nsContentDispatchChooser.manifest',

View File

@ -0,0 +1,11 @@
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'Installer')
with Files('windows/**'):
BUG_COMPONENT = ('Toolkit', 'NSIS Installer')

View File

@ -4,4 +4,7 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Toolkit', 'Preferences')
JAR_MANIFESTS += ['jar.mn']

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox for Android', 'General')
SOURCES += [
'nsAndroidSystemProxySettings.cpp',
]

View File

@ -4,6 +4,9 @@
# 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/.
with Files('**'):
BUG_COMPONENT = ('Firefox', 'Shell Integration')
SOURCES += [
'nsAlertsIconListener.cpp',
'nsGnomeModule.cpp',

Some files were not shown because too many files have changed in this diff Show More