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
|
# 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/.
|
# 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 += [
|
DIRS += [
|
||||||
'timeline',
|
'timeline',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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 += [
|
EXPORTS.mozilla += [
|
||||||
'AbstractTimelineMarker.h',
|
'AbstractTimelineMarker.h',
|
||||||
'AutoGlobalTimelineMarker.h',
|
'AutoGlobalTimelineMarker.h',
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Document Navigation')
|
||||||
|
|
||||||
DIRS += [
|
DIRS += [
|
||||||
'base',
|
'base',
|
||||||
'shistory',
|
'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 "WindowNamedPropertiesHandler.h"
|
||||||
#include "mozilla/dom/EventTargetBinding.h"
|
#include "mozilla/dom/EventTargetBinding.h"
|
||||||
#include "mozilla/dom/WindowBinding.h"
|
#include "mozilla/dom/WindowBinding.h"
|
||||||
|
#include "mozilla/Preferences.h"
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
#include "nsDOMClassInfo.h"
|
#include "nsDOMClassInfo.h"
|
||||||
#include "nsDOMWindowList.h"
|
#include "nsDOMWindowList.h"
|
||||||
@ -237,11 +238,56 @@ WindowNamedPropertiesHandler::delete_(JSContext* aCx,
|
|||||||
return aResult.failCantDeleteWindowNamedProperty();
|
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
|
static bool
|
||||||
ResolveWindowNamedProperty(JSContext* aCx, JS::Handle<JSObject*> aWrapper,
|
ResolveWindowNamedProperty(JSContext* aCx, JS::Handle<JSObject*> aWrapper,
|
||||||
JS::Handle<JSObject*> aObj, JS::Handle<jsid> aId,
|
JS::Handle<JSObject*> aObj, JS::Handle<jsid> aId,
|
||||||
JS::MutableHandle<JS::PropertyDescriptor> aDesc)
|
JS::MutableHandle<JS::PropertyDescriptor> aDesc)
|
||||||
{
|
{
|
||||||
|
if (!AllowNamedPropertiesObject(aCx)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
JSAutoCompartment ac(aCx, aObj);
|
JSAutoCompartment ac(aCx, aObj);
|
||||||
if (!js::GetProxyHandler(aObj)->getOwnPropertyDescriptor(aCx, aObj, aId,
|
if (!js::GetProxyHandler(aObj)->getOwnPropertyDescriptor(aCx, aObj, aId,
|
||||||
@ -264,6 +310,10 @@ EnumerateWindowNamedProperties(JSContext* aCx, JS::Handle<JSObject*> aWrapper,
|
|||||||
JS::Handle<JSObject*> aObj,
|
JS::Handle<JSObject*> aObj,
|
||||||
JS::AutoIdVector& aProps)
|
JS::AutoIdVector& aProps)
|
||||||
{
|
{
|
||||||
|
if (!AllowNamedPropertiesObject(aCx)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
JSAutoCompartment ac(aCx, aObj);
|
JSAutoCompartment ac(aCx, aObj);
|
||||||
return js::GetProxyHandler(aObj)->ownPropertyKeys(aCx, aObj, aProps);
|
return js::GetProxyHandler(aObj)->ownPropertyKeys(aCx, aObj, aProps);
|
||||||
}
|
}
|
||||||
|
@ -294,6 +294,9 @@ bool nsContentUtils::sIsWebComponentsEnabled = false;
|
|||||||
bool nsContentUtils::sPrivacyResistFingerprinting = false;
|
bool nsContentUtils::sPrivacyResistFingerprinting = false;
|
||||||
bool nsContentUtils::sSendPerformanceTimingNotifications = false;
|
bool nsContentUtils::sSendPerformanceTimingNotifications = false;
|
||||||
bool nsContentUtils::sUseActivityCursor = 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::sPrivacyMaxInnerWidth = 1000;
|
||||||
int32_t nsContentUtils::sPrivacyMaxInnerHeight = 1000;
|
int32_t nsContentUtils::sPrivacyMaxInnerHeight = 1000;
|
||||||
@ -630,6 +633,15 @@ nsContentUtils::Init()
|
|||||||
Preferences::AddBoolVarCache(&sUseActivityCursor,
|
Preferences::AddBoolVarCache(&sUseActivityCursor,
|
||||||
"ui.use_activity_cursor", false);
|
"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();
|
Element::InitCCCallbacks();
|
||||||
|
|
||||||
nsCOMPtr<nsIUUIDGenerator> uuidGenerator =
|
nsCOMPtr<nsIUUIDGenerator> uuidGenerator =
|
||||||
|
@ -2146,6 +2146,30 @@ public:
|
|||||||
return sUseActivityCursor;
|
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.
|
* Return true if this doc is controlled by a ServiceWorker.
|
||||||
*/
|
*/
|
||||||
@ -2947,6 +2971,9 @@ private:
|
|||||||
static bool sPrivacyResistFingerprinting;
|
static bool sPrivacyResistFingerprinting;
|
||||||
static bool sSendPerformanceTimingNotifications;
|
static bool sSendPerformanceTimingNotifications;
|
||||||
static bool sUseActivityCursor;
|
static bool sUseActivityCursor;
|
||||||
|
static bool sAnimationsAPICoreEnabled;
|
||||||
|
static bool sAnimationsAPIElementAnimateEnabled;
|
||||||
|
static bool sGetBoxQuadsEnabled;
|
||||||
static uint32_t sCookiesLifetimePolicy;
|
static uint32_t sCookiesLifetimePolicy;
|
||||||
static uint32_t sCookiesBehavior;
|
static uint32_t sCookiesBehavior;
|
||||||
|
|
||||||
|
@ -3162,8 +3162,8 @@ nsDocument::IsElementAnimateEnabled(JSContext* aCx, JSObject* /*unused*/)
|
|||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
|
||||||
return nsContentUtils::IsSystemCaller(aCx) ||
|
return nsContentUtils::IsSystemCaller(aCx) ||
|
||||||
Preferences::GetBool("dom.animations-api.core.enabled") ||
|
nsContentUtils::AnimationsAPICoreEnabled() ||
|
||||||
Preferences::GetBool("dom.animations-api.element-animate.enabled");
|
nsContentUtils::AnimationsAPIElementAnimateEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -3172,7 +3172,7 @@ nsDocument::IsWebAnimationsEnabled(JSContext* aCx, JSObject* /*unused*/)
|
|||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
|
||||||
return nsContentUtils::IsSystemCaller(aCx) ||
|
return nsContentUtils::IsSystemCaller(aCx) ||
|
||||||
Preferences::GetBool("dom.animations-api.core.enabled");
|
nsContentUtils::AnimationsAPICoreEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
DocumentTimeline*
|
DocumentTimeline*
|
||||||
|
@ -2984,7 +2984,7 @@ bool
|
|||||||
nsINode::HasBoxQuadsSupport(JSContext* aCx, JSObject* /* unused */)
|
nsINode::HasBoxQuadsSupport(JSContext* aCx, JSObject* /* unused */)
|
||||||
{
|
{
|
||||||
return xpc::AccessCheck::isChrome(js::GetContextCompartment(aCx)) ||
|
return xpc::AccessCheck::isChrome(js::GetContextCompartment(aCx)) ||
|
||||||
Preferences::GetBool("layout.css.getBoxQuads.enabled");
|
nsContentUtils::GetBoxQuadsEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
nsINode*
|
nsINode*
|
||||||
|
@ -902,16 +902,27 @@ void
|
|||||||
TrackBuffersManager::InitializationSegmentReceived()
|
TrackBuffersManager::InitializationSegmentReceived()
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(mParser->HasCompleteInitData());
|
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);
|
mCurrentInputBuffer = new SourceBufferResource(mType);
|
||||||
// The demuxer isn't initialized yet ; we don't want to notify it
|
// 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
|
// that data has been appended yet ; so we simply append the init segment
|
||||||
// to the resource.
|
// to the resource.
|
||||||
mCurrentInputBuffer->AppendData(mParser->InitData());
|
mCurrentInputBuffer->AppendData(mParser->InitData());
|
||||||
uint32_t length =
|
uint32_t length = endInit - (mProcessedInput - mInputBuffer->Length());
|
||||||
mParser->InitSegmentRange().mEnd - (mProcessedInput - mInputBuffer->Length());
|
|
||||||
if (mInputBuffer->Length() == length) {
|
if (mInputBuffer->Length() == length) {
|
||||||
mInputBuffer = nullptr;
|
mInputBuffer = nullptr;
|
||||||
} else {
|
} else {
|
||||||
|
MOZ_RELEASE_ASSERT(length <= mInputBuffer->Length());
|
||||||
mInputBuffer->RemoveElementsAt(0, length);
|
mInputBuffer->RemoveElementsAt(0, length);
|
||||||
}
|
}
|
||||||
CreateDemuxerforMIMEType();
|
CreateDemuxerforMIMEType();
|
||||||
|
@ -234,7 +234,7 @@ private:
|
|||||||
RefPtr<SourceBufferResource> mCurrentInputBuffer;
|
RefPtr<SourceBufferResource> mCurrentInputBuffer;
|
||||||
RefPtr<MediaDataDemuxer> mInputDemuxer;
|
RefPtr<MediaDataDemuxer> mInputDemuxer;
|
||||||
// Length already processed in current media segment.
|
// Length already processed in current media segment.
|
||||||
uint32_t mProcessedInput;
|
uint64_t mProcessedInput;
|
||||||
Maybe<media::TimeUnit> mLastParsedEndTime;
|
Maybe<media::TimeUnit> mLastParsedEndTime;
|
||||||
|
|
||||||
void OnDemuxerInitDone(nsresult);
|
void OnDemuxerInitDone(nsresult);
|
||||||
|
@ -254,7 +254,7 @@ skip-if = toolkit == 'android' # Times out, not sure why (bug 1008445)
|
|||||||
[test_dual_header.html]
|
[test_dual_header.html]
|
||||||
[test_upgrade_insecure.html]
|
[test_upgrade_insecure.html]
|
||||||
# no ssl support as well as websocket tests do not work (see test_websocket.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]
|
[test_upgrade_insecure_reporting.html]
|
||||||
skip-if = toolkit == 'android'
|
skip-if = toolkit == 'android'
|
||||||
[test_upgrade_insecure_referrer.html]
|
[test_upgrade_insecure_referrer.html]
|
||||||
|
@ -75,6 +75,31 @@ EnsureSurfaceStored(DrawEventRecorderPrivate *aRecorder, SourceSurface *aSurface
|
|||||||
return;
|
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
|
class GradientStopsRecording : public GradientStops
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -331,31 +331,6 @@ private:
|
|||||||
RefPtr<DrawTarget> mFinalDT;
|
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 gfx
|
||||||
} // namespace mozilla
|
} // 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 void OutputSimpleEventInfo(std::stringstream &aStringStream) const;
|
||||||
|
|
||||||
virtual std::string GetName() const { return "SetTransform"; }
|
virtual std::string GetName() const { return "SetTransform"; }
|
||||||
|
|
||||||
Matrix mTransform;
|
|
||||||
private:
|
private:
|
||||||
friend class RecordedEvent;
|
friend class RecordedEvent;
|
||||||
|
|
||||||
MOZ_IMPLICIT RecordedSetTransform(std::istream &aStream);
|
MOZ_IMPLICIT RecordedSetTransform(std::istream &aStream);
|
||||||
|
|
||||||
|
Matrix mTransform;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RecordedDrawSurface : public RecordedDrawingEvent {
|
class RecordedDrawSurface : public RecordedDrawingEvent {
|
||||||
|
@ -24,12 +24,10 @@ EXPORTS.mozilla.gfx += [
|
|||||||
'CriticalSection.h',
|
'CriticalSection.h',
|
||||||
'DataSurfaceHelpers.h',
|
'DataSurfaceHelpers.h',
|
||||||
'DrawEventRecorder.h',
|
'DrawEventRecorder.h',
|
||||||
'DrawTargetRecording.h',
|
|
||||||
'DrawTargetTiled.h',
|
'DrawTargetTiled.h',
|
||||||
'Filters.h',
|
'Filters.h',
|
||||||
'Helpers.h',
|
'Helpers.h',
|
||||||
'HelpersCairo.h',
|
'HelpersCairo.h',
|
||||||
'InlineTranslator.h',
|
|
||||||
'IterableArena.h',
|
'IterableArena.h',
|
||||||
'JobScheduler.h',
|
'JobScheduler.h',
|
||||||
'JobScheduler_posix.h',
|
'JobScheduler_posix.h',
|
||||||
@ -195,7 +193,6 @@ UNIFIED_SOURCES += [
|
|||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
'Factory.cpp', # Need to suppress warnings in Skia header files.
|
'Factory.cpp', # Need to suppress warnings in Skia header files.
|
||||||
'InlineTranslator.cpp',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
if CONFIG['CLANG_CXX']:
|
if CONFIG['CLANG_CXX']:
|
||||||
|
@ -110,8 +110,8 @@ BasicCanvasLayer::Paint(DrawTarget* aDT,
|
|||||||
if (needsYFlip) {
|
if (needsYFlip) {
|
||||||
oldTM = aDT->GetTransform();
|
oldTM = aDT->GetTransform();
|
||||||
aDT->SetTransform(Matrix(oldTM).
|
aDT->SetTransform(Matrix(oldTM).
|
||||||
PreTranslate(0.0f, mBounds.height).
|
PreTranslate(0.0f, mBounds.height).
|
||||||
PreScale(1.0f, -1.0f));
|
PreScale(1.0f, -1.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
FillRectWithMask(aDT, aDeviceOffset,
|
FillRectWithMask(aDT, aDeviceOffset,
|
||||||
|
@ -12,8 +12,6 @@
|
|||||||
#include "mozilla/layers/CompositorTypes.h"
|
#include "mozilla/layers/CompositorTypes.h"
|
||||||
#include "mozilla/layers/ISurfaceAllocator.h"
|
#include "mozilla/layers/ISurfaceAllocator.h"
|
||||||
#include "AutoMaskData.h"
|
#include "AutoMaskData.h"
|
||||||
#include "mozilla/gfx/InlineTranslator.h"
|
|
||||||
#include "mozilla/gfx/DrawTargetRecording.h"
|
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace layers {
|
namespace layers {
|
||||||
@ -124,9 +122,6 @@ FillRectWithMask(DrawTarget* aDT,
|
|||||||
const Matrix* aMaskTransform,
|
const Matrix* aMaskTransform,
|
||||||
const Matrix* aSurfaceTransform)
|
const Matrix* aSurfaceTransform)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(!aMaskSource || (aMaskSource && aMaskTransform),
|
|
||||||
"aMaskSource must not be passed without a transform");
|
|
||||||
|
|
||||||
if (aMaskSource && aMaskTransform) {
|
if (aMaskSource && aMaskTransform) {
|
||||||
aDT->PushClipRect(aRect);
|
aDT->PushClipRect(aRect);
|
||||||
Matrix oldTransform = aDT->GetTransform();
|
Matrix oldTransform = aDT->GetTransform();
|
||||||
@ -149,29 +144,6 @@ FillRectWithMask(DrawTarget* aDT,
|
|||||||
return;
|
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,
|
aDT->FillRect(aRect,
|
||||||
SurfacePattern(aSurface, aExtendMode,
|
SurfacePattern(aSurface, aExtendMode,
|
||||||
aSurfaceTransform ? (*aSurfaceTransform) : Matrix(),
|
aSurfaceTransform ? (*aSurfaceTransform) : Matrix(),
|
||||||
|
@ -131,7 +131,6 @@ skip-if = os == 'android'
|
|||||||
[test_changeOfSource2.html]
|
[test_changeOfSource2.html]
|
||||||
skip-if = os == 'android'
|
skip-if = os == 'android'
|
||||||
[test_discardAnimatedImage.html]
|
[test_discardAnimatedImage.html]
|
||||||
disabled = bug 1354499
|
|
||||||
[test_drawDiscardedImage.html]
|
[test_drawDiscardedImage.html]
|
||||||
[test_error_events.html]
|
[test_error_events.html]
|
||||||
[test_image_crossorigin_data_url.html]
|
[test_image_crossorigin_data_url.html]
|
||||||
|
@ -289,6 +289,37 @@ CountDecimalDigits(size_t num)
|
|||||||
return numDigits;
|
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_PUBLIC_API(void)
|
||||||
JS_GetTraceThingInfo(char* buf, size_t bufsize, JSTracer* trc, void* thing,
|
JS_GetTraceThingInfo(char* buf, size_t bufsize, JSTracer* trc, void* thing,
|
||||||
JS::TraceKind kind, bool details)
|
JS::TraceKind kind, bool details)
|
||||||
@ -387,12 +418,13 @@ JS_GetTraceThingInfo(char* buf, size_t bufsize, JSTracer* trc, void* thing,
|
|||||||
JSString* str = (JSString*)thing;
|
JSString* str = (JSString*)thing;
|
||||||
|
|
||||||
if (str->isLinear()) {
|
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;
|
CountDecimalDigits(str->length()) < bufsize;
|
||||||
|
|
||||||
n = snprintf(buf, bufsize, "<length %" PRIuSIZE "%s> ",
|
n = snprintf(buf, bufsize, "<%slength %" PRIuSIZE "%s> ",
|
||||||
str->length(),
|
header, str->length(),
|
||||||
willFit ? "" : " (truncated)");
|
willFit ? "" : " (truncated)");
|
||||||
buf += n;
|
buf += n;
|
||||||
bufsize -= 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)
|
if (!calleeTypes)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
JSObject* obj = calleeTypes->maybeSingleton();
|
TemporaryTypeSet::ObjectKey* key = calleeTypes->maybeSingleObject();
|
||||||
if (!obj || !obj->is<JSFunction>())
|
if (!key || key->clasp() != &JSFunction::class_)
|
||||||
return nullptr;
|
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>
|
AbortReasonOr<Ok>
|
||||||
@ -5493,11 +5499,11 @@ IonBuilder::jsop_eval(uint32_t argc)
|
|||||||
if (calleeTypes && calleeTypes->empty())
|
if (calleeTypes && calleeTypes->empty())
|
||||||
return jsop_call(argc, /* constructing = */ false, false);
|
return jsop_call(argc, /* constructing = */ false, false);
|
||||||
|
|
||||||
JSFunction* singleton = getSingleCallTarget(calleeTypes);
|
JSFunction* target = getSingleCallTarget(calleeTypes);
|
||||||
if (!singleton)
|
if (!target)
|
||||||
return abort(AbortReason::Disable, "No singleton callee for eval()");
|
return abort(AbortReason::Disable, "No single callee for eval()");
|
||||||
|
|
||||||
if (script()->global().valueIsEval(ObjectValue(*singleton))) {
|
if (script()->global().valueIsEval(ObjectValue(*target))) {
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
return abort(AbortReason::Disable, "Direct eval with more than one argument");
|
return abort(AbortReason::Disable, "Direct eval with more than one argument");
|
||||||
|
|
||||||
|
@ -1754,6 +1754,15 @@ TemporaryTypeSet::maybeSingleton()
|
|||||||
return getSingleton(0);
|
return getSingleton(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TemporaryTypeSet::ObjectKey*
|
||||||
|
TemporaryTypeSet::maybeSingleObject()
|
||||||
|
{
|
||||||
|
if (baseFlags() != 0 || baseObjectCount() != 1)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return getObject(0);
|
||||||
|
}
|
||||||
|
|
||||||
JSObject*
|
JSObject*
|
||||||
HeapTypeSetKey::singleton(CompilerConstraintList* constraints)
|
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. */
|
/* Get the single value which can appear in this type set, otherwise nullptr. */
|
||||||
JSObject* maybeSingleton();
|
JSObject* maybeSingleton();
|
||||||
|
ObjectKey* maybeSingleObject();
|
||||||
|
|
||||||
/* Whether any objects in the type set needs a barrier on id. */
|
/* Whether any objects in the type set needs a barrier on id. */
|
||||||
bool propertyNeedsBarrier(CompilerConstraintList* constraints, jsid 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_writeToGlobalPrototype.js]
|
||||||
[test_xpcwn_tamperproof.js]
|
[test_xpcwn_tamperproof.js]
|
||||||
[test_xrayed_iterator.js]
|
[test_xrayed_iterator.js]
|
||||||
|
[test_xray_named_element_access.js]
|
||||||
[test_xray_SavedFrame.js]
|
[test_xray_SavedFrame.js]
|
||||||
[test_xray_SavedFrame-02.js]
|
[test_xray_SavedFrame-02.js]
|
||||||
[test_xray_regexp.js]
|
[test_xray_regexp.js]
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include "nsDisplayList.h"
|
#include "nsDisplayList.h"
|
||||||
#include "nsHTMLCanvasFrame.h"
|
#include "nsHTMLCanvasFrame.h"
|
||||||
#include "mozilla/dom/HTMLCanvasElement.h"
|
#include "mozilla/dom/HTMLCanvasElement.h"
|
||||||
#include "mozilla/gfx/DrawEventRecorder.h"
|
|
||||||
#include "nsICanvasRenderingContextInternal.h"
|
#include "nsICanvasRenderingContextInternal.h"
|
||||||
#include "nsServiceManagerUtils.h"
|
#include "nsServiceManagerUtils.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -630,7 +629,7 @@ nsSimplePageSequenceFrame::PrePrintNextPage(nsITimerCallback* aCallback, bool* a
|
|||||||
|
|
||||||
mCalledBeginPage = true;
|
mCalledBeginPage = true;
|
||||||
|
|
||||||
RefPtr<gfxContext> renderingContext = dc->CreateReferenceRenderingContext();
|
RefPtr<gfxContext> renderingContext = dc->CreateRenderingContext();
|
||||||
NS_ENSURE_TRUE(renderingContext, NS_ERROR_OUT_OF_MEMORY);
|
NS_ENSURE_TRUE(renderingContext, NS_ERROR_OUT_OF_MEMORY);
|
||||||
|
|
||||||
DrawTarget* drawTarget = renderingContext->GetDrawTarget();
|
DrawTarget* drawTarget = renderingContext->GetDrawTarget();
|
||||||
@ -642,12 +641,8 @@ nsSimplePageSequenceFrame::PrePrintNextPage(nsITimerCallback* aCallback, bool* a
|
|||||||
HTMLCanvasElement* canvas = mCurrentCanvasList[i];
|
HTMLCanvasElement* canvas = mCurrentCanvasList[i];
|
||||||
nsIntSize size = canvas->GetSize();
|
nsIntSize size = canvas->GetSize();
|
||||||
|
|
||||||
RefPtr<mozilla::gfx::DrawEventRecorder> recorder =
|
|
||||||
new mozilla::gfx::DrawEventRecorderMemory();
|
|
||||||
RefPtr<DrawTarget> canvasTarget =
|
RefPtr<DrawTarget> canvasTarget =
|
||||||
drawTarget->CreateSimilarDrawTarget(size, drawTarget->GetFormat());
|
drawTarget->CreateSimilarDrawTarget(size, drawTarget->GetFormat());
|
||||||
canvasTarget =
|
|
||||||
mozilla::gfx::Factory::CreateRecordingDrawTarget(recorder, canvasTarget);
|
|
||||||
if (!canvasTarget) {
|
if (!canvasTarget) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -567,30 +567,33 @@ libs:: classes.dex
|
|||||||
$(INSTALL) classes.dex $(FINAL_TARGET)
|
$(INSTALL) classes.dex $(FINAL_TARGET)
|
||||||
|
|
||||||
# Generate Java binder interfaces from AIDL files.
|
# 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 = \
|
GECKOVIEW_AIDLS = \
|
||||||
org/mozilla/gecko/IGeckoEditableChild.aidl \
|
org/mozilla/gecko/IGeckoEditableChild.aidl \
|
||||||
org/mozilla/gecko/IGeckoEditableParent.aidl \
|
org/mozilla/gecko/IGeckoEditableParent.aidl \
|
||||||
org/mozilla/gecko/media/ICodec.java \
|
org/mozilla/gecko/media/ICodec.aidl \
|
||||||
org/mozilla/gecko/media/ICodecCallbacks.java \
|
org/mozilla/gecko/media/ICodecCallbacks.aidl \
|
||||||
org/mozilla/gecko/media/IMediaDrmBridge.java \
|
org/mozilla/gecko/media/IMediaDrmBridge.aidl \
|
||||||
org/mozilla/gecko/media/IMediaDrmBridgeCallbacks.java \
|
org/mozilla/gecko/media/IMediaDrmBridgeCallbacks.aidl \
|
||||||
org/mozilla/gecko/media/IMediaManager.java \
|
org/mozilla/gecko/media/IMediaManager.aidl \
|
||||||
org/mozilla/gecko/process/IChildProcess.aidl \
|
org/mozilla/gecko/process/IChildProcess.aidl \
|
||||||
org/mozilla/gecko/process/IProcessManager.aidl \
|
org/mozilla/gecko/process/IProcessManager.aidl \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
geckoview_aidl_src_path := $(topsrcdir)/mobile/android/geckoview/src/main/aidl
|
geckoview_aidl_src_path := $(topsrcdir)/mobile/android/geckoview/src/main/aidl
|
||||||
geckoview_aidl_target_path := generated
|
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
|
$(geckoview_aidl_targets): $(geckoview_aidl_target_path)/%.java: $(geckoview_aidl_src_path)/%.aidl
|
||||||
@echo "Processing AIDL: $< => $@"
|
@echo "Processing AIDL: $< => $@"
|
||||||
$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(geckoview_aidl_src_path) -o$(geckoview_aidl_target_path) $<
|
$(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 -*- */
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
/* 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
|
* 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);
|
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.
|
// Parsing perf prefs. For now just mimic what the old code did.
|
||||||
#ifndef XP_WIN
|
#ifndef XP_WIN
|
||||||
pref("content.sink.pending_event_mode", 0);
|
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',
|
'nsURIHashKey.h',
|
||||||
'nsURLHelper.h',
|
'nsURLHelper.h',
|
||||||
'nsURLParsers.h',
|
'nsURLParsers.h',
|
||||||
|
'SimpleChannel.h',
|
||||||
]
|
]
|
||||||
|
|
||||||
EXPORTS.mozilla += [
|
EXPORTS.mozilla += [
|
||||||
@ -249,6 +250,7 @@ UNIFIED_SOURCES += [
|
|||||||
'RedirectChannelRegistrar.cpp',
|
'RedirectChannelRegistrar.cpp',
|
||||||
'RequestContextService.cpp',
|
'RequestContextService.cpp',
|
||||||
'SimpleBuffer.cpp',
|
'SimpleBuffer.cpp',
|
||||||
|
'SimpleChannel.cpp',
|
||||||
'StreamingProtocolService.cpp',
|
'StreamingProtocolService.cpp',
|
||||||
'ThrottleQueue.cpp',
|
'ThrottleQueue.cpp',
|
||||||
'ThrottlingService.cpp',
|
'ThrottlingService.cpp',
|
||||||
|
@ -42,16 +42,17 @@ private:
|
|||||||
nsIRequest *mRequest;
|
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.
|
// usually needed when a function makes callbacks that could process events.
|
||||||
#define SUSPEND_PUMP_FOR_SCOPE() \
|
#define SUSPEND_PUMP_FOR_SCOPE() \
|
||||||
ScopedRequestSuspender pump_suspender__(mPump)
|
ScopedRequestSuspender pump_suspender__(mRequest)
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// nsBaseChannel
|
// nsBaseChannel
|
||||||
|
|
||||||
nsBaseChannel::nsBaseChannel()
|
nsBaseChannel::nsBaseChannel()
|
||||||
: mLoadFlags(LOAD_NORMAL)
|
: mPumpingData(false)
|
||||||
|
, mLoadFlags(LOAD_NORMAL)
|
||||||
, mQueriedProgressSink(true)
|
, mQueriedProgressSink(true)
|
||||||
, mSynthProgressEvents(false)
|
, mSynthProgressEvents(false)
|
||||||
, mAllowThreadRetargeting(true)
|
, mAllowThreadRetargeting(true)
|
||||||
@ -231,10 +232,21 @@ nsBaseChannel::PushStreamConverter(const char *fromType,
|
|||||||
nsresult
|
nsresult
|
||||||
nsBaseChannel::BeginPumpingData()
|
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<nsIInputStream> stream;
|
||||||
nsCOMPtr<nsIChannel> channel;
|
nsCOMPtr<nsIChannel> channel;
|
||||||
nsresult rv = OpenContentStream(true, getter_AddRefs(stream),
|
rv = OpenContentStream(true, getter_AddRefs(stream),
|
||||||
getter_AddRefs(channel));
|
getter_AddRefs(channel));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
@ -255,8 +267,11 @@ nsBaseChannel::BeginPumpingData()
|
|||||||
|
|
||||||
rv = nsInputStreamPump::Create(getter_AddRefs(mPump), stream, -1, -1, 0, 0,
|
rv = nsInputStreamPump::Create(getter_AddRefs(mPump), stream, -1, -1, 0, 0,
|
||||||
true);
|
true);
|
||||||
if (NS_SUCCEEDED(rv))
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
mPumpingData = true;
|
||||||
|
mRequest = mPump;
|
||||||
rv = mPump->AsyncRead(this, nullptr);
|
rv = mPump->AsyncRead(this, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@ -264,7 +279,7 @@ nsBaseChannel::BeginPumpingData()
|
|||||||
void
|
void
|
||||||
nsBaseChannel::HandleAsyncRedirect(nsIChannel* newChannel)
|
nsBaseChannel::HandleAsyncRedirect(nsIChannel* newChannel)
|
||||||
{
|
{
|
||||||
NS_ASSERTION(!mPump, "Shouldn't have gotten here");
|
NS_ASSERTION(!mPumpingData, "Shouldn't have gotten here");
|
||||||
|
|
||||||
nsresult rv = mStatus;
|
nsresult rv = mStatus;
|
||||||
if (NS_SUCCEEDED(mStatus)) {
|
if (NS_SUCCEEDED(mStatus)) {
|
||||||
@ -361,8 +376,8 @@ nsBaseChannel::IsPending(bool *result)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsBaseChannel::GetStatus(nsresult *status)
|
nsBaseChannel::GetStatus(nsresult *status)
|
||||||
{
|
{
|
||||||
if (mPump && NS_SUCCEEDED(mStatus)) {
|
if (mRequest && NS_SUCCEEDED(mStatus)) {
|
||||||
mPump->GetStatus(status);
|
mRequest->GetStatus(status);
|
||||||
} else {
|
} else {
|
||||||
*status = mStatus;
|
*status = mStatus;
|
||||||
}
|
}
|
||||||
@ -378,8 +393,8 @@ nsBaseChannel::Cancel(nsresult status)
|
|||||||
|
|
||||||
mStatus = status;
|
mStatus = status;
|
||||||
|
|
||||||
if (mPump)
|
if (mRequest)
|
||||||
mPump->Cancel(status);
|
mRequest->Cancel(status);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
@ -387,15 +402,17 @@ nsBaseChannel::Cancel(nsresult status)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsBaseChannel::Suspend()
|
nsBaseChannel::Suspend()
|
||||||
{
|
{
|
||||||
NS_ENSURE_TRUE(mPump, NS_ERROR_NOT_INITIALIZED);
|
NS_ENSURE_TRUE(mPumpingData, NS_ERROR_NOT_INITIALIZED);
|
||||||
return mPump->Suspend();
|
NS_ENSURE_TRUE(mRequest, NS_ERROR_NOT_IMPLEMENTED);
|
||||||
|
return mRequest->Suspend();
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsBaseChannel::Resume()
|
nsBaseChannel::Resume()
|
||||||
{
|
{
|
||||||
NS_ENSURE_TRUE(mPump, NS_ERROR_NOT_INITIALIZED);
|
NS_ENSURE_TRUE(mPumpingData, NS_ERROR_NOT_INITIALIZED);
|
||||||
return mPump->Resume();
|
NS_ENSURE_TRUE(mRequest, NS_ERROR_NOT_IMPLEMENTED);
|
||||||
|
return mRequest->Resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
@ -604,7 +621,7 @@ NS_IMETHODIMP
|
|||||||
nsBaseChannel::Open(nsIInputStream **result)
|
nsBaseChannel::Open(nsIInputStream **result)
|
||||||
{
|
{
|
||||||
NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_INITIALIZED);
|
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);
|
NS_ENSURE_TRUE(!mWasOpened, NS_ERROR_IN_PROGRESS);
|
||||||
|
|
||||||
nsCOMPtr<nsIChannel> chan;
|
nsCOMPtr<nsIChannel> chan;
|
||||||
@ -646,7 +663,7 @@ nsBaseChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctxt)
|
|||||||
"security flags in loadInfo but asyncOpen2() not called");
|
"security flags in loadInfo but asyncOpen2() not called");
|
||||||
|
|
||||||
NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_INITIALIZED);
|
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_TRUE(!mWasOpened, NS_ERROR_ALREADY_OPENED);
|
||||||
NS_ENSURE_ARG(listener);
|
NS_ENSURE_ARG(listener);
|
||||||
|
|
||||||
@ -677,6 +694,8 @@ nsBaseChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctxt)
|
|||||||
rv = BeginPumpingData();
|
rv = BeginPumpingData();
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
mPump = nullptr;
|
mPump = nullptr;
|
||||||
|
mRequest = nullptr;
|
||||||
|
mPumpingData = false;
|
||||||
ChannelDone();
|
ChannelDone();
|
||||||
mCallbacks = nullptr;
|
mCallbacks = nullptr;
|
||||||
return rv;
|
return rv;
|
||||||
@ -717,7 +736,7 @@ nsBaseChannel::OnTransportStatus(nsITransport *transport, nsresult status,
|
|||||||
{
|
{
|
||||||
// In some cases, we may wish to suppress transport-layer status events.
|
// 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;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -793,20 +812,22 @@ CallUnknownTypeSniffer(void *aClosure, const uint8_t *aData, uint32_t aCount)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsBaseChannel::OnStartRequest(nsIRequest *request, nsISupports *ctxt)
|
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
|
if (mPump) {
|
||||||
// sniffer. If the sniffer is not available for some reason, then we just keep
|
// If our content type is unknown, use the content type
|
||||||
// going as-is.
|
// sniffer. If the sniffer is not available for some reason, then we just keep
|
||||||
if (NS_SUCCEEDED(mStatus) &&
|
// going as-is.
|
||||||
mContentType.EqualsLiteral(UNKNOWN_CONTENT_TYPE)) {
|
if (NS_SUCCEEDED(mStatus) &&
|
||||||
mPump->PeekStream(CallUnknownTypeSniffer, static_cast<nsIChannel*>(this));
|
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();
|
SUSPEND_PUMP_FOR_SCOPE();
|
||||||
|
|
||||||
if (mListener) // null in case of redirect
|
if (mListener) // null in case of redirect
|
||||||
@ -825,6 +846,8 @@ nsBaseChannel::OnStopRequest(nsIRequest *request, nsISupports *ctxt,
|
|||||||
|
|
||||||
// Cause Pending to return false.
|
// Cause Pending to return false.
|
||||||
mPump = nullptr;
|
mPump = nullptr;
|
||||||
|
mRequest = nullptr;
|
||||||
|
mPumpingData = false;
|
||||||
|
|
||||||
if (mListener) // null in case of redirect
|
if (mListener) // null in case of redirect
|
||||||
mListener->OnStopRequest(this, mListenerContext, mStatus);
|
mListener->OnStopRequest(this, mListenerContext, mStatus);
|
||||||
@ -913,13 +936,16 @@ nsBaseChannel::RetargetDeliveryTo(nsIEventTarget* aEventTarget)
|
|||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
|
||||||
NS_ENSURE_TRUE(mPump, NS_ERROR_NOT_INITIALIZED);
|
NS_ENSURE_TRUE(mRequest, NS_ERROR_NOT_INITIALIZED);
|
||||||
|
|
||||||
if (!mAllowThreadRetargeting) {
|
nsCOMPtr<nsIThreadRetargetableRequest> req;
|
||||||
return NS_ERROR_NOT_IMPLEMENTED;
|
if (mAllowThreadRetargeting) {
|
||||||
|
req = do_QueryInterface(mRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
return mPump->RetargetDeliveryTo(aEventTarget);
|
NS_ENSURE_TRUE(req, NS_ERROR_NOT_IMPLEMENTED);
|
||||||
|
|
||||||
|
return req->RetargetDeliveryTo(aEventTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
@ -92,6 +92,19 @@ private:
|
|||||||
virtual nsresult OpenContentStream(bool async, nsIInputStream **stream,
|
virtual nsresult OpenContentStream(bool async, nsIInputStream **stream,
|
||||||
nsIChannel** channel) = 0;
|
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
|
// The basechannel calls this method from its OnTransportStatus method to
|
||||||
// determine whether to call nsIProgressEventSink::OnStatus in addition to
|
// determine whether to call nsIProgressEventSink::OnStatus in addition to
|
||||||
// nsIProgressEventSink::OnProgress. This method may be overriden by the
|
// nsIProgressEventSink::OnProgress. This method may be overriden by the
|
||||||
@ -164,7 +177,7 @@ public:
|
|||||||
|
|
||||||
// This is a short-cut to calling nsIRequest::IsPending()
|
// This is a short-cut to calling nsIRequest::IsPending()
|
||||||
virtual bool Pending() const {
|
virtual bool Pending() const {
|
||||||
return mPump || mWaitingOnAsyncRedirect;
|
return mPumpingData || mWaitingOnAsyncRedirect;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function for querying the channel's notification callbacks.
|
// Helper function for querying the channel's notification callbacks.
|
||||||
@ -266,6 +279,8 @@ private:
|
|||||||
friend class RedirectRunnable;
|
friend class RedirectRunnable;
|
||||||
|
|
||||||
RefPtr<nsInputStreamPump> mPump;
|
RefPtr<nsInputStreamPump> mPump;
|
||||||
|
RefPtr<nsIRequest> mRequest;
|
||||||
|
bool mPumpingData;
|
||||||
nsCOMPtr<nsIProgressEventSink> mProgressSink;
|
nsCOMPtr<nsIProgressEventSink> mProgressSink;
|
||||||
nsCOMPtr<nsIURI> mOriginalURI;
|
nsCOMPtr<nsIURI> mOriginalURI;
|
||||||
nsCOMPtr<nsISupports> mOwner;
|
nsCOMPtr<nsISupports> mOwner;
|
||||||
|
@ -240,7 +240,10 @@ nsInputStreamPump::Resume()
|
|||||||
NS_ENSURE_TRUE(mSuspendCount > 0, NS_ERROR_UNEXPECTED);
|
NS_ENSURE_TRUE(mSuspendCount > 0, NS_ERROR_UNEXPECTED);
|
||||||
NS_ENSURE_TRUE(mState != STATE_IDLE, 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();
|
EnsureWaiting();
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
#include "nsThreadUtils.h"
|
#include "nsThreadUtils.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
using namespace mozilla::net;
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsSyncStreamListener::Init()
|
nsSyncStreamListener::Init()
|
||||||
{
|
{
|
||||||
|
@ -11,14 +11,12 @@
|
|||||||
#include "nsIURL.h"
|
#include "nsIURL.h"
|
||||||
#include "nsIChannel.h"
|
#include "nsIChannel.h"
|
||||||
#include "nsIStreamListener.h"
|
#include "nsIStreamListener.h"
|
||||||
#include "nsIRequestObserver.h"
|
|
||||||
#include "nsIInputStreamChannel.h"
|
|
||||||
#include "nsIInputStream.h"
|
#include "nsIInputStream.h"
|
||||||
#include "nsIOutputStream.h"
|
#include "nsIOutputStream.h"
|
||||||
#include "nsIStreamConverterService.h"
|
#include "nsIStreamConverterService.h"
|
||||||
#include "nsIPipe.h"
|
|
||||||
#include "nsNetUtil.h"
|
#include "nsNetUtil.h"
|
||||||
#include "LoadInfo.h"
|
#include "LoadInfo.h"
|
||||||
|
#include "SimpleChannel.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace net {
|
namespace net {
|
||||||
@ -45,39 +43,6 @@ ExtensionProtocolHandler::GetFlagsForURI(nsIURI* aURI, uint32_t* aFlags)
|
|||||||
return NS_OK;
|
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
|
bool
|
||||||
ExtensionProtocolHandler::ResolveSpecialCases(const nsACString& aHost,
|
ExtensionProtocolHandler::ResolveSpecialCases(const nsACString& aHost,
|
||||||
const nsACString& aPath,
|
const nsACString& aPath,
|
||||||
@ -111,6 +76,17 @@ ExtensionProtocolHandler::ResolveSpecialCases(const nsACString& aHost,
|
|||||||
return false;
|
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
|
nsresult
|
||||||
ExtensionProtocolHandler::SubstituteChannel(nsIURI* aURI,
|
ExtensionProtocolHandler::SubstituteChannel(nsIURI* aURI,
|
||||||
nsILoadInfo* aLoadInfo,
|
nsILoadInfo* aLoadInfo,
|
||||||
@ -130,50 +106,46 @@ ExtensionProtocolHandler::SubstituteChannel(nsIURI* aURI,
|
|||||||
|
|
||||||
// Filter CSS files to replace locale message tokens with localized strings.
|
// Filter CSS files to replace locale message tokens with localized strings.
|
||||||
|
|
||||||
nsCOMPtr<nsIStreamConverterService> convService =
|
bool haveLoadInfo = aLoadInfo;
|
||||||
do_GetService(NS_STREAMCONVERTERSERVICE_CONTRACTID, &rv);
|
nsCOMPtr<nsIChannel> channel = NS_NewSimpleChannel(
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
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";
|
nsCOMPtr<nsIURI> uri;
|
||||||
const char* kToType = "text/css";
|
NS_TRY(channel->GetURI(getter_AddRefs(uri)));
|
||||||
|
|
||||||
nsCOMPtr<nsIInputStream> inputStream;
|
const char* kFromType = "application/vnd.mozilla.webext.unlocalized";
|
||||||
nsCOMPtr<nsIOutputStream> outputStream;
|
const char* kToType = "text/css";
|
||||||
rv = NS_NewPipe(getter_AddRefs(inputStream), getter_AddRefs(outputStream),
|
|
||||||
0, UINT32_MAX, true, false);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIStreamListener> listener;
|
nsCOMPtr<nsIStreamListener> converter;
|
||||||
nsCOMPtr<nsIRequestObserver> observer = new PipeCloser(outputStream);
|
NS_TRY(convService->AsyncConvertData(kFromType, kToType, listener,
|
||||||
rv = NS_NewSimpleStreamListener(getter_AddRefs(listener), outputStream, observer);
|
uri, getter_AddRefs(converter)));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
if (haveLoadInfo) {
|
||||||
|
NS_TRY(origChannel->AsyncOpen2(converter));
|
||||||
|
} else {
|
||||||
|
NS_TRY(origChannel->AsyncOpen(converter, nullptr));
|
||||||
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIStreamListener> converter;
|
return RequestOrReason(origChannel);
|
||||||
rv = convService->AsyncConvertData(kFromType, kToType, listener,
|
});
|
||||||
aURI, getter_AddRefs(converter));
|
NS_ENSURE_TRUE(channel, NS_ERROR_OUT_OF_MEMORY);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
if (aLoadInfo) {
|
if (aLoadInfo) {
|
||||||
nsCOMPtr<nsILoadInfo> loadInfo =
|
nsCOMPtr<nsILoadInfo> loadInfo =
|
||||||
static_cast<LoadInfo*>(aLoadInfo)->CloneForNewRequest();
|
static_cast<LoadInfo*>(aLoadInfo)->CloneForNewRequest();
|
||||||
(*result)->SetLoadInfo(loadInfo);
|
(*result)->SetLoadInfo(loadInfo);
|
||||||
|
|
||||||
rv = (*result)->AsyncOpen2(converter);
|
|
||||||
} else {
|
|
||||||
rv = (*result)->AsyncOpen(converter, nullptr);
|
|
||||||
}
|
}
|
||||||
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);
|
channel.swap(*result);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef NS_TRY
|
||||||
|
|
||||||
} // namespace net
|
} // namespace net
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
@ -4,4 +4,7 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files("**"):
|
||||||
|
BUG_COMPONENT = ('Core', 'Networking: Cache')
|
||||||
|
|
||||||
JAR_MANIFESTS += ['jar.mn']
|
JAR_MANIFESTS += ['jar.mn']
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Performance Monitoring')
|
||||||
|
|
||||||
JAR_MANIFESTS += ['jar.mn']
|
JAR_MANIFESTS += ['jar.mn']
|
||||||
|
|
||||||
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
|
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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Firefox', 'Extension Compatibility')
|
||||||
|
|
||||||
TEST_DIRS += ['tests']
|
TEST_DIRS += ['tests']
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
|
@ -4,4 +4,7 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Preferences')
|
||||||
|
|
||||||
JAR_MANIFESTS += ['jar.mn']
|
JAR_MANIFESTS += ['jar.mn']
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
DIRS += ['build']
|
DIRS += ['build']
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Build Config')
|
||||||
|
|
||||||
EXPORTS += [
|
EXPORTS += [
|
||||||
'nsToolkitCompsCID.h',
|
'nsToolkitCompsCID.h',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'DOM: Security')
|
||||||
|
|
||||||
EXTRA_JS_MODULES += [
|
EXTRA_JS_MODULES += [
|
||||||
'ContextualIdentityService.jsm',
|
'ContextualIdentityService.jsm',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
|
||||||
|
|
||||||
EXTRA_JS_MODULES += [
|
EXTRA_JS_MODULES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
'nsIDiskSpaceWatcher.idl',
|
'nsIDiskSpaceWatcher.idl',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'WebExtensions: General')
|
||||||
|
|
||||||
EXTRA_JS_MODULES += [
|
EXTRA_JS_MODULES += [
|
||||||
'Extension.jsm',
|
'Extension.jsm',
|
||||||
'ExtensionAPI.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.js]
|
||||||
[test_ext_i18n_css.js]
|
[test_ext_i18n_css.js]
|
||||||
[test_ext_contentscript.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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
'extIApplication.idl',
|
'extIApplication.idl',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
MOCHITEST_CHROME_MANIFESTS += ['test/chrome.ini']
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Widget: Gtk')
|
||||||
|
|
||||||
XPIDL_MODULE = 'filepicker'
|
XPIDL_MODULE = 'filepicker'
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
'nsIFileView.idl',
|
'nsIFileView.idl',
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
|
||||||
|
|
||||||
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
|
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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Async Tooling')
|
||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
'FinalizationWitnessService.cpp',
|
'FinalizationWitnessService.cpp',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
'nsIFind.idl',
|
'nsIFind.idl',
|
||||||
'nsIFindService.idl',
|
'nsIFindService.idl',
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Graphics')
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
'GfxSanityTest.manifest',
|
'GfxSanityTest.manifest',
|
||||||
'SanityTest.js',
|
'SanityTest.js',
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
|
||||||
|
|
||||||
EXTRA_JS_MODULES += [
|
EXTRA_JS_MODULES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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)
|
# These component dirs are built for all apps (including suite)
|
||||||
if CONFIG['MOZ_ENABLE_XREMOTE']:
|
if CONFIG['MOZ_ENABLE_XREMOTE']:
|
||||||
DIRS += ['remote']
|
DIRS += ['remote']
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Internationalization')
|
||||||
|
|
||||||
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']
|
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
'mozProtocolHandler.js',
|
'mozProtocolHandler.js',
|
||||||
'mozProtocolHandler.manifest',
|
'mozProtocolHandler.manifest',
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Reader Mode')
|
||||||
|
|
||||||
EXTRA_JS_MODULES.narrate = [
|
EXTRA_JS_MODULES.narrate = [
|
||||||
'NarrateControls.jsm',
|
'NarrateControls.jsm',
|
||||||
'Narrator.jsm',
|
'Narrator.jsm',
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
'nsIParentalControlsService.idl',
|
'nsIParentalControlsService.idl',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'JavaScript Engine')
|
||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
'PerfMeasurement.cpp',
|
'PerfMeasurement.cpp',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
|
||||||
|
|
||||||
XPIDL_MODULE = 'toolkit_perfmonitoring'
|
XPIDL_MODULE = 'toolkit_perfmonitoring'
|
||||||
|
@ -20,15 +20,18 @@
|
|||||||
#include "nsILoadGroup.h"
|
#include "nsILoadGroup.h"
|
||||||
#include "nsIStandardURL.h"
|
#include "nsIStandardURL.h"
|
||||||
#include "nsIStringStream.h"
|
#include "nsIStringStream.h"
|
||||||
|
#include "nsIInputStream.h"
|
||||||
#include "nsISupportsUtils.h"
|
#include "nsISupportsUtils.h"
|
||||||
#include "nsIURI.h"
|
#include "nsIURI.h"
|
||||||
#include "nsNetUtil.h"
|
#include "nsNetUtil.h"
|
||||||
#include "nsIOutputStream.h"
|
#include "nsIOutputStream.h"
|
||||||
|
#include "nsInputStreamPump.h"
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
#include "nsServiceManagerUtils.h"
|
#include "nsServiceManagerUtils.h"
|
||||||
#include "nsStringStream.h"
|
#include "nsStringStream.h"
|
||||||
|
#include "SimpleChannel.h"
|
||||||
|
#include "mozilla/ScopeExit.h"
|
||||||
#include "mozilla/storage.h"
|
#include "mozilla/storage.h"
|
||||||
#include "nsIPipe.h"
|
|
||||||
#include "Helpers.h"
|
#include "Helpers.h"
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
@ -68,20 +71,16 @@ namespace {
|
|||||||
* happens at that point, the world must be against us, so we return nothing.
|
* happens at that point, the world must be against us, so we return nothing.
|
||||||
*/
|
*/
|
||||||
class faviconAsyncLoader : public AsyncStatementCallback
|
class faviconAsyncLoader : public AsyncStatementCallback
|
||||||
, public nsIRequestObserver
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
faviconAsyncLoader(nsIChannel *aChannel, nsIStreamListener *aListener) :
|
||||||
|
|
||||||
faviconAsyncLoader(nsIChannel *aChannel, nsIOutputStream *aOutputStream) :
|
|
||||||
mChannel(aChannel)
|
mChannel(aChannel)
|
||||||
, mOutputStream(aOutputStream)
|
, mListener(aListener)
|
||||||
, mReturnDefaultIcon(true)
|
|
||||||
{
|
{
|
||||||
NS_ASSERTION(aChannel,
|
NS_ASSERTION(aChannel,
|
||||||
"Not providing a channel will result in crashes!");
|
"Not providing a channel will result in crashes!");
|
||||||
NS_ASSERTION(aOutputStream,
|
NS_ASSERTION(aListener,
|
||||||
"Not providing an output stream will result in crashes!");
|
"Not providing a stream listener will result in crashes!");
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
@ -110,80 +109,57 @@ public:
|
|||||||
rv = row->GetBlob(0, &size, &favicon);
|
rv = row->GetBlob(0, &size, &favicon);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
uint32_t totalWritten = 0;
|
nsCOMPtr<nsIInputStream> stream;
|
||||||
do {
|
rv = NS_NewByteInputStream(getter_AddRefs(stream),
|
||||||
uint32_t bytesWritten;
|
reinterpret_cast<char*>(favicon),
|
||||||
rv = mOutputStream->Write(
|
size, NS_ASSIGNMENT_ADOPT);
|
||||||
&(reinterpret_cast<const char *>(favicon)[totalWritten]),
|
if (NS_FAILED(rv)) {
|
||||||
size - totalWritten,
|
free(favicon);
|
||||||
&bytesWritten
|
return rv;
|
||||||
);
|
}
|
||||||
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!");
|
|
||||||
|
|
||||||
// Free our favicon array.
|
RefPtr<nsInputStreamPump> pump;
|
||||||
free(favicon);
|
rv = nsInputStreamPump::Create(getter_AddRefs(pump), stream, -1, -1, 0, 0,
|
||||||
|
true);
|
||||||
// Handle an error to write if it occurred, but only after we've freed our
|
|
||||||
// favicon.
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
// At this point, we should have written out all of our data to our stream.
|
MOZ_DIAGNOSTIC_ASSERT(mListener);
|
||||||
// HandleCompletion will close the output stream, so we are done here.
|
NS_ENSURE_TRUE(mListener, NS_ERROR_UNEXPECTED);
|
||||||
mReturnDefaultIcon = false;
|
|
||||||
|
rv = pump->AsyncRead(mListener, nullptr);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
mListener = nullptr;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHOD HandleCompletion(uint16_t aReason) override
|
NS_IMETHOD HandleCompletion(uint16_t aReason) override
|
||||||
{
|
{
|
||||||
if (!mReturnDefaultIcon)
|
// If we've already written our icon data to the channel, there's nothing
|
||||||
return mOutputStream->Close();
|
// 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
|
auto cleanup = MakeScopeExit([&] () {
|
||||||
// that data, and push it to our output stream. If at any point we get an
|
mListener = nullptr;
|
||||||
// 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());
|
|
||||||
|
|
||||||
// we should pass the loadInfo of the original channel along
|
// we should pass the loadInfo of the original channel along
|
||||||
// to the new channel. Note that mChannel can not be null,
|
// to the new channel. Note that mChannel can not be null,
|
||||||
// constructor checks that.
|
// constructor checks that.
|
||||||
nsCOMPtr<nsILoadInfo> loadInfo = mChannel->GetLoadInfo();
|
nsCOMPtr<nsILoadInfo> loadInfo = mChannel->GetLoadInfo();
|
||||||
nsCOMPtr<nsIChannel> newChannel;
|
nsCOMPtr<nsIChannel> newChannel;
|
||||||
rv = GetDefaultIcon(loadInfo, getter_AddRefs(newChannel));
|
nsresult rv = GetDefaultIcon(loadInfo, getter_AddRefs(newChannel));
|
||||||
NS_ENSURE_SUCCESS(rv, mOutputStream->Close());
|
|
||||||
|
|
||||||
rv = newChannel->AsyncOpen2(listener);
|
if (NS_FAILED(rv)) {
|
||||||
NS_ENSURE_SUCCESS(rv, mOutputStream->Close());
|
mListener->OnStartRequest(mChannel, nullptr);
|
||||||
|
mListener->OnStopRequest(mChannel, nullptr, rv);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
return NS_OK;
|
mChannel->SetContentType(NS_LITERAL_CSTRING("image/png"));
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
return newChannel->AsyncOpen2(mListener);
|
||||||
//// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -191,16 +167,9 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
nsCOMPtr<nsIChannel> mChannel;
|
nsCOMPtr<nsIChannel> mChannel;
|
||||||
nsCOMPtr<nsIOutputStream> mOutputStream;
|
nsCOMPtr<nsIStreamListener> mListener;
|
||||||
bool mReturnDefaultIcon;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NS_IMPL_ISUPPORTS_INHERITED(
|
|
||||||
faviconAsyncLoader,
|
|
||||||
AsyncStatementCallback,
|
|
||||||
nsIRequestObserver
|
|
||||||
)
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -331,36 +300,39 @@ nsresult
|
|||||||
nsAnnoProtocolHandler::NewFaviconChannel(nsIURI *aURI, nsIURI *aAnnotationURI,
|
nsAnnoProtocolHandler::NewFaviconChannel(nsIURI *aURI, nsIURI *aAnnotationURI,
|
||||||
nsILoadInfo* aLoadInfo, nsIChannel **_channel)
|
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
|
// Create our channel. We'll call SetContentType with the right type when
|
||||||
// we know what it actually is.
|
// we know what it actually is.
|
||||||
nsCOMPtr<nsIChannel> channel;
|
nsCOMPtr<nsIChannel> channel = NS_NewSimpleChannel(
|
||||||
rv = NS_NewInputStreamChannelInternal(getter_AddRefs(channel),
|
aURI, aLoadInfo, aAnnotationURI,
|
||||||
aURI,
|
[] (nsIStreamListener* listener, nsIChannel* channel, nsIURI* annotationURI) {
|
||||||
inputStream,
|
auto fallback = [&] () -> RequestOrReason {
|
||||||
EmptyCString(), // aContentType
|
nsCOMPtr<nsIChannel> chan;
|
||||||
EmptyCString(), // aContentCharset
|
nsCOMPtr<nsILoadInfo> loadInfo = channel->GetLoadInfo();
|
||||||
aLoadInfo);
|
nsresult rv = GetDefaultIcon(loadInfo, getter_AddRefs(chan));
|
||||||
NS_ENSURE_SUCCESS(rv, GetDefaultIcon(aLoadInfo, _channel));
|
NS_ENSURE_SUCCESS(rv, Err(rv));
|
||||||
|
|
||||||
// Now we go ahead and get our data asynchronously for the favicon.
|
rv = chan->AsyncOpen2(listener);
|
||||||
nsCOMPtr<mozIStorageStatementCallback> callback =
|
NS_ENSURE_SUCCESS(rv, Err(rv));
|
||||||
new faviconAsyncLoader(channel, outputStream);
|
|
||||||
NS_ENSURE_TRUE(callback, GetDefaultIcon(aLoadInfo, _channel));
|
|
||||||
nsFaviconService* faviconService = nsFaviconService::GetFaviconService();
|
|
||||||
NS_ENSURE_TRUE(faviconService, GetDefaultIcon(aLoadInfo, _channel));
|
|
||||||
|
|
||||||
rv = faviconService->GetFaviconDataAsync(aAnnotationURI, callback);
|
return RequestOrReason(chan.forget());
|
||||||
NS_ENSURE_SUCCESS(rv, GetDefaultIcon(aLoadInfo, _channel));
|
};
|
||||||
|
|
||||||
|
// 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);
|
channel.forget(_channel);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -39,6 +39,7 @@ streamListener.prototype =
|
|||||||
},
|
},
|
||||||
onDataAvailable(aRequest, aContext, aInputStream, aOffset, aCount) {
|
onDataAvailable(aRequest, aContext, aInputStream, aOffset, aCount) {
|
||||||
aRequest.cancel(Cr.NS_ERROR_ABORT);
|
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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Printing')
|
||||||
|
|
||||||
toolkit = CONFIG['MOZ_WIDGET_TOOLKIT']
|
toolkit = CONFIG['MOZ_WIDGET_TOOLKIT']
|
||||||
|
|
||||||
DIRS += ['ipc']
|
DIRS += ['ipc']
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'DOM: Security')
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
'nsIPrivateBrowsingTrackingProtectionWhitelist.idl',
|
'nsIPrivateBrowsingTrackingProtectionWhitelist.idl',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
'ContentProcessSingleton.js',
|
'ContentProcessSingleton.js',
|
||||||
'MainProcessSingleton.js',
|
'MainProcessSingleton.js',
|
||||||
|
@ -4,6 +4,10 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
# possibly Notifications and Alerts
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
DIRS += ['src']
|
DIRS += ['src']
|
||||||
|
|
||||||
MOCHITEST_MANIFESTS += ['test/mochitest.ini']
|
MOCHITEST_MANIFESTS += ['test/mochitest.ini']
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'General')
|
||||||
|
|
||||||
EXPORTS.google.protobuf += [
|
EXPORTS.google.protobuf += [
|
||||||
'src/google/protobuf/descriptor.h',
|
'src/google/protobuf/descriptor.h',
|
||||||
'src/google/protobuf/descriptor.pb.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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'JavaScript Engine')
|
||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
'reflect.cpp',
|
'reflect.cpp',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Startup and Profile System')
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
'nsIRemoteService.idl',
|
'nsIRemoteService.idl',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Document Navigation')
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
'remotebrowserutils.manifest',
|
'remotebrowserutils.manifest',
|
||||||
'RemoteWebNavigation.js',
|
'RemoteWebNavigation.js',
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Form Manager')
|
||||||
|
|
||||||
MOCHITEST_MANIFESTS += ['test/mochitest.ini']
|
MOCHITEST_MANIFESTS += ['test/mochitest.ini']
|
||||||
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
|
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
|
||||||
BROWSER_CHROME_MANIFESTS += ['test/browser/browser.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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Firefox', 'General')
|
||||||
|
|
||||||
XPIDL_MODULE = 'toolkit_securityreporter'
|
XPIDL_MODULE = 'toolkit_securityreporter'
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Document Navigation')
|
||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
'nsBrowserStatusFilter.cpp',
|
'nsBrowserStatusFilter.cpp',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
|
||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
BROWSER_CHROME_MANIFESTS += ['test/browser.ini']
|
||||||
XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Safe Browsing')
|
||||||
|
|
||||||
TEST_DIRS += ['tests']
|
TEST_DIRS += ['tests']
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
'simpleServices.js',
|
'simpleServices.js',
|
||||||
'utils.manifest',
|
'utils.manifest',
|
||||||
|
@ -4,4 +4,7 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Preferences')
|
||||||
|
|
||||||
JAR_MANIFESTS += ['jar.mn']
|
JAR_MANIFESTS += ['jar.mn']
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Window Management')
|
||||||
|
|
||||||
TEST_DIRS += ['test']
|
TEST_DIRS += ['test']
|
||||||
|
|
||||||
if CONFIG['ENABLE_TESTS']:
|
if CONFIG['ENABLE_TESTS']:
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Core', 'Window Management')
|
||||||
|
|
||||||
TEST_DIRS += ['test']
|
TEST_DIRS += ['test']
|
||||||
|
|
||||||
XPIDL_SOURCES += [
|
XPIDL_SOURCES += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']
|
||||||
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
|
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
|
||||||
|
|
||||||
|
@ -22,13 +22,266 @@ if CONFIG['MOZ_BUILD_APP'] == 'mobile/android':
|
|||||||
|
|
||||||
JAR_MANIFESTS += ['jar.mn']
|
JAR_MANIFESTS += ['jar.mn']
|
||||||
|
|
||||||
|
DEFINES['TOPOBJDIR'] = TOPOBJDIR
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'General')
|
||||||
|
|
||||||
with Files('aboutTelemetry.*'):
|
with Files('aboutTelemetry.*'):
|
||||||
BUG_COMPONENT = ('Toolkit', 'Telemetry')
|
BUG_COMPONENT = ('Toolkit', 'Telemetry')
|
||||||
|
|
||||||
with Files('customizeToolbar.*'):
|
with Files('customizeToolbar.*'):
|
||||||
BUG_COMPONENT = ('Toolkit', 'Toolbars and Toolbar Customization')
|
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/*'):
|
with Files('widgets/*'):
|
||||||
BUG_COMPONENT = ('Toolkit', 'XUL 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
|
# 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/.
|
# 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':
|
if CONFIG['MOZ_BUILD_APP'] == 'mobile/android':
|
||||||
DEFINES['MOZ_FENNEC'] = True
|
DEFINES['MOZ_FENNEC'] = True
|
||||||
|
|
||||||
|
@ -4,6 +4,160 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# 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']
|
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
|
||||||
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
|
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
|
||||||
MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Downloads API')
|
||||||
|
|
||||||
TEST_DIRS += ['tests']
|
TEST_DIRS += ['tests']
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Firefox', 'File Handling')
|
||||||
|
|
||||||
EXTRA_COMPONENTS += [
|
EXTRA_COMPONENTS += [
|
||||||
'nsContentDispatchChooser.js',
|
'nsContentDispatchChooser.js',
|
||||||
'nsContentDispatchChooser.manifest',
|
'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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Toolkit', 'Preferences')
|
||||||
|
|
||||||
JAR_MANIFESTS += ['jar.mn']
|
JAR_MANIFESTS += ['jar.mn']
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Firefox for Android', 'General')
|
||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
'nsAndroidSystemProxySettings.cpp',
|
'nsAndroidSystemProxySettings.cpp',
|
||||||
]
|
]
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
with Files('**'):
|
||||||
|
BUG_COMPONENT = ('Firefox', 'Shell Integration')
|
||||||
|
|
||||||
SOURCES += [
|
SOURCES += [
|
||||||
'nsAlertsIconListener.cpp',
|
'nsAlertsIconListener.cpp',
|
||||||
'nsGnomeModule.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