On Wed, Jun 16, 2010 at 8:49 PM, Tinny <[email protected]> wrote:
> 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.

This really looks and sounds like a bug in the third party plugin
--not GWT. I would file an issue with them.


-- 
Chris Conroy
Software Engineer
Google, Atlanta

-- 
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.

Reply via email to