mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
merge mozilla-inbound to mozilla-central. r=merge a=merge
MozReview-Commit-ID: 3xAWLzLkoZ3
This commit is contained in:
commit
1ac51ab409
@ -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',
|
||||
]
|
||||
|
@ -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',
|
||||
|
@ -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
146
docshell/test/moz.build
Normal 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')
|
@ -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);
|
||||
}
|
||||
|
@ -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 =
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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*
|
||||
|
@ -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*
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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]
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
@ -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
|
@ -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 {
|
||||
|
@ -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']:
|
||||
|
@ -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,
|
||||
|
@ -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(),
|
||||
|
@ -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]
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
@ -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");
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
40
js/xpconnect/tests/unit/test_xray_named_element_access.js
Normal file
40
js/xpconnect/tests/unit/test_xray_named_element_access.js
Normal 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();
|
||||
});
|
||||
|
@ -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]
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) $<
|
||||
|
@ -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);
|
||||
|
94
netwerk/base/SimpleChannel.cpp
Normal file
94
netwerk/base/SimpleChannel.cpp
Normal 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
|
110
netwerk/base/SimpleChannel.h
Normal file
110
netwerk/base/SimpleChannel.h
Normal 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
|
@ -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',
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -8,6 +8,8 @@
|
||||
#include "nsThreadUtils.h"
|
||||
#include <algorithm>
|
||||
|
||||
using namespace mozilla::net;
|
||||
|
||||
nsresult
|
||||
nsSyncStreamListener::Init()
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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']
|
||||
|
@ -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']
|
||||
|
@ -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 += [
|
||||
|
@ -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']
|
@ -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 += [
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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 += [
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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 += [
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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',
|
||||
|
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE HTML>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="test">Sample text</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -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();
|
||||
});
|
||||
|
@ -1,3 +1,4 @@
|
||||
[test_ext_i18n.js]
|
||||
[test_ext_i18n_css.js]
|
||||
[test_ext_contentscript.js]
|
||||
[test_ext_contentscript_xrays.js]
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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 += [
|
||||
|
@ -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',
|
||||
|
@ -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':
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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',
|
||||
|
@ -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',
|
||||
|
@ -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 += [
|
||||
|
@ -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']
|
||||
|
@ -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 += [
|
||||
|
@ -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',
|
||||
|
@ -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',
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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'
|
||||
|
@ -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;
|
||||
|
@ -39,6 +39,7 @@ streamListener.prototype =
|
||||
},
|
||||
onDataAvailable(aRequest, aContext, aInputStream, aOffset, aCount) {
|
||||
aRequest.cancel(Cr.NS_ERROR_ABORT);
|
||||
throw Cr.NS_ERROR_ABORT;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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']
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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',
|
||||
|
@ -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']
|
||||
|
@ -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',
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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',
|
||||
]
|
||||
|
@ -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',
|
||||
|
@ -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']
|
||||
|
@ -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 += [
|
||||
|
@ -1,7 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
"extends": [
|
||||
"plugin:mozilla/xpcshell-test"
|
||||
]
|
||||
};
|
@ -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',
|
||||
]
|
||||
|
@ -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 += [
|
||||
|
@ -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']
|
||||
|
||||
|
@ -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 += [
|
||||
|
@ -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 += [
|
||||
|
@ -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',
|
||||
|
@ -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']
|
@ -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']:
|
||||
|
@ -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 += [
|
||||
|
@ -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']
|
||||
|
||||
|
@ -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')
|
||||
|
@ -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
|
||||
|
||||
|
@ -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']
|
||||
|
@ -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 += [
|
||||
|
@ -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',
|
||||
|
11
toolkit/mozapps/installer/moz.build
Normal file
11
toolkit/mozapps/installer/moz.build
Normal 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')
|
@ -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']
|
@ -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',
|
||||
]
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user