This commit is contained in:
Ehsan Akhgari 2011-03-31 11:01:13 -04:00
Родитель e1620a7ff5 243d9d8536
Коммит 3ab000ad6e
298 изменённых файлов: 2259 добавлений и 375 удалений

Просмотреть файл

@ -948,8 +948,10 @@ pref("dom.ipc.plugins.enabled.i386.flash player.plugin", true);
pref("dom.ipc.plugins.enabled.i386.javaplugin2_npapi.plugin", true);
// x86_64 ipc preferences
pref("dom.ipc.plugins.enabled.x86_64", true);
#else
#elifdef MOZ_IPC
pref("dom.ipc.plugins.enabled", true);
#else
pref("dom.ipc.plugins.enabled", false);
#endif
#ifdef XP_WIN

Просмотреть файл

@ -94,6 +94,7 @@ DEFINES += -DMOZ_D3DX9_DLL=$(MOZ_D3DX9_DLL)
DEFINES += -DMOZ_D3DCOMPILER_DLL=$(MOZ_D3DCOMPILER_DLL)
endif
# Don't ifdef MOZ_IPC this because mac ppc needs it too.
include $(topsrcdir)/ipc/app/defs.mk
DEFINES += -DMOZ_CHILD_PROCESS_NAME=$(MOZ_CHILD_PROCESS_NAME)

Просмотреть файл

@ -51,11 +51,13 @@
#else
@BINPATH@/@DLL_PREFIX@xul@DLL_SUFFIX@
#endif
#ifdef MOZ_IPC
#ifdef XP_MACOSX
@BINPATH@/@MOZ_CHILD_PROCESS_NAME@.app/
#else
@BINPATH@/@MOZ_CHILD_PROCESS_NAME@
#endif
#endif
#ifdef WINCE
@BINPATH@/mozce_shunt.dll
#elifdef XP_WIN32

Просмотреть файл

@ -9,7 +9,7 @@
!define AppName "Firefox"
!define AppVersion "@APP_VERSION@"
#ifdef HAVE_64BIT_OS
// differentiate 64-bit builds, we do the same in widget.
; differentiate 64-bit builds, we do the same in widget.
!define AppUserModelID "${AppVendor}.${AppName}.${AppVersion}.Win64"
#else
!define AppUserModelID "${AppVendor}.${AppName}.${AppVersion}"

Просмотреть файл

@ -58,9 +58,12 @@ CPPSRCS = \
nsChromeRegistry.cpp \
nsChromeRegistryChrome.cpp \
nsChromeProtocolHandler.cpp \
nsChromeRegistryContent.cpp \
$(NULL)
ifdef MOZ_IPC
CPPSRCS += nsChromeRegistryContent.cpp
endif
EXTRA_DSO_LDOPTS = \
$(MOZ_UNICHARUTIL_LIBS) \
$(MOZ_COMPONENT_LIBS) \

Просмотреть файл

@ -41,7 +41,9 @@
#include "nsChromeRegistry.h"
#include "nsChromeRegistryChrome.h"
#ifdef MOZ_IPC
#include "nsChromeRegistryContent.h"
#endif
#include <string.h>
@ -675,9 +677,11 @@ nsChromeRegistry::GetSingleton()
}
nsRefPtr<nsChromeRegistry> cr;
#ifdef MOZ_IPC
if (GeckoProcessType_Content == XRE_GetProcessType())
cr = new nsChromeRegistryContent();
else
#endif
cr = new nsChromeRegistryChrome();
if (NS_FAILED(cr->Init()))

Просмотреть файл

@ -36,9 +36,11 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "mozilla/dom/PContentParent.h"
#include "RegistryMessageUtils.h"
#include "nsResProtocolHandler.h"
#endif
#include "nsChromeRegistryChrome.h"
@ -441,6 +443,7 @@ void nsChromeRegistryChrome::UpdateSelectedLocale()
}
}
#ifdef MOZ_IPC
static void
SerializeURI(nsIURI* aURI,
SerializedURI& aSerializedURI)
@ -538,6 +541,7 @@ nsChromeRegistryChrome::CollectPackages(PLDHashTable *table,
args->packages.AppendElement(chromePackage);
return (PLDHashOperator)PL_DHASH_NEXT;
}
#endif
static PRBool
CanLoadResource(nsIURI* aResourceURI)

Просмотреть файл

@ -75,12 +75,16 @@ class nsChromeRegistryChrome : public nsChromeRegistry
nsISimpleEnumerator **_retval);
#endif
#ifdef MOZ_IPC
void SendRegisteredChrome(mozilla::dom::PContentParent* aChild);
#endif
private:
#ifdef MOZ_IPC
static PLDHashOperator CollectPackages(PLDHashTable *table,
PLDHashEntryHdr *entry,
PRUint32 number, void *arg);
#endif
nsresult SelectLocaleFromPref(nsIPrefBranch* prefs);
NS_OVERRIDE void UpdateSelectedLocale();

Просмотреть файл

@ -47,9 +47,11 @@ MODULE = test_chrome
XPCSHELL_TESTS = unit \
$(NULL)
ifdef MOZ_IPC
# FIXME/bug 575918: out-of-process xpcshell is broken on OS X
ifneq ($(OS_ARCH),Darwin)
XPCSHELL_TESTS += unit_ipc
endif
endif
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -102,6 +102,7 @@ MOZ_DEBUG_FLAGS = @MOZ_DEBUG_FLAGS@
MOZ_DEBUG_LDFLAGS=@MOZ_DEBUG_LDFLAGS@
MOZ_EXTENSIONS = @MOZ_EXTENSIONS@
MOZ_JSDEBUGGER = @MOZ_JSDEBUGGER@
MOZ_IPC = @MOZ_IPC@
MOZ_IPDL_TESTS = @MOZ_IPDL_TESTS@
MOZ_LEAKY = @MOZ_LEAKY@
MOZ_MEMORY = @MOZ_MEMORY@

Просмотреть файл

@ -4950,6 +4950,7 @@ MOZ_BRANDING_DIRECTORY=
MOZ_OFFICIAL_BRANDING=
MOZ_FEEDS=1
MOZ_INSTALLER=1
MOZ_IPC=1
MOZ_JAVAXPCOM=
MOZ_JSDEBUGGER=1
MOZ_MATHML=1
@ -5821,6 +5822,21 @@ MOZ_ARG_DISABLE_BOOL(jsd,
MOZ_JSDEBUGGER=1)
dnl ========================================================
dnl = Disable IPC support for tabs and plugins
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(ipc,
[ --disable-ipc Disable IPC for tabs and plugins (not supported)],
MOZ_IPC=,
MOZ_IPC=1)
if test -z "$MOZ_IPC"; then
AC_MSG_ERROR([--disable-ipc is no longer supported.])
fi
AC_DEFINE(MOZ_IPC)
AC_SUBST(MOZ_IPC)
dnl ========================================================
dnl = Enable IPDL's "expensive" unit tests
dnl ========================================================

Просмотреть файл

@ -178,9 +178,14 @@ EXTRA_COMPONENTS = \
contentSecurityPolicy.manifest \
contentAreaDropListener.js \
contentAreaDropListener.manifest \
$(NULL)
ifdef MOZ_IPC
EXTRA_COMPONENTS += \
messageWakeupService.js \
messageWakeupService.manifest \
$(NULL)
endif
EXTRA_JS_MODULES = \
CSPUtils.jsm \

Просмотреть файл

@ -8350,10 +8350,12 @@ PLDHashOperator UnlockEnumerator(imgIRequest* aKey,
nsresult
nsDocument::SetImageLockingState(PRBool aLocked)
{
#ifdef MOZ_IPC
if (XRE_GetProcessType() == GeckoProcessType_Content &&
!nsContentUtils::GetBoolPref("content.image.allow_locking", PR_TRUE)) {
return NS_OK;
}
#endif // MOZ_IPC
// If there's no change, there's nothing to do.
if (mLockingImages == aLocked)

Просмотреть файл

@ -44,7 +44,9 @@
* handling of loads in it, recursion-checking).
*/
#include "base/basictypes.h"
#ifdef MOZ_IPC
# include "base/basictypes.h"
#endif
#include "prenv.h"
@ -110,12 +112,15 @@
#include "Layers.h"
#ifdef MOZ_IPC
#include "ContentParent.h"
#include "TabParent.h"
#include "mozilla/layout/RenderFrameParent.h"
using namespace mozilla;
using namespace mozilla::dom;
#endif
using namespace mozilla::layers;
typedef FrameMetrics::ViewID ViewID;
@ -319,11 +324,13 @@ nsFrameLoader::nsFrameLoader(nsIContent *aOwner, PRBool aNetworkCreated)
, mInShow(PR_FALSE)
, mHideCalled(PR_FALSE)
, mNetworkCreated(aNetworkCreated)
#ifdef MOZ_IPC
, mDelayRemoteDialogs(PR_FALSE)
, mRemoteBrowserShown(PR_FALSE)
, mRemoteFrame(false)
, mCurrentRemoteFrame(nsnull)
, mRemoteBrowser(nsnull)
#endif
, mRenderMode(RENDER_MODE_DEFAULT)
{
}
@ -441,6 +448,7 @@ nsFrameLoader::ReallyStartLoadingInternal()
return rv;
}
#ifdef MOZ_IPC
if (mRemoteFrame) {
if (!mRemoteBrowser) {
TryRemoteBrowser();
@ -455,6 +463,7 @@ nsFrameLoader::ReallyStartLoadingInternal()
mRemoteBrowser->LoadURL(mURIToLoad);
return NS_OK;
}
#endif
NS_ASSERTION(mDocShell,
"MaybeCreateDocShell succeeded with a null mDocShell");
@ -525,9 +534,11 @@ nsFrameLoader::CheckURILoad(nsIURI* aURI)
if (NS_FAILED(rv)) {
return rv;
}
#ifdef MOZ_IPC
if (mRemoteFrame) {
return NS_OK;
}
#endif
return CheckForRecursiveLoad(aURI);
}
@ -543,10 +554,12 @@ nsFrameLoader::GetDocShell(nsIDocShell **aDocShell)
nsresult rv = MaybeCreateDocShell();
if (NS_FAILED(rv))
return rv;
#ifdef MOZ_IPC
if (mRemoteFrame) {
NS_WARNING("No docshells for remote frames!");
return NS_ERROR_NOT_AVAILABLE;
}
#endif
NS_ASSERTION(mDocShell,
"MaybeCreateDocShell succeeded, but null mDocShell");
}
@ -763,7 +776,10 @@ nsFrameLoader::Show(PRInt32 marginWidth, PRInt32 marginHeight,
return PR_FALSE;
}
if (!mRemoteFrame) {
#ifdef MOZ_IPC
if (!mRemoteFrame)
#endif
{
if (!mDocShell)
return PR_FALSE;
nsCOMPtr<nsIPresShell> presShell;
@ -787,9 +803,11 @@ nsFrameLoader::Show(PRInt32 marginWidth, PRInt32 marginHeight,
if (!view)
return PR_FALSE;
#ifdef MOZ_IPC
if (mRemoteFrame) {
return ShowRemoteFrame(GetSubDocumentSize(frame));
}
#endif
nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(mDocShell);
NS_ASSERTION(baseWindow, "Found a nsIDocShell that isn't a nsIBaseWindow.");
@ -862,6 +880,7 @@ nsFrameLoader::Show(PRInt32 marginWidth, PRInt32 marginHeight,
return PR_TRUE;
}
#ifdef MOZ_IPC
bool
nsFrameLoader::ShowRemoteFrame(const nsIntSize& size)
{
@ -890,6 +909,7 @@ nsFrameLoader::ShowRemoteFrame(const nsIntSize& size)
return true;
}
#endif
void
nsFrameLoader::Hide()
@ -1214,11 +1234,13 @@ nsFrameLoader::SwapWithOtherLoader(nsFrameLoader* aOther,
void
nsFrameLoader::DestroyChild()
{
#ifdef MOZ_IPC
if (mRemoteBrowser) {
mRemoteBrowser->SetOwnerElement(nsnull);
mRemoteBrowser->Destroy();
mRemoteBrowser = nsnull;
}
#endif
}
NS_IMETHODIMP
@ -1305,11 +1327,14 @@ void
nsFrameLoader::SetOwnerContent(nsIContent* aContent)
{
mOwnerContent = aContent;
#ifdef MOZ_IPC
if (RenderFrameParent* rfp = GetCurrentRemoteFrame()) {
rfp->OwnerContentChanged(aContent);
}
#endif
}
#ifdef MOZ_IPC
bool
nsFrameLoader::ShouldUseRemoteProcess()
{
@ -1345,6 +1370,7 @@ nsFrameLoader::ShouldUseRemoteProcess()
PR_FALSE);
return (bool) remoteEnabled;
}
#endif
nsresult
nsFrameLoader::MaybeCreateDocShell()
@ -1352,15 +1378,19 @@ nsFrameLoader::MaybeCreateDocShell()
if (mDocShell) {
return NS_OK;
}
#ifdef MOZ_IPC
if (mRemoteFrame) {
return NS_OK;
}
#endif
NS_ENSURE_STATE(!mDestroyCalled);
#ifdef MOZ_IPC
if (ShouldUseRemoteProcess()) {
mRemoteFrame = true;
return NS_OK;
}
#endif
// Get our parent docshell off the document of mOwnerContent
// XXXbz this is such a total hack.... We really need to have a
@ -1509,8 +1539,10 @@ nsFrameLoader::CheckForRecursiveLoad(nsIURI* aURI)
if (NS_FAILED(rv)) {
return rv;
}
#ifdef MOZ_IPC
NS_ASSERTION(!mRemoteFrame,
"Shouldn't call CheckForRecursiveLoad on remote frames.");
#endif
if (!mDocShell) {
return NS_ERROR_FAILURE;
}
@ -1610,6 +1642,7 @@ nsFrameLoader::CheckForRecursiveLoad(nsIURI* aURI)
NS_IMETHODIMP
nsFrameLoader::UpdatePositionAndSize(nsIFrame *aIFrame)
{
#ifdef MOZ_IPC
if (mRemoteFrame) {
if (mRemoteBrowser) {
nsIntSize size = GetSubDocumentSize(aIFrame);
@ -1617,6 +1650,7 @@ nsFrameLoader::UpdatePositionAndSize(nsIFrame *aIFrame)
}
return NS_OK;
}
#endif
return UpdateBaseWindowPositionAndSize(aIFrame);
}
@ -1684,6 +1718,7 @@ nsFrameLoader::GetSubDocumentSize(const nsIFrame *aIFrame)
presContext->AppUnitsToDevPixels(docSizeAppUnits.height));
}
#ifdef MOZ_IPC
bool
nsFrameLoader::TryRemoteBrowser()
{
@ -1763,19 +1798,24 @@ nsFrameLoader::TryRemoteBrowser()
}
return true;
}
#endif
#ifdef MOZ_IPC
mozilla::dom::PBrowserParent*
nsFrameLoader::GetRemoteBrowser()
{
return mRemoteBrowser;
}
#endif
NS_IMETHODIMP
nsFrameLoader::ActivateRemoteFrame() {
#ifdef MOZ_IPC
if (mRemoteBrowser) {
mRemoteBrowser->Activate();
return NS_OK;
}
#endif
return NS_ERROR_UNEXPECTED;
}
@ -1788,12 +1828,14 @@ nsFrameLoader::SendCrossProcessMouseEvent(const nsAString& aType,
PRInt32 aModifiers,
PRBool aIgnoreRootScrollFrame)
{
#ifdef MOZ_IPC
if (mRemoteBrowser) {
mRemoteBrowser->SendMouseEvent(aType, aX, aY, aButton,
aClickCount, aModifiers,
aIgnoreRootScrollFrame);
return NS_OK;
}
#endif
return NS_ERROR_FAILURE;
}
@ -1801,10 +1843,12 @@ NS_IMETHODIMP
nsFrameLoader::ActivateFrameEvent(const nsAString& aType,
PRBool aCapture)
{
#ifdef MOZ_IPC
if (mRemoteBrowser) {
return mRemoteBrowser->SendActivateFrameEvent(nsString(aType), aCapture) ?
NS_OK : NS_ERROR_NOT_AVAILABLE;
}
#endif
return NS_ERROR_FAILURE;
}
@ -1815,24 +1859,31 @@ nsFrameLoader::SendCrossProcessKeyEvent(const nsAString& aType,
PRInt32 aModifiers,
PRBool aPreventDefault)
{
#ifdef MOZ_IPC
if (mRemoteBrowser) {
mRemoteBrowser->SendKeyEvent(aType, aKeyCode, aCharCode, aModifiers,
aPreventDefault);
return NS_OK;
}
#endif
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP
nsFrameLoader::GetDelayRemoteDialogs(PRBool* aRetVal)
{
#ifdef MOZ_IPC
*aRetVal = mDelayRemoteDialogs;
#else
*aRetVal = PR_FALSE;
#endif
return NS_OK;
}
NS_IMETHODIMP
nsFrameLoader::SetDelayRemoteDialogs(PRBool aDelay)
{
#ifdef MOZ_IPC
if (mRemoteBrowser && mDelayRemoteDialogs && !aDelay) {
nsRefPtr<nsIRunnable> ev =
NS_NewRunnableMethod(mRemoteBrowser,
@ -1840,6 +1891,7 @@ nsFrameLoader::SetDelayRemoteDialogs(PRBool aDelay)
NS_DispatchToCurrentThread(ev);
}
mDelayRemoteDialogs = aDelay;
#endif
return NS_OK;
}
@ -1870,11 +1922,13 @@ nsFrameLoader::CreateStaticClone(nsIFrameLoader* aDest)
bool LoadScript(void* aCallbackData, const nsAString& aURL)
{
#ifdef MOZ_IPC
mozilla::dom::PBrowserParent* tabParent =
static_cast<nsFrameLoader*>(aCallbackData)->GetRemoteBrowser();
if (tabParent) {
return tabParent->SendLoadRemoteScript(nsString(aURL));
}
#endif
nsFrameLoader* fl = static_cast<nsFrameLoader*>(aCallbackData);
nsRefPtr<nsInProcessTabChildGlobal> tabChild =
static_cast<nsInProcessTabChildGlobal*>(fl->GetTabChildGlobalAsEventTarget());
@ -1911,11 +1965,13 @@ bool SendAsyncMessageToChild(void* aCallbackData,
const nsAString& aMessage,
const nsAString& aJSON)
{
#ifdef MOZ_IPC
mozilla::dom::PBrowserParent* tabParent =
static_cast<nsFrameLoader*>(aCallbackData)->GetRemoteBrowser();
if (tabParent) {
return tabParent->SendAsyncMessage(nsString(aMessage), nsString(aJSON));
}
#endif
nsRefPtr<nsIRunnable> ev =
new nsAsyncMessageToChild(static_cast<nsFrameLoader*>(aCallbackData),
aMessage, aJSON);
@ -1940,6 +1996,7 @@ nsFrameLoader::GetContentViewsIn(float aXPx, float aYPx,
PRUint32* aLength,
nsIContentView*** aResult)
{
#ifdef MOZ_IPC
nscoord x = nsPresContext::CSSPixelsToAppUnits(aXPx - aLeftSize);
nscoord y = nsPresContext::CSSPixelsToAppUnits(aYPx - aTopSize);
nscoord w = nsPresContext::CSSPixelsToAppUnits(aLeftSize + aRightSize) + 1;
@ -1967,6 +2024,10 @@ nsFrameLoader::GetContentViewsIn(float aXPx, float aYPx,
*aResult = result;
*aLength = ids.Length();
#else
*aResult = nsnull;
*aLength = 0;
#endif
return NS_OK;
}
@ -1974,6 +2035,7 @@ nsFrameLoader::GetContentViewsIn(float aXPx, float aYPx,
NS_IMETHODIMP
nsFrameLoader::GetRootContentView(nsIContentView** aContentView)
{
#ifdef MOZ_IPC
RenderFrameParent* rfp = GetCurrentRemoteFrame();
if (!rfp) {
*aContentView = nsnull;
@ -1985,6 +2047,10 @@ nsFrameLoader::GetRootContentView(nsIContentView** aContentView)
nsRefPtr<nsIContentView>(view).forget(aContentView);
return NS_OK;
#else
return NS_ERROR_NOT_IMPLEMENTED;
#endif
}
nsresult
@ -1997,14 +2063,20 @@ nsFrameLoader::EnsureMessageManager()
return rv;
}
if (!mIsTopLevelContent && !mRemoteFrame) {
if (!mIsTopLevelContent
#ifdef MOZ_IPC
&& !mRemoteFrame
#endif
) {
return NS_OK;
}
if (mMessageManager) {
#ifdef MOZ_IPC
if (ShouldUseRemoteProcess()) {
mMessageManager->SetCallbackData(mRemoteBrowserShown ? this : nsnull);
}
#endif
return NS_OK;
}
@ -2020,6 +2092,7 @@ nsFrameLoader::EnsureMessageManager()
nsCOMPtr<nsIChromeFrameMessageManager> parentManager;
chromeWindow->GetMessageManager(getter_AddRefs(parentManager));
#ifdef MOZ_IPC
if (ShouldUseRemoteProcess()) {
mMessageManager = new nsFrameMessageManager(PR_TRUE,
nsnull,
@ -2030,6 +2103,7 @@ nsFrameLoader::EnsureMessageManager()
cx);
NS_ENSURE_TRUE(mMessageManager, NS_ERROR_OUT_OF_MEMORY);
} else
#endif
{
mMessageManager = new nsFrameMessageManager(PR_TRUE,

Просмотреть файл

@ -61,6 +61,7 @@ class nsIView;
class nsIInProcessContentFrameMessageManager;
class AutoResetInShow;
#ifdef MOZ_IPC
namespace mozilla {
namespace dom {
class PBrowserParent;
@ -78,6 +79,7 @@ typedef struct _GtkWidget GtkWidget;
#ifdef MOZ_WIDGET_QT
class QX11EmbedContainer;
#endif
#endif
/**
* Defines a target configuration for this <browser>'s content
@ -165,9 +167,11 @@ class nsFrameLoader : public nsIFrameLoader,
public nsIContentViewManager
{
friend class AutoResetInShow;
#ifdef MOZ_IPC
typedef mozilla::dom::PBrowserParent PBrowserParent;
typedef mozilla::dom::TabParent TabParent;
typedef mozilla::layout::RenderFrameParent RenderFrameParent;
#endif
protected:
nsFrameLoader(nsIContent *aOwner, PRBool aNetworkCreated);
@ -242,6 +246,7 @@ public:
nsIDocument* GetOwnerDoc() const
{ return mOwnerContent ? mOwnerContent->GetOwnerDoc() : nsnull; }
#ifdef MOZ_IPC
PBrowserParent* GetRemoteBrowser();
/**
@ -272,6 +277,7 @@ public:
{
mCurrentRemoteFrame = aFrame;
}
#endif
nsFrameMessageManager* GetFrameMessageManager() { return mMessageManager; }
nsIContent* GetOwnerContent() { return mOwnerContent; }
@ -279,7 +285,9 @@ public:
private:
#ifdef MOZ_IPC
bool ShouldUseRemoteProcess();
#endif
/**
* If we are an IPC frame, set mRemoteFrame. Otherwise, create and
@ -299,11 +307,13 @@ private:
void FireErrorEvent();
nsresult ReallyStartLoadingInternal();
#ifdef MOZ_IPC
// Return true if remote browser created; nothing else to do
bool TryRemoteBrowser();
// Tell the remote browser that it's now "virtually visible"
bool ShowRemoteFrame(const nsIntSize& size);
#endif
nsCOMPtr<nsIDocShell> mDocShell;
nsCOMPtr<nsIURI> mURIToLoad;
@ -325,6 +335,7 @@ private:
// it may lose the flag.
PRPackedBool mNetworkCreated : 1;
#ifdef MOZ_IPC
PRPackedBool mDelayRemoteDialogs : 1;
PRPackedBool mRemoteBrowserShown : 1;
bool mRemoteFrame;
@ -332,6 +343,7 @@ private:
nsCOMPtr<nsIObserver> mChildHost;
RenderFrameParent* mCurrentRemoteFrame;
TabParent* mRemoteBrowser;
#endif
// See nsIFrameLoader.idl. Short story, if !(mRenderMode &
// RENDER_MODE_ASYNC_SCROLL), all the fields below are ignored in

Просмотреть файл

@ -35,8 +35,10 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "ContentChild.h"
#include "ContentParent.h"
#endif
#include "jscntxt.h"
#include "nsFrameMessageManager.h"
#include "nsContentUtils.h"
@ -727,6 +729,7 @@ NS_IMPL_ISUPPORTS1(nsScriptCacheCleaner, nsIObserver)
nsFrameMessageManager* nsFrameMessageManager::sChildProcessManager = nsnull;
nsFrameMessageManager* nsFrameMessageManager::sParentProcessManager = nsnull;
#ifdef MOZ_IPC
bool SendAsyncMessageToChildProcess(void* aCallbackData,
const nsAString& aMessage,
const nsAString& aJSON)
@ -766,11 +769,14 @@ bool SendAsyncMessageToParentProcess(void* aCallbackData,
return true;
}
#endif
nsresult
NS_NewParentProcessMessageManager(nsIFrameMessageManager** aResult)
{
NS_ASSERTION(!nsFrameMessageManager::sParentProcessManager,
"Re-creating sParentProcessManager");
#ifdef MOZ_IPC
NS_ENSURE_TRUE(IsChromeProcess(), NS_ERROR_NOT_AVAILABLE);
nsFrameMessageManager* mm = new nsFrameMessageManager(PR_TRUE,
nsnull,
@ -784,6 +790,9 @@ NS_NewParentProcessMessageManager(nsIFrameMessageManager** aResult)
NS_ENSURE_TRUE(mm, NS_ERROR_OUT_OF_MEMORY);
nsFrameMessageManager::sParentProcessManager = mm;
return CallQueryInterface(mm, aResult);
#else
return NS_ERROR_NOT_AVAILABLE;
#endif
}
@ -792,6 +801,7 @@ NS_NewChildProcessMessageManager(nsISyncMessageSender** aResult)
{
NS_ASSERTION(!nsFrameMessageManager::sChildProcessManager,
"Re-creating sChildProcessManager");
#ifdef MOZ_IPC
NS_ENSURE_TRUE(!IsChromeProcess(), NS_ERROR_NOT_AVAILABLE);
nsFrameMessageManager* mm = new nsFrameMessageManager(PR_FALSE,
SendSyncMessageToParentProcess,
@ -805,4 +815,7 @@ NS_NewChildProcessMessageManager(nsISyncMessageSender** aResult)
NS_ENSURE_TRUE(mm, NS_ERROR_OUT_OF_MEMORY);
nsFrameMessageManager::sChildProcessManager = mm;
return CallQueryInterface(mm, aResult);
#else
return NS_ERROR_NOT_AVAILABLE;
#endif
}

Просмотреть файл

@ -560,6 +560,7 @@ GK_ATOM(member, "member")
GK_ATOM(menu, "menu")
GK_ATOM(menubar, "menubar")
GK_ATOM(menubutton, "menubutton")
GK_ATOM(menuButton, "menu-button")
GK_ATOM(menugenerated, "menugenerated")
GK_ATOM(menuitem, "menuitem")
GK_ATOM(menulist, "menulist")
@ -915,6 +916,7 @@ GK_ATOM(span, "span")
GK_ATOM(spellcheck, "spellcheck")
GK_ATOM(spinner, "spinner")
GK_ATOM(split, "split")
GK_ATOM(splitmenu, "splitmenu")
GK_ATOM(splitter, "splitter")
GK_ATOM(spring, "spring")
GK_ATOM(src, "src")

Просмотреть файл

@ -55,9 +55,14 @@ CPPSRCS = \
CanvasImageCache.cpp \
CanvasUtils.cpp \
nsCanvasRenderingContext2D.cpp \
$(NULL)
ifdef MOZ_IPC
CPPSRCS += \
DocumentRendererParent.cpp \
DocumentRendererChild.cpp \
$(NULL)
endif
# Canvas 3D Pieces

Просмотреть файл

@ -38,7 +38,9 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
# include "base/basictypes.h"
#endif
#include "nsIDOMXULElement.h"
@ -117,6 +119,7 @@
#include "nsStyleUtil.h"
#include "CanvasImageCache.h"
#ifdef MOZ_IPC
# include <algorithm>
# include "mozilla/dom/ContentParent.h"
# include "mozilla/ipc/PDocumentRendererParent.h"
@ -127,6 +130,7 @@
# undef DrawText
using namespace mozilla::ipc;
#endif
#ifdef MOZ_SVG
#include "nsSVGEffects.h"
@ -1230,6 +1234,7 @@ nsCanvasRenderingContext2D::SetIsOpaque(PRBool isOpaque)
NS_IMETHODIMP
nsCanvasRenderingContext2D::SetIsIPC(PRBool isIPC)
{
#ifdef MOZ_IPC
if (isIPC == mIPC)
return NS_OK;
@ -1243,6 +1248,9 @@ nsCanvasRenderingContext2D::SetIsIPC(PRBool isIPC)
}
return NS_OK;
#else
return NS_ERROR_NOT_IMPLEMENTED;
#endif
}
NS_IMETHODIMP
@ -3759,6 +3767,7 @@ nsCanvasRenderingContext2D::AsyncDrawXULElement(nsIDOMXULElement* aElem, float a
if (!frameloader)
return NS_ERROR_FAILURE;
#ifdef MOZ_IPC
PBrowserParent *child = frameloader->GetRemoteBrowser();
if (!child) {
nsCOMPtr<nsIDOMWindow> window =
@ -3806,6 +3815,14 @@ nsCanvasRenderingContext2D::AsyncDrawXULElement(nsIDOMXULElement* aElem, float a
}
return NS_OK;
#else
nsCOMPtr<nsIDOMWindow> window =
do_GetInterface(frameloader->GetExistingDocShell());
if (!window)
return NS_ERROR_FAILURE;
return DrawWindow(window, aX, aY, aW, aH, aBGColor, flags);
#endif
}
//

Просмотреть файл

@ -37,8 +37,10 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "base/basictypes.h"
#include "IPC/IPCMessageUtils.h"
#endif
#include "nsCOMPtr.h"
#include "nsDOMEvent.h"
#include "nsEventStateManager.h"
@ -1368,6 +1370,7 @@ nsDOMEvent::GetPreventDefault(PRBool* aReturn)
void
nsDOMEvent::Serialize(IPC::Message* aMsg, PRBool aSerializeInterfaceType)
{
#ifdef MOZ_IPC
if (aSerializeInterfaceType) {
IPC::WriteParam(aMsg, NS_LITERAL_STRING("event"));
}
@ -1389,11 +1392,13 @@ nsDOMEvent::Serialize(IPC::Message* aMsg, PRBool aSerializeInterfaceType)
IPC::WriteParam(aMsg, trusted);
// No timestamp serialization for now!
#endif
}
PRBool
nsDOMEvent::Deserialize(const IPC::Message* aMsg, void** aIter)
{
#ifdef MOZ_IPC
nsString type;
NS_ENSURE_TRUE(IPC::ReadParam(aMsg, aIter, &type), PR_FALSE);
@ -1411,6 +1416,9 @@ nsDOMEvent::Deserialize(const IPC::Message* aMsg, void** aIter)
SetTrusted(trusted);
return PR_TRUE;
#else
return PR_FALSE;
#endif
}

Просмотреть файл

@ -36,8 +36,10 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "base/basictypes.h"
#include "IPC/IPCMessageUtils.h"
#endif
#include "nsDOMNotifyPaintEvent.h"
#include "nsContentUtils.h"
#include "nsClientRect.h"
@ -146,6 +148,7 @@ nsDOMNotifyPaintEvent::GetPaintRequests(nsIDOMPaintRequestList** aResult)
return NS_OK;
}
#ifdef MOZ_IPC
void
nsDOMNotifyPaintEvent::Serialize(IPC::Message* aMsg,
PRBool aSerializeInterfaceType)
@ -187,6 +190,7 @@ nsDOMNotifyPaintEvent::Deserialize(const IPC::Message* aMsg, void** aIter)
return PR_TRUE;
}
#endif
nsresult NS_NewDOMNotifyPaintEvent(nsIDOMEvent** aInstancePtrResult,
nsPresContext* aPresContext,

Просмотреть файл

@ -61,8 +61,10 @@ public:
// Forward to base class
NS_FORWARD_TO_NSDOMEVENT
#ifdef MOZ_IPC
virtual void Serialize(IPC::Message* aMsg, PRBool aSerializeInterfaceType);
virtual PRBool Deserialize(const IPC::Message* aMsg, void** aIter);
#endif
private:
nsRegion GetRegion();

Просмотреть файл

@ -35,8 +35,10 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "base/basictypes.h"
#include "IPC/IPCMessageUtils.h"
#endif
#include "nsDOMScrollAreaEvent.h"
#include "nsGUIEvent.h"
@ -114,6 +116,7 @@ nsDOMScrollAreaEvent::InitScrollAreaEvent(const nsAString &aEventType,
return NS_OK;
}
#ifdef MOZ_IPC
void
nsDOMScrollAreaEvent::Serialize(IPC::Message* aMsg,
PRBool aSerializeInterfaceType)
@ -149,6 +152,7 @@ nsDOMScrollAreaEvent::Deserialize(const IPC::Message* aMsg, void** aIter)
return PR_TRUE;
}
#endif
nsresult
NS_NewDOMScrollAreaEvent(nsIDOMEvent **aInstancePtrResult,

Просмотреть файл

@ -58,8 +58,10 @@ public:
NS_FORWARD_TO_NSDOMUIEVENT
#ifdef MOZ_IPC
virtual void Serialize(IPC::Message* aMsg, PRBool aSerializeInterfaceType);
virtual PRBool Deserialize(const IPC::Message* aMsg, void** aIter);
#endif
protected:
nsClientRect mClientArea;

Просмотреть файл

@ -37,8 +37,10 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "base/basictypes.h"
#include "IPC/IPCMessageUtils.h"
#endif
#include "nsCOMPtr.h"
#include "nsDOMUIEvent.h"
#include "nsIPresShell.h"
@ -392,6 +394,7 @@ nsDOMUIEvent::DuplicatePrivateData()
return rv;
}
#ifdef MOZ_IPC
void
nsDOMUIEvent::Serialize(IPC::Message* aMsg, PRBool aSerializeInterfaceType)
{
@ -413,6 +416,7 @@ nsDOMUIEvent::Deserialize(const IPC::Message* aMsg, void** aIter)
NS_ENSURE_TRUE(IPC::ReadParam(aMsg, aIter, &mDetail), PR_FALSE);
return PR_TRUE;
}
#endif
nsresult NS_NewDOMUIEvent(nsIDOMEvent** aInstancePtrResult,
nsPresContext* aPresContext,

Просмотреть файл

@ -62,8 +62,10 @@ public:
// nsIPrivateDOMEvent interface
NS_IMETHOD DuplicatePrivateData();
#ifdef MOZ_IPC
virtual void Serialize(IPC::Message* aMsg, PRBool aSerializeInterfaceType);
virtual PRBool Deserialize(const IPC::Message* aMsg, void** aIter);
#endif
// Forward to nsDOMEvent
NS_FORWARD_TO_NSDOMEVENT

Просмотреть файл

@ -44,7 +44,9 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "mozilla/dom/TabParent.h"
#endif
#include "nsCOMPtr.h"
#include "nsEventStateManager.h"
@ -162,7 +164,9 @@
#import <ApplicationServices/ApplicationServices.h>
#endif
#ifdef MOZ_IPC
using namespace mozilla::dom;
#endif
//#define DEBUG_DOCSHELL_FOCUS
@ -1334,16 +1338,20 @@ nsEventStateManager::PreHandleEvent(nsPresContext* aPresContext,
break;
case NS_QUERY_SELECTED_TEXT:
{
#ifdef MOZ_IPC
if (RemoteQueryContentEvent(aEvent))
break;
#endif
nsContentEventHandler handler(mPresContext);
handler.OnQuerySelectedText((nsQueryContentEvent*)aEvent);
}
break;
case NS_QUERY_TEXT_CONTENT:
{
#ifdef MOZ_IPC
if (RemoteQueryContentEvent(aEvent))
break;
#endif
nsContentEventHandler handler(mPresContext);
handler.OnQueryTextContent((nsQueryContentEvent*)aEvent);
}
@ -1399,6 +1407,7 @@ nsEventStateManager::PreHandleEvent(nsPresContext* aPresContext,
break;
case NS_SELECTION_SET:
{
#ifdef MOZ_IPC
nsSelectionEvent *selectionEvent =
static_cast<nsSelectionEvent*>(aEvent);
if (IsTargetCrossProcess(selectionEvent)) {
@ -1407,6 +1416,7 @@ nsEventStateManager::PreHandleEvent(nsPresContext* aPresContext,
selectionEvent->mSucceeded = PR_TRUE;
break;
}
#endif
nsContentEventHandler handler(mPresContext);
handler.OnSelectionEvent((nsSelectionEvent*)aEvent);
}
@ -1427,6 +1437,7 @@ nsEventStateManager::PreHandleEvent(nsPresContext* aPresContext,
DoContentCommandScrollEvent(static_cast<nsContentCommandEvent*>(aEvent));
}
break;
#ifdef MOZ_IPC
case NS_TEXT_TEXT:
{
nsTextEvent *textEvent = static_cast<nsTextEvent*>(aEvent);
@ -1453,6 +1464,7 @@ nsEventStateManager::PreHandleEvent(nsPresContext* aPresContext,
}
}
break;
#endif // MOZ_IPC
}
return NS_OK;
}
@ -3325,6 +3337,7 @@ nsEventStateManager::PostHandleEvent(nsPresContext* aPresContext,
return ret;
}
#ifdef MOZ_IPC
PRBool
nsEventStateManager::RemoteQueryContentEvent(nsEvent *aEvent)
{
@ -3354,6 +3367,7 @@ nsEventStateManager::IsTargetCrossProcess(nsGUIEvent *aEvent)
return PR_FALSE;
return TabParent::GetIMETabParent() != nsnull;
}
#endif
NS_IMETHODIMP
nsEventStateManager::NotifyDestroyPresContext(nsPresContext* aPresContext)

Просмотреть файл

@ -349,9 +349,11 @@ protected:
nsresult DoContentCommandEvent(nsContentCommandEvent* aEvent);
nsresult DoContentCommandScrollEvent(nsContentCommandEvent* aEvent);
#ifdef MOZ_IPC
PRBool RemoteQueryContentEvent(nsEvent *aEvent);
mozilla::dom::TabParent *GetCrossProcessTarget();
PRBool IsTargetCrossProcess(nsGUIEvent *aEvent);
#endif
PRInt32 mLockCursor;

Просмотреть файл

@ -50,9 +50,14 @@ LIBXUL_LIBRARY = 1
EXPORTS = \
nsImageMapUtils.h \
nsClientRect.h \
nsHTMLDNSPrefetch.h \
$(NULL)
ifdef MOZ_IPC
EXPORTS += \
nsHTMLDNSPrefetch.h \
$(NULL)
endif
CPPSRCS = \
nsClientRect.cpp \
nsHTMLDNSPrefetch.cpp \

Просмотреть файл

@ -553,6 +553,7 @@ NS_IMETHODIMP
nsHTMLCanvasElement::MozGetIPCContext(const nsAString& aContextId,
nsISupports **aContext)
{
#ifdef MOZ_IPC
if(!nsContentUtils::IsCallerTrustedForRead()) {
// XXX ERRMSG we need to report an error to developers here! (bug 329026)
return NS_ERROR_DOM_SECURITY_ERR;
@ -587,6 +588,9 @@ nsHTMLCanvasElement::MozGetIPCContext(const nsAString& aContextId,
NS_ADDREF (*aContext = mCurrentContext);
return NS_OK;
#else
return NS_ERROR_NOT_IMPLEMENTED;
#endif
}
nsresult

Просмотреть файл

@ -36,10 +36,12 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "base/basictypes.h"
#include "mozilla/net/NeckoCommon.h"
#include "mozilla/net/NeckoChild.h"
#include "nsURLHelper.h"
#endif
#include "nsHTMLDNSPrefetch.h"
#include "nsCOMPtr.h"
@ -106,8 +108,10 @@ nsHTMLDNSPrefetch::Initialize()
rv = CallGetService(kDNSServiceCID, &sDNSService);
if (NS_FAILED(rv)) return rv;
#ifdef MOZ_IPC
if (IsNeckoChild())
NeckoChild::InitNeckoChild();
#endif
sInitialized = PR_TRUE;
return NS_OK;
@ -138,6 +142,7 @@ nsHTMLDNSPrefetch::IsAllowed (nsIDocument *aDocument)
nsresult
nsHTMLDNSPrefetch::Prefetch(Link *aElement, PRUint16 flags)
{
#ifdef MOZ_IPC
if (IsNeckoChild()) {
// Instead of transporting the Link object to the other process
// we are using the hostname based function here, too. Compared to the
@ -148,6 +153,7 @@ nsHTMLDNSPrefetch::Prefetch(Link *aElement, PRUint16 flags)
return Prefetch(hostname, flags);
}
#endif
if (!(sInitialized && sPrefetches && sDNSService && sDNSListener))
return NS_ERROR_NOT_AVAILABLE;
@ -176,6 +182,7 @@ nsHTMLDNSPrefetch::PrefetchHigh(Link *aElement)
nsresult
nsHTMLDNSPrefetch::Prefetch(nsAString &hostname, PRUint16 flags)
{
#ifdef MOZ_IPC
if (IsNeckoChild()) {
// We need to check IsEmpty() because net_IsValidHostName()
// considers empty strings to be valid hostnames
@ -185,6 +192,7 @@ nsHTMLDNSPrefetch::Prefetch(nsAString &hostname, PRUint16 flags)
}
return NS_OK;
}
#endif
if (!(sInitialized && sDNSService && sPrefetches && sDNSListener))
return NS_ERROR_NOT_AVAILABLE;

Просмотреть файл

@ -143,7 +143,9 @@ public:
} mEntries[sMaxDeferred];
};
#ifdef MOZ_IPC
friend class mozilla::net::NeckoParent;
#endif
};
#endif

Просмотреть файл

@ -37,12 +37,14 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "mozilla/dom/ContentChild.h"
#include "mozilla/dom/PAudioChild.h"
#include "mozilla/dom/AudioChild.h"
#include "mozilla/Monitor.h"
#include "nsXULAppAPI.h"
using namespace mozilla::dom;
#endif
#include <stdio.h>
#include <math.h>
@ -63,7 +65,7 @@ extern "C" {
// Android's audio backend is not available in content processes, so audio must
// be remoted to the parent chrome process.
#if defined(ANDROID)
#if defined(ANDROID) && defined(MOZ_IPC)
#define REMOTE_AUDIO 1
#endif
@ -120,6 +122,7 @@ class nsAudioStreamLocal : public nsAudioStream
};
#ifdef MOZ_IPC
class nsAudioStreamRemote : public nsAudioStream
{
public:
@ -291,6 +294,7 @@ class AudioShutdownEvent : public nsRunnable
nsRefPtr<AudioChild> mAudioChild;
};
#endif // MOZ_IPC
void nsAudioStream::InitLibrary()
@ -593,6 +597,8 @@ PRInt32 nsAudioStreamLocal::GetMinWriteSamples()
return static_cast<PRInt32>(samples);
}
#ifdef MOZ_IPC
nsAudioStreamRemote::nsAudioStreamRemote()
: mAudioChild(NULL),
mFormat(FORMAT_S16_LE),
@ -744,3 +750,5 @@ nsAudioStreamRemote::IsPaused()
{
return mPaused;
}
#endif // MOZ_IPC

Просмотреть файл

@ -64,13 +64,14 @@ public:
// library after using it.
static void ShutdownLibrary();
// Thread that is shared between audio streams.
// Thread, usually for MOZ_IPC handling, that is shared between audio streams.
// This may return null in the child process
nsIThread *GetThread();
// AllocateStream will return either a local stream or a remoted stream
// depending on where you call it from. If you call this from a child process,
// you may receive an implementation which forwards to a compositing process.
// depending on where you call it from. If MOZ_IPC is enabled, and you
// call this from a child process, you may recieve an implementation which
// forwards to a compositing process.
static nsAudioStream* AllocateStream();
// Initialize the audio stream. aNumChannels is the number of audio channels

Просмотреть файл

@ -71,7 +71,7 @@ public:
* UnregisterVisitedCallback.
*
* @pre aURI must not be null.
* @pre aLink may be null only in the parent (chrome) process.
* @pre aLink may be null only in the MOZ_IPC parent process.
*
* @param aURI
* The URI to check.

Просмотреть файл

@ -229,7 +229,9 @@ static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID);
#include "nsIChannelPolicy.h"
#include "nsIContentSecurityPolicy.h"
#ifdef MOZ_IPC
#include "nsXULAppAPI.h"
#endif
using namespace mozilla;
@ -6010,10 +6012,12 @@ nsDocShell::OnRedirectStateChange(nsIChannel* aOldChannel,
nsCOMPtr<nsIApplicationCacheChannel> appCacheChannel =
do_QueryInterface(aNewChannel);
if (appCacheChannel) {
#ifdef MOZ_IPC
// Permission will be checked in the parent process.
if (GeckoProcessType_Default != XRE_GetProcessType())
appCacheChannel->SetChooseApplicationCache(PR_TRUE);
else
#endif
appCacheChannel->SetChooseApplicationCache(ShouldCheckAppCache(newURI));
}
@ -8724,10 +8728,12 @@ nsDocShell::DoURILoad(nsIURI * aURI,
// Loads with the correct permissions should check for a matching
// application cache.
#ifdef MOZ_IPC
// Permission will be checked in the parent process
if (GeckoProcessType_Default != XRE_GetProcessType())
appCacheChannel->SetChooseApplicationCache(PR_TRUE);
else
#endif
appCacheChannel->SetChooseApplicationCache(
ShouldCheckAppCache(aURI));
}

Просмотреть файл

@ -83,8 +83,13 @@ DIRS += \
plugins \
indexedDB \
system \
$(NULL)
ifdef MOZ_IPC
DIRS += \
ipc \
$(NULL)
endif
ifdef ENABLE_TESTS
DIRS += tests

Просмотреть файл

@ -83,7 +83,6 @@ EXPORTS = \
nsPIWindowRoot.h \
nsFocusManager.h \
nsWrapperCache.h \
nsContentPermissionHelper.h \
$(NULL)
CPPSRCS = \
@ -107,17 +106,27 @@ CPPSRCS = \
nsScriptNameSpaceManager.cpp \
nsDOMScriptObjectFactory.cpp \
nsQueryContentEventResult.cpp \
nsContentPermissionHelper.cpp \
$(NULL)
ifdef MOZ_IPC
EXPORTS += \
nsContentPermissionHelper.h \
$(NULL)
CPPSRCS += \
nsContentPermissionHelper.cpp \
$(NULL)
endif
include $(topsrcdir)/dom/dom-config.mk
ifdef MOZ_JSDEBUGGER
DEFINES += -DMOZ_JSDEBUGGER
endif
ifdef MOZ_IPC
include $(topsrcdir)/config/config.mk
include $(topsrcdir)/ipc/chromium/chromium-config.mk
endif
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -46,7 +46,9 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "base/basictypes.h"
#endif
// Local Includes
#include "nsGlobalWindow.h"

Просмотреть файл

@ -50,7 +50,7 @@
* http://www.w3.org/TR/DOM-Level-2-Style
*/
[scriptable, uuid(abedfd52-9821-4311-b50c-7ef229b43abf)]
[scriptable, uuid(6b8fda8f-94f6-4d5c-aa77-17c5270f36c7)]
interface nsIDOMCSS2Properties : nsISupports
{
attribute DOMString azimuth;
@ -734,6 +734,12 @@ interface nsIDOMCSS2Properties : nsISupports
attribute DOMString backgroundSize;
// raises(DOMException) on setting
attribute DOMString MozTextDecorationColor;
// raises(DOMException) on setting
attribute DOMString MozTextDecorationStyle;
// raises(DOMException) on setting
attribute DOMString MozTransitionProperty;
// raises(DOMException) on setting

Просмотреть файл

@ -50,6 +50,8 @@ EXPORTS_mozilla = \
PluginLibrary.h \
$(NULL)
ifdef MOZ_IPC
EXPORTS_NAMESPACES = mozilla mozilla/plugins
EXPORTS_mozilla/plugins = \
@ -149,6 +151,7 @@ LOCAL_INCLUDES = \
include $(topsrcdir)/config/config.mk
include $(topsrcdir)/ipc/chromium/chromium-config.mk
endif
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -83,7 +83,9 @@ LOCAL_INCLUDES += -I$(topsrcdir)/dom/system/android \
$(NULL)
endif
ifdef MOZ_IPC
EXPORTS += nsGeoPositionIPCSerialiser.h
endif
include $(topsrcdir)/config/config.mk
include $(topsrcdir)/ipc/chromium/chromium-config.mk

Просмотреть файл

@ -34,6 +34,7 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "nsContentPermissionHelper.h"
#include "nsXULAppAPI.h"
@ -52,6 +53,7 @@
#include "nsDOMEventTargetHelper.h"
#include "TabChild.h"
#endif
#include "nsGeolocation.h"
#include "nsAutoPtr.h"
@ -480,6 +482,7 @@ nsGeolocationRequest::Shutdown()
mErrorCallback = nsnull;
}
#ifdef MOZ_IPC
bool nsGeolocationRequest::Recv__delete__(const bool& allow)
{
if (allow)
@ -488,6 +491,7 @@ bool nsGeolocationRequest::Recv__delete__(const bool& allow)
(void) Cancel();
return true;
}
#endif
////////////////////////////////////////////////////
// nsGeolocationService
////////////////////////////////////////////////////
@ -677,11 +681,13 @@ nsGeolocationService::StartDevice()
// inactivivity
SetDisconnectTimer();
#ifdef MOZ_IPC
if (XRE_GetProcessType() == GeckoProcessType_Content) {
ContentChild* cpc = ContentChild::GetSingleton();
cpc->SendAddGeolocationListener();
return NS_OK;
}
#endif
// Start them up!
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
@ -720,11 +726,13 @@ nsGeolocationService::StopDevice()
mDisconnectTimer = nsnull;
}
#ifdef MOZ_IPC
if (XRE_GetProcessType() == GeckoProcessType_Content) {
ContentChild* cpc = ContentChild::GetSingleton();
cpc->SendRemoveGeolocationListener();
return; // bail early
}
#endif
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
if (!obs)
@ -1045,6 +1053,7 @@ nsGeolocation::WindowOwnerStillExists()
bool
nsGeolocation::RegisterRequestWithPrompt(nsGeolocationRequest* request)
{
#ifdef MOZ_IPC
if (XRE_GetProcessType() == GeckoProcessType_Content) {
nsCOMPtr<nsPIDOMWindow> window = do_QueryReferent(mOwner);
if (!window)
@ -1066,6 +1075,7 @@ nsGeolocation::RegisterRequestWithPrompt(nsGeolocationRequest* request)
request->Sendprompt();
return true;
}
#endif
if (nsContentUtils::GetBoolPref("geo.prompt.testing", PR_FALSE))
{

Просмотреть файл

@ -37,9 +37,11 @@
#ifndef nsGeoLocation_h
#define nsGeoLocation_h
#ifdef MOZ_IPC
#include "mozilla/dom/PContentPermissionRequestChild.h"
// Microsoft's API Name hackery sucks
#undef CreateEvent
#endif
#include "nsCOMPtr.h"
#include "nsAutoPtr.h"
@ -65,7 +67,9 @@
#include "nsIGeolocationProvider.h"
#include "nsIContentPermissionPrompt.h"
#ifdef MOZ_IPC
#include "PCOMContentPermissionRequestChild.h"
#endif
class nsGeolocationService;
class nsGeolocation;
@ -73,7 +77,9 @@ class nsGeolocation;
class nsGeolocationRequest
: public nsIContentPermissionRequest
, public nsITimerCallback
#ifdef MOZ_IPC
, public PCOMContentPermissionRequestChild
#endif
{
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
@ -101,8 +107,10 @@ class nsGeolocationRequest
~nsGeolocationRequest();
#ifdef MOZ_IPC
bool Recv__delete__(const bool& allow);
void IPDLRelease() { Release(); }
#endif
private:

Просмотреть файл

@ -36,6 +36,7 @@
#include "nsDesktopNotification.h"
#ifdef MOZ_IPC
#include "nsContentPermissionHelper.h"
#include "nsXULAppAPI.h"
@ -43,6 +44,7 @@
#include "TabChild.h"
using namespace mozilla::dom;
#endif
/* ------------------------------------------------------------------------ */
/* AlertServiceObserver */
@ -127,6 +129,7 @@ nsDOMDesktopNotification::nsDOMDesktopNotification(const nsAString & title,
nsRefPtr<nsDesktopNotificationRequest> request = new nsDesktopNotificationRequest(this);
// if we are in the content process, then remote it to the parent.
#ifdef MOZ_IPC
if (XRE_GetProcessType() == GeckoProcessType_Content) {
// if for some reason mOwner is null, just silently
@ -149,6 +152,7 @@ nsDOMDesktopNotification::nsDOMDesktopNotification(const nsAString & title,
request->Sendprompt();
return;
}
#endif
// otherwise, dispatch it
NS_DispatchToMainThread(request);

Просмотреть файл

@ -37,7 +37,10 @@
#ifndef nsDesktopNotification_h
#define nsDesktopNotification_h
#ifdef MOZ_IPC
#include "PCOMContentPermissionRequestChild.h"
#endif
#include "nsDOMClassInfo.h"
#include "nsIJSContextStack.h"
@ -152,8 +155,10 @@ protected:
* Simple Request
*/
class nsDesktopNotificationRequest : public nsIContentPermissionRequest,
public nsRunnable,
public PCOMContentPermissionRequestChild
public nsRunnable
#ifdef MOZ_IPC
, public PCOMContentPermissionRequestChild
#endif
{
public:
@ -177,6 +182,8 @@ class nsDesktopNotificationRequest : public nsIContentPermissionRequest,
{
}
#ifdef MOZ_IPC
bool Recv__delete__(const bool& allow)
{
if (allow)
@ -186,6 +193,7 @@ class nsDesktopNotificationRequest : public nsIContentPermissionRequest,
return true;
}
void IPDLRelease() { Release(); }
#endif
nsRefPtr<nsDOMDesktopNotification> mDesktopNotification;
};

Просмотреть файл

@ -57,9 +57,14 @@
#include "nsIScriptGlobalObject.h"
#include "nsIWebNavigation.h"
#ifdef MOZ_IPC
#include "nsXULAppAPI.h"
#define IS_CHILD_PROCESS() \
(GeckoProcessType_Default != XRE_GetProcessType())
#else
#define IS_CHILD_PROCESS() \
(false)
#endif
// Event names

Просмотреть файл

@ -55,11 +55,13 @@ CPPSRCS = \
ifdef MOZ_STORAGE
CPPSRCS += nsDOMStorageDBWrapper.cpp nsDOMStoragePersistentDB.cpp nsDOMStorageMemoryDB.cpp
ifdef MOZ_IPC
CPPSRCS += StorageChild.cpp StorageParent.cpp
EXPORTS_NAMESPACES = mozilla/dom
EXPORTS_mozilla/dom = StorageChild.h StorageParent.h
endif
endif
# we don't want the shared lib, but we want to force the creation of a static lib.
FORCE_STATIC_LIB = 1

Просмотреть файл

@ -40,10 +40,12 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "StorageChild.h"
#include "StorageParent.h"
#include "nsXULAppAPI.h"
using mozilla::dom::StorageChild;
#endif
#include "prnetdb.h"
#include "nsCOMPtr.h"
@ -269,9 +271,11 @@ nsDOMStorageManager::Initialize()
NS_ADDREF(gStorageManager);
#ifdef MOZ_IPC
// No observers needed in non-chrome
if (XRE_GetProcessType() != GeckoProcessType_Default)
return NS_OK;
#endif
nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
if (!os)
@ -1351,10 +1355,12 @@ nsDOMStorage::nsDOMStorage()
{
mSecurityChecker = this;
#ifdef MOZ_IPC
if (XRE_GetProcessType() != GeckoProcessType_Default)
mStorageImpl = new StorageChild(this);
else
mStorageImpl = new DOMStorageImpl(this);
#endif
mStorageImpl = new DOMStorageImpl(this);
}
nsDOMStorage::nsDOMStorage(nsDOMStorage& aThat)
@ -1363,10 +1369,13 @@ nsDOMStorage::nsDOMStorage(nsDOMStorage& aThat)
{
mSecurityChecker = this;
#ifdef MOZ_IPC
if (XRE_GetProcessType() != GeckoProcessType_Default) {
StorageChild* other = static_cast<StorageChild*>(aThat.mStorageImpl.get());
mStorageImpl = new StorageChild(this, *other);
} else {
} else
#endif
{
DOMStorageImpl* other = static_cast<DOMStorageImpl*>(aThat.mStorageImpl.get());
mStorageImpl = new DOMStorageImpl(this, *other);
}

Просмотреть файл

@ -46,7 +46,6 @@ MODULE = editor
GRE_MODULE = 1
XPIDLSRCS = \
nsICiter.idl \
nsIDocumentStateListener.idl \
nsIEditActionListener.idl \
nsIEditor.idl \

Просмотреть файл

@ -1,61 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** 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.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* 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 ***** */
#include "nsISupports.idl"
#include "domstubs.idl"
%{C++
#include "nsString.h"
%}
/** Handle plaintext citations, as in mail quoting.
* Used by the editor but not dependant on it.
*/
[scriptable, uuid(a6cf9102-15b3-11d2-932e-00805f8add32)]
interface nsICiter : nsISupports
{
DOMString GetCiteString(in DOMString aInString);
DOMString StripCites(in DOMString aInString);
DOMString Rewrap(in DOMString aInString,
in unsigned long aWrapCol, in unsigned long aFirstLineOffset,
in boolean aRespectNewlines);
};

Просмотреть файл

@ -58,18 +58,7 @@ const PRUnichar cr('\r');
/** Mail citations using the Internet style: > This is a citation
*/
nsInternetCiter::nsInternetCiter()
{
}
nsInternetCiter::~nsInternetCiter()
{
}
NS_IMPL_ISUPPORTS1(nsInternetCiter, nsICiter)
NS_IMETHODIMP
nsresult
nsInternetCiter::GetCiteString(const nsAString& aInString, nsAString& aOutString)
{
aOutString.Truncate();
@ -155,7 +144,7 @@ nsInternetCiter::StripCitesAndLinebreaks(const nsAString& aInString,
return NS_OK;
}
NS_IMETHODIMP
nsresult
nsInternetCiter::StripCites(const nsAString& aInString, nsAString& aOutString)
{
return StripCitesAndLinebreaks(aInString, aOutString, PR_FALSE, 0);
@ -188,7 +177,7 @@ static inline PRBool IsSpace(PRUnichar c)
return (nsCRT::IsAsciiSpace(c) || (c == nl) || (c == cr) || (c == nbsp));
}
NS_IMETHODIMP
nsresult
nsInternetCiter::Rewrap(const nsAString& aInString,
PRUint32 aWrapCol, PRUint32 aFirstLineOffset,
PRBool aRespectNewlines,

Просмотреть файл

@ -38,33 +38,25 @@
#ifndef nsInternetCiter_h__
#define nsInternetCiter_h__
#include "nsICiter.h"
#include "nsString.h"
/** Mail citations using standard Internet style.
*/
class nsInternetCiter : public nsICiter
class nsInternetCiter
{
public:
nsInternetCiter();
virtual ~nsInternetCiter();
//Interfaces for addref and release and queryinterface
//NOTE: Use NS_DECL_ISUPPORTS_INHERITED in any class inherited from nsEditor
NS_DECL_ISUPPORTS
static nsresult GetCiteString(const nsAString & aInString, nsAString & aOutString);
NS_IMETHOD GetCiteString(const nsAString & aInString, nsAString & aOutString);
static nsresult StripCites(const nsAString & aInString, nsAString & aOutString);
NS_IMETHOD StripCites(const nsAString & aInString, nsAString & aOutString);
NS_IMETHOD Rewrap(const nsAString & aInString,
PRUint32 aWrapCol, PRUint32 aFirstLineOffset,
PRBool aRespectNewlines,
nsAString & aOutString);
static nsresult Rewrap(const nsAString & aInString,
PRUint32 aWrapCol, PRUint32 aFirstLineOffset,
PRBool aRespectNewlines,
nsAString & aOutString);
protected:
nsresult StripCitesAndLinebreaks(const nsAString& aInString, nsAString& aOutString,
PRBool aLinebreaksToo, PRInt32* aCiteLevel);
static nsresult StripCitesAndLinebreaks(const nsAString& aInString, nsAString& aOutString,
PRBool aLinebreaksToo, PRInt32* aCiteLevel);
};
#endif //nsInternetCiter_h__

Просмотреть файл

@ -1530,12 +1530,9 @@ nsPlaintextEditor::InsertAsQuotation(const nsAString& aQuotedText,
// Protect the edit rules object from dying
nsCOMPtr<nsIEditRules> kungFuDeathGrip(mRules);
// We have the text. Cite it appropriately:
nsCOMPtr<nsICiter> citer = new nsInternetCiter();
// Let the citer quote it for us:
nsString quotedStuff;
nsresult rv = citer->GetCiteString(aQuotedText, quotedStuff);
nsresult rv = nsInternetCiter::GetCiteString(aQuotedText, quotedStuff);
NS_ENSURE_SUCCESS(rv, rv);
// It's best to put a blank line after the quoted text so that mails
@ -1630,13 +1627,9 @@ nsPlaintextEditor::Rewrap(PRBool aRespectNewlines)
&isCollapsed, current);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsICiter> citer = new nsInternetCiter();
NS_ENSURE_SUCCESS(rv, rv);
NS_ENSURE_TRUE(citer, NS_ERROR_UNEXPECTED);
nsString wrapped;
PRUint32 firstLineOffset = 0; // XXX need to reset this if there is a selection
rv = citer->Rewrap(current, wrapCol, firstLineOffset, aRespectNewlines,
rv = nsInternetCiter::Rewrap(current, wrapCol, firstLineOffset, aRespectNewlines,
wrapped);
NS_ENSURE_SUCCESS(rv, rv);
@ -1659,11 +1652,8 @@ nsPlaintextEditor::StripCites()
&isCollapsed, current);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsICiter> citer = new nsInternetCiter();
NS_ENSURE_TRUE(citer, NS_ERROR_UNEXPECTED);
nsString stripped;
rv = citer->StripCites(current, stripped);
rv = nsInternetCiter::StripCites(current, stripped);
NS_ENSURE_SUCCESS(rv, rv);
if (isCollapsed) // rewrap the whole document

Просмотреть файл

@ -1229,7 +1229,10 @@ NS_IMETHODIMP nsWebBrowser::Create()
}
mDocShellAsNav->SetSessionHistory(mInitInfo->sessionHistory);
if (XRE_GetProcessType() == GeckoProcessType_Default) {
#ifdef MOZ_IPC
if (XRE_GetProcessType() == GeckoProcessType_Default)
#endif
{
// Hook up global history. Do not fail if we can't - just warn.
rv = EnableGlobalHistory(mShouldEnableHistory);
NS_WARN_IF_FALSE(NS_SUCCEEDED(rv), "EnableGlobalHistory() failed");

Просмотреть файл

@ -37,9 +37,11 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "mozilla/dom/ContentParent.h"
#include "mozilla/dom/ContentChild.h"
#include "mozilla/unused.h"
#endif
#include "nsPermissionManager.h"
#include "nsPermission.h"
#include "nsCRT.h"
@ -61,6 +63,7 @@
static nsPermissionManager *gPermissionManager = nsnull;
#ifdef MOZ_IPC
using mozilla::dom::ContentParent;
using mozilla::dom::ContentChild;
using mozilla::unused; // ha!
@ -105,6 +108,7 @@ ParentProcess()
return nsnull;
}
#endif
#define ENSURE_NOT_CHILD_PROCESS_(onError) \
PR_BEGIN_MACRO \
@ -170,7 +174,9 @@ NS_IMPL_ISUPPORTS3(nsPermissionManager, nsIPermissionManager, nsIObserver, nsISu
nsPermissionManager::nsPermissionManager()
: mLargestID(0)
#ifdef MOZ_IPC
, mUpdateChildProcess(PR_FALSE)
#endif
{
}
@ -227,6 +233,7 @@ nsPermissionManager::Init()
mObserverService->AddObserver(this, "profile-do-change", PR_TRUE);
}
#ifdef MOZ_IPC
if (IsChildProcess()) {
// Get the permissions from the parent process
InfallibleTArray<IPC::Permission> perms;
@ -241,6 +248,7 @@ nsPermissionManager::Init()
// Stop here; we don't need the DB in the child process
return NS_OK;
}
#endif
// ignore failure here, since it's non-fatal (we can run fine without
// persistent storage - e.g. if there's no profile).
@ -432,7 +440,9 @@ nsPermissionManager::Add(nsIURI *aURI,
PRUint32 aExpireType,
PRInt64 aExpireTime)
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS;
#endif
NS_ENSURE_ARG_POINTER(aURI);
NS_ENSURE_ARG_POINTER(aType);
@ -466,6 +476,7 @@ nsPermissionManager::AddInternal(const nsAFlatCString &aHost,
NotifyOperationType aNotifyOperation,
DBOperationType aDBOperation)
{
#ifdef MOZ_IPC
if (!IsChildProcess()) {
// In the parent, send the update now, if the child is ready
if (mUpdateChildProcess) {
@ -475,6 +486,7 @@ nsPermissionManager::AddInternal(const nsAFlatCString &aHost,
unused << ParentProcess()->SendAddPermission(permission);
}
}
#endif
if (!gHostArena) {
gHostArena = new PLArenaPool;
@ -615,7 +627,9 @@ NS_IMETHODIMP
nsPermissionManager::Remove(const nsACString &aHost,
const char *aType)
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS;
#endif
NS_ENSURE_ARG_POINTER(aType);
@ -633,7 +647,9 @@ nsPermissionManager::Remove(const nsACString &aHost,
NS_IMETHODIMP
nsPermissionManager::RemoveAll()
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS;
#endif
nsresult rv = RemoveAllInternal();
NotifyObservers(nsnull, NS_LITERAL_STRING("cleared").get());
@ -790,7 +806,9 @@ AddPermissionsToList(nsHostEntry *entry, void *arg)
NS_IMETHODIMP nsPermissionManager::GetEnumerator(nsISimpleEnumerator **aEnum)
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS;
#endif
// roll an nsCOMArray of all our permissions, then hand out an enumerator
nsCOMArray<nsIPermission> array;
@ -803,7 +821,9 @@ NS_IMETHODIMP nsPermissionManager::GetEnumerator(nsISimpleEnumerator **aEnum)
NS_IMETHODIMP nsPermissionManager::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *someData)
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS;
#endif
if (!nsCRT::strcmp(aTopic, "profile-before-change")) {
// The profile is about to change,
@ -900,7 +920,9 @@ nsPermissionManager::NotifyObservers(nsIPermission *aPermission,
nsresult
nsPermissionManager::Read()
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS;
#endif
nsresult rv;
@ -968,7 +990,9 @@ static const char kMatchTypeHost[] = "host";
nsresult
nsPermissionManager::Import()
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS;
#endif
nsresult rv;
@ -1074,7 +1098,9 @@ nsPermissionManager::UpdateDB(OperationType aOp,
PRUint32 aExpireType,
PRInt64 aExpireTime)
{
#ifdef MOZ_IPC
ENSURE_NOT_CHILD_PROCESS_NORET;
#endif
nsresult rv;

Просмотреть файл

@ -251,6 +251,7 @@ private:
// An array to store the strings identifying the different types.
nsTArray<nsCString> mTypeArray;
#ifdef MOZ_IPC
// Whether we should update the child process with every change to a
// permission. This is set to true once the child is ready to receive
// such updates.
@ -261,6 +262,7 @@ public:
{
mUpdateChildProcess = PR_TRUE;
}
#endif
};
// {4F6B5E00-0C36-11d5-A535-0010A401EB10}

Просмотреть файл

@ -96,10 +96,12 @@ libs:: $(_BROWSER_TEST_FILES)
XPCSHELL_TESTS = unit
ifdef MOZ_IPC
# FIXME/bug 575918: out-of-process xpcshell is broken on OS X
ifneq ($(OS_ARCH),Darwin)
XPCSHELL_TESTS += unit_ipc
endif
endif
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -59,12 +59,16 @@ endif
DIRS += angle
DIRS += src qcms layers harfbuzz/src ots/src thebes src/thebes ipc
DIRS += src qcms layers harfbuzz/src ots/src thebes src/thebes
ifdef BUILD_STATIC_LIBS
DIRS += ycbcr
endif
ifdef MOZ_IPC
DIRS += ipc
endif
ifdef ENABLE_TESTS
TOOL_DIRS += tests
endif

Просмотреть файл

@ -42,6 +42,8 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
ifdef MOZ_IPC
MODULE = gfxipc
LIBRARY_NAME = gfxipc_s
FORCE_STATIC_LIB = 1
@ -71,6 +73,8 @@ endif
include $(topsrcdir)/config/config.mk
include $(topsrcdir)/ipc/chromium/chromium-config.mk
endif
include $(topsrcdir)/config/rules.mk
CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS)

Просмотреть файл

@ -38,7 +38,9 @@
*
* ***** END LICENSE BLOCK ***** */
#include "mozilla/layers/ShadowLayers.h"
#ifdef MOZ_IPC
# include "mozilla/layers/ShadowLayers.h"
#endif // MOZ_IPC
#include "ImageLayers.h"
#include "Layers.h"
@ -239,6 +241,7 @@ Layer::CanUseOpaqueSurface()
parent->CanUseOpaqueSurface();
}
#ifdef MOZ_IPC
// NB: eventually these methods will be defined unconditionally, and
// can be moved into Layers.h
const nsIntRect*
@ -259,6 +262,13 @@ Layer::GetEffectiveVisibleRegion()
return GetVisibleRegion();
}
#else
const nsIntRect* Layer::GetEffectiveClipRect() { return GetClipRect(); }
const nsIntRegion& Layer::GetEffectiveVisibleRegion() { return GetVisibleRegion(); }
#endif // MOZ_IPC
gfx3DMatrix
Layer::SnapTransform(const gfx3DMatrix& aTransform,
const gfxRect& aSnapRect,
@ -351,8 +361,10 @@ Layer::CalculateScissorRect(bool aIntermediate,
const gfx3DMatrix&
Layer::GetLocalTransform()
{
#ifdef MOZ_IPC
if (ShadowLayer* shadow = AsShadowLayer())
return shadow->GetShadowTransform();
#endif
return mTransform;
}
@ -690,6 +702,7 @@ LayerManager::IsLogEnabled()
return PR_LOG_TEST(sLog, PR_LOG_DEBUG);
}
# ifdef MOZ_IPC
static nsACString&
PrintInfo(nsACString& aTo, ShadowLayer* aShadowLayer)
{
@ -707,6 +720,12 @@ PrintInfo(nsACString& aTo, ShadowLayer* aShadowLayer)
}
return aTo;
}
# else
static nsACString& PrintInfo(nsACString& aTo, ShadowLayer* aShadowLayer)
{
return aTo;
}
# endif // MOZ_IPC
#else // !MOZ_LAYERS_HAVE_LOG

Просмотреть файл

@ -44,11 +44,14 @@ VPATH = \
$(srcdir)/opengl \
$(srcdir)/d3d9 \
$(srcdir)/d3d10 \
$(srcdir)/ipc \
$(NULL)
include $(DEPTH)/config/autoconf.mk
ifdef MOZ_IPC
VPATH += $(srcdir)/ipc
endif
MODULE = thebes
LIBRARY_NAME = layers
LIBXUL_LIBRARY = 1
@ -124,6 +127,7 @@ CPPSRCS += \
endif
endif
ifdef MOZ_IPC #{
EXPORTS_NAMESPACES = IPC mozilla/layers
EXPORTS_IPC = ShadowLayerUtils.h
EXPORTS_mozilla/layers =\
@ -145,6 +149,8 @@ EXPORTS_mozilla/layers += ShadowLayerUtilsX11.h
CPPSRCS += ShadowLayerUtilsX11.cpp
endif #}
endif #}
# Enable GLES2.0 under maemo
ifdef MOZ_X11
ifdef MOZ_PLATFORM_MAEMO
@ -154,7 +160,9 @@ endif
include $(topsrcdir)/config/rules.mk
ifdef MOZ_IPC
include $(topsrcdir)/ipc/chromium/chromium-config.mk
endif
CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS)

Просмотреть файл

@ -36,12 +36,14 @@
*
* ***** END LICENSE BLOCK ***** */
#include "gfxSharedImageSurface.h"
#ifdef MOZ_IPC
# include "gfxSharedImageSurface.h"
#include "mozilla/layers/PLayerChild.h"
#include "mozilla/layers/PLayersChild.h"
#include "mozilla/layers/PLayersParent.h"
#include "ipc/ShadowLayerChild.h"
# include "mozilla/layers/PLayerChild.h"
# include "mozilla/layers/PLayersChild.h"
# include "mozilla/layers/PLayersParent.h"
# include "ipc/ShadowLayerChild.h"
#endif
#include "BasicLayers.h"
#include "ImageLayers.h"
@ -1607,6 +1609,8 @@ BasicLayerManager::CreateReadbackLayer()
return layer.forget();
}
#ifdef MOZ_IPC
class BasicShadowableThebesLayer;
class BasicShadowableLayer : public ShadowableLayer
{
@ -2890,6 +2894,7 @@ BasicShadowLayerManager::IsCompositingCheap()
return mShadowManager &&
LayerManager::IsCompositingCheap(GetParentBackendType());
}
#endif // MOZ_IPC
}
}

Просмотреть файл

@ -45,7 +45,9 @@
#include "nsAutoRef.h"
#include "nsThreadUtils.h"
#ifdef MOZ_IPC
#include "mozilla/layers/ShadowLayers.h"
#endif
class nsIWidget;
@ -69,7 +71,11 @@ class ReadbackProcessor;
* between layers).
*/
class THEBES_API BasicLayerManager :
#ifdef MOZ_IPC
public ShadowLayerManager
#else
public LayerManager
#endif
{
public:
/**
@ -229,6 +235,7 @@ protected:
};
#ifdef MOZ_IPC
class BasicShadowLayerManager : public BasicLayerManager,
public ShadowLayerForwarder
{
@ -277,6 +284,7 @@ private:
LayerRefArray mKeepAlive;
};
#endif // MOZ_IPC
}
}

Просмотреть файл

@ -35,7 +35,9 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
# include "gfxSharedImageSurface.h"
#endif
#include "CanvasLayerOGL.h"
@ -251,6 +253,8 @@ CanvasLayerOGL::RenderLayer(int aPreviousDestination,
}
#ifdef MOZ_IPC
ShadowCanvasLayerOGL::ShadowCanvasLayerOGL(LayerManagerOGL* aManager)
: ShadowCanvasLayer(aManager, nsnull)
, LayerOGL(aManager)
@ -338,3 +342,5 @@ ShadowCanvasLayerOGL::RenderLayer(int aPreviousFrameBuffer,
mOGLManager->BindAndDrawQuad(program);
}
#endif // MOZ_IPC

Просмотреть файл

@ -38,8 +38,10 @@
#ifndef GFX_CANVASLAYEROGL_H
#define GFX_CANVASLAYEROGL_H
#ifdef MOZ_IPC
# include "mozilla/layers/PLayers.h"
# include "mozilla/layers/ShadowLayers.h"
#endif // MOZ_IPC
#include "LayerManagerOGL.h"
#include "gfxASurface.h"
@ -87,6 +89,7 @@ protected:
PRPackedBool mNeedsYFlip;
};
#ifdef MOZ_IPC
// NB: eventually we'll have separate shadow canvas2d and shadow
// canvas3d layers, but currently they look the same from the
// perspective of the compositor process
@ -127,6 +130,7 @@ private:
};
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -80,12 +80,14 @@ ColorLayerOGL::RenderLayer(int,
return RenderColorLayer(this, mOGLManager, aOffset);
}
#ifdef MOZ_IPC
void
ShadowColorLayerOGL::RenderLayer(int,
const nsIntPoint& aOffset)
{
return RenderColorLayer(this, mOGLManager, aOffset);
}
#endif // MOZ_IPC
} /* layers */

Просмотреть файл

@ -38,8 +38,10 @@
#ifndef GFX_COLORLAYEROGL_H
#define GFX_COLORLAYEROGL_H
#ifdef MOZ_IPC
# include "mozilla/layers/PLayers.h"
# include "mozilla/layers/ShadowLayers.h"
#endif // MOZ_IPC
#include "LayerManagerOGL.h"
@ -67,6 +69,7 @@ public:
const nsIntPoint& aOffset);
};
#ifdef MOZ_IPC
class ShadowColorLayerOGL : public ShadowColorLayer,
public LayerOGL
{
@ -87,6 +90,7 @@ public:
virtual void RenderLayer(int aPreviousFrameBuffer,
const nsIntPoint& aOffset);
};
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -343,6 +343,8 @@ ContainerLayerOGL::RenderLayer(int aPreviousFrameBuffer,
}
#ifdef MOZ_IPC
ShadowContainerLayerOGL::ShadowContainerLayerOGL(LayerManagerOGL *aManager)
: ShadowContainerLayer(aManager, NULL)
, LayerOGL(aManager)
@ -389,6 +391,8 @@ ShadowContainerLayerOGL::RenderLayer(int aPreviousFrameBuffer,
ContainerRender(this, aPreviousFrameBuffer, aOffset, mOGLManager);
}
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -38,8 +38,10 @@
#ifndef GFX_CONTAINERLAYEROGL_H
#define GFX_CONTAINERLAYEROGL_H
#ifdef MOZ_IPC
# include "mozilla/layers/PLayers.h"
# include "mozilla/layers/ShadowLayers.h"
#endif
#include "Layers.h"
#include "LayerManagerOGL.h"
@ -98,6 +100,7 @@ public:
}
};
#ifdef MOZ_IPC
class ShadowContainerLayerOGL : public ShadowContainerLayer,
public LayerOGL
{
@ -136,6 +139,7 @@ public:
DefaultComputeEffectiveTransforms(aTransformToSurface);
}
};
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -36,7 +36,9 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
# include "gfxSharedImageSurface.h"
#endif
#include "ImageLayerOGL.h"
#include "gfxImageSurface.h"
@ -743,6 +745,8 @@ CairoImageOGL::SetData(const CairoImage::Data &aData)
tex);
}
#ifdef MOZ_IPC
ShadowImageLayerOGL::ShadowImageLayerOGL(LayerManagerOGL* aManager)
: ShadowImageLayer(aManager, nsnull)
, LayerOGL(aManager)
@ -833,6 +837,8 @@ ShadowImageLayerOGL::RenderLayer(int aPreviousFrameBuffer,
mOGLManager->BindAndDrawQuad(program);
}
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -38,8 +38,10 @@
#ifndef GFX_IMAGELAYEROGL_H
#define GFX_IMAGELAYEROGL_H
#ifdef MOZ_IPC
# include "mozilla/layers/PLayers.h"
# include "mozilla/layers/ShadowLayers.h"
#endif // MOZ_IPC
#include "LayerManagerOGL.h"
#include "ImageLayers.h"
@ -232,6 +234,7 @@ public:
gl::ShaderProgramType mLayerProgram;
};
#ifdef MOZ_IPC
class ShadowImageLayerOGL : public ShadowImageLayer,
public LayerOGL
{
@ -268,6 +271,7 @@ private:
};
#endif
} /* layers */
} /* mozilla */

Просмотреть файл

@ -37,7 +37,9 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
# include "mozilla/layers/PLayers.h"
#endif // MOZ_IPC
#include "LayerManagerOGL.h"
#include "ThebesLayerOGL.h"
@ -968,6 +970,8 @@ void LayerOGL::ApplyFilter(gfxPattern::GraphicsFilter aFilter)
}
}
#ifdef MOZ_IPC
already_AddRefed<ShadowThebesLayer>
LayerManagerOGL::CreateShadowThebesLayer()
{
@ -1018,6 +1022,20 @@ LayerManagerOGL::CreateShadowCanvasLayer()
return nsRefPtr<ShadowCanvasLayerOGL>(new ShadowCanvasLayerOGL(this)).forget();
}
#else
already_AddRefed<ShadowThebesLayer>
LayerManagerOGL::CreateShadowThebesLayer() { return nsnull; }
already_AddRefed<ShadowContainerLayer>
LayerManagerOGL::CreateShadowContainerLayer() { return nsnull; }
already_AddRefed<ShadowImageLayer>
LayerManagerOGL::CreateShadowImageLayer() { return nsnull; }
already_AddRefed<ShadowColorLayer>
LayerManagerOGL::CreateShadowColorLayer() { return nsnull; }
already_AddRefed<ShadowCanvasLayer>
LayerManagerOGL::CreateShadowCanvasLayer() { return nsnull; }
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -42,7 +42,9 @@
#include "Layers.h"
#ifdef MOZ_IPC
#include "mozilla/layers/ShadowLayers.h"
#endif
#ifdef XP_WIN
#include <windows.h>
@ -82,7 +84,11 @@ class ShadowColorLayer;
* the main thread.
*/
class THEBES_API LayerManagerOGL :
#ifdef MOZ_IPC
public ShadowLayerManager
#else
public LayerManager
#endif
{
typedef mozilla::gl::GLContext GLContext;
typedef mozilla::gl::ShaderProgramType ProgramType;

Просмотреть файл

@ -36,8 +36,10 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
# include "mozilla/layers/PLayers.h"
# include "mozilla/layers/ShadowLayers.h"
#endif
#include "ThebesLayerBuffer.h"
#include "ThebesLayerOGL.h"
@ -776,6 +778,8 @@ ThebesLayerOGL::IsEmpty()
}
#ifdef MOZ_IPC
class ShadowBufferOGL : public ThebesLayerBufferOGL
{
public:
@ -948,6 +952,8 @@ ShadowThebesLayerOGL::RenderLayer(int aPreviousFrameBuffer,
mBuffer->RenderTo(aOffset, mOGLManager);
}
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -38,8 +38,10 @@
#ifndef GFX_THEBESLAYEROGL_H
#define GFX_THEBESLAYEROGL_H
#include "mozilla/layers/PLayers.h"
#include "mozilla/layers/ShadowLayers.h"
#ifdef MOZ_IPC
# include "mozilla/layers/PLayers.h"
# include "mozilla/layers/ShadowLayers.h"
#endif
#include "Layers.h"
#include "LayerManagerOGL.h"
@ -84,6 +86,7 @@ private:
nsRefPtr<Buffer> mBuffer;
};
#ifdef MOZ_IPC
class ShadowThebesLayerOGL : public ShadowThebesLayer,
public LayerOGL
{
@ -114,6 +117,7 @@ public:
private:
nsRefPtr<ShadowBufferOGL> mBuffer;
};
#endif // MOZ_IPC
} /* layers */
} /* mozilla */

Просмотреть файл

@ -47,8 +47,13 @@ EXPORTS = \
GLContextProviderImpl.h \
nsCoreAnimationSupport.h \
EGLUtils.h \
$(NULL)
ifdef MOZ_IPC
EXPORTS += \
gfxSharedImageSurface.h \
$(NULL)
endif
ifeq ($(MOZ_WIDGET_TOOLKIT),android)
EXPORTS += \
@ -180,7 +185,6 @@ CPPSRCS = \
gfxHarfBuzzShaper.cpp \
GLContext.cpp \
GLContextProviderOSMesa.cpp \
gfxSharedImageSurface.cpp \
$(NULL)
# Are we targeting x86 or x64? If so, build gfxAlphaRecoverySSE2.cpp.
@ -199,6 +203,12 @@ endif
endif
ifdef MOZ_IPC
CPPSRCS += \
gfxSharedImageSurface.cpp \
$(NULL)
endif
SHARED_LIBRARY_LIBS += \
../layers/$(LIB_PREFIX)layers.$(LIB_SUFFIX) \
$(NULL)

Просмотреть файл

@ -35,8 +35,10 @@
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "mozilla/dom/ContentChild.h"
#include "nsXULAppAPI.h"
#endif
#include <android/log.h>
@ -171,8 +173,10 @@ public:
mMap.ops = nsnull;
LOG("initializing the map failed");
}
#ifdef MOZ_IPC
NS_ABORT_IF_FALSE(XRE_GetProcessType() == GeckoProcessType_Default,
"StartupCacheFontNameCache should only be used in chrome procsess");
#endif
mCache = mozilla::scache::StartupCache::GetSingleton();
Init();
}

Просмотреть файл

@ -46,6 +46,8 @@ CHROMIUM_CONFIG_INCLUDED = 1
EXTRA_DEPS += $(topsrcdir)/ipc/chromium/chromium-config.mk
ifdef MOZ_IPC # {
DEFINES += \
-DEXCLUDE_SKIA_DEPENDENCIES \
-DCHROMIUM_MOZILLA_BUILD \
@ -106,3 +108,4 @@ OS_CXXFLAGS := $(filter-out -pedantic,$(OS_CXXFLAGS))
endif # }
endif # }
endif # }

Просмотреть файл

@ -3404,35 +3404,36 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
Decl(listenertype, listenervar.name) ],
virtual=1))
switchontype = StmtSwitch(pvar)
for managee in p.managesStmts:
case = StmtBlock()
actorvar = ExprVar('actor')
manageeipdltype = managee.decl.type
manageecxxtype = _cxxBareType(ipdl.type.ActorType(manageeipdltype),
self.side)
manageearray = p.managedVar(manageeipdltype, self.side)
if not len(p.managesStmts):
removemanagee.addstmts([ _runtimeAbort('unreached'), StmtReturn() ])
else:
switchontype = StmtSwitch(pvar)
for managee in p.managesStmts:
case = StmtBlock()
actorvar = ExprVar('actor')
manageeipdltype = managee.decl.type
manageecxxtype = _cxxBareType(ipdl.type.ActorType(manageeipdltype),
self.side)
manageearray = p.managedVar(manageeipdltype, self.side)
case.addstmts([
StmtDecl(Decl(manageecxxtype, actorvar.name),
ExprCast(listenervar, manageecxxtype, static=1)),
_abortIfFalse(
_cxxArrayHasElementSorted(manageearray, actorvar),
"actor not managed by this!"),
Whitespace.NL,
StmtExpr(_callCxxArrayRemoveSorted(manageearray, actorvar)),
StmtExpr(ExprCall(_deallocMethod(manageeipdltype),
args=[ actorvar ])),
StmtReturn()
])
switchontype.addcase(CaseLabel(_protocolId(manageeipdltype).name),
case)
default = StmtBlock()
default.addstmts([ _runtimeAbort('unreached'), StmtReturn() ])
switchontype.addcase(DefaultLabel(), default)
removemanagee.addstmt(switchontype)
case.addstmts([
StmtDecl(Decl(manageecxxtype, actorvar.name),
ExprCast(listenervar, manageecxxtype, static=1)),
_abortIfFalse(
_cxxArrayHasElementSorted(manageearray, actorvar),
"actor not managed by this!"),
Whitespace.NL,
StmtExpr(_callCxxArrayRemoveSorted(manageearray, actorvar)),
StmtExpr(ExprCall(_deallocMethod(manageeipdltype),
args=[ actorvar ])),
StmtReturn()
])
switchontype.addcase(CaseLabel(_protocolId(manageeipdltype).name),
case)
default = StmtBlock()
default.addstmts([ _runtimeAbort('unreached'), StmtReturn() ])
switchontype.addcase(DefaultLabel(), default)
removemanagee.addstmt(switchontype)
return [ register,
registerid,

Просмотреть файл

@ -678,6 +678,8 @@ Clear(JSContext *cx, uintN argc, jsval *vp)
return JS_TRUE;
}
#ifdef MOZ_IPC
static JSBool
SendCommand(JSContext* cx,
uintN argc,
@ -722,6 +724,8 @@ GetChildGlobalObject(JSContext* cx,
return JS_FALSE;
}
#endif // MOZ_IPC
/*
* JSContext option name to flag map. The option names are in alphabetical
* order for better reporting.
@ -856,8 +860,10 @@ static JSFunctionSpec glob_functions[] = {
#ifdef DEBUG
{"dumpHeap", DumpHeap, 5,0},
#endif
#ifdef MOZ_IPC
{"sendCommand", SendCommand, 1,0},
{"getChildGlobalObject", GetChildGlobalObject, 0,0},
#endif
#ifdef MOZ_CALLGRIND
{"startCallgrind", js_StartCallgrind, 0,0},
{"stopCallgrind", js_StopCallgrind, 0,0},
@ -2013,8 +2019,10 @@ main(int argc, char **argv)
JS_DestroyContext(cx);
} // this scopes the nsCOMPtrs
#ifdef MOZ_IPC
if (!XRE_ShutdownTestShell())
NS_ERROR("problem shutting down testshell");
#endif
#ifdef MOZ_CRASHREPORTER
// Get the crashreporter service while XPCOM is still active.

Просмотреть файл

@ -52,13 +52,16 @@ PARALLEL_DIRS = \
tables \
xul/base/public \
xul/base/src \
ipc \
$(NULL)
ifdef NS_PRINTING
PARALLEL_DIRS += printing
endif
ifdef MOZ_IPC
PARALLEL_DIRS += ipc
endif
ifdef MOZ_MATHML
PARALLEL_DIRS += \
mathml \

Просмотреть файл

@ -148,7 +148,9 @@ FORCE_STATIC_LIB = 1
include $(topsrcdir)/config/rules.mk
ifdef MOZ_IPC
include $(topsrcdir)/ipc/chromium/chromium-config.mk
endif
LOCAL_INCLUDES += \
-I$(srcdir) \

Просмотреть файл

@ -3415,7 +3415,7 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
const PRUint8 aStyle,
const gfxFloat aDescentLimit)
{
NS_ASSERTION(aStyle != DECORATION_STYLE_NONE, "aStyle is none");
NS_ASSERTION(aStyle != NS_STYLE_TEXT_DECORATION_STYLE_NONE, "aStyle is none");
gfxRect rect =
GetTextDecorationRectInternal(aPt, aLineSize, aAscent, aOffset,
@ -3438,12 +3438,12 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
nsRefPtr<gfxPattern> oldPattern;
switch (aStyle) {
case DECORATION_STYLE_SOLID:
case DECORATION_STYLE_DOUBLE:
case NS_STYLE_TEXT_DECORATION_STYLE_SOLID:
case NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE:
oldLineWidth = aGfxContext->CurrentLineWidth();
oldPattern = aGfxContext->GetPattern();
break;
case DECORATION_STYLE_DASHED: {
case NS_STYLE_TEXT_DECORATION_STYLE_DASHED: {
aGfxContext->Save();
contextIsSaved = PR_TRUE;
aGfxContext->Clip(rect);
@ -3455,7 +3455,7 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
rect.size.width += dashWidth;
break;
}
case DECORATION_STYLE_DOTTED: {
case NS_STYLE_TEXT_DECORATION_STYLE_DOTTED: {
aGfxContext->Save();
contextIsSaved = PR_TRUE;
aGfxContext->Clip(rect);
@ -3474,7 +3474,7 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
rect.size.width += dashWidth;
break;
}
case DECORATION_STYLE_WAVY:
case NS_STYLE_TEXT_DECORATION_STYLE_WAVY:
aGfxContext->Save();
contextIsSaved = PR_TRUE;
aGfxContext->Clip(rect);
@ -3498,13 +3498,13 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
aGfxContext->SetColor(gfxRGBA(aColor));
aGfxContext->SetLineWidth(lineHeight);
switch (aStyle) {
case DECORATION_STYLE_SOLID:
case NS_STYLE_TEXT_DECORATION_STYLE_SOLID:
aGfxContext->NewPath();
aGfxContext->MoveTo(rect.TopLeft());
aGfxContext->LineTo(rect.TopRight());
aGfxContext->Stroke();
break;
case DECORATION_STYLE_DOUBLE:
case NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE:
/**
* We are drawing double line as:
*
@ -3527,14 +3527,14 @@ nsCSSRendering::PaintDecorationLine(gfxContext* aGfxContext,
aGfxContext->LineTo(rect.BottomRight());
aGfxContext->Stroke();
break;
case DECORATION_STYLE_DOTTED:
case DECORATION_STYLE_DASHED:
case NS_STYLE_TEXT_DECORATION_STYLE_DOTTED:
case NS_STYLE_TEXT_DECORATION_STYLE_DASHED:
aGfxContext->NewPath();
aGfxContext->MoveTo(rect.TopLeft());
aGfxContext->LineTo(rect.TopRight());
aGfxContext->Stroke();
break;
case DECORATION_STYLE_WAVY: {
case NS_STYLE_TEXT_DECORATION_STYLE_WAVY: {
/**
* We are drawing wavy line as:
*
@ -3616,7 +3616,7 @@ nsCSSRendering::GetTextDecorationRect(nsPresContext* aPresContext,
const gfxFloat aDescentLimit)
{
NS_ASSERTION(aPresContext, "aPresContext is null");
NS_ASSERTION(aStyle != DECORATION_STYLE_NONE, "aStyle is none");
NS_ASSERTION(aStyle != NS_STYLE_TEXT_DECORATION_STYLE_NONE, "aStyle is none");
gfxRect rect =
GetTextDecorationRectInternal(gfxPoint(0, 0), aLineSize, aAscent, aOffset,
@ -3639,9 +3639,10 @@ nsCSSRendering::GetTextDecorationRectInternal(const gfxPoint& aPt,
const PRUint8 aStyle,
const gfxFloat aDescentLimit)
{
NS_ASSERTION(aStyle <= DECORATION_STYLE_WAVY, "Invalid aStyle value");
NS_ASSERTION(aStyle <= NS_STYLE_TEXT_DECORATION_STYLE_WAVY,
"Invalid aStyle value");
if (aStyle == DECORATION_STYLE_NONE)
if (aStyle == NS_STYLE_TEXT_DECORATION_STYLE_NONE)
return gfxRect(0, 0, 0, 0);
PRBool canLiftUnderline = aDescentLimit >= 0.0;
@ -3658,7 +3659,7 @@ nsCSSRendering::GetTextDecorationRectInternal(const gfxPoint& aPt,
gfxFloat suggestedMaxRectHeight = NS_MAX(NS_MIN(ascent, descentLimit), 1.0);
r.size.height = lineHeight;
if (aStyle == DECORATION_STYLE_DOUBLE) {
if (aStyle == NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE) {
/**
* We will draw double line as:
*
@ -3684,7 +3685,7 @@ nsCSSRendering::GetTextDecorationRectInternal(const gfxPoint& aPt,
r.size.height = NS_MAX(suggestedMaxRectHeight, lineHeight * 2.0 + 1.0);
}
}
} else if (aStyle == DECORATION_STYLE_WAVY) {
} else if (aStyle == NS_STYLE_TEXT_DECORATION_STYLE_WAVY) {
/**
* We will draw wavy line as:
*

Просмотреть файл

@ -286,15 +286,6 @@ struct nsCSSRendering {
PRUint8 aEndBevelSide = 0,
nscoord aEndBevelOffset = 0);
enum {
DECORATION_STYLE_NONE = 0,
DECORATION_STYLE_SOLID = 1,
DECORATION_STYLE_DOTTED = 2,
DECORATION_STYLE_DASHED = 3,
DECORATION_STYLE_DOUBLE = 4,
DECORATION_STYLE_WAVY = 5
};
/**
* Function for painting the decoration lines for the text.
* NOTE: aPt, aLineSize, aAscent and aOffset are non-rounded device pixels,
@ -313,8 +304,8 @@ struct nsCSSRendering {
* NS_STYLE_TEXT_DECORATION_UNDERLINE or
* NS_STYLE_TEXT_DECORATION_OVERLINE or
* NS_STYLE_TEXT_DECORATION_LINE_THROUGH.
* @param aStyle the style of the decoration line (See above
* enum names).
* @param aStyle the style of the decoration line such as
* NS_STYLE_TEXT_DECORATION_STYLE_*.
* @param aDescentLimit If aDescentLimit is zero or larger and the
* underline overflows from the descent space,
* the underline should be lifted up as far as
@ -353,8 +344,8 @@ struct nsCSSRendering {
* NS_STYLE_TEXT_DECORATION_UNDERLINE or
* NS_STYLE_TEXT_DECORATION_OVERLINE or
* NS_STYLE_TEXT_DECORATION_LINE_THROUGH.
* @param aStyle the style of the decoration line (See above
* enum names).
* @param aStyle the style of the decoration line such as
* NS_STYLE_TEXT_DECORATION_STYLE_*.
* @param aDescentLimit If aDescentLimit is zero or larger and the
* underline overflows from the descent space,
* the underline should be lifted up as far as

Просмотреть файл

@ -1701,6 +1701,8 @@ nsDisplayOwnLayer::BuildLayer(nsDisplayListBuilder* aBuilder,
return layer.forget();
}
#ifdef MOZ_IPC
nsDisplayScrollLayer::nsDisplayScrollLayer(nsDisplayListBuilder* aBuilder,
nsDisplayList* aList,
nsIFrame* aForFrame,
@ -1780,6 +1782,8 @@ nsDisplayScrollLayer::~nsDisplayScrollLayer()
}
#endif
#endif
nsDisplayClip::nsDisplayClip(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayItem* aItem,
const nsRect& aRect)

Просмотреть файл

@ -1769,6 +1769,7 @@ public:
NS_DISPLAY_DECL_NAME("OwnLayer", TYPE_OWN_LAYER)
};
#ifdef MOZ_IPC
/**
* This creates a layer for the given list of items, whose visibility is
* determined by the displayport for the given frame instead of what is
@ -1816,6 +1817,7 @@ public:
private:
nsIFrame* mViewportFrame;
};
#endif
/**
* nsDisplayClip can clip a list of items, but we take a single item

Просмотреть файл

@ -626,6 +626,15 @@ static inline mozilla::css::Side operator++(mozilla::css::Side& side, int) {
#define NS_STYLE_TEXT_DECORATION_OVERRIDE_ALL 0x20
#define NS_STYLE_TEXT_DECORATION_LINES_MASK (NS_STYLE_TEXT_DECORATION_UNDERLINE | NS_STYLE_TEXT_DECORATION_OVERLINE | NS_STYLE_TEXT_DECORATION_LINE_THROUGH)
// See nsStyleText
#define NS_STYLE_TEXT_DECORATION_STYLE_NONE 0 // not in CSS spec, mapped to -moz-none
#define NS_STYLE_TEXT_DECORATION_STYLE_DOTTED 1
#define NS_STYLE_TEXT_DECORATION_STYLE_DASHED 2
#define NS_STYLE_TEXT_DECORATION_STYLE_SOLID 3
#define NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE 4
#define NS_STYLE_TEXT_DECORATION_STYLE_WAVY 5
#define NS_STYLE_TEXT_DECORATION_STYLE_MAX NS_STYLE_TEXT_DECORATION_STYLE_WAVY
// See nsStyleText
#define NS_STYLE_TEXT_TRANSFORM_NONE 0
#define NS_STYLE_TEXT_TRANSFORM_CAPITALIZE 1

Просмотреть файл

@ -78,11 +78,17 @@ EXPORTS = \
nsLayoutStatics.h \
$(NULL)
ifdef MOZ_IPC
GKIPCLIB=../ipc/$(LIB_PREFIX)gkipc_s.$(LIB_SUFFIX)
else
GKIPCLIB=$(NULL)
endif
SHARED_LIBRARY_LIBS = \
../base/$(LIB_PREFIX)gkbase_s.$(LIB_SUFFIX) \
../forms/$(LIB_PREFIX)gkforms_s.$(LIB_SUFFIX) \
../generic/$(LIB_PREFIX)gkgeneric_s.$(LIB_SUFFIX) \
../ipc/$(LIB_PREFIX)gkipc_s.$(LIB_SUFFIX) \
$(GKIPCLIB) \
../style/$(LIB_PREFIX)gkstyle_s.$(LIB_SUFFIX) \
../tables/$(LIB_PREFIX)gktable_s.$(LIB_SUFFIX) \
../xul/base/src/$(LIB_PREFIX)gkxulbase_s.$(LIB_SUFFIX) \
@ -294,8 +300,10 @@ ifdef MOZ_NATIVE_LIBVPX
EXTRA_DSO_LDOPTS += $(MOZ_LIBVPX_LIBS)
endif
ifdef MOZ_IPC
include $(topsrcdir)/config/config.mk
include $(topsrcdir)/ipc/chromium/chromium-config.mk
endif
include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -36,7 +36,9 @@
*
* ***** END LICENSE BLOCK ***** */
#ifdef MOZ_IPC
#include "base/basictypes.h"
#endif
#include "xpcmodule.h"
#include "mozilla/ModuleUtils.h"

Просмотреть файл

@ -239,6 +239,8 @@ input > .anonymous-div {
/* XXXldb I'm not sure if we really want the 'text-decoration: inherit',
but it's needed to make 'text-decoration' "work" on text inputs. */
text-decoration: inherit;
-moz-text-decoration-color: inherit;
-moz-text-decoration-style: inherit;
}
input:disabled,

Просмотреть файл

@ -6076,6 +6076,7 @@ nsBlockFrame::PaintTextDecorationLine(gfxContext* aCtx,
const nsPoint& aPt,
nsLineBox* aLine,
nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset,
gfxFloat aAscent,
gfxFloat aSize,
@ -6096,7 +6097,7 @@ nsBlockFrame::PaintTextDecorationLine(gfxContext* aCtx,
nsCSSRendering::PaintDecorationLine(
aCtx, aColor, pt, size,
PresContext()->AppUnitsToGfxUnits(aLine->GetAscent()),
aOffset, aDecoration, nsCSSRendering::DECORATION_STYLE_SOLID);
aOffset, aDecoration, aStyle);
}
}

Просмотреть файл

@ -369,6 +369,7 @@ protected:
const nsPoint& aPt,
nsLineBox* aLine,
nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset,
gfxFloat aAscent,
gfxFloat aSize,

Просмотреть файл

@ -75,9 +75,9 @@ class nsDisplayTextDecoration : public nsDisplayItem {
public:
nsDisplayTextDecoration(nsDisplayListBuilder* aBuilder,
nsHTMLContainerFrame* aFrame, PRUint8 aDecoration,
nscolor aColor, nsLineBox* aLine)
nscolor aColor, PRUint8 aStyle, nsLineBox* aLine)
: nsDisplayItem(aBuilder, aFrame), mLine(aLine), mColor(aColor),
mDecoration(aDecoration) {
mDecoration(aDecoration), mStyle(aStyle) {
MOZ_COUNT_CTOR(nsDisplayTextDecoration);
}
#ifdef NS_BUILD_REFCNT_LOGGING
@ -100,6 +100,7 @@ private:
nsLineBox* mLine;
nscolor mColor;
PRUint8 mDecoration;
PRUint8 mStyle;
};
void
@ -136,16 +137,16 @@ nsDisplayTextDecoration::Paint(nsDisplayListBuilder* aBuilder,
if (mDecoration == NS_STYLE_TEXT_DECORATION_UNDERLINE) {
gfxFloat underlineOffset = fontGroup->GetUnderlineOffset();
f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor,
underlineOffset, ascent,
mStyle, underlineOffset, ascent,
metrics.underlineSize, mDecoration);
} else if (mDecoration == NS_STYLE_TEXT_DECORATION_OVERLINE) {
f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor,
metrics.maxAscent, ascent,
mStyle, metrics.maxAscent, ascent,
metrics.underlineSize, mDecoration);
} else {
f->PaintTextDecorationLine(aCtx->ThebesContext(), pt, mLine, mColor,
metrics.strikeoutOffset, ascent,
metrics.strikeoutSize, mDecoration);
mStyle, metrics.strikeoutOffset,
ascent, metrics.strikeoutSize, mDecoration);
}
}
@ -159,10 +160,12 @@ class nsDisplayTextShadow : public nsDisplayItem {
public:
nsDisplayTextShadow(nsDisplayListBuilder* aBuilder,
nsHTMLContainerFrame* aFrame,
const PRUint8 aDecoration,
const PRUint8 aDecoration, PRUint8 aUnderlineStyle,
PRUint8 aOverlineStyle, PRUint8 aStrikeThroughStyle,
nsLineBox* aLine)
: nsDisplayItem(aBuilder, aFrame), mLine(aLine),
mDecorationFlags(aDecoration) {
mDecorationFlags(aDecoration), mUnderlineStyle(aUnderlineStyle),
mOverlineStyle(aOverlineStyle), mStrikeThroughStyle(aStrikeThroughStyle) {
MOZ_COUNT_CTOR(nsDisplayTextShadow);
}
virtual ~nsDisplayTextShadow() {
@ -176,6 +179,9 @@ public:
private:
nsLineBox* mLine;
PRUint8 mDecorationFlags;
PRUint8 mUnderlineStyle;
PRUint8 mOverlineStyle;
PRUint8 mStrikeThroughStyle;
};
void
@ -243,22 +249,20 @@ nsDisplayTextShadow::Paint(nsDisplayListBuilder* aBuilder,
gfxSize size(lineWidth, metrics.underlineSize);
underlineRect = nsCSSRendering::GetTextDecorationRect(presContext, size,
ascent, underlineOffset,
NS_STYLE_TEXT_DECORATION_UNDERLINE,
nsCSSRendering::DECORATION_STYLE_SOLID);
NS_STYLE_TEXT_DECORATION_UNDERLINE, mUnderlineStyle);
}
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_OVERLINE) {
gfxSize size(lineWidth, metrics.underlineSize);
overlineRect = nsCSSRendering::GetTextDecorationRect(presContext, size,
ascent, metrics.maxAscent,
NS_STYLE_TEXT_DECORATION_OVERLINE,
nsCSSRendering::DECORATION_STYLE_SOLID);
NS_STYLE_TEXT_DECORATION_OVERLINE, mOverlineStyle);
}
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) {
gfxSize size(lineWidth, metrics.strikeoutSize);
lineThroughRect = nsCSSRendering::GetTextDecorationRect(presContext, size,
ascent, metrics.strikeoutOffset,
NS_STYLE_TEXT_DECORATION_LINE_THROUGH,
nsCSSRendering::DECORATION_STYLE_SOLID);
mStrikeThroughStyle);
}
for (PRUint32 i = shadowList->Length(); i > 0; --i) {
@ -302,18 +306,19 @@ nsDisplayTextShadow::Paint(nsDisplayListBuilder* aBuilder,
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_UNDERLINE) {
f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor,
underlineOffset, ascent,
mUnderlineStyle, underlineOffset, ascent,
metrics.underlineSize, NS_STYLE_TEXT_DECORATION_UNDERLINE);
}
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_OVERLINE) {
f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor,
metrics.maxAscent, ascent,
mOverlineStyle, metrics.maxAscent, ascent,
metrics.underlineSize, NS_STYLE_TEXT_DECORATION_OVERLINE);
}
if (mDecorationFlags & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) {
f->PaintTextDecorationLine(shadowCtx, pt, mLine, shadowColor,
metrics.strikeoutOffset, ascent,
metrics.strikeoutSize, NS_STYLE_TEXT_DECORATION_LINE_THROUGH);
mStrikeThroughStyle, metrics.strikeoutOffset,
ascent, metrics.strikeoutSize,
NS_STYLE_TEXT_DECORATION_LINE_THROUGH);
}
contextBoxBlur.DoPaint();
@ -350,9 +355,11 @@ nsHTMLContainerFrame::DisplayTextDecorations(nsDisplayListBuilder* aBuilder,
// behind children, line-through in front. For Quirks mode, see
// nsTextFrame::PaintTextDecorations. (See bug 1777.)
nscolor underColor, overColor, strikeColor;
PRUint8 underStyle, overStyle, strikeStyle;
PRUint8 decorations = NS_STYLE_TEXT_DECORATION_NONE;
GetTextDecorations(PresContext(), aLine != nsnull, decorations, underColor,
overColor, strikeColor);
overColor, strikeColor, underStyle, overStyle,
strikeStyle);
if (decorations == NS_STYLE_TEXT_DECORATION_NONE)
return NS_OK;
@ -362,26 +369,27 @@ nsHTMLContainerFrame::DisplayTextDecorations(nsDisplayListBuilder* aBuilder,
// list, underneath the text and all decorations.
if (GetStyleText()->mTextShadow) {
rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextShadow(aBuilder, this, decorations, aLine));
nsDisplayTextShadow(aBuilder, this, decorations, underStyle, overStyle,
strikeStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv);
}
if (decorations & NS_STYLE_TEXT_DECORATION_UNDERLINE) {
rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_UNDERLINE,
underColor, aLine));
underColor, underStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv);
}
if (decorations & NS_STYLE_TEXT_DECORATION_OVERLINE) {
rv = aBelowTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_OVERLINE,
overColor, aLine));
overColor, overStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv);
}
if (decorations & NS_STYLE_TEXT_DECORATION_LINE_THROUGH) {
rv = aAboveTextDecorations->AppendNewToTop(new (aBuilder)
nsDisplayTextDecoration(aBuilder, this, NS_STYLE_TEXT_DECORATION_LINE_THROUGH,
strikeColor, aLine));
strikeColor, strikeStyle, aLine));
NS_ENSURE_SUCCESS(rv, rv);
}
return NS_OK;
@ -424,6 +432,7 @@ nsHTMLContainerFrame::PaintTextDecorationLine(
const nsPoint& aPt,
nsLineBox* aLine,
nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset,
gfxFloat aAscent,
gfxFloat aSize,
@ -442,7 +451,7 @@ nsHTMLContainerFrame::PaintTextDecorationLine(
PresContext()->AppUnitsToGfxUnits(bp.top + aPt.y));
gfxSize size(PresContext()->AppUnitsToGfxUnits(innerWidth), aSize);
nsCSSRendering::PaintDecorationLine(aCtx, aColor, pt, size, aAscent, aOffset,
aDecoration, nsCSSRendering::DECORATION_STYLE_SOLID);
aDecoration, aStyle);
}
/*virtual*/ void
@ -461,7 +470,10 @@ nsHTMLContainerFrame::GetTextDecorations(nsPresContext* aPresContext,
PRUint8& aDecorations,
nscolor& aUnderColor,
nscolor& aOverColor,
nscolor& aStrikeColor)
nscolor& aStrikeColor,
PRUint8& aUnderStyle,
PRUint8& aOverStyle,
PRUint8& aStrikeStyle)
{
aDecorations = NS_STYLE_TEXT_DECORATION_NONE;
if (!mStyleContext->HasTextDecorations()) {
@ -471,13 +483,15 @@ nsHTMLContainerFrame::GetTextDecorations(nsPresContext* aPresContext,
}
if (!aIsBlock) {
aDecorations = this->GetStyleTextReset()->mTextDecoration &
const nsStyleTextReset* styleTextReset = this->GetStyleTextReset();
aDecorations = styleTextReset->mTextDecoration &
NS_STYLE_TEXT_DECORATION_LINES_MASK;
if (aDecorations) {
nscolor color = this->GetVisitedDependentColor(eCSSProperty_color);
aUnderColor = color;
aOverColor = color;
aStrikeColor = color;
nscolor color =
this->GetVisitedDependentColor(eCSSProperty_text_decoration_color);
aUnderColor = aOverColor = aStrikeColor = color;
aUnderStyle = aOverStyle = aStrikeStyle =
styleTextReset->GetDecorationStyle();
}
}
else {
@ -491,23 +505,29 @@ nsHTMLContainerFrame::GetTextDecorations(nsPresContext* aPresContext,
// walk tree
for (nsIFrame* frame = this; frame; frame = frame->GetParent()) {
PRUint8 decors = frame->GetStyleTextReset()->mTextDecoration & decorMask;
const nsStyleTextReset* styleTextReset = frame->GetStyleTextReset();
PRUint8 decors = styleTextReset->mTextDecoration & decorMask;
if (decors) {
// A *new* text-decoration is found.
nscolor color = frame->GetVisitedDependentColor(eCSSProperty_color);
nscolor color = frame->GetVisitedDependentColor(
eCSSProperty_text_decoration_color);
PRUint8 style = styleTextReset->GetDecorationStyle();
if (NS_STYLE_TEXT_DECORATION_UNDERLINE & decors) {
aUnderColor = color;
aUnderStyle = style;
decorMask &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE;
aDecorations |= NS_STYLE_TEXT_DECORATION_UNDERLINE;
}
if (NS_STYLE_TEXT_DECORATION_OVERLINE & decors) {
aOverColor = color;
aOverStyle = style;
decorMask &= ~NS_STYLE_TEXT_DECORATION_OVERLINE;
aDecorations |= NS_STYLE_TEXT_DECORATION_OVERLINE;
}
if (NS_STYLE_TEXT_DECORATION_LINE_THROUGH & decors) {
aStrikeColor = color;
aStrikeStyle = style;
decorMask &= ~NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
aDecorations |= NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
}

Просмотреть файл

@ -144,6 +144,18 @@ protected:
* in aDecoration is set. It is undefined otherwise.
* @param aStrikeColor The color of strike-through if the appropriate bit
* in aDecoration is set. It is undefined otherwise.
* @param aUnderStyle The style of underline if the appropriate bit
* in aDecoration is set. It is undefined otherwise.
* The style is one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* @param aOverStyle The style of overline if the appropriate bit
* in aDecoration is set. It is undefined otherwise.
* The style is one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* @param aStrikeStyle The style of strike-through if the appropriate bit
* in aDecoration is set. It is undefined otherwise.
* The style is one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* NOTE: This function assigns NS_STYLE_TEXT_DECORATION_NONE to
* aDecorations for text-less frames. See bug 20163 for
* details.
@ -153,7 +165,10 @@ protected:
PRUint8& aDecorations,
nscolor& aUnderColor,
nscolor& aOverColor,
nscolor& aStrikeColor);
nscolor& aStrikeColor,
PRUint8& aUnderStyle,
PRUint8& aOverStyle,
PRUint8& aStrikeStyle);
/**
* Function that does the actual drawing of the textdecoration.
@ -161,6 +176,8 @@ protected:
* @param aCtx the Thebes graphics context to draw on
* @param aLine the line, or nsnull if this is an inline frame
* @param aColor the color of the text-decoration
* @param aStyle the style of the text-decoration, i.e., one of
* NS_STYLE_TEXT_DECORATION_STYLE_* consts.
* @param aAscent ascent of the font from which the
* text-decoration was derived.
* @param aOffset distance *above* baseline where the
@ -177,6 +194,7 @@ protected:
const nsPoint& aPt,
nsLineBox* aLine,
nscolor aColor,
PRUint8 aStyle,
gfxFloat aOffset,
gfxFloat aAscent,
gfxFloat aSize,

Просмотреть файл

@ -55,7 +55,9 @@
#undef slots
#endif
#ifdef MOZ_IPC
#include "mozilla/plugins/PluginMessageUtils.h"
#endif
#ifdef MOZ_X11
#include <cairo-xlib.h>
@ -238,7 +240,9 @@ static PRLogModuleInfo *nsObjectFrameLM = PR_NewLogModule("nsObjectFrame");
#endif
using namespace mozilla;
#ifdef MOZ_IPC
using namespace mozilla::plugins;
#endif
using namespace mozilla::layers;
// special class for handeling DOM context menu events because for
@ -2351,6 +2355,7 @@ nsObjectFrame::PaintPlugin(nsDisplayListBuilder* aBuilder,
nsPoint origin;
gfxWindowsNativeDrawing nativeDraw(ctx, frameGfxRect);
#ifdef MOZ_IPC
if (nativeDraw.IsDoublePass()) {
// OOP plugin specific: let the shim know before we paint if we are doing a
// double pass render. If this plugin isn't oop, the register window message
@ -2362,6 +2367,7 @@ nsObjectFrame::PaintPlugin(nsDisplayListBuilder* aBuilder,
if (pluginEvent.event)
inst->HandleEvent(&pluginEvent, nsnull);
}
#endif
do {
HDC hdc = nativeDraw.BeginNativeDrawing();
if (!hdc)

Просмотреть файл

@ -43,8 +43,10 @@
* as <frame>, <iframe>, and some <object>s
*/
#ifdef MOZ_IPC
#include "mozilla/layout/RenderFrameParent.h"
using mozilla::layout::RenderFrameParent;
#endif
#include "nsSubDocumentFrame.h"
#include "nsCOMPtr.h"
@ -275,6 +277,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
if (!mInnerView)
return NS_OK;
#ifdef MOZ_IPC
nsFrameLoader* frameLoader = FrameLoader();
if (frameLoader) {
RenderFrameParent* rfp = frameLoader->GetCurrentRemoteFrame();
@ -282,6 +285,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
return rfp->BuildDisplayList(aBuilder, this, aDirtyRect, aLists);
}
}
#endif
nsIView* subdocView = mInnerView->GetFirstChild();
if (!subdocView)

Просмотреть файл

@ -432,13 +432,19 @@ protected:
struct TextDecorations {
PRUint8 mDecorations;
PRUint8 mOverStyle;
PRUint8 mUnderStyle;
PRUint8 mStrikeStyle;
nscolor mOverColor;
nscolor mUnderColor;
nscolor mStrikeColor;
TextDecorations() :
mDecorations(0), mOverColor(NS_RGB(0, 0, 0)),
mUnderColor(NS_RGB(0, 0, 0)), mStrikeColor(NS_RGB(0, 0, 0))
mDecorations(0), mOverStyle(NS_STYLE_TEXT_DECORATION_STYLE_SOLID),
mUnderStyle(NS_STYLE_TEXT_DECORATION_STYLE_SOLID),
mStrikeStyle(NS_STYLE_TEXT_DECORATION_STYLE_SOLID),
mOverColor(NS_RGB(0, 0, 0)), mUnderColor(NS_RGB(0, 0, 0)),
mStrikeColor(NS_RGB(0, 0, 0))
{ }
PRBool HasDecorationlines() {

Просмотреть файл

@ -3465,15 +3465,6 @@ static StyleIDs SelectionStyleIDs[] = {
nsILookAndFeel::eMetricFloat_SpellCheckerUnderlineRelativeSize }
};
static PRUint8 sUnderlineStyles[] = {
nsCSSRendering::DECORATION_STYLE_NONE, // NS_UNDERLINE_STYLE_NONE 0
nsCSSRendering::DECORATION_STYLE_DOTTED, // NS_UNDERLINE_STYLE_DOTTED 1
nsCSSRendering::DECORATION_STYLE_DASHED, // NS_UNDERLINE_STYLE_DASHED 2
nsCSSRendering::DECORATION_STYLE_SOLID, // NS_UNDERLINE_STYLE_SOLID 3
nsCSSRendering::DECORATION_STYLE_DOUBLE, // NS_UNDERLINE_STYLE_DOUBLE 4
nsCSSRendering::DECORATION_STYLE_WAVY // NS_UNDERLINE_STYLE_WAVY 5
};
void
nsTextPaintStyle::InitSelectionStyle(PRInt32 aIndex)
{
@ -3546,9 +3537,9 @@ nsTextPaintStyle::GetSelectionUnderline(nsPresContext* aPresContext,
look->GetColor(styleID.mLine, color);
look->GetMetric(styleID.mLineStyle, style);
if (!NS_IS_VALID_UNDERLINE_STYLE(style)) {
if (style > NS_STYLE_TEXT_DECORATION_STYLE_MAX) {
NS_ERROR("Invalid underline style value is specified");
style = NS_UNDERLINE_STYLE_SOLID;
style = NS_STYLE_TEXT_DECORATION_STYLE_SOLID;
}
look->GetMetric(styleID.mLineRelativeSize, size);
@ -3558,9 +3549,9 @@ nsTextPaintStyle::GetSelectionUnderline(nsPresContext* aPresContext,
*aLineColor = color;
}
*aRelativeSize = size;
*aStyle = sUnderlineStyles[style];
*aStyle = style;
return sUnderlineStyles[style] != nsCSSRendering::DECORATION_STYLE_NONE &&
return style != NS_STYLE_TEXT_DECORATION_STYLE_NONE &&
color != NS_TRANSPARENT &&
size > 0.0f;
}
@ -4270,13 +4261,15 @@ nsTextFrame::GetTextDecorations(nsPresContext* aPresContext)
// This handles the <a href="blah.html"><font color="green">La
// la la</font></a> case. The link underline should be green.
useOverride = PR_TRUE;
overrideColor = context->GetVisitedDependentColor(eCSSProperty_color);
overrideColor = context->GetVisitedDependentColor(
eCSSProperty_text_decoration_color);
}
// FIXME: see above (remove this check)
PRUint8 useDecorations = decorMask & styleText->mTextDecoration;
if (useDecorations) {// a decoration defined here
nscolor color = context->GetVisitedDependentColor(eCSSProperty_color);
nscolor color = context->GetVisitedDependentColor(
eCSSProperty_text_decoration_color);
// FIXME: We also need to record the thickness and position
// metrics appropriate to this element (at least in standards
@ -4289,16 +4282,19 @@ nsTextFrame::GetTextDecorations(nsPresContext* aPresContext)
// This way we move the decorations for relative positioning.
if (NS_STYLE_TEXT_DECORATION_UNDERLINE & useDecorations) {
decorations.mUnderColor = useOverride ? overrideColor : color;
decorations.mUnderStyle = styleText->GetDecorationStyle();
decorMask &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE;
decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_UNDERLINE;
}
if (NS_STYLE_TEXT_DECORATION_OVERLINE & useDecorations) {
decorations.mOverColor = useOverride ? overrideColor : color;
decorations.mOverStyle = styleText->GetDecorationStyle();
decorMask &= ~NS_STYLE_TEXT_DECORATION_OVERLINE;
decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_OVERLINE;
}
if (NS_STYLE_TEXT_DECORATION_LINE_THROUGH & useDecorations) {
decorations.mStrikeColor = useOverride ? overrideColor : color;
decorations.mStrikeStyle = styleText->GetDecorationStyle();
decorMask &= ~NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
decorations.mDecorations |= NS_STYLE_TEXT_DECORATION_LINE_THROUGH;
}
@ -4393,8 +4389,7 @@ nsTextFrame::PaintTextDecorations(gfxContext* aCtx, const gfxRect& aDirtyRect,
size.height = fontMetrics.underlineSize;
nsCSSRendering::PaintDecorationLine(
aCtx, lineColor, pt, size, ascent, fontMetrics.maxAscent,
NS_STYLE_TEXT_DECORATION_OVERLINE,
nsCSSRendering::DECORATION_STYLE_SOLID);
NS_STYLE_TEXT_DECORATION_OVERLINE, decorations.mOverStyle);
}
if (decorations.HasUnderline()) {
lineColor = aOverrideColor ? *aOverrideColor : decorations.mUnderColor;
@ -4402,8 +4397,7 @@ nsTextFrame::PaintTextDecorations(gfxContext* aCtx, const gfxRect& aDirtyRect,
gfxFloat offset = aProvider.GetFontGroup()->GetUnderlineOffset();
nsCSSRendering::PaintDecorationLine(
aCtx, lineColor, pt, size, ascent, offset,
NS_STYLE_TEXT_DECORATION_UNDERLINE,
nsCSSRendering::DECORATION_STYLE_SOLID);
NS_STYLE_TEXT_DECORATION_UNDERLINE, decorations.mUnderStyle);
}
if (decorations.HasStrikeout()) {
lineColor = aOverrideColor ? *aOverrideColor : decorations.mStrikeColor;
@ -4411,8 +4405,7 @@ nsTextFrame::PaintTextDecorations(gfxContext* aCtx, const gfxRect& aDirtyRect,
gfxFloat offset = fontMetrics.strikeoutOffset;
nsCSSRendering::PaintDecorationLine(
aCtx, lineColor, pt, size, ascent, offset,
NS_STYLE_TEXT_DECORATION_LINE_THROUGH,
nsCSSRendering::DECORATION_STYLE_SOLID);
NS_STYLE_TEXT_DECORATION_LINE_THROUGH, decorations.mStrikeStyle);
}
}
@ -4440,30 +4433,6 @@ static const SelectionType SelectionTypesWithDecorations =
nsISelectionController::SELECTION_IME_CONVERTEDTEXT |
nsISelectionController::SELECTION_IME_SELECTEDCONVERTEDTEXT;
static PRUint8
GetTextDecorationStyle(const nsTextRangeStyle &aRangeStyle)
{
NS_PRECONDITION(aRangeStyle.IsLineStyleDefined(),
"aRangeStyle.mLineStyle have to be defined");
switch (aRangeStyle.mLineStyle) {
case nsTextRangeStyle::LINESTYLE_NONE:
return nsCSSRendering::DECORATION_STYLE_NONE;
case nsTextRangeStyle::LINESTYLE_SOLID:
return nsCSSRendering::DECORATION_STYLE_SOLID;
case nsTextRangeStyle::LINESTYLE_DOTTED:
return nsCSSRendering::DECORATION_STYLE_DOTTED;
case nsTextRangeStyle::LINESTYLE_DASHED:
return nsCSSRendering::DECORATION_STYLE_DASHED;
case nsTextRangeStyle::LINESTYLE_DOUBLE:
return nsCSSRendering::DECORATION_STYLE_DOUBLE;
case nsTextRangeStyle::LINESTYLE_WAVY:
return nsCSSRendering::DECORATION_STYLE_WAVY;
default:
NS_WARNING("Requested underline style is not valid");
return nsCSSRendering::DECORATION_STYLE_SOLID;
}
}
static gfxFloat
ComputeSelectionUnderlineHeight(nsPresContext* aPresContext,
const gfxFont::Metrics& aFontMetrics,
@ -4549,7 +4518,7 @@ static void DrawSelectionDecorations(gfxContext* aContext, SelectionType aType,
if (aRangeStyle.mLineStyle == nsTextRangeStyle::LINESTYLE_NONE) {
return;
}
style = GetTextDecorationStyle(aRangeStyle);
style = aRangeStyle.mLineStyle;
relativeSize = aRangeStyle.mIsBoldLine ? 2.0f : 1.0f;
} else if (!weDefineSelectionUnderline) {
// There is no underline style definition.
@ -5358,7 +5327,7 @@ nsTextFrame::CombineSelectionUnderlineRect(nsPresContext* aPresContext,
rangeStyle.mLineStyle == nsTextRangeStyle::LINESTYLE_NONE) {
continue;
}
style = GetTextDecorationStyle(rangeStyle);
style = rangeStyle.mLineStyle;
relativeSize = rangeStyle.mIsBoldLine ? 2.0f : 1.0f;
} else if (!nsTextPaintStyle::GetSelectionUnderline(aPresContext, index,
nsnull, &relativeSize,

Просмотреть файл

@ -0,0 +1,65 @@
<p style="color: #008000;
text-decoration: underline line-through overline;">
<span style="color: #0000FF;">This blue text has green decoration lines</span>
</p>
<p style="color: yellow;
text-decoration: underline line-through overline;">
<span style="color: red;">This red text has yellow decoration lines</span>
</p>
<p style="color: red; text-decoration: underline line-through overline;">
<span style="color: #0000FF">This blue text has red lines</span>
</p>
<p style="color: orange;">
This orange text has transparent lines
</p>
<p>
Here is no decoration lines, but
<span style="font-size: 2em;
color: green;
text-decoration: underline line-through overline;">
<span style="color: blue;">
this blue text has green decoration lines</span></span>,
and here is no decoration lines too.
</p>
<p style="color: red;">
This is red paragraph and here is no decoration lines, but
<span style="font-size: 2em;
color: green;
text-decoration: underline line-through overline;">
<span style="color: red;">here are green decoration lines</span></span>,
and here is no decoration lines too.
</p>
<p style="color: purple;
text-decoration: underline line-through overline;">
This is purple paragraph and here are decoration lines of current color, but
<span style="font-size: 2em;
color: red;
text-decoration: underline line-through overline;">
<span style="color: purple;">here are red decoration lines</span></span>,
and here are current color decoration lines.
</p>
<p style="color: green;
text-decoration: underline line-through overline;">
This is green paragraph and here are decoration lines of current color, and
<span style="font-size: 2em;">
here is specified red decoration color but has current color lines</span>,
and here are current color decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: blue;">
here is red text with blue decoration lines</span>,
and here is blue text without decoration lines.
</p>
<p style="color: blue;">
This is blue paragraph and decoration color is specified as green,
<span style="font-size:2em;
color: red;
text-decoration: underline line-through overline;
-moz-text-decoration-color: green;">
here is red text with green decoration lines</span>,
and here is blue text without decoration lines.
</p>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше