To-do: . store the origin of a callback so we can tell the user where it originated if it leaks . Make the callback-leak warning configurable . Make MozRepl::RemoteObject::Instance::DESTROY just queue the id, and have MozRepl::RemoteObject call repl.breakLink() with just the ids, reducing traffic . Automatically load the AnyEvent backend if needed. . Implement ->can() for MozRepl objects 0.29 20111222 . This version is mostly a cleanup version with clearer failure diagnostics. If MozRepl::RemoteObject is currently working for you, there is no need to upgrade. + The module is now tested with Firefox 3.0.9 Firefox 3.5.x Firefox 4.0.1 Firefox 5 Firefox 6.0.1 Firefox 7.0.1 Firefox 8 Firefox 9 . Firefox 8 onwards need a very recent version of the mozrepl Add-on, for example 1.1.0 available from https://github.com/bard/mozrepl/tags Older versions will not work due to "script caching" in Firefox that prevents the repl from ever returning anything but the first result. If you are upgrading Firefox to version 8 or later, you will see failure symptoms like Transport still not UTF-8 safe: "8.0!"?!? 0.28 20110923 + Switch to "multiline" input mode. This should eliminate the "no result yet from mozrepl" warnings and make input/response somewhat better. . Fix a buglet in the memleak test ! Function generation using ->expr() needs the following idiom to work with Firefox 6+: f=function() { ... }; f Ideally, use ->declare() to declare functions. + The module is now tested with Firefox 3.0.9 Firefox 3.5.x Firefox 4.0.1 Firefox 5 Firefox 6.0.1 Firefox 7 Beta 5 0.27 20110726 + The module is now tested with Firefox 3.0.9 Firefox 3.5.x Firefox 4.0.1 Firefox 5 Firefox 6 Beta + The Javascript code now catches eval() errors and returns a structured exception to Perl. The Perl interface does not change. This brings ca. 10% speed increase + More UTF-8 handling on the Perl side of the connection. All received strings are now actively decoded to unicode strings before being handed to JSON.pm + The JS API now uses the native JSON encoder of Firefox instead of using a hand-rolled JSON encoder when possible. The conditions are: a) Native JSON must be available b) The transport of Unicode characters must survive from Javascript back to Perl. This only works natively with a patched version mozrepl, see https://github.com/bard/mozrepl/pull/17 This should be autodetected. 0.26 20110502 ! Bugfix: Actually process the C parameter again 0.25 20110426 . Add CLEAR method to tied objects so now list-assignment to a hash works: %$foo = (Just => 'another', Javascript => 'Hacker'); $foo->{Just} # another $foo->{Javascript} # Hacker . Add the C parameter to ->install_bridge for setting the Net::Telnet buffer size . Don't list MozRepl::RemoteObject::Methods in carp() . More method implementation moved to ::Methods 0.24 20110416 . Redo connect logic in ->setup, so that we handle cases where MozRepl is unavailable gracefully. 0.23 20110415 . Fix test failures . Postpone deprecation period of methods added to JS objects a bit. All methods will remain until after 0.25. 0.22 20110411 . Added experimental AnyEvent-compatible backend MozRepl::AnyEvent This backend does not yet support asynchronous execution. It just plays well with other AnyEvent-enabled modules. It is not automatically loaded. ! Start of deprecation cycle for methods injected to the JS objects. ->__xpath will be moved to MozRepl::RemoteObject::Util::xpath Change $obj->__xpath(...) to $obj->MozRepl::RemoteObject::Util::xpath( ... ) This makes the object cleaner and you shouldn't have many places where you call C<< ->__xpath >> anyway, as it is not available on most JS objects anyway. This method will go away in 0.23. 0.21 20110109 . Remove a debugging help that crashed the module when it was called... 0.20 20110106 . Improve event sending/handling . Add max_queue_size to limit queue backlog . Add stress-test for queue backlog . Collect statistics about roundtrips,callbacks,fetch,store in $repl->{stats} 0.19 20101211 . Simplify Exporter usage . Add ->constant() method to (lazily) fetch Javascript constants and cache them on the Perl side of things. . Add more tests to ensure that we have no memory cycles 0.18 20101122 . Add test for pop(), actually make pop() work . Add test for splice(), actually make splice() work + Add as_list, an exportable function in MozRepl::RemoteObject, that allows bulk-fetching of arrays. 0.17 20101120 . Added test for circular reference fixed in 0.16 . Added more support for command queueing. Destructors can now be queued until program exit, repl shutdown or until the next command is executed, whichever comes first. + Actually call the callback set up by ->__on_destroy . Added a test that the __on_destroy callbacks get called 0.16 20101119 . Enable use_queue parameter (but leave it undocumented) + Fix memory leak when using ->declare. This should fix the messages during global destruction. 0.15 20101021 . Filter object for only immediate properties. This means that inherited properties don't show up anymore in keys %$obj or using exists. You can still get at their values though. See L for a discussion of filtering and why it should happen. . Implement C (and tests) for hashes 0.14 20101017 . Fix ->__event() to create the event in the correct .document. This fixes intermittent errors that were raised if (for example) the Firefox Javascript Console was the topmost Firefox window. . Add a test that checks that the Changes file has a well-formed date for every version 0.13 20100810 . Squelch some warnings when global destruction pulls out the rug from under our feet. . Don't fetch results from Firefox if we don't need them. STORE() in tied elements should not return a value. 0.12 20100625 . Fix bad unquoted passthrough of numbers with a leading zero. This led to those numbers being interpreted as octal numbers. Reported and diagnosed by Jess Robinson and James Mastros . Document limitations of passthrough + Die with an informative message if we can't connect 0.11 20091130 . Don't carp() in ::TiedHash or ::TiedArray . Added "launch" option to launch a mozrepl process . This means we need IPC::Run as a prerequisite 0.10 20091126 . Add way to deregister callbacks to release the memory taken up on the Perl side for them. 0.09 20091121 . Add tests for multiple bridge instances . Multiple bridge instances work (except for some warnings originating from MozRepl.pm) . Some code cleanup 0.08 20091111 . Localize $@ in the destructor so we don't eat exceptions. . Allow for passing of multiple parameters in callbacks 0.07 20091109 . Always use our own JSON encoder on the Javascript side. The native encoders don't output ASCII. This is sad, but there seems to be a problem with the encodings along the way. 0.06 20091102 . Added __event() to send arbitrary events 0.05 20091031 . Implement callbacks/events 0.04 20091030 . Added exists functionality for hashes . added $bridge->appinfo as a convenience function 0.03 20091029 ! Fixed ->__xpath ! Fixed bad use of ->declare * Use the stable but large encoding of 7-bit ASCII for communication by switching to String.toSourceCode() on the JS side. 0.02 20091027 * ->__xpath returned numbers instead of objects * The object was split into two classes, one for bridge functionality and one for instance functionality * $bridge->declare() for declaring cached anonymous functions 0.01 20091018 . released on CPAN