Backed out 6 changesets (bug 868996, bug 867903, bug 869014, bug 870219, bug 861587) for PGO bustage.

CLOSED TREE
This commit is contained in:
Ryan VanderMeulen 2013-05-09 17:11:59 -04:00
parent 727ec412d4
commit 9edc2f4aa0
28 changed files with 151 additions and 388 deletions

View File

@ -1619,21 +1619,6 @@ endif
endif
endif
ifneq (,$(filter export,$(MAKECMDGOALS)))
MDDEPEND_FILES := $(strip $(wildcard $(addprefix $(MDDEPDIR)/,$(EXTRA_EXPORT_MDDEPEND_FILES))))
ifneq (,$(MDDEPEND_FILES))
ifdef .PYMAKE
includedeps $(MDDEPEND_FILES)
else
include $(MDDEPEND_FILES)
endif
endif
endif
#############################################################################
-include $(topsrcdir)/$(MOZ_BUILD_APP)/app-rules.mk

View File

@ -3885,37 +3885,9 @@ nsGlobalWindow::GetOpener(nsIDOMWindow** aOpener)
NS_IMETHODIMP
nsGlobalWindow::SetOpener(nsIDOMWindow* aOpener)
{
// Check if we were called from a privileged chrome script. If not, and if
// aOpener is not null, just define aOpener on our inner window's JS object,
// wapped into the current compartment so that for Xrays we define on the Xray
// expando object, but don't set it on the outer window, so that it'll get
// reset on navigation. This is just like replaceable properties, but we're
// not quite readonly.
// check if we were called from a privileged chrome script.
// If not, opener is settable only to null.
if (aOpener && !nsContentUtils::IsCallerChrome()) {
// JS_WrapObject will outerize, so we don't care if aOpener is an inner.
nsCOMPtr<nsIGlobalObject> glob = do_QueryInterface(aOpener);
NS_ENSURE_STATE(glob);
AutoJSContext cx;
JSAutoRequest ar(cx);
// Note we explicitly do NOT enter any particular compartment here; we want
// the caller compartment in cases when we have a caller, so that we define
// expandos on Xrays as needed.
JS::Rooted<JSObject*> otherObj(cx, glob->GetGlobalJSObject());
NS_ENSURE_STATE(otherObj);
JS::Rooted<JSObject*> thisObj(cx, mJSObject);
NS_ENSURE_STATE(mJSObject);
if (!JS_WrapObject(cx, otherObj.address()) ||
!JS_WrapObject(cx, thisObj.address()) ||
!JS_DefineProperty(cx, thisObj, "opener", JS::ObjectValue(*otherObj),
JS_PropertyStub, JS_StrictPropertyStub,
JSPROP_ENUMERATE)) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}

View File

@ -29,7 +29,6 @@ MOCHITEST_FILES = \
test_domcursor.html \
test_named_frames.html \
test_Image_constructor.html \
test_setting_opener.html \
$(NULL)
MOCHITEST_CHROME_FILES = \

View File

@ -1,106 +0,0 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=868996
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 868996</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript">
/** Test for Bug 868996 **/
SimpleTest.waitForExplicitFinish();
var sb1, sb2;
var Cu = SpecialPowers.Cu;
function testOpenerSet() {
// Use setTimeout to make the relevant onerror run in this window
var win = window.open("data:text/html,<script>opener.setTimeout(opener.basicOpenerTest, 0, this)</" + "script>");
// A sandbox for the window
sb1 = new Cu.Sandbox(win, {wantXrays: true })
sb1.win = win
// And a sandbox using the expanded principal.
sb2 = new Cu.Sandbox([win], {wantXrays: true })
sb2.win = win
}
function evalsb(str, sb) {
// Have to unwrap() to get objects we care about
return SpecialPowers.unwrap(Cu.evalInSandbox(str, sb));
}
function basicOpenerTest(win) {
is(win.opener, window, "Opening a window should give it the right opener");
is(evalsb("win.opener", sb1), window,
"Reading opener in sandbox 1 should work");
is(evalsb("win.opener", sb2), window,
"Reading opener in sandbox 2 should work");
win.opener = $("x").contentWindow;
evalsb("win.opener = win.opener.document.getElementById('y').contentWindow", sb1);
evalsb("win.opener = win.opener.document.getElementById('z').contentWindow", sb2);
is(win.opener, $("x").contentWindow, "Should be able to set an opener to a different window");
is(evalsb("win.opener", sb1), $("y").contentWindow,
"Should be able to set the opener to a different window in a sandbox one");
is(evalsb("win.opener", sb2), $("z").contentWindow,
"Should be able to set the opener to a different window in a sandbox two");
win.location = "data:text/html,<script>opener.setTimeout(opener.continueOpenerTest, 0, this);</" + "script>";
}
function continueOpenerTest(win) {
is(win.opener, window, "Navigating a window should have reset the opener we stashed on it temporarily");
is(evalsb("win.opener", sb1), window,
"Navigating a window should have reset the opener in sb1");
is(evalsb("win.opener", sb2), window,
"Navigating a window should have reset the opener in sb2");
win.opener = null;
is(win.opener, null, "Should be able to set the opener to null");
is(evalsb("win.opener", sb1), null,
"Setting the opener to null should be visible in sb1");
is(evalsb("win.opener", sb2), null,
"Setting the opener to null should be visible in sb2");
win.location = "data:text/html,Loaded";
// Now poll for that load, since we have no way for the window to
// communicate with us now
setTimeout(checkForLoad, 0, win);
}
function checkForLoad(win) {
if (!win.document.documentElement ||
win.document.documentElement.textContent != "Loaded") {
setTimeout(checkForLoad, 0, win);
return;
}
is(win.opener, null, "Null opener should persist across navigations");
is(evalsb("win.opener", sb1), null,
"Null opener should persist across navigations in sb1");
is(evalsb("win.opener", sb2), null,
"Null opener should persist across navigations in sb2");
win.close();
SimpleTest.finish();
}
addLoadEvent(testOpenerSet);
</script>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=868996">Mozilla Bug 868996</a>
<p id="display"></p>
<div id="content" style="display: none">
<iframe id="x"></iframe>
<iframe id="y"></iframe>
<iframe id="z"></iframe>
</div>
<pre id="test">
</pre>
</body>
</html>

View File

@ -5,25 +5,41 @@
import os
import cPickle
from Configuration import Configuration
from Codegen import CGBindingRoot, replaceFileIfChanged
from Codegen import CGBindingRoot
def generate_binding_files(config, outputprefix, srcprefix, webidlfile):
def generate_binding_header(config, outputprefix, srcprefix, webidlfile):
"""
|config| Is the configuration object.
|outputprefix| is a prefix to use for the header guards and filename.
"""
depsname = ".deps/" + outputprefix + ".pp"
filename = outputprefix + ".h"
depsname = ".deps/" + filename + ".pp"
root = CGBindingRoot(config, outputprefix, webidlfile)
replaceFileIfChanged(outputprefix + ".h", root.declare())
replaceFileIfChanged(outputprefix + ".cpp", root.define())
with open(filename, 'wb') as f:
f.write(root.declare())
with open(depsname, 'wb') as f:
# Sort so that our output is stable
f.write("\n".join(outputprefix + ": " + os.path.join(srcprefix, x) for
f.write("\n".join(filename + ": " + os.path.join(srcprefix, x) for
x in sorted(root.deps())))
def generate_binding_cpp(config, outputprefix, srcprefix, webidlfile):
"""
|config| Is the configuration object.
|outputprefix| is a prefix to use for the header guards and filename.
"""
filename = outputprefix + ".cpp"
depsname = ".deps/" + filename + ".pp"
root = CGBindingRoot(config, outputprefix, webidlfile)
with open(filename, 'wb') as f:
f.write(root.define())
with open(depsname, 'wb') as f:
f.write("\n".join(filename + ": " + os.path.join(srcprefix, x) for
x in sorted(root.deps())))
def main():
# Parse arguments.
from optparse import OptionParser
usagestring = "usage: %prog [header|cpp] configFile outputPrefix srcPrefix webIDLFile"
@ -32,34 +48,29 @@ def main():
help="When an error happens, display the Python traceback.")
(options, args) = o.parse_args()
configFile = os.path.normpath(args[0])
srcPrefix = os.path.normpath(args[1])
if len(args) != 5 or (args[0] != "header" and args[0] != "cpp"):
o.error(usagestring)
buildTarget = args[0]
configFile = os.path.normpath(args[1])
outputPrefix = args[2]
srcPrefix = os.path.normpath(args[3])
webIDLFile = os.path.normpath(args[4])
# Load the configuration
# Load the parsing results
f = open('ParserResults.pkl', 'rb')
config = cPickle.load(f)
parserData = cPickle.load(f)
f.close()
def readFile(f):
file = open(f, 'rb')
try:
contents = file.read()
finally:
file.close()
return contents
allWebIDLFiles = readFile(args[2]).split()
changedDeps = readFile(args[3]).split()
# Create the configuration data.
config = Configuration(configFile, parserData)
if all(f.endswith("Binding") or f == "ParserResults.pkl" for f in changedDeps):
toRegenerate = filter(lambda f: f.endswith("Binding"), changedDeps)
toRegenerate = map(lambda f: f[:-len("Binding")] + ".webidl", toRegenerate)
# Generate the prototype classes.
if buildTarget == "header":
generate_binding_header(config, outputPrefix, srcPrefix, webIDLFile);
elif buildTarget == "cpp":
generate_binding_cpp(config, outputPrefix, srcPrefix, webIDLFile);
else:
toRegenerate = allWebIDLFiles
for webIDLFile in toRegenerate:
assert webIDLFile.endswith(".webidl")
outputPrefix = webIDLFile[:-len(".webidl")] + "Binding"
generate_binding_files(config, outputPrefix, srcPrefix, webIDLFile);
assert False # not reached
if __name__ == '__main__':
main()

View File

@ -357,10 +357,7 @@ class CGList(CGThing):
"""
def __init__(self, children, joiner=""):
CGThing.__init__(self)
# Make a copy of the kids into a list, because if someone passes in a
# generator we won't be able to both declare and define ourselves, or
# define ourselves more than once!
self.children = list(children)
self.children = children
self.joiner = joiner
def append(self, child):
self.children.append(child)

View File

@ -60,19 +60,6 @@ class Configuration:
d.nativeType != descriptor.nativeType or d == descriptor
for d in self.descriptors)
# Keep the descriptor list sorted for determinism.
self.descriptors.sort(lambda x,y: cmp(x.name, y.name))
self.descriptorsByName = {}
for d in self.descriptors:
self.descriptorsByName.setdefault(d.interface.identifier.name,
[]).append(d)
self.descriptorsByFile = {}
for d in self.descriptors:
self.descriptorsByFile.setdefault(d.interface.filename(),
[]).append(d)
self.enums = [e for e in parseData if e.isEnum()]
# Figure out what our main-thread and worker dictionaries and callbacks
@ -103,22 +90,17 @@ class Configuration:
workerDictionaries);
flagWorkerOrMainThread(self.callbacks, mainCallbacks, workerCallbacks)
# Keep the descriptor list sorted for determinism.
self.descriptors.sort(lambda x,y: cmp(x.name, y.name))
def getInterface(self, ifname):
return self.interfaces[ifname]
def getDescriptors(self, **filters):
"""Gets the descriptors that match the given filters."""
curr = self.descriptors
# Collect up our filters, because we may have a webIDLFile filter that
# we always want to apply first.
tofilter = []
for key, val in filters.iteritems():
if key == 'webIDLFile':
# Special-case this part to make it fast, since most of our
# getDescriptors calls are conditioned on a webIDLFile. We may
# not have this key, in which case we have no descriptors
# either.
curr = self.descriptorsByFile.get(val, [])
continue
getter = lambda x: x.interface.filename()
elif key == 'hasInterfaceObject':
getter = lambda x: (not x.interface.isExternal() and
x.interface.hasInterfaceObject())
@ -136,12 +118,8 @@ class Configuration:
elif key == 'isNavigatorProperty':
getter = lambda x: x.interface.getNavigatorProperty() != None
else:
# Have to watch out: just closing over "key" is not enough,
# since we're about to mutate its value
getter = (lambda attrName: lambda x: getattr(x, attrName))(key)
tofilter.append((getter, val))
for f in tofilter:
curr = filter(lambda x: f[0](x) == f[1], curr)
getter = lambda x: getattr(x, key)
curr = filter(lambda x: getter(x) == val, curr)
return curr
def getEnums(self, webIDLFile):
return filter(lambda e: e.filename() == webIDLFile, self.enums)
@ -170,11 +148,17 @@ class Configuration:
Gets the appropriate descriptor for the given interface name
and the given workers boolean.
"""
for d in self.descriptorsByName[interfaceName]:
if d.workers == workers:
return d
iface = self.getInterface(interfaceName)
descriptors = self.getDescriptors(interface=iface)
raise NoSuchDescriptorError("For " + interfaceName + " found no matches");
# The only filter we currently have is workers vs non-workers.
matches = filter(lambda x: x.workers is workers, descriptors)
# After filtering, we should have exactly one result.
if len(matches) is not 1:
raise NoSuchDescriptorError("For " + interfaceName + " found " +
str(len(matches)) + " matches");
return matches[0]
def getDescriptorProvider(self, workers):
"""
Gets a descriptor provider that can provide descriptors as needed,

View File

@ -34,11 +34,14 @@ def main():
configFile = os.path.normpath(args[0])
interfaceName = args[1]
# Load the configuration
# Load the parsing results
f = open('ParserResults.pkl', 'rb')
config = cPickle.load(f)
parserData = cPickle.load(f)
f.close()
# Create the configuration data.
config = Configuration(configFile, parserData)
# Generate the example class.
generate_interface_example(config, interfaceName)

View File

@ -55,14 +55,14 @@ def main():
parser.parse(''.join(lines), fullPath)
parserResults = parser.finish()
# Write the parser results out to a pickle.
resultsFile = open('ParserResults.pkl', 'wb')
cPickle.dump(parserResults, resultsFile, -1)
resultsFile.close()
# Load the configuration.
config = Configuration(configFile, parserResults)
# Write the configuration out to a pickle.
resultsFile = open('ParserResults.pkl', 'wb')
cPickle.dump(config, resultsFile, -1)
resultsFile.close()
# Generate the prototype list.
generate_file(config, 'PrototypeList', 'declare')

View File

@ -33,15 +33,6 @@ all_webidl_files += $(test_webidl_files)
binding_header_files := $(subst .webidl,Binding.h,$(all_webidl_files))
binding_cpp_files := $(subst .webidl,Binding.cpp,$(all_webidl_files))
# We want to be able to only regenerate the .cpp and .h files that really need
# to change when a .webidl file changes. We do this by making the
# binding_dependency_trackers targets have dependencies on the right .webidl
# files via generated .pp files, having a .BindingGen target that depends on the
# binding_dependency_trackers and which has all the generated binding .h/.cpp
# depending on it, and then in the make commands for that target being able to
# check which exact binding_dependency_trackers changed.
binding_dependency_trackers := $(subst .webidl,Binding,$(all_webidl_files))
globalgen_targets := \
PrototypeList.h \
RegisterBindings.h \
@ -51,18 +42,6 @@ globalgen_targets := \
UnionConversions.h \
$(NULL)
# Nasty hack: when the test/Makefile.in invokes us to do codegen, it
# uses a target of
# "export TestExampleInterface-example TestExampleProxyInterface-example".
# We don't actually need to load our .o.pp files in that case, so just
# pretend like we have no CPPSRCS if that's the target. It makes the
# test cycle much faster, which is why we're doing it.
#
# XXXbz We could try to cheat even more and only include our CPPSRCS
# when $(MAKECMDGOALS) contains libs, so that we can skip loading all
# those .o.pp when trying to make a single .cpp file too, but that
# would break |make FooBinding.o(bj)|. Ah, well.
ifneq (export TestExampleInterface-example TestExampleProxyInterface-example,$(MAKECMDGOALS))
CPPSRCS = \
$(linked_binding_cpp_files) \
$(filter %.cpp, $(globalgen_targets)) \
@ -71,7 +50,6 @@ CPPSRCS = \
CallbackObject.cpp \
DOMJSProxyHandler.cpp \
$(NULL)
endif
LOCAL_INCLUDES += -I$(topsrcdir)/js/xpconnect/src \
-I$(topsrcdir)/js/xpconnect/wrappers \
@ -101,11 +79,11 @@ LOCAL_INCLUDES += \
$(NULL)
endif
EXTRA_EXPORT_MDDEPEND_FILES := $(addsuffix .pp,$(binding_dependency_trackers))
EXTRA_MDDEPEND_FILES := $(addsuffix .pp,$(binding_cpp_files) $(binding_header_files))
EXPORTS_GENERATED_FILES := $(exported_binding_headers)
EXPORTS_GENERATED_DEST := $(DIST)/include/$(binding_include_path)
EXPORTS_GENERATED_TARGET := export
EXPORTS_GENERATED_TARGET := webidl-export
INSTALL_TARGETS += EXPORTS_GENERATED
ifdef GNU_CC
@ -114,6 +92,14 @@ endif
include $(topsrcdir)/config/rules.mk
# edmorley is sick of clobbering everytime someone adds an interface
$(CPPOBJS): PrototypeList.h
# We need to create a separate target so we can ensure that the pickle is
# done before generating headers.
export:: ParserResults.pkl
$(MAKE) webidl-export
# If you change bindinggen_dependencies here, change it in
# dom/bindings/test/Makefile.in too.
bindinggen_dependencies := \
@ -121,7 +107,6 @@ bindinggen_dependencies := \
Bindings.conf \
Configuration.py \
Codegen.py \
ParserResults.pkl \
parser/WebIDL.py \
$(GLOBAL_DEPS) \
$(NULL)
@ -142,20 +127,35 @@ $(webidl_files): %: $(webidl_base)/%
$(test_webidl_files): %: $(srcdir)/test/%
$(INSTALL) $(IFLAGS1) $(srcdir)/test/$* .
$(binding_header_files): .BindingGen
$(binding_header_files): %Binding.h: $(bindinggen_dependencies) \
%.webidl \
$(call mkdir_deps,$(MDDEPDIR)) \
$(NULL)
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
$(PLY_INCLUDE) -I$(srcdir)/parser \
$(srcdir)/BindingGen.py header \
$(srcdir)/Bindings.conf \
$*Binding \
$(CURDIR)/ \
$*.webidl
$(binding_cpp_files): .BindingGen
# $(binding_dependency_trackers) pick up additional dependencies via .pp files
$(binding_dependency_trackers):
# Just bring it up to date, if it's out of date, so that we'll know that
# we have to redo binding generation and flag this prerequisite there as
# being newer than the bindinggen target.
@$(TOUCH) $@
$(binding_cpp_files): %Binding.cpp: $(bindinggen_dependencies) \
$(CURDIR)/%.webidl \
$(call mkdir_deps,$(MDDEPDIR)) \
$(NULL)
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
$(PLY_INCLUDE) -I$(srcdir)/parser \
$(srcdir)/BindingGen.py cpp \
$(srcdir)/Bindings.conf \
$*Binding \
$(CURDIR) \
$*.webidl
$(globalgen_targets): ParserResults.pkl
%-example: .BindingGen
%-example: $(bindinggen_dependencies) \
ParserResults.pkl \
$(NULL)
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
$(PLY_INCLUDE) -I$(srcdir)/parser \
$(srcdir)/ExampleGen.py \
@ -180,52 +180,24 @@ $(CACHE_DIR)/.done:
@$(TOUCH) $@
ParserResults.pkl: $(globalgen_dependencies)
# Running GlobalGen.py updates ParserResults.pkl as a side-effect
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
$(PLY_INCLUDE) -I$(srcdir)/parser \
$(srcdir)/GlobalGen.py $(srcdir)/Bindings.conf . \
--cachedir=$(CACHE_DIR) \
$(all_webidl_files)
.BindingGen: $(bindinggen_dependencies) $(binding_dependency_trackers)
# Make sure .deps actually exists, since we'll try to write to it from
# BindingGen.py but we're typically running in the export phase, which
# is before anyone has bothered creating .deps.
$(MKDIR) -p .deps
# Pass our long lists through files to try to avoid blowing
# out the command line
echo $(all_webidl_files) > .all-webidl-file-list
echo $? > .changed-dependency-list
# BindingGen.py will examine the changed dependency list to figure out
# what it really needs to regenerate.
$PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
$(PLY_INCLUDE) -I$(srcdir)/parser \
$(srcdir)/BindingGen.py \
$(srcdir)/Bindings.conf \
$(CURDIR) \
.all-webidl-file-list \
.changed-dependency-list
# Now touch the .BindingGen file so that we don't have to keep redoing
# all that until something else actually changes.
@$(TOUCH) $@
GARBAGE += \
webidlyacc.py \
parser.out \
$(wildcard *-example.h) \
$(wildcard *-example.cpp) \
.BindingGen \
.all-webidl-file-list \
.changed-dependency-list \
$(binding_dependency_trackers) \
$(NULL)
# Make sure all binding header files are created during the export stage, so we
# don't have issues with .cpp files being compiled before we've generated the
# headers they depend on. This is really only needed for the test files, since
# the non-test headers are all exported above anyway. Note that this means that
# we do all of our codegen during export.
export:: $(binding_header_files)
# the non-test headers are all exported above anyway.
webidl-export:: $(binding_header_files)
distclean::
-$(RM) \
@ -233,5 +205,6 @@ distclean::
$(binding_cpp_files) \
$(all_webidl_files) \
$(globalgen_targets) \
ParserResults.pkl \
$(NULL)
ParserResults.pkl
.PHONY: webidl-export

View File

@ -3396,15 +3396,8 @@ class Parser(Tokenizer):
try:
if self.globalScope()._lookupIdentifier(identifier):
p[0] = self.globalScope()._lookupIdentifier(identifier)
if not isinstance(p[0], IDLExternalInterface):
raise WebIDLError("Name collision between external "
"interface declaration for identifier "
"%s and %s" % (identifier.name, p[0]),
[location, p[0].location])
return
except Exception, ex:
if isinstance(ex, WebIDLError):
raise ex
except:
pass
p[0] = IDLExternalInterface(location, self.globalScope(), identifier)

View File

@ -317,49 +317,6 @@ def WebIDLTest(parser, harness):
"Should not allow a name collision between interface "
"and other object")
parser = parser.reset()
threw = False
try:
parser.parse("""
dictionary A {
boolean x;
};
interface A;
""")
results = parser.finish()
except:
threw = True
harness.ok(threw,
"Should not allow a name collision between external interface "
"and other object")
parser = parser.reset()
threw = False
try:
parser.parse("""
interface A {
readonly attribute boolean x;
};
interface A;
""")
results = parser.finish()
except:
threw = True
harness.ok(threw,
"Should not allow a name collision between external interface "
"and interface")
parser = parser.reset()
parser.parse("""
interface A;
interface A;
""")
results = parser.finish()
harness.ok(len(results) == 1 and
isinstance(results[0], WebIDL.IDLExternalInterface),
"Should allow name collisions between external interface "
"declarations")
parser = parser.reset()
threw = False
try:

View File

@ -47,7 +47,6 @@ bindinggen_dependencies := \
../Bindings.conf \
../Configuration.py \
../Codegen.py \
../ParserResults.pkl \
../parser/WebIDL.py \
../Makefile \
$(GLOBAL_DEPS) \
@ -90,18 +89,19 @@ endif
# rules.mk and running make with no target in this dir does the right thing.
include $(topsrcdir)/config/rules.mk
$(CPPSRCS): .BindingGen
$(CPPSRCS): ../%Binding.cpp: $(bindinggen_dependencies) \
../%.webidl \
TestExampleInterface-example \
TestExampleProxyInterface-example \
$(NULL)
$(MAKE) -C .. $*Binding.h
$(MAKE) -C .. $*Binding.cpp
.BindingGen: $(bindinggen_dependencies) \
$(test_webidl_files) \
$(NULL)
# The export phase in dom/bindings is what actually looks at
# dependencies and regenerates things as needed, so just go ahead and
# make that phase here. Also make our example interface files. If the
# target used here ever changes, change the conditional around
# $(CPPSRCS) in dom/bindings/Makefile.in.
$(MAKE) -C .. export TestExampleInterface-example TestExampleProxyInterface-example
@$(TOUCH) $@
TestExampleInterface-example:
$(MAKE) -C .. TestExampleInterface-example
TestExampleProxyInterface-example:
$(MAKE) -C .. TestExampleProxyInterface-example
check::
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
@ -110,20 +110,3 @@ check::
check-interactive:
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
$(PLY_INCLUDE) $(srcdir)/../parser/runtests.py -q
# Since we define MOCHITEST_FILES, config/makefiles/mochitest.mk goes ahead and
# sets up a rule with libs:: in itm which makes our .DEFAULT_TARGET be "libs".
# Then ruls.mk does |.DEFAULT_TARGET ?= default| which leaves it as "libs". So
# if we make without an explicit target in this directory, we try to make
# "libs", but with a $(MAKECMDGOALS) of empty string. And then rules.mk
# helpfully does not include our *.o.pp files, since it includes them only if
# filtering some stuff out from $(MAKECMDGOALS) leaves it nonempty. The upshot
# is that if some headers change and we run make in this dir without an explicit
# target things don't get rebuilt.
#
# On the other hand, if we set .DEFAULT_TARGET to "default" explicitly here,
# then rules.mk will reinvoke make with "export" and "libs" but this time hey
# will be passed as explicit targets, show up in $(MAKECMDGOALS), and things
# will work. Do this at the end of our Makefile so the rest of the build system
# does not get a chance to muck with it after we set it.
.DEFAULT_GOAL := default

View File

@ -4,6 +4,8 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
interface ClientRect;
interface ClientRectList {
readonly attribute unsigned long length;
getter ClientRect? item(unsigned long index);

View File

@ -15,6 +15,7 @@
* http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/core/nsIDOMDocument.idl
*/
interface Comment;
interface StyleSheetList;
interface TouchList;
interface WindowProxy;

View File

@ -1,8 +1,8 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
interface DOMRequest;
interface LockedFile;
enum FileMode { "readonly", "readwrite" };

View File

@ -10,6 +10,8 @@
* liability, trademark and document use rules apply.
*/
interface Element;
interface HTMLCollection {
readonly attribute unsigned long length;
getter Element? item(unsigned long index);

View File

@ -12,6 +12,8 @@
* and create derivative works of this document.
*/
interface DOMStringMap;
interface HTMLElement : Element {
// metadata attributes
attribute DOMString title;

View File

@ -10,6 +10,8 @@
* liability, trademark and document use rules apply.
*/
interface HTMLOptionElement;
interface HTMLOptionsCollection : HTMLCollection {
attribute unsigned long length;
[Throws]

View File

@ -3,6 +3,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
interface Attr;
/**
* This is a temporary, non-standard interface, to ease the transition to a
* world where Attr no longer inherits from Node.

View File

@ -3,6 +3,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
interface ClientRect;
/**
* These objects are exposed by the MozDOMAfterPaint event. Each one represents
* a request to repaint a rectangle that was generated by the browser.

View File

@ -12,6 +12,8 @@
* liability, trademark and document use rules apply.
*/
interface ClientRect;
interface Range {
[Throws]
readonly attribute Node startContainer;

View File

@ -11,6 +11,7 @@
*/
interface SVGAnimatedEnumeration;
interface SVGAnimatedLength;
interface SVGMaskElement : SVGElement {

View File

@ -12,6 +12,7 @@
interface SVGAnimatedString;
interface SVGViewSpec;
interface SVGPoint;
interface SVGSVGElement : SVGGraphicsElement {

View File

@ -1,4 +1,3 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
@ -10,6 +9,8 @@
* liability, trademark and document use rules apply.
*/
interface DocumentFragment;
callback LifecycleCreatedCallback = void();
dictionary LifecycleCallbacks {

View File

@ -15,6 +15,13 @@
// This IDL depends on the typed array specification defined at:
// https://www.khronos.org/registry/typedarray/specs/latest/typedarrays.idl
// XXXbz all sorts of forward declarations for things that are not new
// bindings yet.
interface Event;
interface HTMLCanvasElement;
interface HTMLVideoElement;
interface ImageData;
typedef unsigned long GLenum;
typedef boolean GLboolean;
typedef unsigned long GLbitfield;

View File

@ -4,6 +4,8 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
interface StyleSheet;
interface XMLStylesheetProcessingInstruction : ProcessingInstruction {
readonly attribute StyleSheet? sheet;
};

View File

@ -1619,21 +1619,6 @@ endif
endif
endif
ifneq (,$(filter export,$(MAKECMDGOALS)))
MDDEPEND_FILES := $(strip $(wildcard $(addprefix $(MDDEPDIR)/,$(EXTRA_EXPORT_MDDEPEND_FILES))))
ifneq (,$(MDDEPEND_FILES))
ifdef .PYMAKE
includedeps $(MDDEPEND_FILES)
else
include $(MDDEPEND_FILES)
endif
endif
endif
#############################################################################
-include $(topsrcdir)/$(MOZ_BUILD_APP)/app-rules.mk