author Ting-Yu Lin <>
Wed, 24 Apr 2019 22:23:59 +0000
changeset 530044 e5029a42a612c56a826a4634425c9f0670e9a111
parent 525636 b698ba8b6e2454bd18dbe5b03fb98f8f6ff47df6
child 532142 55b7de7850bebd08d85caeb719de711a32f71369
permissions -rw-r--r--
Bug 1546223 Part 5 - Change ReflowInput::InitConstraints() to use Maybe for containing block size. r=dholbert There are some minor behavior changes come with this. 1) Change the default containing block size to (NS_UNCONSTRAINEDSIZE, NS_UNCONSTRAINEDSIZE). I think this is more reasonable than (-1, -1). 2) mContainingBlockSize is used to cache only the block size passing though constructor, Init(), or the invalid (-1, -1). This patch makes it cache the value computed by ComputeContainingBlockRectangle(). Note that mContainingBlockSize is used only in nsTableWrapperFrame::InitChildReflowInput() to set the inner table frame's containing block to be the same as the outer table frame's. We don't change this behavior by caching more. Because even if the inner frame use the invalid cached (-1, -1) containing block size from the outer reflow input, it still computes the block size again in InitConstraints(). (Inner table's cb is the same as the outer table's per InitCBReflowInput().) Differential Revision:

// You might think topsrcdir is '.', but that's not true when the Gradle build
// is launched from within IntelliJ.
def topsrcdir = rootProject.projectDir.absolutePath

def commandLine = ["${topsrcdir}/mach", "environment", "--format", "json", "--verbose"]
if ([''].toLowerCase().contains('windows')) {
    // gradle is called before parsing config.status, we cannot use PYTHON
    // value.
    if (System.env.MOZILLABUILD) {
        def mozillabuild = System.env.MOZILLABUILD
        if (mozillabuild) {
            commandLine.addAll(0, ["${mozillabuild}/python/python.exe"])
def proc = commandLine.execute(null, new File(topsrcdir))
def standardOutput = new ByteArrayOutputStream()
proc.consumeProcessOutput(standardOutput, standardOutput)

// Only show the output if something went wrong.
if (proc.exitValue() != 0) {
    throw new GradleException("Process '${commandLine}' finished with non-zero exit value ${proc.exitValue()}:\n\n${standardOutput.toString()}")

import groovy.json.JsonSlurper

def slurper = new JsonSlurper()
def json = slurper.parseText(standardOutput.toString())

if (json.substs.MOZ_BUILD_APP != 'mobile/android') {
    throw new GradleException("Building with Gradle is only supported for Fennec, i.e., MOZ_BUILD_APP == 'mobile/android'.")

// Set the Android SDK location.  This is the *least specific* mechanism, which
// is unfortunate: we'd prefer to use the *most specific* mechanism.  That is,
// (first 'sdk.dir', then 'android.dir') and then the
// environment variable ANDROID_HOME will override this.  That's unfortunate,
// but it's hard to automatically arrange better.
System.setProperty('android.home', json.substs.ANDROID_SDK_ROOT)

include ':annotations'
include ':app'
include ':geckoview'
include ':geckoview_example'
include ':omnijar'
include ':thirdparty'

project(':annotations').projectDir = new File("${json.topsrcdir}/mobile/android/annotations")
project(':app').projectDir = new File("${json.topsrcdir}/mobile/android/app")
project(':geckoview').projectDir = new File("${json.topsrcdir}/mobile/android/geckoview")
project(':geckoview_example').projectDir = new File("${json.topsrcdir}/mobile/android/geckoview_example")
project(':omnijar').projectDir = new File("${json.topsrcdir}/mobile/android/app/omnijar")
project(':thirdparty').projectDir = new File("${json.topsrcdir}/mobile/android/thirdparty")

// The Gradle instance is shared between settings.gradle and all the
// other build.gradle files (see
// We use this ext property to pass the per-object-directory mozconfig
// between scripts.  This lets us execute set-up code before we gradle
// tries to configure the project even once, and as a side benefit
// saves invoking |mach environment| multiple times.
gradle.ext.mozconfig = json