My GWT application which has been running happily now for a year is
now broken. The symptom: Safari 5 reports that it has quit
unexpectedly while using the Aspera Web plugin (a third-party plugin
that my app uses for allowing file uploads and downloads). This issue
is 100% repeatable.
GWT version is 2.0.3. IE, Firefox, and Safari 4 have been and are
still operating correctly with my GWT application.
I have determined that the cause of this Safari 5 crash is the
interaction with the Aspera plugin within an AsyncCallback. For
example, there is a native method defined:
private static native void uploadToURL(final String sourcePath,
final String destinationURL)
/*-{
$doc.getElementById('aspera-web').startUploadToURL(sourcePath,
destinationURL);
}-*/;
...which fetches the 'aspera-web' plugin Object defined in the html
file. It then calls a method on that plugin, passing in a couple of
Strings.
Now, if this native method is called within an AsyncCallback, Safari 5
will crash. For example:
greetingService.greetServer(textToServer, new
AsyncCallback<String>() {
@Override
public void onFailure(final Throwable caught) {
// ... deal with failure
}
@Override
public void onSuccess(final String result) {
uploadToURL("DummyFile", "fasp://aspera...@dummyserver/
Test?v=2&auth=yes");
}
});
The uploadToURL call will trigger Safari 5 to crash. The parameters
are unimportant at this point - they can be empty Strings if you like.
Now, if the uploadToURL call is made anywhere outside of an
AsyncCallback, the call then succeeds on Safari 5. The crash is only
experienced when uploadToURL is called as part of the callback. So,
for example, if you create a GWT Button, and for the click event call
uploadToURL, the call will succeed.
Interestingly, other interactions with the plugin in Safari 5 work.
For instance, another native method:
private static native String queryVersion()
/*-{
return $doc.getElementById('aspera-web').queryVersion();
}-*/;
... will query the version of the installed Aspera Connect plugin.
This queryVersion() method may be called anywhere in the code,
including an AsyncCallback handler, and will succeed. The
significance here may be that this call passes no parameters to the
plugin.
I have posted a zipp'd Eclipse project that just modifies the basic
'greetingService' to show this example in action. Download link:
http://rapidshare.com/files/399840688/Aspera-test_eclipse_project.zip.html
So the question is: What's happened in Safari 5? Here is a relevant
extract from the Apple Problem Report for Safari 5:
Process: Safari [3952]
Path: /Applications/Safari.app/Contents/MacOS/Safari
Identifier: com.apple.Safari
Version: 5.0 (6533.16)
Build Info: WebBrowser-75331600~5
Code Type: X86-64 (Native)
Parent Process: launchd [98]
PlugIn Path: /Library/Internet Plug-Ins/Aspera Web.webplugin/
Contents/MacOS/Aspera Web
PlugIn Identifier: com.asperasoft.AsperaWeb
PlugIn Version: ??? (1.1)
Date/Time: 2010-06-17 10:32:54.613 +1000
OS Version: Mac OS X 10.6.4 (10F569)
Report Version: 6
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
abort() called
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libSystem.B.dylib 0x00007fff81ed43d6 __kill + 10
1 libSystem.B.dylib 0x00007fff81f74972 abort + 83
2 libstdc++.6.dylib 0x00007fff814325d2 __tcf_0 + 0
3 libobjc.A.dylib 0x00007fff86f45d3d _objc_terminate
+ 120
4 libstdc++.6.dylib 0x00007fff81430ae1
__cxxabiv1::__terminate(void (*)()) + 11
5 libstdc++.6.dylib 0x00007fff81430b16
__cxxabiv1::__unexpected(void (*)()) + 0
6 libstdc++.6.dylib 0x00007fff81430bfc
__gxx_exception_cleanup(_Unwind_Reason_Code, _Unwind_Exception*) + 0
7 libstdc++.6.dylib 0x00007fff813ecad4
std::__throw_logic_error(char const*) + 127
8 libstdc++.6.dylib 0x00007fff8141816d char*
std::string::_S_construct<char const*>(char const*, char const*,
std::allocator<char> const&, std::forward_iterator_tag) + 53
9 libstdc++.6.dylib 0x00007fff8141855f
std::basic_string<char, std::char_traits<char>, std::allocator<char>
>::basic_string(char const*, std::allocator<char> const&) + 67
10 com.asperasoft.AsperaWeb 0x000000011be3b2a3 -[AWPlugInView
startUpload:toURL:] + 103
11 com.apple.CoreFoundation 0x00007fff80a4ad2c __invoking___ +
140
12 com.apple.CoreFoundation 0x00007fff80a4abfd -[NSInvocation
invoke] + 141
13 com.apple.WebCore 0x00007fff84879ef3
JSC::Bindings::ObjcInstance::invokeObjcMethod(JSC::ExecState*,
JSC::Bindings::ObjcMethod*, JSC::ArgList const&) + 787
Appreciate any assistance with this.
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.