author | Dave Camp <dcamp@mozilla.com>, Jason Orendorff <jorendorff@mozilla.com> |
Wed, 31 Aug 2011 10:39:39 -0500 | |
changeset 77644 | a0fb16f50677663405fce56a058f940135c44011 |
parent 77643 | 0504a441fef78c7d247270b6296760e3af062aa9 |
child 77645 | b51f0e08e51ff46e06cee1a184e2d4e535552953 |
push id | 78 |
push user | clegnitto@mozilla.com |
push date | Fri, 16 Dec 2011 17:32:24 +0000 |
treeherder | mozilla-release@79d24e644fdd [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | ted, bsmedberg |
bugs | 679031 |
milestone | 9.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -174,16 +174,17 @@ @BINPATH@/components/htmlparser.xpt @BINPATH@/components/imglib2.xpt @BINPATH@/components/imgicon.xpt @BINPATH@/components/inspector.xpt @BINPATH@/components/intl.xpt @BINPATH@/components/jar.xpt @BINPATH@/components/jetpack.xpt @BINPATH@/components/jsdservice.xpt +@BINPATH@/components/jsdebugger.xpt @BINPATH@/components/layout_base.xpt @BINPATH@/components/layout_forms.xpt #ifdef NS_PRINTING @BINPATH@/components/layout_printing.xpt #endif @BINPATH@/components/layout_xul_tree.xpt @BINPATH@/components/layout_xul.xpt @BINPATH@/components/locale.xpt
new file mode 100644 --- /dev/null +++ b/js/ductwork/Makefile.in @@ -0,0 +1,49 @@ +# ***** 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 the Mozilla Browser code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Jason Orendorff <jorendorff@mozilla.com> +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(topsrcdir)/config/config.mk + +PARALLEL_DIRS += \ + debugger \ + $(NULL) + +include $(topsrcdir)/config/rules.mk
new file mode 100644 --- /dev/null +++ b/js/ductwork/debugger/IJSDebugger.idl @@ -0,0 +1,52 @@ +/* ***** 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 + * Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Dave Camp <dcamp@mozilla.com> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" + +/** + * Do not use this interface. Instead, write: + * Components.utils.import("resource://gre/modules/jsdebugger.jsm"); + */ +[scriptable, uuid(2fc14cc6-4ed0-4bbf-a7dd-e535bf088eb5)] +interface IJSDebugger : nsISupports +{ + /** + * Define the global Debugger constructor. + */ + [implicit_jscontext] + void addClass(); +};
new file mode 100644 --- /dev/null +++ b/js/ductwork/debugger/JSDebugger.cpp @@ -0,0 +1,111 @@ +/* -*- 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 + * The Mozilla Foundation <http://www.mozilla.org/>. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Dave Camp <dcamp@mozilla.com> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "JSDebugger.h" +#include "nsIXPConnect.h" +#include "nsThreadUtils.h" +#include "jsapi.h" +#include "jsobj.h" +#include "jsgc.h" +#include "jsfriendapi.h" +#include "jsdbgapi.h" +#include "mozilla/ModuleUtils.h" +#include "nsServiceManagerUtils.h" +#include "nsMemory.h" + +#define JSDEBUGGER_CONTRACTID \ + "@mozilla.org/jsdebugger;1" + +#define JSDEBUGGER_CID \ +{ 0x0365cbd5, 0xd46e, 0x4e94, { 0xa3, 0x9f, 0x83, 0xb6, 0x3c, 0xd1, 0xa9, 0x63 } } + +namespace mozilla { +namespace jsdebugger { + +NS_GENERIC_FACTORY_CONSTRUCTOR(JSDebugger) + +NS_IMPL_ISUPPORTS1(JSDebugger, IJSDebugger) + +JSDebugger::JSDebugger() +{ +} + +JSDebugger::~JSDebugger() +{ +} + +NS_IMETHODIMP +JSDebugger::AddClass(JSContext *cx) +{ + nsresult rv; + nsCOMPtr<nsIXPConnect> xpc = do_GetService(nsIXPConnect::GetCID(), &rv); + + JSObject* global = JS_GetGlobalForScopeChain(cx); + if (!global) { + return NS_ERROR_NOT_AVAILABLE; + } + + if (!JS_DefineDebuggerObject(cx, global)) { + return NS_ERROR_FAILURE; + } + + return NS_OK; +} + +} +} + +NS_DEFINE_NAMED_CID(JSDEBUGGER_CID); + +static const mozilla::Module::CIDEntry kJSDebuggerCIDs[] = { + { &kJSDEBUGGER_CID, false, NULL, mozilla::jsdebugger::JSDebuggerConstructor }, + { NULL } +}; + +static const mozilla::Module::ContractIDEntry kJSDebuggerContracts[] = { + { JSDEBUGGER_CONTRACTID, &kJSDEBUGGER_CID }, + { NULL } +}; + +static const mozilla::Module kJSDebuggerModule = { + mozilla::Module::kVersion, + kJSDebuggerCIDs, + kJSDebuggerContracts +}; + +NSMODULE_DEFN(jsdebugger) = &kJSDebuggerModule;
new file mode 100644 --- /dev/null +++ b/js/ductwork/debugger/JSDebugger.h @@ -0,0 +1,62 @@ +/* -*- 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 + * The Mozilla Foundation <http://www.mozilla.org/>. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Dave Camp <dcamp@mozilla.com> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef COMPONENTS_JSDEBUGGER_H +#define COMPONENTS_JSDEBUGGER_H + +#include "IJSDebugger.h" + +namespace mozilla { +namespace jsdebugger { + +class JSDebugger : public IJSDebugger +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_IJSDEBUGGER + + JSDebugger(); + +private: + ~JSDebugger(); +}; + +} +} + +#endif
new file mode 100644 --- /dev/null +++ b/js/ductwork/debugger/Makefile.in @@ -0,0 +1,75 @@ +# ***** 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 +# The Mozilla Foundation <http://www.mozilla.org/>. +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Dave Camp <dcamp@mozilla.com> +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ +relativesrcdir = js/ductwork/debugger + +include $(DEPTH)/config/autoconf.mk + +MODULE = jsdebugger +MODULE_NAME = jsdebugger +GRE_MODULE = 1 + +LIBRARY_NAME = jsdebugger +XPIDL_MODULE = jsdebugger +LIBXUL_LIBRARY = 1 +EXPORT_LIBRARY = 1 +IS_COMPONENT = 1 + +CPPSRCS = \ + JSDebugger.cpp \ + $(NULL) + +EXTRA_DSO_LDOPTS += \ + $(MOZ_COMPONENT_LIBS) \ + $(MOZ_JS_LIBS) \ + $(NULL) + +EXTRA_JS_MODULES = \ + jsdebugger.jsm \ + $(NULL) + +XPIDLSRCS = \ + IJSDebugger.idl \ + $(NULL) + +XPCSHELL_TESTS = tests + +include $(topsrcdir)/config/rules.mk
copy from toolkit/components/ctypes/ctypes.jsm copy to js/ductwork/debugger/jsdebugger.jsm --- a/toolkit/components/ctypes/ctypes.jsm +++ b/js/ductwork/debugger/jsdebugger.jsm @@ -11,46 +11,45 @@ * 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 js-ctypes. * * The Initial Developer of the Original Code is * The Mozilla Foundation <http://www.mozilla.org/>. - * Portions created by the Initial Developer are Copyright (C) 2009 + * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): - * Dan Witte <dwitte@mozilla.com> + * Jason Orendorff <jorendorff@mozilla.com> * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -let EXPORTED_SYMBOLS = [ "ctypes" ]; +let EXPORTED_SYMBOLS = [ "Debugger" ]; /* - * This is the js module for ctypes. Import it like so: - * Components.utils.import("resource://gre/modules/ctypes.jsm"); + * This is the js module for Debugger. Import it like so: + * Components.utils.import("resource://gre/modules/jsdebugger.jsm"); * - * This will create a 'ctypes' object, which provides an interface to describe - * and instantiate C types and call C functions from a dynamic library. + * This will create a 'Debugger' object, which provides an interface to debug + * JavaScript code running in other compartments in the same process, on the + * same thread. * * For documentation on the API, see: - * https://developer.mozilla.org/en/js-ctypes/js-ctypes_reference - * + * https://wiki.mozilla.org/Debugger */ -// Initialize the ctypes object. You do not need to do this yourself. -const init = Components.classes["@mozilla.org/jsctypes;1"].createInstance(); -init(); - +// Initialize the Debugger object. You do not need to do this yourself. +const init = Components.classes["@mozilla.org/jsdebugger;1"].createInstance(Components.interfaces.IJSDebugger); +init.addClass();
new file mode 100644 --- /dev/null +++ b/js/ductwork/debugger/tests/head_dbg.js @@ -0,0 +1,17 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cu = Components.utils; +const Cr = Components.results; + +function testGlobal(aName) { + let systemPrincipal = Cc["@mozilla.org/systemprincipal;1"] + .createInstance(Ci.nsIPrincipal); + + let sandbox = Cu.Sandbox(systemPrincipal); + Cu.evalInSandbox("this.__name = '" + aName + "'", sandbox); + return sandbox; +}
new file mode 100644 --- /dev/null +++ b/js/ductwork/debugger/tests/test_nativewrappers.js @@ -0,0 +1,29 @@ +function run_test() +{ + Components.utils.import("resource://gre/modules/jsdebugger.jsm"); + var g = testGlobal("test1"); + + var dbg = new Debugger(); + dbg.addDebuggee(g); + dbg.onDebuggerStatement = function(aFrame) { + let args = aFrame["arguments"]; + try { + args[0]; + do_check_true(true); + } catch(ex) { + do_check_true(false); + } + }; + + g.eval("function stopMe(arg) {debugger;}"); + + g2 = testGlobal("test2"); + g2.g = g; + g2.eval("(" + function createBadEvent() { + let parser = Components.classes["@mozilla.org/xmlextras/domparser;1"].createInstance(Components.interfaces.nsIDOMParser); + let doc = parser.parseFromString("<foo></foo>", "text/xml"); + g.stopMe(doc.createEvent("MouseEvent")); + } + ")()"); + + dbg.enabled = false; +}
new file mode 100644 --- /dev/null +++ b/js/ductwork/debugger/tests/xpcshell.ini @@ -0,0 +1,5 @@ +[DEFAULT] +head = head_dbg.js +tail = + +[test_nativewrappers.js]
--- a/testing/xpcshell/xpcshell.ini +++ b/testing/xpcshell/xpcshell.ini @@ -41,16 +41,17 @@ skip-if = os == "android" [include:testing/xpcshell/example/unit/xpcshell.ini] [include:xpcom/tests/unit/xpcshell.ini] [include:modules/libpref/test/unit/xpcshell.ini] [include:intl/strres/tests/unit/xpcshell.ini] [include:intl/unicharutil/tests/unit/xpcshell.ini] [include:intl/uconv/tests/unit/xpcshell.ini] [include:netwerk/test/unit/xpcshell.ini] [include:netwerk/test/httpserver/test/xpcshell.ini] +[include:js/ductwork/debugger/tests/xpcshell.ini] [include:js/jetpack/tests/unit/xpcshell.ini] [include:js/src/xpconnect/tests/unit/xpcshell.ini] [include:modules/libjar/test/unit/xpcshell.ini] [include:extensions/cookie/test/unit/xpcshell.ini] [include:storage/test/unit/xpcshell.ini] [include:rdf/tests/unit/xpcshell.ini] [include:gfx/tests/unit/xpcshell.ini] [include:widget/tests/unit/xpcshell.ini]
--- a/toolkit/library/libxul-config.mk +++ b/toolkit/library/libxul-config.mk @@ -137,16 +137,17 @@ COMPONENT_LIBS += \ toolkitcomps \ pipboot \ pipnss \ appcomps \ jsreflect \ composer \ jetpack_s \ telemetry \ + jsdebugger \ storagecomps \ $(NULL) ifdef BUILD_CTYPES COMPONENT_LIBS += \ jsctypes \ $(NULL) endif
--- a/toolkit/library/nsStaticXULComponents.cpp +++ b/toolkit/library/nsStaticXULComponents.cpp @@ -268,16 +268,17 @@ OSXPROXY_MODULE \ WINDOWSPROXY_MODULE \ JSCTYPES_MODULE \ JSREFLECT_MODULE \ MODULE(jsperf) \ SERVICES_CRYPTO_MODULE \ MOZ_APP_COMPONENT_MODULES \ MODULE(nsTelemetryModule) \ + MODULE(jsdebugger) \ /* end of list */ #define MODULE(_name) \ NSMODULE_DECL(_name); XUL_MODULES #undef MODULE
--- a/toolkit/toolkit-makefiles.sh +++ b/toolkit/toolkit-makefiles.sh @@ -678,16 +678,22 @@ MAKEFILES_jsctypes=" toolkit/components/ctypes/Makefile toolkit/components/ctypes/tests/Makefile " MAKEFILES_jsreflect=" toolkit/components/reflect/Makefile " +MAKEFILES_jsductwork=" + js/ductwork/Makefile + js/ductwork/debugger/Makefile + js/ductwork/debugger/tests/Makefile +" + MAKEFILES_libpr0n=" modules/libpr0n/Makefile modules/libpr0n/build/Makefile modules/libpr0n/public/Makefile modules/libpr0n/src/Makefile modules/libpr0n/decoders/Makefile modules/libpr0n/decoders/icon/Makefile modules/libpr0n/decoders/icon/mac/Makefile @@ -745,16 +751,17 @@ add_makefiles " $MAKEFILES_gfx $MAKEFILES_htmlparser $MAKEFILES_intl $MAKEFILES_xpconnect $MAKEFILES_jsipc $MAKEFILES_jsdebugger $MAKEFILES_jsctypes $MAKEFILES_jsreflect + $MAKEFILES_jsductwork $MAKEFILES_content $MAKEFILES_layout $MAKEFILES_libimg $MAKEFILES_libjar $MAKEFILES_libreg $MAKEFILES_libpref $MAKEFILES_mathml $MAKEFILES_plugin
--- a/toolkit/toolkit-tiers.mk +++ b/toolkit/toolkit-tiers.mk @@ -219,16 +219,18 @@ endif ifdef MOZ_PREF_EXTENSIONS tier_platform_dirs += extensions/pref endif tier_platform_dirs += services/crypto/component tier_platform_dirs += startupcache +tier_platform_dirs += js/ductwork + ifdef APP_LIBXUL_STATICDIRS # Applications can cheat and ask for code to be # built before libxul so libxul can be linked against it. tier_platform_staticdirs += $(APP_LIBXUL_STATICDIRS) endif ifdef APP_LIBXUL_DIRS # Applications can cheat and ask for code to be # built before libxul so it can be linked into libxul.