mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge last green changeset of mozilla-inbound to mozilla-central
This commit is contained in:
commit
34974bebcb
@ -52,13 +52,14 @@
|
|||||||
#include "AudioChild.h"
|
#include "AudioChild.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "mozilla/dom/ExternalHelperAppChild.h"
|
||||||
|
#include "mozilla/dom/PCrashReporterChild.h"
|
||||||
|
#include "mozilla/dom/StorageChild.h"
|
||||||
|
#include "mozilla/hal_sandbox/PHalChild.h"
|
||||||
#include "mozilla/ipc/TestShellChild.h"
|
#include "mozilla/ipc/TestShellChild.h"
|
||||||
#include "mozilla/net/NeckoChild.h"
|
|
||||||
#include "mozilla/ipc/XPCShellEnvironment.h"
|
#include "mozilla/ipc/XPCShellEnvironment.h"
|
||||||
#include "mozilla/jsipc/PContextWrapperChild.h"
|
#include "mozilla/jsipc/PContextWrapperChild.h"
|
||||||
#include "mozilla/dom/ExternalHelperAppChild.h"
|
#include "mozilla/net/NeckoChild.h"
|
||||||
#include "mozilla/dom/StorageChild.h"
|
|
||||||
#include "mozilla/dom/PCrashReporterChild.h"
|
|
||||||
|
|
||||||
#if defined(MOZ_SYDNEYAUDIO)
|
#if defined(MOZ_SYDNEYAUDIO)
|
||||||
#include "nsAudioStream.h"
|
#include "nsAudioStream.h"
|
||||||
@ -74,6 +75,7 @@
|
|||||||
#include "nsIScriptError.h"
|
#include "nsIScriptError.h"
|
||||||
#include "nsIConsoleService.h"
|
#include "nsIConsoleService.h"
|
||||||
#include "nsJSEnvironment.h"
|
#include "nsJSEnvironment.h"
|
||||||
|
#include "SandboxHal.h"
|
||||||
|
|
||||||
#include "History.h"
|
#include "History.h"
|
||||||
#include "nsDocShellCID.h"
|
#include "nsDocShellCID.h"
|
||||||
@ -109,6 +111,7 @@
|
|||||||
#include "nsIAccessibilityService.h"
|
#include "nsIAccessibilityService.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
using namespace mozilla::hal_sandbox;
|
||||||
using namespace mozilla::ipc;
|
using namespace mozilla::ipc;
|
||||||
using namespace mozilla::net;
|
using namespace mozilla::net;
|
||||||
using namespace mozilla::places;
|
using namespace mozilla::places;
|
||||||
@ -440,6 +443,19 @@ ContentChild::DeallocPCrashReporter(PCrashReporterChild* crashreporter)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PHalChild*
|
||||||
|
ContentChild::AllocPHal()
|
||||||
|
{
|
||||||
|
return CreateHalChild();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ContentChild::DeallocPHal(PHalChild* aHal)
|
||||||
|
{
|
||||||
|
delete aHal;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
PTestShellChild*
|
PTestShellChild*
|
||||||
ContentChild::AllocPTestShell()
|
ContentChild::AllocPTestShell()
|
||||||
{
|
{
|
||||||
@ -789,5 +805,13 @@ ContentChild::RecvCycleCollect()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ContentChild::RecvAppInfo(const nsCString& version, const nsCString& buildID)
|
||||||
|
{
|
||||||
|
mAppInfo.version.Assign(version);
|
||||||
|
mAppInfo.buildID.Assign(buildID);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
@ -64,6 +64,12 @@ public:
|
|||||||
ContentChild();
|
ContentChild();
|
||||||
virtual ~ContentChild();
|
virtual ~ContentChild();
|
||||||
|
|
||||||
|
struct AppInfo
|
||||||
|
{
|
||||||
|
nsCString version;
|
||||||
|
nsCString buildID;
|
||||||
|
};
|
||||||
|
|
||||||
bool Init(MessageLoop* aIOLoop,
|
bool Init(MessageLoop* aIOLoop,
|
||||||
base::ProcessHandle aParentHandle,
|
base::ProcessHandle aParentHandle,
|
||||||
IPC::Channel* aChannel);
|
IPC::Channel* aChannel);
|
||||||
@ -74,6 +80,10 @@ public:
|
|||||||
return sSingleton;
|
return sSingleton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const AppInfo& GetAppInfo() {
|
||||||
|
return mAppInfo;
|
||||||
|
}
|
||||||
|
|
||||||
/* if you remove this, please talk to cjones or dougt */
|
/* if you remove this, please talk to cjones or dougt */
|
||||||
virtual bool RecvDummy(Shmem& foo) { return true; }
|
virtual bool RecvDummy(Shmem& foo) { return true; }
|
||||||
|
|
||||||
@ -86,6 +96,9 @@ public:
|
|||||||
virtual bool
|
virtual bool
|
||||||
DeallocPCrashReporter(PCrashReporterChild*);
|
DeallocPCrashReporter(PCrashReporterChild*);
|
||||||
|
|
||||||
|
NS_OVERRIDE virtual PHalChild* AllocPHal();
|
||||||
|
NS_OVERRIDE virtual bool DeallocPHal(PHalChild*);
|
||||||
|
|
||||||
virtual PMemoryReportRequestChild*
|
virtual PMemoryReportRequestChild*
|
||||||
AllocPMemoryReportRequest();
|
AllocPMemoryReportRequest();
|
||||||
|
|
||||||
@ -154,6 +167,8 @@ public:
|
|||||||
virtual bool RecvGarbageCollect();
|
virtual bool RecvGarbageCollect();
|
||||||
virtual bool RecvCycleCollect();
|
virtual bool RecvCycleCollect();
|
||||||
|
|
||||||
|
virtual bool RecvAppInfo(const nsCString& version, const nsCString& buildID);
|
||||||
|
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
gfxIntSize GetScreenSize() { return mScreenSize; }
|
gfxIntSize GetScreenSize() { return mScreenSize; }
|
||||||
#endif
|
#endif
|
||||||
@ -181,6 +196,8 @@ private:
|
|||||||
gfxIntSize mScreenSize;
|
gfxIntSize mScreenSize;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
AppInfo mAppInfo;
|
||||||
|
|
||||||
static ContentChild* sSingleton;
|
static ContentChild* sSingleton;
|
||||||
|
|
||||||
DISALLOW_EVIL_CONSTRUCTORS(ContentChild);
|
DISALLOW_EVIL_CONSTRUCTORS(ContentChild);
|
||||||
|
@ -71,10 +71,12 @@
|
|||||||
#include "nsIScriptError.h"
|
#include "nsIScriptError.h"
|
||||||
#include "nsConsoleMessage.h"
|
#include "nsConsoleMessage.h"
|
||||||
#include "nsAppDirectoryServiceDefs.h"
|
#include "nsAppDirectoryServiceDefs.h"
|
||||||
|
#include "nsAppRunner.h"
|
||||||
#include "IDBFactory.h"
|
#include "IDBFactory.h"
|
||||||
#if defined(MOZ_SYDNEYAUDIO)
|
#if defined(MOZ_SYDNEYAUDIO)
|
||||||
#include "AudioParent.h"
|
#include "AudioParent.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "SandboxHal.h"
|
||||||
|
|
||||||
#if defined(ANDROID) || defined(LINUX)
|
#if defined(ANDROID) || defined(LINUX)
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@ -93,6 +95,7 @@
|
|||||||
|
|
||||||
#include "mozilla/dom/ExternalHelperAppParent.h"
|
#include "mozilla/dom/ExternalHelperAppParent.h"
|
||||||
#include "mozilla/dom/StorageParent.h"
|
#include "mozilla/dom/StorageParent.h"
|
||||||
|
#include "mozilla/hal_sandbox/PHalParent.h"
|
||||||
#include "mozilla/Services.h"
|
#include "mozilla/Services.h"
|
||||||
#include "mozilla/unused.h"
|
#include "mozilla/unused.h"
|
||||||
#include "nsDeviceMotion.h"
|
#include "nsDeviceMotion.h"
|
||||||
@ -115,6 +118,7 @@ static const char* sClipboardTextFlavors[] = { kUnicodeMime };
|
|||||||
|
|
||||||
using mozilla::Preferences;
|
using mozilla::Preferences;
|
||||||
using namespace mozilla::ipc;
|
using namespace mozilla::ipc;
|
||||||
|
using namespace mozilla::hal_sandbox;
|
||||||
using namespace mozilla::net;
|
using namespace mozilla::net;
|
||||||
using namespace mozilla::places;
|
using namespace mozilla::places;
|
||||||
using mozilla::unused; // heh
|
using mozilla::unused; // heh
|
||||||
@ -427,6 +431,14 @@ ContentParent::ContentParent()
|
|||||||
static_cast<nsChromeRegistryChrome*>(registrySvc.get());
|
static_cast<nsChromeRegistryChrome*>(registrySvc.get());
|
||||||
chromeRegistry->SendRegisteredChrome(this);
|
chromeRegistry->SendRegisteredChrome(this);
|
||||||
mMessageManager = nsFrameMessageManager::NewProcessMessageManager(this);
|
mMessageManager = nsFrameMessageManager::NewProcessMessageManager(this);
|
||||||
|
|
||||||
|
if (gAppData) {
|
||||||
|
nsCString version(gAppData->version);
|
||||||
|
nsCString buildID(gAppData->buildID);
|
||||||
|
|
||||||
|
//Sending all information to content process
|
||||||
|
SendAppInfo(version, buildID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentParent::~ContentParent()
|
ContentParent::~ContentParent()
|
||||||
@ -811,6 +823,19 @@ ContentParent::DeallocPCrashReporter(PCrashReporterParent* crashreporter)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PHalParent*
|
||||||
|
ContentParent::AllocPHal()
|
||||||
|
{
|
||||||
|
return CreateHalParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ContentParent::DeallocPHal(PHalParent* aHal)
|
||||||
|
{
|
||||||
|
delete aHal;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
PMemoryReportRequestParent*
|
PMemoryReportRequestParent*
|
||||||
ContentParent::AllocPMemoryReportRequest()
|
ContentParent::AllocPMemoryReportRequest()
|
||||||
{
|
{
|
||||||
|
@ -135,6 +135,9 @@ private:
|
|||||||
const NativeThreadId& tid,
|
const NativeThreadId& tid,
|
||||||
const PRUint32& processType);
|
const PRUint32& processType);
|
||||||
|
|
||||||
|
NS_OVERRIDE virtual PHalParent* AllocPHal();
|
||||||
|
NS_OVERRIDE virtual bool DeallocPHal(PHalParent*);
|
||||||
|
|
||||||
virtual PMemoryReportRequestParent* AllocPMemoryReportRequest();
|
virtual PMemoryReportRequestParent* AllocPMemoryReportRequest();
|
||||||
virtual bool DeallocPMemoryReportRequest(PMemoryReportRequestParent* actor);
|
virtual bool DeallocPMemoryReportRequest(PMemoryReportRequestParent* actor);
|
||||||
|
|
||||||
|
@ -107,6 +107,8 @@ LOCAL_INCLUDES += \
|
|||||||
-I$(srcdir)/../indexedDB \
|
-I$(srcdir)/../indexedDB \
|
||||||
-I$(topsrcdir)/extensions/cookie \
|
-I$(topsrcdir)/extensions/cookie \
|
||||||
-I$(topsrcdir)/dom/base \
|
-I$(topsrcdir)/dom/base \
|
||||||
|
-I$(topsrcdir)/toolkit/xre \
|
||||||
|
-I$(topsrcdir)/hal/sandbox \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
DEFINES += -DBIN_SUFFIX='"$(BIN_SUFFIX)"'
|
DEFINES += -DBIN_SUFFIX='"$(BIN_SUFFIX)"'
|
||||||
|
@ -39,11 +39,12 @@
|
|||||||
include protocol PAudio;
|
include protocol PAudio;
|
||||||
include protocol PBrowser;
|
include protocol PBrowser;
|
||||||
include protocol PCrashReporter;
|
include protocol PCrashReporter;
|
||||||
include protocol PTestShell;
|
|
||||||
include protocol PNecko;
|
|
||||||
include protocol PExternalHelperApp;
|
include protocol PExternalHelperApp;
|
||||||
include protocol PStorage;
|
include protocol PHal;
|
||||||
include protocol PMemoryReportRequest;
|
include protocol PMemoryReportRequest;
|
||||||
|
include protocol PNecko;
|
||||||
|
include protocol PStorage;
|
||||||
|
include protocol PTestShell;
|
||||||
|
|
||||||
include "mozilla/chrome/RegistryMessageUtils.h";
|
include "mozilla/chrome/RegistryMessageUtils.h";
|
||||||
include "mozilla/net/NeckoMessageUtils.h";
|
include "mozilla/net/NeckoMessageUtils.h";
|
||||||
@ -99,11 +100,12 @@ rpc protocol PContent
|
|||||||
manages PAudio;
|
manages PAudio;
|
||||||
manages PBrowser;
|
manages PBrowser;
|
||||||
manages PCrashReporter;
|
manages PCrashReporter;
|
||||||
manages PTestShell;
|
|
||||||
manages PNecko;
|
|
||||||
manages PExternalHelperApp;
|
manages PExternalHelperApp;
|
||||||
manages PStorage;
|
manages PHal;
|
||||||
manages PMemoryReportRequest;
|
manages PMemoryReportRequest;
|
||||||
|
manages PNecko;
|
||||||
|
manages PStorage;
|
||||||
|
manages PTestShell;
|
||||||
|
|
||||||
child:
|
child:
|
||||||
PBrowser(PRUint32 chromeFlags);
|
PBrowser(PRUint32 chromeFlags);
|
||||||
@ -143,15 +145,19 @@ child:
|
|||||||
*/
|
*/
|
||||||
ActivateA11y();
|
ActivateA11y();
|
||||||
|
|
||||||
parent:
|
AppInfo(nsCString version, nsCString buildID);
|
||||||
PNecko();
|
|
||||||
|
|
||||||
PStorage(StorageConstructData data);
|
|
||||||
|
|
||||||
|
parent:
|
||||||
PAudio(PRInt32 aNumChannels, PRInt32 aRate, PRInt32 aFormat);
|
PAudio(PRInt32 aNumChannels, PRInt32 aRate, PRInt32 aFormat);
|
||||||
|
|
||||||
sync PCrashReporter(NativeThreadId tid, PRUint32 processType);
|
sync PCrashReporter(NativeThreadId tid, PRUint32 processType);
|
||||||
|
|
||||||
|
PHal();
|
||||||
|
|
||||||
|
PNecko();
|
||||||
|
|
||||||
|
PStorage(StorageConstructData data);
|
||||||
|
|
||||||
// Services remoting
|
// Services remoting
|
||||||
|
|
||||||
async StartVisitedQuery(URI uri);
|
async StartVisitedQuery(URI uri);
|
||||||
|
@ -642,6 +642,8 @@ DrawTargetD2D::DrawSurfaceWithShadow(SourceSurface *aSurface,
|
|||||||
void
|
void
|
||||||
DrawTargetD2D::ClearRect(const Rect &aRect)
|
DrawTargetD2D::ClearRect(const Rect &aRect)
|
||||||
{
|
{
|
||||||
|
MarkChanged();
|
||||||
|
|
||||||
mRT->SetTransform(D2DMatrix(mTransform));
|
mRT->SetTransform(D2DMatrix(mTransform));
|
||||||
PopAllClips();
|
PopAllClips();
|
||||||
|
|
||||||
@ -670,6 +672,8 @@ DrawTargetD2D::CopySurface(SourceSurface *aSurface,
|
|||||||
const IntRect &aSourceRect,
|
const IntRect &aSourceRect,
|
||||||
const IntPoint &aDestination)
|
const IntPoint &aDestination)
|
||||||
{
|
{
|
||||||
|
MarkChanged();
|
||||||
|
|
||||||
Rect srcRect(Float(aSourceRect.x), Float(aSourceRect.y),
|
Rect srcRect(Float(aSourceRect.x), Float(aSourceRect.y),
|
||||||
Float(aSourceRect.width), Float(aSourceRect.height));
|
Float(aSourceRect.width), Float(aSourceRect.height));
|
||||||
Rect dstRect(Float(aDestination.x), Float(aDestination.y),
|
Rect dstRect(Float(aDestination.x), Float(aDestination.y),
|
||||||
|
@ -261,7 +261,7 @@ CanvasLayerOGL::RenderLayer(int aPreviousDestination,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
|
||||||
program->Activate();
|
program->Activate();
|
||||||
program->SetLayerQuadRect(drawRect);
|
program->SetLayerQuadRect(drawRect);
|
||||||
@ -366,7 +366,7 @@ ShadowCanvasLayerOGL::RenderLayer(int aPreviousFrameBuffer,
|
|||||||
ColorTextureLayerProgram *program =
|
ColorTextureLayerProgram *program =
|
||||||
mOGLManager->GetColorTextureLayerProgram(mTexImage->GetShaderProgramType());
|
mOGLManager->GetColorTextureLayerProgram(mTexImage->GetShaderProgramType());
|
||||||
|
|
||||||
ApplyFilter(mFilter);
|
mTexImage->SetFilter(mFilter);
|
||||||
|
|
||||||
program->Activate();
|
program->Activate();
|
||||||
program->SetLayerTransform(GetEffectiveTransform());
|
program->SetLayerTransform(GetEffectiveTransform());
|
||||||
@ -376,7 +376,7 @@ ShadowCanvasLayerOGL::RenderLayer(int aPreviousFrameBuffer,
|
|||||||
|
|
||||||
mTexImage->BeginTileIteration();
|
mTexImage->BeginTileIteration();
|
||||||
do {
|
do {
|
||||||
TextureImage::ScopedBindTexture texBind(mTexImage, LOCAL_GL_TEXTURE0);
|
TextureImage::ScopedBindTextureAndApplyFilter texBind(mTexImage, LOCAL_GL_TEXTURE0);
|
||||||
program->SetLayerQuadRect(mTexImage->GetTileRect());
|
program->SetLayerQuadRect(mTexImage->GetTileRect());
|
||||||
mOGLManager->BindAndDrawQuad(program, mNeedsYFlip); // FIXME flip order of tiles?
|
mOGLManager->BindAndDrawQuad(program, mNeedsYFlip); // FIXME flip order of tiles?
|
||||||
} while (mTexImage->NextTile());
|
} while (mTexImage->NextTile());
|
||||||
|
@ -428,13 +428,13 @@ ImageLayerOGL::RenderLayer(int,
|
|||||||
|
|
||||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE0);
|
gl()->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, yuvImage->mTextures[0].GetTextureID());
|
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, yuvImage->mTextures[0].GetTextureID());
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE1);
|
gl()->fActiveTexture(LOCAL_GL_TEXTURE1);
|
||||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, yuvImage->mTextures[1].GetTextureID());
|
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, yuvImage->mTextures[1].GetTextureID());
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE2);
|
gl()->fActiveTexture(LOCAL_GL_TEXTURE2);
|
||||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, yuvImage->mTextures[2].GetTextureID());
|
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, yuvImage->mTextures[2].GetTextureID());
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
|
||||||
YCbCrTextureLayerProgram *program = mOGLManager->GetYCbCrLayerProgram();
|
YCbCrTextureLayerProgram *program = mOGLManager->GetYCbCrLayerProgram();
|
||||||
|
|
||||||
@ -482,7 +482,7 @@ ImageLayerOGL::RenderLayer(int,
|
|||||||
ColorTextureLayerProgram *program =
|
ColorTextureLayerProgram *program =
|
||||||
mOGLManager->GetColorTextureLayerProgram(cairoImage->mLayerProgram);
|
mOGLManager->GetColorTextureLayerProgram(cairoImage->mLayerProgram);
|
||||||
|
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
|
||||||
program->Activate();
|
program->Activate();
|
||||||
// The following uniform controls the scaling of the vertex coords.
|
// The following uniform controls the scaling of the vertex coords.
|
||||||
@ -957,23 +957,23 @@ ShadowImageLayerOGL::RenderLayer(int aPreviousFrameBuffer,
|
|||||||
colorProgram->SetLayerOpacity(GetEffectiveOpacity());
|
colorProgram->SetLayerOpacity(GetEffectiveOpacity());
|
||||||
colorProgram->SetRenderOffset(aOffset);
|
colorProgram->SetRenderOffset(aOffset);
|
||||||
|
|
||||||
|
mTexImage->SetFilter(mFilter);
|
||||||
mTexImage->BeginTileIteration();
|
mTexImage->BeginTileIteration();
|
||||||
do {
|
do {
|
||||||
TextureImage::ScopedBindTexture texBind(mTexImage, LOCAL_GL_TEXTURE0);
|
TextureImage::ScopedBindTextureAndApplyFilter texBind(mTexImage, LOCAL_GL_TEXTURE0);
|
||||||
ApplyFilter(mFilter);
|
|
||||||
colorProgram->SetLayerQuadRect(mTexImage->GetTileRect());
|
colorProgram->SetLayerQuadRect(mTexImage->GetTileRect());
|
||||||
mOGLManager->BindAndDrawQuad(colorProgram);
|
mOGLManager->BindAndDrawQuad(colorProgram);
|
||||||
} while (mTexImage->NextTile());
|
} while (mTexImage->NextTile());
|
||||||
} else {
|
} else {
|
||||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE0);
|
gl()->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mYUVTexture[0].GetTextureID());
|
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mYUVTexture[0].GetTextureID());
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE1);
|
gl()->fActiveTexture(LOCAL_GL_TEXTURE1);
|
||||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mYUVTexture[1].GetTextureID());
|
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mYUVTexture[1].GetTextureID());
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE2);
|
gl()->fActiveTexture(LOCAL_GL_TEXTURE2);
|
||||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mYUVTexture[2].GetTextureID());
|
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mYUVTexture[2].GetTextureID());
|
||||||
ApplyFilter(mFilter);
|
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
|
||||||
YCbCrTextureLayerProgram *yuvProgram = mOGLManager->GetYCbCrLayerProgram();
|
YCbCrTextureLayerProgram *yuvProgram = mOGLManager->GetYCbCrLayerProgram();
|
||||||
|
|
||||||
|
@ -1166,21 +1166,6 @@ LayerManagerOGL::CreateFBOWithTexture(const nsIntRect& aRect, InitMode aInit,
|
|||||||
*aTexture = tex;
|
*aTexture = tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
LayerOGL::ApplyFilter(gfxPattern::GraphicsFilter aFilter)
|
|
||||||
{
|
|
||||||
if (aFilter == gfxPattern::FILTER_NEAREST) {
|
|
||||||
gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_NEAREST);
|
|
||||||
gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_NEAREST);
|
|
||||||
} else {
|
|
||||||
if (aFilter != gfxPattern::FILTER_GOOD) {
|
|
||||||
NS_WARNING("Unsupported filter type!");
|
|
||||||
}
|
|
||||||
gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_LINEAR);
|
|
||||||
gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_LINEAR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
already_AddRefed<ShadowThebesLayer>
|
already_AddRefed<ShadowThebesLayer>
|
||||||
LayerManagerOGL::CreateShadowThebesLayer()
|
LayerManagerOGL::CreateShadowThebesLayer()
|
||||||
{
|
{
|
||||||
|
@ -540,7 +540,6 @@ public:
|
|||||||
LayerManagerOGL* OGLManager() const { return mOGLManager; }
|
LayerManagerOGL* OGLManager() const { return mOGLManager; }
|
||||||
GLContext *gl() const { return mOGLManager->gl(); }
|
GLContext *gl() const { return mOGLManager->gl(); }
|
||||||
|
|
||||||
void ApplyFilter(gfxPattern::GraphicsFilter aFilter);
|
|
||||||
protected:
|
protected:
|
||||||
LayerManagerOGL *mOGLManager;
|
LayerManagerOGL *mOGLManager;
|
||||||
bool mDestroyed;
|
bool mDestroyed;
|
||||||
|
@ -554,6 +554,20 @@ GLContext::CreateTextureImage(const nsIntSize& aSize,
|
|||||||
return CreateBasicTextureImage(texture, aSize, aWrapMode, aContentType, this);
|
return CreateBasicTextureImage(texture, aSize, aWrapMode, aContentType, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLContext::ApplyFilterToBoundTexture(gfxPattern::GraphicsFilter aFilter)
|
||||||
|
{
|
||||||
|
if (aFilter == gfxPattern::FILTER_NEAREST) {
|
||||||
|
fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_NEAREST);
|
||||||
|
fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_NEAREST);
|
||||||
|
} else {
|
||||||
|
if (aFilter != gfxPattern::FILTER_GOOD) {
|
||||||
|
NS_WARNING("Unsupported filter type!");
|
||||||
|
}
|
||||||
|
fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_LINEAR);
|
||||||
|
fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_LINEAR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BasicTextureImage::~BasicTextureImage()
|
BasicTextureImage::~BasicTextureImage()
|
||||||
{
|
{
|
||||||
GLContext *ctx = mGLContext;
|
GLContext *ctx = mGLContext;
|
||||||
@ -646,6 +660,13 @@ BasicTextureImage::BindTexture(GLenum aTextureUnit)
|
|||||||
mGLContext->fActiveTexture(LOCAL_GL_TEXTURE0);
|
mGLContext->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BasicTextureImage::ApplyFilter()
|
||||||
|
{
|
||||||
|
mGLContext->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
already_AddRefed<gfxASurface>
|
already_AddRefed<gfxASurface>
|
||||||
BasicTextureImage::GetSurfaceForUpdate(const gfxIntSize& aSize, ImageFormat aFmt)
|
BasicTextureImage::GetSurfaceForUpdate(const gfxIntSize& aSize, ImageFormat aFmt)
|
||||||
{
|
{
|
||||||
@ -928,6 +949,12 @@ TiledTextureImage::BindTexture(GLenum aTextureUnit)
|
|||||||
mImages[mCurrentImage]->BindTexture(aTextureUnit);
|
mImages[mCurrentImage]->BindTexture(aTextureUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TiledTextureImage::ApplyFilter()
|
||||||
|
{
|
||||||
|
mGL->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* simple resize, just discards everything. we can be more clever just
|
* simple resize, just discards everything. we can be more clever just
|
||||||
* adding or discarding tiles, but do we want this?
|
* adding or discarding tiles, but do we want this?
|
||||||
|
@ -257,6 +257,11 @@ public:
|
|||||||
virtual void BindTexture(GLenum aTextureUnit) = 0;
|
virtual void BindTexture(GLenum aTextureUnit) = 0;
|
||||||
virtual void ReleaseTexture() {};
|
virtual void ReleaseTexture() {};
|
||||||
|
|
||||||
|
void BindTextureAndApplyFilter(GLenum aTextureUnit) {
|
||||||
|
BindTexture(aTextureUnit);
|
||||||
|
ApplyFilter();
|
||||||
|
}
|
||||||
|
|
||||||
class ScopedBindTexture
|
class ScopedBindTexture
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -275,10 +280,22 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
TextureImage *mTexture;
|
TextureImage *mTexture;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ScopedBindTextureAndApplyFilter
|
||||||
|
: public ScopedBindTexture
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ScopedBindTextureAndApplyFilter(TextureImage *aTexture, GLenum aTextureUnit) :
|
||||||
|
ScopedBindTexture(aTexture, aTextureUnit)
|
||||||
|
{
|
||||||
|
if (mTexture) {
|
||||||
|
mTexture->ApplyFilter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the shader program type that should be used to render
|
* Returns the shader program type that should be used to render
|
||||||
@ -306,6 +323,8 @@ public:
|
|||||||
|
|
||||||
bool IsRGB() const { return mIsRGBFormat; }
|
bool IsRGB() const { return mIsRGBFormat; }
|
||||||
|
|
||||||
|
void SetFilter(gfxPattern::GraphicsFilter aFilter) { mFilter = aFilter; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class GLContext;
|
friend class GLContext;
|
||||||
|
|
||||||
@ -324,11 +343,18 @@ protected:
|
|||||||
, mIsRGBFormat(aIsRGB)
|
, mIsRGBFormat(aIsRGB)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies this TextureImage's filter, assuming that its texture is
|
||||||
|
* the currently bound texture.
|
||||||
|
*/
|
||||||
|
virtual void ApplyFilter() = 0;
|
||||||
|
|
||||||
nsIntSize mSize;
|
nsIntSize mSize;
|
||||||
GLenum mWrapMode;
|
GLenum mWrapMode;
|
||||||
ContentType mContentType;
|
ContentType mContentType;
|
||||||
bool mIsRGBFormat;
|
bool mIsRGBFormat;
|
||||||
ShaderProgramType mShaderType;
|
ShaderProgramType mShaderType;
|
||||||
|
gfxPattern::GraphicsFilter mFilter;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -391,6 +417,8 @@ protected:
|
|||||||
|
|
||||||
// The offset into the update surface at which the update rect is located.
|
// The offset into the update surface at which the update rect is located.
|
||||||
nsIntPoint mUpdateOffset;
|
nsIntPoint mUpdateOffset;
|
||||||
|
|
||||||
|
virtual void ApplyFilter();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -434,6 +462,8 @@ protected:
|
|||||||
// The region of update requested
|
// The region of update requested
|
||||||
nsIntRegion mUpdateRegion;
|
nsIntRegion mUpdateRegion;
|
||||||
TextureState mTextureState;
|
TextureState mTextureState;
|
||||||
|
|
||||||
|
virtual void ApplyFilter();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct THEBES_API ContextFormat
|
struct THEBES_API ContextFormat
|
||||||
@ -660,6 +690,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual bool ReleaseTexImage() { return false; }
|
virtual bool ReleaseTexImage() { return false; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies aFilter to the texture currently bound to GL_TEXTURE_2D.
|
||||||
|
*/
|
||||||
|
void ApplyFilterToBoundTexture(gfxPattern::GraphicsFilter aFilter);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Offscreen support API
|
* Offscreen support API
|
||||||
*/
|
*/
|
||||||
|
@ -1669,6 +1669,11 @@ protected:
|
|||||||
|
|
||||||
bool mBound;
|
bool mBound;
|
||||||
bool mIsLocked;
|
bool mIsLocked;
|
||||||
|
|
||||||
|
virtual void ApplyFilter()
|
||||||
|
{
|
||||||
|
mGLContext->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
already_AddRefed<TextureImage>
|
already_AddRefed<TextureImage>
|
||||||
|
@ -916,6 +916,11 @@ private:
|
|||||||
GLXPixmap mPixmap;
|
GLXPixmap mPixmap;
|
||||||
bool mInUpdate;
|
bool mInUpdate;
|
||||||
GLuint mTexture;
|
GLuint mTexture;
|
||||||
|
|
||||||
|
virtual void ApplyFilter()
|
||||||
|
{
|
||||||
|
mGLContext->ApplyFilterToBoundTexture(mFilter);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
already_AddRefed<TextureImage>
|
already_AddRefed<TextureImage>
|
||||||
|
77
hal/Hal.cpp
Normal file
77
hal/Hal.cpp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "Hal.h"
|
||||||
|
#include "mozilla/Util.h"
|
||||||
|
#include "nsThreadUtils.h"
|
||||||
|
#include "nsXULAppAPI.h"
|
||||||
|
|
||||||
|
#define PROXY_IF_SANDBOXED(_call) \
|
||||||
|
do { \
|
||||||
|
if (InSandbox()) { \
|
||||||
|
hal_sandbox::_call; \
|
||||||
|
} else { \
|
||||||
|
hal_impl::_call; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace hal {
|
||||||
|
|
||||||
|
static void
|
||||||
|
AssertMainThread()
|
||||||
|
{
|
||||||
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
InSandbox()
|
||||||
|
{
|
||||||
|
return GeckoProcessType_Content == XRE_GetProcessType();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Vibrate(const nsTArray<uint32>& pattern)
|
||||||
|
{
|
||||||
|
AssertMainThread();
|
||||||
|
PROXY_IF_SANDBOXED(Vibrate(pattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace hal
|
||||||
|
} // namespace mozilla
|
86
hal/Hal.h
Normal file
86
hal/Hal.h
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef mozilla_Hal_h
|
||||||
|
#define mozilla_Hal_h 1
|
||||||
|
|
||||||
|
#include "base/basictypes.h"
|
||||||
|
#include "mozilla/Types.h"
|
||||||
|
#include "nsTArray.h"
|
||||||
|
|
||||||
|
#ifndef MOZ_HAL_NAMESPACE
|
||||||
|
// This goop plays some cpp tricks to ensure a uniform API across the
|
||||||
|
// API entry point, "sandbox" implementations (for content processes),
|
||||||
|
// and "impl" backends where the real work happens. After this runs
|
||||||
|
// through cpp, there will be three sets of identical APIs
|
||||||
|
// hal_impl:: --- the platform-specific implementation of an API.
|
||||||
|
// hal_sandbox:: --- forwards calls up to the parent process
|
||||||
|
// hal:: --- invokes sandboxed impl if in a sandboxed process,
|
||||||
|
// otherwise forwards to hal_impl
|
||||||
|
//
|
||||||
|
// External code should never invoke hal_impl:: or hal_sandbox:: code
|
||||||
|
// directly.
|
||||||
|
# include "HalImpl.h"
|
||||||
|
# include "HalSandbox.h"
|
||||||
|
# define MOZ_HAL_NAMESPACE hal
|
||||||
|
# define MOZ_DEFINED_HAL_NAMESPACE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace MOZ_HAL_NAMESPACE /*hal*/ {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turn the default vibrator device on/off per the pattern specified
|
||||||
|
* by |pattern|. Each element in the pattern is the number of
|
||||||
|
* milliseconds to turn the vibrator on or off. The first element in
|
||||||
|
* |pattern| is an "on" element, the next is "off", and so on.
|
||||||
|
*
|
||||||
|
* If |pattern| is empty, any in-progress vibration is canceled.
|
||||||
|
*/
|
||||||
|
void Vibrate(const nsTArray<uint32>& pattern);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef MOZ_DEFINED_HAL_NAMESPACE
|
||||||
|
# undef MOZ_DEFINED_HAL_NAMESPACE
|
||||||
|
# undef MOZ_HAL_NAMESPACE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // mozilla_Hal_h
|
48
hal/HalImpl.h
Normal file
48
hal/HalImpl.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef mozilla_Hal_h
|
||||||
|
# error "This is an internal file, don't include it"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef mozilla_Hal_h
|
||||||
|
#define MOZ_HAL_NAMESPACE hal_impl
|
||||||
|
#include "Hal.h"
|
||||||
|
#undef MOZ_HAL_NAMESPACE
|
||||||
|
|
47
hal/HalSandbox.h
Normal file
47
hal/HalSandbox.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef mozilla_Hal_h
|
||||||
|
# error "This is an internal file, don't include it"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef mozilla_Hal_h
|
||||||
|
#define MOZ_HAL_NAMESPACE hal_sandbox
|
||||||
|
#include "Hal.h"
|
||||||
|
#undef MOZ_HAL_NAMESPACE
|
71
hal/Makefile.in
Normal file
71
hal/Makefile.in
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
# 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
# http://www.mozilla.org/MPL/
|
||||||
|
#
|
||||||
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
# for the specific language governing rights and limitations under the
|
||||||
|
# License.
|
||||||
|
#
|
||||||
|
# The Original Code is Mozilla Corporation code.
|
||||||
|
#
|
||||||
|
# The Initial Developer of the Original Code is Mozilla Foundation.
|
||||||
|
# Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
# the Initial Developer. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Contributor(s):
|
||||||
|
# Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
#
|
||||||
|
# Alternatively, the contents of this file may be used under the terms of
|
||||||
|
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||||
|
# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
# of those above. If you wish to allow use of your version of this file only
|
||||||
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
# use your version of this file under the terms of the MPL, indicate your
|
||||||
|
# decision by deleting the provisions above and replace them with the notice
|
||||||
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
# the provisions above, a recipient may use your version of this file under
|
||||||
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK *****
|
||||||
|
|
||||||
|
DEPTH = ..
|
||||||
|
topsrcdir = @top_srcdir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
VPATH = \
|
||||||
|
$(srcdir) \
|
||||||
|
$(srcdir)/fallback \
|
||||||
|
$(srcdir)/sandbox \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
|
MODULE = hal
|
||||||
|
LIBRARY_NAME = hal_s
|
||||||
|
FORCE_STATIC_LIB = 1
|
||||||
|
LIBXUL_LIBRARY = 1
|
||||||
|
EXPORT_LIBRARY = 1
|
||||||
|
|
||||||
|
EXPORTS_NAMESPACES = mozilla
|
||||||
|
EXPORTS_mozilla = \
|
||||||
|
Hal.h \
|
||||||
|
HalImpl.h \
|
||||||
|
HalSandbox.h \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
CPPSRCS = \
|
||||||
|
Hal.cpp \
|
||||||
|
SandboxHal.cpp \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
CPPSRCS += FallbackHal.cpp
|
||||||
|
|
||||||
|
include $(topsrcdir)/config/config.mk
|
||||||
|
include $(topsrcdir)/ipc/chromium/chromium-config.mk
|
||||||
|
include $(topsrcdir)/config/rules.mk
|
50
hal/fallback/FallbackHal.cpp
Normal file
50
hal/fallback/FallbackHal.cpp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "Hal.h"
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace hal_impl {
|
||||||
|
|
||||||
|
void
|
||||||
|
Vibrate(const nsTArray<uint32>& pattern)
|
||||||
|
{}
|
||||||
|
|
||||||
|
} // hal_impl
|
||||||
|
} // namespace mozilla
|
55
hal/sandbox/PHal.ipdl
Normal file
55
hal/sandbox/PHal.ipdl
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
include protocol PContent;
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace hal_sandbox {
|
||||||
|
|
||||||
|
protocol PHal {
|
||||||
|
manager PContent;
|
||||||
|
|
||||||
|
parent:
|
||||||
|
Vibrate(uint32[] pattern);
|
||||||
|
|
||||||
|
__delete__();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace hal
|
||||||
|
} // namespace mozilla
|
94
hal/sandbox/SandboxHal.cpp
Normal file
94
hal/sandbox/SandboxHal.cpp
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#include "Hal.h"
|
||||||
|
#include "mozilla/dom/ContentChild.h"
|
||||||
|
#include "mozilla/hal_sandbox/PHalChild.h"
|
||||||
|
#include "mozilla/hal_sandbox/PHalParent.h"
|
||||||
|
|
||||||
|
using namespace mozilla;
|
||||||
|
using namespace mozilla::dom;
|
||||||
|
using namespace mozilla::hal;
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace hal_sandbox {
|
||||||
|
|
||||||
|
static PHalChild* sHal;
|
||||||
|
static PHalChild*
|
||||||
|
Hal()
|
||||||
|
{
|
||||||
|
if (!sHal) {
|
||||||
|
sHal = ContentChild::GetSingleton()->SendPHalConstructor();
|
||||||
|
}
|
||||||
|
return sHal;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Vibrate(const nsTArray<uint32>& pattern)
|
||||||
|
{
|
||||||
|
AutoInfallibleTArray<uint32, 8> p(pattern);
|
||||||
|
Hal()->SendVibrate(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
class HalParent : public PHalParent {
|
||||||
|
public:
|
||||||
|
NS_OVERRIDE virtual bool
|
||||||
|
RecvVibrate(const InfallibleTArray<unsigned int>& pattern) {
|
||||||
|
// Forward to hal::, not hal_impl::, because we might be a
|
||||||
|
// subprocess of another sandboxed process. The hal:: entry point
|
||||||
|
// will do the right thing.
|
||||||
|
hal::Vibrate(pattern);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class HalChild : public PHalChild {
|
||||||
|
public:
|
||||||
|
};
|
||||||
|
|
||||||
|
PHalChild* CreateHalChild() {
|
||||||
|
return new HalChild();
|
||||||
|
}
|
||||||
|
|
||||||
|
PHalParent* CreateHalParent() {
|
||||||
|
return new HalParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace hal_sandbox
|
||||||
|
} // namespace mozilla
|
56
hal/sandbox/SandboxHal.h
Normal file
56
hal/sandbox/SandboxHal.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: sw=2 ts=8 et ft=cpp : */
|
||||||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||||||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* License.
|
||||||
|
*
|
||||||
|
* The Original Code is Mozilla Code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is
|
||||||
|
* The Mozilla Foundation
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* Chris Jones <jones.chris.g@gmail.com>
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
* of those above. If you wish to allow use of your version of this file only
|
||||||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
* use your version of this file under the terms of the MPL, indicate your
|
||||||
|
* decision by deleting the provisions above and replace them with the notice
|
||||||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
* the provisions above, a recipient may use your version of this file under
|
||||||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
*
|
||||||
|
* ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
#ifndef mozilla_SandboxHal_h
|
||||||
|
#define mozilla_SandboxHal_h
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace hal_sandbox {
|
||||||
|
|
||||||
|
class PHalChild;
|
||||||
|
class PHalParent;
|
||||||
|
|
||||||
|
PHalChild* CreateHalChild();
|
||||||
|
|
||||||
|
PHalParent* CreateHalParent();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // mozilla_SandboxHal_h
|
39
hal/sandbox/ipdl.mk
Normal file
39
hal/sandbox/ipdl.mk
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
# 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
# http://www.mozilla.org/MPL/
|
||||||
|
#
|
||||||
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
# for the specific language governing rights and limitations under the
|
||||||
|
# License.
|
||||||
|
#
|
||||||
|
# The Original Code is Mozilla Content App.
|
||||||
|
#
|
||||||
|
# The Initial Developer of the Original Code is
|
||||||
|
# The Mozilla Foundation.
|
||||||
|
# Portions created by the Initial Developer are Copyright (C) 2011
|
||||||
|
# the Initial Developer. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Contributor(s):
|
||||||
|
#
|
||||||
|
# Alternatively, the contents of this file may be used under the terms of
|
||||||
|
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
# of those above. If you wish to allow use of your version of this file only
|
||||||
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
# use your version of this file under the terms of the MPL, indicate your
|
||||||
|
# decision by deleting the provisions above and replace them with the notice
|
||||||
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
# the provisions above, a recipient may use your version of this file under
|
||||||
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK *****
|
||||||
|
|
||||||
|
IPDLSRCS = \
|
||||||
|
PHal.ipdl \
|
||||||
|
$(NULL)
|
@ -59,6 +59,7 @@ IPDLDIRS = \
|
|||||||
dom/ipc \
|
dom/ipc \
|
||||||
dom/src/storage \
|
dom/src/storage \
|
||||||
gfx/layers/ipc \
|
gfx/layers/ipc \
|
||||||
|
hal/sandbox \
|
||||||
ipc/testshell \
|
ipc/testshell \
|
||||||
js/ipc \
|
js/ipc \
|
||||||
js/jetpack \
|
js/jetpack \
|
||||||
|
@ -75,7 +75,19 @@ Types = (
|
|||||||
'nsresult',
|
'nsresult',
|
||||||
'nsString',
|
'nsString',
|
||||||
'nsCString',
|
'nsCString',
|
||||||
'mozilla::ipc::Shmem'
|
'mozilla::ipc::Shmem',
|
||||||
|
|
||||||
|
# quasi-stdint types used by "public" Gecko headers
|
||||||
|
'int8',
|
||||||
|
'uint8',
|
||||||
|
'int16',
|
||||||
|
'uint16',
|
||||||
|
'int32',
|
||||||
|
'uint32',
|
||||||
|
'int64',
|
||||||
|
'uint64',
|
||||||
|
'intptr',
|
||||||
|
'uintptr',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
4
js/src/jit-test/tests/basic/bug688939.js
Normal file
4
js/src/jit-test/tests/basic/bug688939.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
gczeal(2);
|
||||||
|
string=""
|
||||||
|
for (var i = 0; i < 100; i++ )
|
||||||
|
hex=newGlobal('same-compartment');
|
@ -1595,15 +1595,14 @@ js_XDRFunctionObject(JSXDRState *xdr, JSObject **objp)
|
|||||||
* Don't directly store into fun->u.i.script because we want this to happen
|
* Don't directly store into fun->u.i.script because we want this to happen
|
||||||
* at the same time as we set the script's owner.
|
* at the same time as we set the script's owner.
|
||||||
*/
|
*/
|
||||||
JSScript *script = fun->u.i.script;
|
JSScript *script = fun->script();
|
||||||
if (!js_XDRScript(xdr, &script))
|
if (!js_XDRScript(xdr, &script))
|
||||||
return false;
|
return false;
|
||||||
fun->u.i.script = script;
|
|
||||||
|
|
||||||
if (xdr->mode == JSXDR_DECODE) {
|
if (xdr->mode == JSXDR_DECODE) {
|
||||||
*objp = fun;
|
*objp = fun;
|
||||||
fun->u.i.script->setOwnerObject(fun);
|
fun->setScript(script);
|
||||||
if (!fun->u.i.script->typeSetFunction(cx, fun))
|
if (!fun->script()->typeSetFunction(cx, fun))
|
||||||
return false;
|
return false;
|
||||||
JS_ASSERT(fun->nargs == fun->script()->bindings.countArgs());
|
JS_ASSERT(fun->nargs == fun->script()->bindings.countArgs());
|
||||||
js_CallNewScriptHook(cx, fun->script(), fun);
|
js_CallNewScriptHook(cx, fun->script(), fun);
|
||||||
@ -2352,7 +2351,7 @@ js_NewFunction(JSContext *cx, JSObject *funobj, Native native, uintN nargs,
|
|||||||
JS_ASSERT(!native);
|
JS_ASSERT(!native);
|
||||||
JS_ASSERT(nargs == 0);
|
JS_ASSERT(nargs == 0);
|
||||||
fun->u.i.skipmin = 0;
|
fun->u.i.skipmin = 0;
|
||||||
fun->u.i.script = NULL;
|
fun->u.i.script_ = NULL;
|
||||||
} else {
|
} else {
|
||||||
fun->u.n.clasp = NULL;
|
fun->u.n.clasp = NULL;
|
||||||
if (flags & JSFUN_TRCINFO) {
|
if (flags & JSFUN_TRCINFO) {
|
||||||
@ -2421,22 +2420,21 @@ js_CloneFunctionObject(JSContext *cx, JSFunction *fun, JSObject *parent,
|
|||||||
cfun->atom = fun->atom;
|
cfun->atom = fun->atom;
|
||||||
clone->setPrivate(cfun);
|
clone->setPrivate(cfun);
|
||||||
if (cfun->isInterpreted()) {
|
if (cfun->isInterpreted()) {
|
||||||
JSScript *script = cfun->script();
|
JSScript *script = fun->script();
|
||||||
JS_ASSERT(script);
|
JS_ASSERT(script);
|
||||||
JS_ASSERT(script->compartment() == fun->compartment());
|
JS_ASSERT(script->compartment() == fun->compartment());
|
||||||
JS_ASSERT(script->compartment() != cx->compartment);
|
JS_ASSERT(script->compartment() != cx->compartment);
|
||||||
JS_OPT_ASSERT(script->ownerObject == fun);
|
JS_OPT_ASSERT(script->ownerObject == fun);
|
||||||
|
|
||||||
cfun->u.i.script = NULL;
|
cfun->u.i.script_ = NULL;
|
||||||
JSScript *cscript = js_CloneScript(cx, script);
|
JSScript *cscript = js_CloneScript(cx, script);
|
||||||
if (!cscript)
|
if (!cscript)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
cfun->u.i.script = cscript;
|
cfun->setScript(cscript);
|
||||||
if (!cfun->u.i.script->typeSetFunction(cx, cfun))
|
if (!cfun->script()->typeSetFunction(cx, cfun))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
cfun->script()->setOwnerObject(cfun);
|
|
||||||
js_CallNewScriptHook(cx, cfun->script(), cfun);
|
js_CallNewScriptHook(cx, cfun->script(), cfun);
|
||||||
Debugger::onNewScript(cx, cfun->script(), cfun, Debugger::NewHeldScript);
|
Debugger::onNewScript(cx, cfun->script(), cfun, Debugger::NewHeldScript);
|
||||||
}
|
}
|
||||||
|
@ -115,9 +115,10 @@ struct JSFunction : public JSObject_Slots2
|
|||||||
JSNativeTraceInfo *trcinfo;
|
JSNativeTraceInfo *trcinfo;
|
||||||
} n;
|
} n;
|
||||||
struct Scripted {
|
struct Scripted {
|
||||||
JSScript *script; /* interpreted bytecode descriptor or null */
|
JSScript *script_; /* interpreted bytecode descriptor or null;
|
||||||
|
use the setter! */
|
||||||
uint16 skipmin; /* net skip amount up (toward zero) from
|
uint16 skipmin; /* net skip amount up (toward zero) from
|
||||||
script->staticLevel to nearest upvar,
|
script_->staticLevel to nearest upvar,
|
||||||
including upvars in nested functions */
|
including upvars in nested functions */
|
||||||
js::Shape *names; /* argument and variable names */
|
js::Shape *names; /* argument and variable names */
|
||||||
} i;
|
} i;
|
||||||
@ -196,7 +197,13 @@ struct JSFunction : public JSObject_Slots2
|
|||||||
|
|
||||||
JSScript *script() const {
|
JSScript *script() const {
|
||||||
JS_ASSERT(isInterpreted());
|
JS_ASSERT(isInterpreted());
|
||||||
return u.i.script;
|
return u.i.script_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setScript(JSScript *script) {
|
||||||
|
JS_ASSERT(isInterpreted());
|
||||||
|
u.i.script_ = script;
|
||||||
|
script->setOwnerObject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
JSScript * maybeScript() const {
|
JSScript * maybeScript() const {
|
||||||
@ -213,7 +220,7 @@ struct JSFunction : public JSObject_Slots2
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uintN offsetOfNativeOrScript() {
|
static uintN offsetOfNativeOrScript() {
|
||||||
JS_STATIC_ASSERT(offsetof(U, n.native) == offsetof(U, i.script));
|
JS_STATIC_ASSERT(offsetof(U, n.native) == offsetof(U, i.script_));
|
||||||
JS_STATIC_ASSERT(offsetof(U, n.native) == offsetof(U, nativeOrScript));
|
JS_STATIC_ASSERT(offsetof(U, n.native) == offsetof(U, nativeOrScript));
|
||||||
return offsetof(JSFunction, u.nativeOrScript);
|
return offsetof(JSFunction, u.nativeOrScript);
|
||||||
}
|
}
|
||||||
|
@ -888,8 +888,26 @@ MarkThreadDataConservatively(JSTracer *trc, ThreadData *td)
|
|||||||
void
|
void
|
||||||
MarkStackRangeConservatively(JSTracer *trc, Value *beginv, Value *endv)
|
MarkStackRangeConservatively(JSTracer *trc, Value *beginv, Value *endv)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Normally, the drainMarkStack phase of marking will never trace outside
|
||||||
|
* of the compartment currently being collected. However, conservative
|
||||||
|
* scanning during drainMarkStack (as is done for generators) can break
|
||||||
|
* this invariant. So we disable the compartment assertions in this
|
||||||
|
* situation.
|
||||||
|
*/
|
||||||
|
struct AutoSkipChecking {
|
||||||
|
JSRuntime *runtime;
|
||||||
|
JSCompartment *savedCompartment;
|
||||||
|
|
||||||
|
AutoSkipChecking(JSRuntime *rt)
|
||||||
|
: runtime(rt), savedCompartment(rt->gcCheckCompartment) {
|
||||||
|
rt->gcCheckCompartment = NULL;
|
||||||
|
}
|
||||||
|
~AutoSkipChecking() { runtime->gcCheckCompartment = savedCompartment; }
|
||||||
|
} as(trc->context->runtime);
|
||||||
|
|
||||||
const jsuword *begin = beginv->payloadWord();
|
const jsuword *begin = beginv->payloadWord();
|
||||||
const jsuword *end = endv->payloadWord();;
|
const jsuword *end = endv->payloadWord();
|
||||||
#ifdef JS_NUNBOX32
|
#ifdef JS_NUNBOX32
|
||||||
/*
|
/*
|
||||||
* With 64-bit jsvals on 32-bit systems, we can optimize a bit by
|
* With 64-bit jsvals on 32-bit systems, we can optimize a bit by
|
||||||
|
@ -388,30 +388,31 @@ TypeSet::add(JSContext *cx, TypeConstraint *constraint, bool callExisting)
|
|||||||
if (!callExisting)
|
if (!callExisting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* If any type is possible, there's no need to worry about specifics. */
|
||||||
if (flags & TYPE_FLAG_UNKNOWN) {
|
if (flags & TYPE_FLAG_UNKNOWN) {
|
||||||
cx->compartment->types.addPending(cx, constraint, this, Type::UnknownType());
|
cx->compartment->types.addPending(cx, constraint, this, Type::UnknownType());
|
||||||
cx->compartment->types.resolvePending(cx);
|
} else {
|
||||||
return;
|
/* Enqueue type set members stored as bits. */
|
||||||
}
|
for (TypeFlags flag = 1; flag < TYPE_FLAG_ANYOBJECT; flag <<= 1) {
|
||||||
|
if (flags & flag) {
|
||||||
for (TypeFlags flag = 1; flag < TYPE_FLAG_ANYOBJECT; flag <<= 1) {
|
Type type = Type::PrimitiveType(TypeFlagPrimitive(flag));
|
||||||
if (flags & flag) {
|
cx->compartment->types.addPending(cx, constraint, this, type);
|
||||||
Type type = Type::PrimitiveType(TypeFlagPrimitive(flag));
|
}
|
||||||
cx->compartment->types.addPending(cx, constraint, this, type);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & TYPE_FLAG_ANYOBJECT) {
|
/* If any object is possible, skip specifics. */
|
||||||
cx->compartment->types.addPending(cx, constraint, this, Type::AnyObjectType());
|
if (flags & TYPE_FLAG_ANYOBJECT) {
|
||||||
cx->compartment->types.resolvePending(cx);
|
cx->compartment->types.addPending(cx, constraint, this, Type::AnyObjectType());
|
||||||
return;
|
} else {
|
||||||
}
|
/* Enqueue specific object types. */
|
||||||
|
unsigned count = getObjectCount();
|
||||||
unsigned count = getObjectCount();
|
for (unsigned i = 0; i < count; i++) {
|
||||||
for (unsigned i = 0; i < count; i++) {
|
TypeObjectKey *object = getObject(i);
|
||||||
TypeObjectKey *object = getObject(i);
|
if (object)
|
||||||
if (object)
|
cx->compartment->types.addPending(cx, constraint, this,
|
||||||
cx->compartment->types.addPending(cx, constraint, this, Type::ObjectType(object));
|
Type::ObjectType(object));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cx->compartment->types.resolvePending(cx);
|
cx->compartment->types.resolvePending(cx);
|
||||||
|
@ -3803,6 +3803,7 @@ BEGIN_CASE(JSOP_GETELEM)
|
|||||||
{
|
{
|
||||||
Value &lref = regs.sp[-2];
|
Value &lref = regs.sp[-2];
|
||||||
Value &rref = regs.sp[-1];
|
Value &rref = regs.sp[-1];
|
||||||
|
Value &rval = regs.sp[-2];
|
||||||
if (lref.isString() && rref.isInt32()) {
|
if (lref.isString() && rref.isInt32()) {
|
||||||
JSString *str = lref.toString();
|
JSString *str = lref.toString();
|
||||||
int32_t i = rref.toInt32();
|
int32_t i = rref.toInt32();
|
||||||
@ -3810,9 +3811,9 @@ BEGIN_CASE(JSOP_GETELEM)
|
|||||||
str = cx->runtime->staticStrings.getUnitStringForElement(cx, str, size_t(i));
|
str = cx->runtime->staticStrings.getUnitStringForElement(cx, str, size_t(i));
|
||||||
if (!str)
|
if (!str)
|
||||||
goto error;
|
goto error;
|
||||||
|
rval.setString(str);
|
||||||
|
TypeScript::Monitor(cx, script, regs.pc, rval);
|
||||||
regs.sp--;
|
regs.sp--;
|
||||||
regs.sp[-1].setString(str);
|
|
||||||
TypeScript::Monitor(cx, script, regs.pc, regs.sp[-1]);
|
|
||||||
len = JSOP_GETELEM_LENGTH;
|
len = JSOP_GETELEM_LENGTH;
|
||||||
DO_NEXT_OP(len);
|
DO_NEXT_OP(len);
|
||||||
}
|
}
|
||||||
@ -3820,9 +3821,9 @@ BEGIN_CASE(JSOP_GETELEM)
|
|||||||
|
|
||||||
if (lref.isMagic(JS_LAZY_ARGUMENTS)) {
|
if (lref.isMagic(JS_LAZY_ARGUMENTS)) {
|
||||||
if (rref.isInt32() && size_t(rref.toInt32()) < regs.fp()->numActualArgs()) {
|
if (rref.isInt32() && size_t(rref.toInt32()) < regs.fp()->numActualArgs()) {
|
||||||
|
rval = regs.fp()->canonicalActualArg(rref.toInt32());
|
||||||
|
TypeScript::Monitor(cx, script, regs.pc, rval);
|
||||||
regs.sp--;
|
regs.sp--;
|
||||||
regs.sp[-1] = regs.fp()->canonicalActualArg(rref.toInt32());
|
|
||||||
TypeScript::Monitor(cx, script, regs.pc, regs.sp[-1]);
|
|
||||||
len = JSOP_GETELEM_LENGTH;
|
len = JSOP_GETELEM_LENGTH;
|
||||||
DO_NEXT_OP(len);
|
DO_NEXT_OP(len);
|
||||||
}
|
}
|
||||||
@ -3833,58 +3834,48 @@ BEGIN_CASE(JSOP_GETELEM)
|
|||||||
JSObject *obj;
|
JSObject *obj;
|
||||||
VALUE_TO_OBJECT(cx, &lref, obj);
|
VALUE_TO_OBJECT(cx, &lref, obj);
|
||||||
|
|
||||||
const Value *copyFrom;
|
uint32 index;
|
||||||
Value rval;
|
if (IsDefinitelyIndex(rref, &index)) {
|
||||||
jsid id;
|
|
||||||
if (rref.isInt32()) {
|
|
||||||
int32_t i = rref.toInt32();
|
|
||||||
if (obj->isDenseArray()) {
|
if (obj->isDenseArray()) {
|
||||||
jsuint idx = jsuint(i);
|
if (index < obj->getDenseArrayInitializedLength()) {
|
||||||
if (idx < obj->getDenseArrayInitializedLength()) {
|
rval = obj->getDenseArrayElement(index);
|
||||||
copyFrom = &obj->getDenseArrayElement(idx);
|
if (!rval.isMagic())
|
||||||
if (!copyFrom->isMagic())
|
|
||||||
goto end_getelem;
|
goto end_getelem;
|
||||||
}
|
}
|
||||||
} else if (obj->isArguments()) {
|
} else if (obj->isArguments()) {
|
||||||
uint32 arg = uint32(i);
|
if (obj->asArguments()->getElement(index, &rval))
|
||||||
ArgumentsObject *argsobj = obj->asArguments();
|
goto end_getelem;
|
||||||
|
|
||||||
if (arg < argsobj->initialLength()) {
|
|
||||||
copyFrom = &argsobj->element(arg);
|
|
||||||
if (!copyFrom->isMagic(JS_ARGS_HOLE)) {
|
|
||||||
if (StackFrame *afp = argsobj->maybeStackFrame())
|
|
||||||
copyFrom = &afp->canonicalActualArg(arg);
|
|
||||||
goto end_getelem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (JS_LIKELY(INT_FITS_IN_JSID(i)))
|
|
||||||
id = INT_TO_JSID(i);
|
if (!obj->getElement(cx, index, &rval))
|
||||||
else
|
goto error;
|
||||||
goto intern_big_int;
|
|
||||||
} else {
|
} else {
|
||||||
int32_t i;
|
if (script->hasAnalysis() && !regs.fp()->hasImacropc())
|
||||||
if (ValueFitsInInt32(rref, &i) && INT_FITS_IN_JSID(i)) {
|
script->analysis()->getCode(regs.pc).getStringElement = true;
|
||||||
id = INT_TO_JSID(i);
|
|
||||||
} else {
|
SpecialId special;
|
||||||
intern_big_int:
|
if (ValueIsSpecial(obj, &rref, &special, cx)) {
|
||||||
if (!js_InternNonIntElementId(cx, obj, rref, &id))
|
if (!obj->getSpecial(cx, special, &rval))
|
||||||
goto error;
|
goto error;
|
||||||
|
} else {
|
||||||
|
JSAtom *name;
|
||||||
|
if (!js_ValueToAtom(cx, rref, &name))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (name->isIndex(&index)) {
|
||||||
|
if (!obj->getElement(cx, index, &rval))
|
||||||
|
goto error;
|
||||||
|
} else {
|
||||||
|
if (!obj->getProperty(cx, name->asPropertyName(), &rval))
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (JSID_IS_STRING(id) && script->hasAnalysis() && !regs.fp()->hasImacropc())
|
|
||||||
script->analysis()->getCode(regs.pc).getStringElement = true;
|
|
||||||
|
|
||||||
if (!obj->getGeneric(cx, id, &rval))
|
|
||||||
goto error;
|
|
||||||
copyFrom = &rval;
|
|
||||||
|
|
||||||
end_getelem:
|
end_getelem:
|
||||||
|
assertSameCompartment(cx, rval);
|
||||||
|
TypeScript::Monitor(cx, script, regs.pc, rval);
|
||||||
regs.sp--;
|
regs.sp--;
|
||||||
regs.sp[-1] = *copyFrom;
|
|
||||||
assertSameCompartment(cx, regs.sp[-1]);
|
|
||||||
TypeScript::Monitor(cx, script, regs.pc, regs.sp[-1]);
|
|
||||||
}
|
}
|
||||||
END_CASE(JSOP_GETELEM)
|
END_CASE(JSOP_GETELEM)
|
||||||
|
|
||||||
|
@ -613,6 +613,32 @@ ValueFitsInInt32(const Value &v, int32_t *pi)
|
|||||||
return v.isDouble() && JSDOUBLE_IS_INT32(v.toDouble(), pi);
|
return v.isDouble() && JSDOUBLE_IS_INT32(v.toDouble(), pi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns true if the given value is definitely an index: that is, the value
|
||||||
|
* is a number that's an unsigned 32-bit integer.
|
||||||
|
*
|
||||||
|
* This method prioritizes common-case speed over accuracy in every case. It
|
||||||
|
* can produce false negatives (but not false positives): some values which are
|
||||||
|
* indexes will be reported not to be indexes by this method. Users must
|
||||||
|
* consider this possibility when using this method.
|
||||||
|
*/
|
||||||
|
static JS_ALWAYS_INLINE bool
|
||||||
|
IsDefinitelyIndex(const Value &v, uint32 *indexp)
|
||||||
|
{
|
||||||
|
if (v.isInt32() && v.toInt32() >= 0) {
|
||||||
|
*indexp = v.toInt32();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 i;
|
||||||
|
if (v.isDouble() && JSDOUBLE_IS_INT32(v.toDouble(), &i) && i >= 0) {
|
||||||
|
*indexp = uint32(i);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* ES5 9.4 ToInteger. */
|
/* ES5 9.4 ToInteger. */
|
||||||
static inline bool
|
static inline bool
|
||||||
ToInteger(JSContext *cx, const js::Value &v, jsdouble *dp)
|
ToInteger(JSContext *cx, const js::Value &v, jsdouble *dp)
|
||||||
|
@ -1784,6 +1784,29 @@ ObjectClassIs(JSObject &obj, ESClassValue classValue, JSContext *cx)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static JS_ALWAYS_INLINE bool
|
||||||
|
ValueIsSpecial(JSObject *obj, Value *propval, SpecialId *sidp, JSContext *cx)
|
||||||
|
{
|
||||||
|
if (!propval->isObject())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
#if JS_HAS_XML_SUPPORT
|
||||||
|
if (obj->isXML()) {
|
||||||
|
*sidp = SpecialId(propval->toObject());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
JSObject &propobj = propval->toObject();
|
||||||
|
JSAtom *name;
|
||||||
|
if (propobj.isQName() && GetLocalNameFromFunctionQName(&propobj, &name, cx)) {
|
||||||
|
propval->setString(name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} /* namespace js */
|
} /* namespace js */
|
||||||
|
|
||||||
inline JSObject *
|
inline JSObject *
|
||||||
|
@ -1215,7 +1215,7 @@ JSScript::NewScriptFromCG(JSContext *cx, JSCodeGenerator *cg)
|
|||||||
fun = NULL;
|
fun = NULL;
|
||||||
if (cg->inFunction()) {
|
if (cg->inFunction()) {
|
||||||
/*
|
/*
|
||||||
* We initialize fun->u.i.script to be the script constructed above
|
* We initialize fun->script() to be the script constructed above
|
||||||
* so that the debugger has a valid fun->script().
|
* so that the debugger has a valid fun->script().
|
||||||
*/
|
*/
|
||||||
fun = cg->fun();
|
fun = cg->fun();
|
||||||
@ -1238,8 +1238,7 @@ JSScript::NewScriptFromCG(JSContext *cx, JSCodeGenerator *cg)
|
|||||||
if (!script->typeSetFunction(cx, fun, singleton))
|
if (!script->typeSetFunction(cx, fun, singleton))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
fun->u.i.script = script;
|
fun->setScript(script);
|
||||||
script->setOwnerObject(fun);
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Initialize script->object, if necessary, so that the debugger has a
|
* Initialize script->object, if necessary, so that the debugger has a
|
||||||
|
@ -2808,24 +2808,33 @@ ReportBadXMLName(JSContext *cx, const Value &idval)
|
|||||||
js_ReportValueError(cx, JSMSG_BAD_XML_NAME, JSDVG_IGNORE_STACK, idval, NULL);
|
js_ReportValueError(cx, JSMSG_BAD_XML_NAME, JSDVG_IGNORE_STACK, idval, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
namespace js {
|
||||||
GetLocalNameFromFunctionQName(JSObject *qn, jsid *funidp, JSContext *cx)
|
|
||||||
|
bool
|
||||||
|
GetLocalNameFromFunctionQName(JSObject *qn, JSAtom **namep, JSContext *cx)
|
||||||
{
|
{
|
||||||
JSAtom *atom = cx->runtime->atomState.functionNamespaceURIAtom;
|
JSAtom *atom = cx->runtime->atomState.functionNamespaceURIAtom;
|
||||||
JSLinearString *uri = qn->getNameURI();
|
JSLinearString *uri = qn->getNameURI();
|
||||||
if (uri && (uri == atom || EqualStrings(uri, atom))) {
|
if (uri && (uri == atom || EqualStrings(uri, atom))) {
|
||||||
*funidp = ATOM_TO_JSID(qn->getQNameLocalName());
|
*namep = qn->getQNameLocalName();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} /* namespace js */
|
||||||
|
|
||||||
bool
|
bool
|
||||||
js_GetLocalNameFromFunctionQName(JSObject *obj, jsid *funidp, JSContext *cx)
|
js_GetLocalNameFromFunctionQName(JSObject *obj, jsid *funidp, JSContext *cx)
|
||||||
{
|
{
|
||||||
if (!obj->isQName())
|
if (!obj->isQName())
|
||||||
return false;
|
return false;
|
||||||
return GetLocalNameFromFunctionQName(obj, funidp, cx);
|
JSAtom *name;
|
||||||
|
if (GetLocalNameFromFunctionQName(obj, &name, cx)) {
|
||||||
|
*funidp = ATOM_TO_JSID(name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static JSObject *
|
static JSObject *
|
||||||
@ -2893,8 +2902,10 @@ construct:
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (!GetLocalNameFromFunctionQName(obj, funidp, cx))
|
JSAtom *localName;
|
||||||
*funidp = JSID_VOID;
|
*funidp = GetLocalNameFromFunctionQName(obj, &localName, cx)
|
||||||
|
? ATOM_TO_JSID(localName)
|
||||||
|
: JSID_VOID;
|
||||||
return obj;
|
return obj;
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
@ -7618,8 +7629,11 @@ js_FindXMLProperty(JSContext *cx, const Value &nameval, JSObject **objp, jsid *i
|
|||||||
}
|
}
|
||||||
|
|
||||||
qn = nameobj;
|
qn = nameobj;
|
||||||
if (!GetLocalNameFromFunctionQName(qn, &funid, cx))
|
|
||||||
funid = JSID_VOID;
|
JSAtom *name;
|
||||||
|
funid = GetLocalNameFromFunctionQName(qn, &name, cx)
|
||||||
|
? ATOM_TO_JSID(name)
|
||||||
|
: JSID_VOID;
|
||||||
|
|
||||||
obj = cx->stack.currentScriptedScopeChain();
|
obj = cx->stack.currentScriptedScopeChain();
|
||||||
do {
|
do {
|
||||||
|
@ -332,4 +332,11 @@ js_TestXMLEquality(JSContext *cx, const js::Value &v1, const js::Value &v2,
|
|||||||
extern JSBool
|
extern JSBool
|
||||||
js_ConcatenateXML(JSContext *cx, JSObject *obj1, JSObject *obj2, js::Value *vp);
|
js_ConcatenateXML(JSContext *cx, JSObject *obj1, JSObject *obj2, js::Value *vp);
|
||||||
|
|
||||||
|
namespace js {
|
||||||
|
|
||||||
|
extern bool
|
||||||
|
GetLocalNameFromFunctionQName(JSObject *qn, JSAtom **namep, JSContext *cx);
|
||||||
|
|
||||||
|
} /* namespace js */
|
||||||
|
|
||||||
#endif /* jsxml_h___ */
|
#endif /* jsxml_h___ */
|
||||||
|
@ -734,7 +734,7 @@ class CallCompiler : public BaseCompiler
|
|||||||
|
|
||||||
/* funPtrReg is still valid. Check if a compilation is needed. */
|
/* funPtrReg is still valid. Check if a compilation is needed. */
|
||||||
Address scriptAddr(ic.funPtrReg, offsetof(JSFunction, u) +
|
Address scriptAddr(ic.funPtrReg, offsetof(JSFunction, u) +
|
||||||
offsetof(JSFunction::U::Scripted, script));
|
offsetof(JSFunction::U::Scripted, script_));
|
||||||
masm.loadPtr(scriptAddr, t0);
|
masm.loadPtr(scriptAddr, t0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -433,6 +433,7 @@ stubs::GetElem(VMFrame &f)
|
|||||||
|
|
||||||
Value &lref = regs.sp[-2];
|
Value &lref = regs.sp[-2];
|
||||||
Value &rref = regs.sp[-1];
|
Value &rref = regs.sp[-1];
|
||||||
|
Value &rval = regs.sp[-2];
|
||||||
if (lref.isString() && rref.isInt32()) {
|
if (lref.isString() && rref.isInt32()) {
|
||||||
JSString *str = lref.toString();
|
JSString *str = lref.toString();
|
||||||
int32_t i = rref.toInt32();
|
int32_t i = rref.toInt32();
|
||||||
@ -440,14 +441,14 @@ stubs::GetElem(VMFrame &f)
|
|||||||
str = f.cx->runtime->staticStrings.getUnitStringForElement(cx, str, (size_t)i);
|
str = f.cx->runtime->staticStrings.getUnitStringForElement(cx, str, (size_t)i);
|
||||||
if (!str)
|
if (!str)
|
||||||
THROW();
|
THROW();
|
||||||
f.regs.sp[-2].setString(str);
|
rval.setString(str);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lref.isMagic(JS_LAZY_ARGUMENTS)) {
|
if (lref.isMagic(JS_LAZY_ARGUMENTS)) {
|
||||||
if (rref.isInt32() && size_t(rref.toInt32()) < regs.fp()->numActualArgs()) {
|
if (rref.isInt32() && size_t(rref.toInt32()) < regs.fp()->numActualArgs()) {
|
||||||
regs.sp[-2] = regs.fp()->canonicalActualArg(rref.toInt32());
|
rval = regs.fp()->canonicalActualArg(rref.toInt32());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MarkArgumentsCreated(cx, f.script());
|
MarkArgumentsCreated(cx, f.script());
|
||||||
@ -458,54 +459,40 @@ stubs::GetElem(VMFrame &f)
|
|||||||
if (!obj)
|
if (!obj)
|
||||||
THROW();
|
THROW();
|
||||||
|
|
||||||
const Value *copyFrom;
|
uint32 index;
|
||||||
Value rval;
|
if (IsDefinitelyIndex(rref, &index)) {
|
||||||
jsid id;
|
|
||||||
if (rref.isInt32()) {
|
|
||||||
int32_t i = rref.toInt32();
|
|
||||||
if (obj->isDenseArray()) {
|
if (obj->isDenseArray()) {
|
||||||
jsuint idx = jsuint(i);
|
if (index < obj->getDenseArrayInitializedLength()) {
|
||||||
|
rval = obj->getDenseArrayElement(index);
|
||||||
if (idx < obj->getDenseArrayInitializedLength()) {
|
if (!rval.isMagic())
|
||||||
copyFrom = &obj->getDenseArrayElement(idx);
|
return;
|
||||||
if (!copyFrom->isMagic())
|
|
||||||
goto end_getelem;
|
|
||||||
}
|
}
|
||||||
} else if (obj->isArguments()) {
|
} else if (obj->isArguments()) {
|
||||||
uint32 arg = uint32(i);
|
if (obj->asArguments()->getElement(index, &rval))
|
||||||
ArgumentsObject *argsobj = obj->asArguments();
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (arg < argsobj->initialLength()) {
|
if (!obj->getElement(cx, index, &rval))
|
||||||
copyFrom = &argsobj->element(arg);
|
THROW();
|
||||||
if (!copyFrom->isMagic()) {
|
} else {
|
||||||
if (StackFrame *afp = argsobj->maybeStackFrame())
|
SpecialId special;
|
||||||
copyFrom = &afp->canonicalActualArg(arg);
|
if (ValueIsSpecial(obj, &rref, &special, cx)) {
|
||||||
goto end_getelem;
|
if (!obj->getSpecial(cx, special, &rval))
|
||||||
}
|
THROW();
|
||||||
|
} else {
|
||||||
|
JSAtom *name;
|
||||||
|
if (!js_ValueToAtom(cx, rref, &name))
|
||||||
|
THROW();
|
||||||
|
|
||||||
|
if (name->isIndex(&index)) {
|
||||||
|
if (!obj->getElement(cx, index, &rval))
|
||||||
|
THROW();
|
||||||
|
} else {
|
||||||
|
if (!obj->getProperty(cx, name->asPropertyName(), &rval))
|
||||||
|
THROW();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (JS_LIKELY(INT_FITS_IN_JSID(i)))
|
|
||||||
id = INT_TO_JSID(i);
|
|
||||||
else
|
|
||||||
goto intern_big_int;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
int32_t i;
|
|
||||||
if (ValueFitsInInt32(rref, &i) && INT_FITS_IN_JSID(i)) {
|
|
||||||
id = INT_TO_JSID(i);
|
|
||||||
} else {
|
|
||||||
intern_big_int:
|
|
||||||
if (!js_InternNonIntElementId(cx, obj, rref, &id))
|
|
||||||
THROW();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!obj->getGeneric(cx, id, &rval))
|
|
||||||
THROW();
|
|
||||||
copyFrom = &rval;
|
|
||||||
|
|
||||||
end_getelem:
|
|
||||||
f.regs.sp[-2] = *copyFrom;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
|
@ -2736,7 +2736,7 @@ Clone(JSContext *cx, uintN argc, jsval *vp)
|
|||||||
}
|
}
|
||||||
if (funobj->compartment() != cx->compartment) {
|
if (funobj->compartment() != cx->compartment) {
|
||||||
JSFunction *fun = funobj->getFunctionPrivate();
|
JSFunction *fun = funobj->getFunctionPrivate();
|
||||||
if (fun->isInterpreted() && fun->u.i.script->compileAndGo) {
|
if (fun->isInterpreted() && fun->script()->compileAndGo) {
|
||||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_UNEXPECTED_TYPE,
|
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_UNEXPECTED_TYPE,
|
||||||
"function", "compile-and-go");
|
"function", "compile-and-go");
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
|
@ -141,10 +141,9 @@ GlobalObject::initFunctionAndObjectClasses(JSContext *cx)
|
|||||||
script->noScriptRval = true;
|
script->noScriptRval = true;
|
||||||
script->code[0] = JSOP_STOP;
|
script->code[0] = JSOP_STOP;
|
||||||
script->code[1] = SRC_NULL;
|
script->code[1] = SRC_NULL;
|
||||||
functionProto->u.i.script = script;
|
functionProto->setScript(script);
|
||||||
functionProto->getType(cx)->interpretedFunction = functionProto;
|
functionProto->getType(cx)->interpretedFunction = functionProto;
|
||||||
script->hasFunction = true;
|
script->hasFunction = true;
|
||||||
script->setOwnerObject(functionProto);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the Object function now that we have a [[Prototype]] for it. */
|
/* Create the Object function now that we have a [[Prototype]] for it. */
|
||||||
|
18
layout/reftests/bugs/691571-1-ref.html
Normal file
18
layout/reftests/bugs/691571-1-ref.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<canvas id="A" width=200 height=50></canvas><br />
|
||||||
|
<canvas id="B" width=200 height=50></canvas>
|
||||||
|
<script>
|
||||||
|
var canvasA = document.getElementById("A"),
|
||||||
|
ctxA = canvasA.getContext('2d'),
|
||||||
|
canvasB = document.getElementById("B"),
|
||||||
|
ctxB = canvasB.getContext('2d'),
|
||||||
|
width = canvasA.width,
|
||||||
|
height = canvasA.height;
|
||||||
|
|
||||||
|
ctxB.fillStyle = 'red';
|
||||||
|
ctxB.fillRect(0, 0, width, height);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
24
layout/reftests/bugs/691571-1.html
Normal file
24
layout/reftests/bugs/691571-1.html
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<canvas id="A" width=200 height=50></canvas><br />
|
||||||
|
<canvas id="B" width=200 height=50></canvas>
|
||||||
|
<script>
|
||||||
|
var canvasA = document.getElementById("A"),
|
||||||
|
ctxA = canvasA.getContext('2d'),
|
||||||
|
canvasB = document.getElementById("B"),
|
||||||
|
ctxB = canvasB.getContext('2d'),
|
||||||
|
width = canvasA.width,
|
||||||
|
height = canvasA.height;
|
||||||
|
|
||||||
|
ctxA.fillStyle = 'red';
|
||||||
|
ctxA.fillRect(0, 0, width, height);
|
||||||
|
var pat = ctxB.createPattern(canvasA, "repeat");
|
||||||
|
|
||||||
|
ctxA.clearRect(0, 0, width, height);
|
||||||
|
|
||||||
|
ctxB.fillStyle = pat;
|
||||||
|
ctxB.fillRect(0, 0, width, height);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1666,3 +1666,4 @@ fails-if(layersGPUAccelerated&&cocoaWidget) == 654950-1.html 654950-1-ref.html #
|
|||||||
== 670467-1.html 670467-1-ref.html
|
== 670467-1.html 670467-1-ref.html
|
||||||
== 670467-2.html 670467-2-ref.html
|
== 670467-2.html 670467-2-ref.html
|
||||||
!= 691087-1.html 691087-1-ref.html
|
!= 691087-1.html 691087-1-ref.html
|
||||||
|
== 691571-1.html 691571-1-ref.html
|
||||||
|
@ -82,6 +82,10 @@
|
|||||||
* | | ... |
|
* | | ... |
|
||||||
* |=====================================|
|
* |=====================================|
|
||||||
*
|
*
|
||||||
|
* NOTE: Due to Mozilla bug 691003, we cannot reserve less than one word for an
|
||||||
|
* allocation on Linux or Mac. So on 32-bit *nix, the smallest bucket size is
|
||||||
|
* 4 bytes, and on 64-bit, the smallest bucket size is 8 bytes.
|
||||||
|
*
|
||||||
* A different mechanism is used for each category:
|
* A different mechanism is used for each category:
|
||||||
*
|
*
|
||||||
* Small : Each size class is segregated into its own set of runs. Each run
|
* Small : Each size class is segregated into its own set of runs. Each run
|
||||||
@ -426,7 +430,7 @@ static const bool __isthreaded = true;
|
|||||||
/* Size of stack-allocated buffer passed to strerror_r(). */
|
/* Size of stack-allocated buffer passed to strerror_r(). */
|
||||||
#define STRERROR_BUF 64
|
#define STRERROR_BUF 64
|
||||||
|
|
||||||
/* Minimum alignment of allocations is 2^QUANTUM_2POW_MIN bytes. */
|
/* Minimum alignment of non-tiny allocations is 2^QUANTUM_2POW_MIN bytes. */
|
||||||
# define QUANTUM_2POW_MIN 4
|
# define QUANTUM_2POW_MIN 4
|
||||||
#ifdef MOZ_MEMORY_SIZEOF_PTR_2POW
|
#ifdef MOZ_MEMORY_SIZEOF_PTR_2POW
|
||||||
# define SIZEOF_PTR_2POW MOZ_MEMORY_SIZEOF_PTR_2POW
|
# define SIZEOF_PTR_2POW MOZ_MEMORY_SIZEOF_PTR_2POW
|
||||||
@ -515,8 +519,15 @@ static const bool __isthreaded = true;
|
|||||||
#define CACHELINE_2POW 6
|
#define CACHELINE_2POW 6
|
||||||
#define CACHELINE ((size_t)(1U << CACHELINE_2POW))
|
#define CACHELINE ((size_t)(1U << CACHELINE_2POW))
|
||||||
|
|
||||||
/* Smallest size class to support. */
|
/*
|
||||||
|
* Smallest size class to support. On Linux and Mac, even malloc(1) must
|
||||||
|
* reserve a word's worth of memory (see Mozilla bug 691003).
|
||||||
|
*/
|
||||||
|
#ifdef MOZ_MEMORY_WINDOWS
|
||||||
#define TINY_MIN_2POW 1
|
#define TINY_MIN_2POW 1
|
||||||
|
#else
|
||||||
|
#define TINY_MIN_2POW (sizeof(void*) == 8 ? 3 : 2)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Maximum size class that is a multiple of the quantum, but not (necessarily)
|
* Maximum size class that is a multiple of the quantum, but not (necessarily)
|
||||||
|
@ -63,6 +63,7 @@ let Elements = {};
|
|||||||
[
|
[
|
||||||
["contentShowing", "bcast_contentShowing"],
|
["contentShowing", "bcast_contentShowing"],
|
||||||
["urlbarState", "bcast_urlbarState"],
|
["urlbarState", "bcast_urlbarState"],
|
||||||
|
["mainKeyset", "mainKeyset"],
|
||||||
["stack", "stack"],
|
["stack", "stack"],
|
||||||
["tabList", "tabs"],
|
["tabList", "tabs"],
|
||||||
["tabs", "tabs-container"],
|
["tabs", "tabs-container"],
|
||||||
@ -945,9 +946,9 @@ var BrowserUI = {
|
|||||||
break;
|
break;
|
||||||
// Window events
|
// Window events
|
||||||
case "keypress":
|
case "keypress":
|
||||||
// Ignore events headed toward the browser; they will be
|
// Ignore events re-dispatched from content; we already
|
||||||
// re-dispatched after content has a chance to handle them.
|
// handled them when they were originally fired.
|
||||||
if (aEvent.target.localName == "browser")
|
if (aEvent.target == Elements.mainKeyset)
|
||||||
break;
|
break;
|
||||||
if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE)
|
if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE)
|
||||||
this.handleEscape(aEvent);
|
this.handleEscape(aEvent);
|
||||||
|
@ -1236,7 +1236,7 @@ var Browser = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "Browser:KeyPress": {
|
case "Browser:KeyPress": {
|
||||||
let keyset = document.getElementById("mainKeyset");
|
let keyset = Elements.mainKeyset;
|
||||||
keyset.setAttribute("disabled", "false");
|
keyset.setAttribute("disabled", "false");
|
||||||
if (json.preventDefault)
|
if (json.preventDefault)
|
||||||
break;
|
break;
|
||||||
|
@ -101,6 +101,20 @@ function testReturnToOwner() {
|
|||||||
EventUtils.sendKey("ESCAPE", window);
|
EventUtils.sendKey("ESCAPE", window);
|
||||||
is(Browser.selectedTab, tab1, "tab1 is selected");
|
is(Browser.selectedTab, tab1, "tab1 is selected");
|
||||||
closeTabs();
|
closeTabs();
|
||||||
|
testContextMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testContextMenu() {
|
||||||
|
ContextHelper.showPopup({
|
||||||
|
json: {
|
||||||
|
types: ['link']
|
||||||
|
},
|
||||||
|
target: Browser.selectedBrowser
|
||||||
|
});
|
||||||
|
ok(ContextHelper.popupState, "Context menu is shown");
|
||||||
|
Browser.selectedBrowser.focus();
|
||||||
|
EventUtils.synthesizeKey("VK_ESCAPE", {type: "keypress"}, window);
|
||||||
|
ok(!ContextHelper.popupState, "Context menu is dismissed");
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -791,6 +791,15 @@
|
|||||||
<method name="_init">
|
<method name="_init">
|
||||||
<body>
|
<body>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
|
// We'll default to YYYY/MM/DD to start.
|
||||||
|
var yfield = "input-one";
|
||||||
|
var mfield = "input-two";
|
||||||
|
var dfield = "input-three";
|
||||||
|
var twoDigitYear = false;
|
||||||
|
this.yearLeadingZero = true;
|
||||||
|
this.monthLeadingZero = true;
|
||||||
|
this.dateLeadingZero = true;
|
||||||
|
|
||||||
var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
|
var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
|
||||||
|
|
||||||
var dt = new Date(2002,9,4).toLocaleFormat("%x");
|
var dt = new Date(2002,9,4).toLocaleFormat("%x");
|
||||||
@ -799,11 +808,8 @@
|
|||||||
this._separatorFirst.value = numberFields[3];
|
this._separatorFirst.value = numberFields[3];
|
||||||
this._separatorSecond.value = numberFields[5];
|
this._separatorSecond.value = numberFields[5];
|
||||||
|
|
||||||
var twoDigitYear = false;
|
|
||||||
var yfield = "input-one";
|
|
||||||
var mfield = "input-two";
|
|
||||||
var dfield = "input-three";
|
|
||||||
var yi = 2, mi = 4, di = 6;
|
var yi = 2, mi = 4, di = 6;
|
||||||
|
|
||||||
for (var i = 1; i < numberFields.length; i++) {
|
for (var i = 1; i < numberFields.length; i++) {
|
||||||
switch (Number(numberFields[i])) {
|
switch (Number(numberFields[i])) {
|
||||||
case 2:
|
case 2:
|
||||||
@ -825,6 +831,10 @@
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.yearLeadingZero = (numberFields[yi].length > 1);
|
||||||
|
this.monthLeadingZero = (numberFields[mi].length > 1);
|
||||||
|
this.dateLeadingZero = (numberFields[di].length > 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.yearField = document.getAnonymousElementByAttribute(this, "anonid", yfield);
|
this.yearField = document.getAnonymousElementByAttribute(this, "anonid", yfield);
|
||||||
@ -834,10 +844,6 @@
|
|||||||
this.monthField = document.getAnonymousElementByAttribute(this, "anonid", mfield);
|
this.monthField = document.getAnonymousElementByAttribute(this, "anonid", mfield);
|
||||||
this.dateField = document.getAnonymousElementByAttribute(this, "anonid", dfield);
|
this.dateField = document.getAnonymousElementByAttribute(this, "anonid", dfield);
|
||||||
|
|
||||||
this.yearLeadingZero = (numberFields[yi].length > 1);
|
|
||||||
this.monthLeadingZero = (numberFields[mi].length > 1);
|
|
||||||
this.dateLeadingZero = (numberFields[di].length > 1);
|
|
||||||
|
|
||||||
this._fieldAMPM.parentNode.collapsed = true;
|
this._fieldAMPM.parentNode.collapsed = true;
|
||||||
this.yearField.size = twoDigitYear ? 2 : 4;
|
this.yearField.size = twoDigitYear ? 2 : 4;
|
||||||
this.yearField.maxLength = twoDigitYear ? 2 : 4;
|
this.yearField.maxLength = twoDigitYear ? 2 : 4;
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
|
|
||||||
<binding id="notificationbox">
|
<binding id="notificationbox">
|
||||||
<content>
|
<content>
|
||||||
<xul:stack xbl:inherits="hidden=notificationshidden">
|
<xul:stack xbl:inherits="hidden=notificationshidden"
|
||||||
|
class="notificationbox-stack">
|
||||||
<xul:spacer/>
|
<xul:spacer/>
|
||||||
<children includes="notification"/>
|
<children includes="notification"/>
|
||||||
</xul:stack>
|
</xul:stack>
|
||||||
|
@ -191,6 +191,10 @@ notificationbox {
|
|||||||
-moz-box-orient: vertical;
|
-moz-box-orient: vertical;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notificationbox-stack {
|
||||||
|
overflow: -moz-hidden-unscrollable;
|
||||||
|
}
|
||||||
|
|
||||||
notification {
|
notification {
|
||||||
-moz-binding: url("chrome://global/content/bindings/notification.xml#notification");
|
-moz-binding: url("chrome://global/content/bindings/notification.xml#notification");
|
||||||
-moz-transition: margin-top 300ms, opacity 300ms;
|
-moz-transition: margin-top 300ms, opacity 300ms;
|
||||||
|
@ -96,6 +96,7 @@ STATIC_LIBS += \
|
|||||||
ipcshell_s \
|
ipcshell_s \
|
||||||
gfx2d \
|
gfx2d \
|
||||||
gfxipc_s \
|
gfxipc_s \
|
||||||
|
hal_s \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
ifdef MOZ_IPDL_TESTS
|
ifdef MOZ_IPDL_TESTS
|
||||||
|
@ -734,6 +734,10 @@ MAKEFILES_startupcache="
|
|||||||
startupcache/Makefile
|
startupcache/Makefile
|
||||||
"
|
"
|
||||||
|
|
||||||
|
MAKEFILES_hal="
|
||||||
|
hal/Makefile
|
||||||
|
"
|
||||||
|
|
||||||
add_makefiles "
|
add_makefiles "
|
||||||
$MAKEFILES_db
|
$MAKEFILES_db
|
||||||
$MAKEFILES_dom
|
$MAKEFILES_dom
|
||||||
@ -775,6 +779,7 @@ add_makefiles "
|
|||||||
$MAKEFILES_libmar
|
$MAKEFILES_libmar
|
||||||
$MAKEFILES_extensions
|
$MAKEFILES_extensions
|
||||||
$MAKEFILES_startupcache
|
$MAKEFILES_startupcache
|
||||||
|
$MAKEFILES_hal
|
||||||
"
|
"
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -94,6 +94,7 @@ tier_platform_dirs += gfx/qcms
|
|||||||
tier_platform_dirs += ipc js/ipc js/jetpack
|
tier_platform_dirs += ipc js/ipc js/jetpack
|
||||||
|
|
||||||
tier_platform_dirs += \
|
tier_platform_dirs += \
|
||||||
|
hal \
|
||||||
js/src/xpconnect \
|
js/src/xpconnect \
|
||||||
intl/chardet \
|
intl/chardet \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
#endif // MOZ_WIDGET_QT
|
#endif // MOZ_WIDGET_QT
|
||||||
|
|
||||||
#include "mozilla/dom/ContentParent.h"
|
#include "mozilla/dom/ContentParent.h"
|
||||||
|
#include "mozilla/dom/ContentChild.h"
|
||||||
|
|
||||||
#include "nsAppRunner.h"
|
#include "nsAppRunner.h"
|
||||||
#include "nsUpdateDriver.h"
|
#include "nsUpdateDriver.h"
|
||||||
@ -253,6 +254,7 @@ static char **gQtOnlyArgv;
|
|||||||
#include "BinaryPath.h"
|
#include "BinaryPath.h"
|
||||||
|
|
||||||
using mozilla::dom::ContentParent;
|
using mozilla::dom::ContentParent;
|
||||||
|
using mozilla::dom::ContentChild;
|
||||||
|
|
||||||
// Save literal putenv string to environment variable.
|
// Save literal putenv string to environment variable.
|
||||||
static void
|
static void
|
||||||
@ -607,7 +609,8 @@ NS_INTERFACE_MAP_BEGIN(nsXULAppInfo)
|
|||||||
#ifdef MOZ_CRASHREPORTER
|
#ifdef MOZ_CRASHREPORTER
|
||||||
NS_INTERFACE_MAP_ENTRY(nsICrashReporter)
|
NS_INTERFACE_MAP_ENTRY(nsICrashReporter)
|
||||||
#endif
|
#endif
|
||||||
NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsIXULAppInfo, gAppData)
|
NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsIXULAppInfo, gAppData ||
|
||||||
|
XRE_GetProcessType() == GeckoProcessType_Content)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
NS_IMETHODIMP_(nsrefcnt)
|
NS_IMETHODIMP_(nsrefcnt)
|
||||||
@ -625,6 +628,10 @@ nsXULAppInfo::Release()
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsXULAppInfo::GetVendor(nsACString& aResult)
|
nsXULAppInfo::GetVendor(nsACString& aResult)
|
||||||
{
|
{
|
||||||
|
if (XRE_GetProcessType() == GeckoProcessType_Content) {
|
||||||
|
NS_WARNING("Attempt to get unavailable information in content process.");
|
||||||
|
return NS_ERROR_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
aResult.Assign(gAppData->vendor);
|
aResult.Assign(gAppData->vendor);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
@ -633,6 +640,10 @@ nsXULAppInfo::GetVendor(nsACString& aResult)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsXULAppInfo::GetName(nsACString& aResult)
|
nsXULAppInfo::GetName(nsACString& aResult)
|
||||||
{
|
{
|
||||||
|
if (XRE_GetProcessType() == GeckoProcessType_Content) {
|
||||||
|
NS_WARNING("Attempt to get unavailable information in content process.");
|
||||||
|
return NS_ERROR_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
aResult.Assign(gAppData->name);
|
aResult.Assign(gAppData->name);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
@ -641,6 +652,10 @@ nsXULAppInfo::GetName(nsACString& aResult)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsXULAppInfo::GetID(nsACString& aResult)
|
nsXULAppInfo::GetID(nsACString& aResult)
|
||||||
{
|
{
|
||||||
|
if (XRE_GetProcessType() == GeckoProcessType_Content) {
|
||||||
|
NS_WARNING("Attempt to get unavailable information in content process.");
|
||||||
|
return NS_ERROR_NOT_AVAILABLE;
|
||||||
|
}
|
||||||
aResult.Assign(gAppData->ID);
|
aResult.Assign(gAppData->ID);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
@ -649,6 +664,11 @@ nsXULAppInfo::GetID(nsACString& aResult)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsXULAppInfo::GetVersion(nsACString& aResult)
|
nsXULAppInfo::GetVersion(nsACString& aResult)
|
||||||
{
|
{
|
||||||
|
if (XRE_GetProcessType() == GeckoProcessType_Content) {
|
||||||
|
ContentChild* cc = ContentChild::GetSingleton();
|
||||||
|
aResult = cc->GetAppInfo().version;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
aResult.Assign(gAppData->version);
|
aResult.Assign(gAppData->version);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
@ -665,6 +685,11 @@ nsXULAppInfo::GetPlatformVersion(nsACString& aResult)
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsXULAppInfo::GetAppBuildID(nsACString& aResult)
|
nsXULAppInfo::GetAppBuildID(nsACString& aResult)
|
||||||
{
|
{
|
||||||
|
if (XRE_GetProcessType() == GeckoProcessType_Content) {
|
||||||
|
ContentChild* cc = ContentChild::GetSingleton();
|
||||||
|
aResult = cc->GetAppInfo().buildID;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
aResult.Assign(gAppData->buildID);
|
aResult.Assign(gAppData->buildID);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -56,6 +56,7 @@ CPPSRCS = \
|
|||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
OS_LIBS = \
|
OS_LIBS = \
|
||||||
|
-ldl \
|
||||||
-lbfd \
|
-lbfd \
|
||||||
-liberty \
|
-liberty \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
@ -1284,6 +1284,11 @@ class nsAutoTArray : public nsAutoArrayBase<nsTArray<E, Alloc>, N>
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nsAutoTArray() {}
|
nsAutoTArray() {}
|
||||||
|
|
||||||
|
template<typename Allocator>
|
||||||
|
nsAutoTArray(const nsTArray<E, Allocator>& other) {
|
||||||
|
AppendElements(other);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class E, PRUint32 N>
|
template<class E, PRUint32 N>
|
||||||
@ -1291,6 +1296,11 @@ class AutoFallibleTArray : public nsAutoArrayBase<FallibleTArray<E>, N>
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AutoFallibleTArray() {}
|
AutoFallibleTArray() {}
|
||||||
|
|
||||||
|
template<typename Allocator>
|
||||||
|
AutoFallibleTArray(const nsTArray<E, Allocator>& other) {
|
||||||
|
AppendElements(other);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(MOZALLOC_HAVE_XMALLOC)
|
#if defined(MOZALLOC_HAVE_XMALLOC)
|
||||||
@ -1299,6 +1309,11 @@ class AutoInfallibleTArray : public nsAutoArrayBase<InfallibleTArray<E>, N>
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AutoInfallibleTArray() {}
|
AutoInfallibleTArray() {}
|
||||||
|
|
||||||
|
template<typename Allocator>
|
||||||
|
AutoInfallibleTArray(const nsTArray<E, Allocator>& other) {
|
||||||
|
AppendElements(other);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user