I may not be able to correct this IE bug, and it may not be desirable
either since it isn't a good idea to have the GWT version introduce
hacks onto the JS library in order to fix a bug - stuff like this is
better off being corrected in the JS version directly. I'll add this
as a defect and deal with it later, the workaround being to use a
script reference to load the API.

I'm starting to think about how to detach the GWT library from the JS
api in the future. Here's what i'm seeing, in the JS API all GData
operations (POST, PUT, DELETE) are sent as POST commands. A POST
variable called HTTP-Method-Override can be used to specify the actual
operation. Cross-domain POSTS aren't a problem, we can just create and
submit a hidden form using some JavaScript.

Since GData supports retrieving data in JSON format, we can use a
JSONP approach to do cross domain reads - this is what the current JS
API does.

This means that in order to detach the GWT version from the JS
libraries we have to:
1. identify the Atom schema for each data type, there are a few
hundred classes.
2. provide a base implementation that can perform cross-domain POSTS
and JSONP reads.

I think #1 can be automated and #2 is sensitive but small.

The end result will be a more GWT-optimizable API which can then grow
at its own pace. The samples and unit tests wouldn't change
significantly, if at all. We can still use overlay types to wrap
around the JSON objects returned from GData. I've taken a closer look
at the GData Java library and i don't think that the GWT and Java APIs
will ever match because the GWT version will need to be callback-based
whereas Java doesn't have this limitation.

Anyway, just some thoughts.

Bobby

On Aug 14, 2:53 am, Bobby <[email protected]> wrote:
> There are some quirks which are making it difficult to narrow down the
> reason why AuthSub fails in IE. So far i know it only happens when
> google.load is used with a callback, even when google.load is called
> while the page is being loaded.
>
> So something like the following:
> <body>
> <script>
>     google.load("gdata", "1.10", myCallback);
> </script>
> <input type="button" value="login" onclick="google.accounts.user.login
> ('scope-here')" />
> </body>
>
> Will always see the following behavior:
> 1. User clicks to login.
> 2. User is redirect to authorization page and clicks to authorize.
> 3. User is redirected back to the original page, with a token appended
> in the URL.
> 4. Page doesn't consume the token in the URL (the correct behavior is
> for the page to place the token in a cookie and remove the token from
> the url).
> 5. User clicks to login again.
> 6. User gets redirected to authorization page again, and steps 3-6 are
> repeated an arbitrary number of times.
> 7. If, after reaching the authorization page a second time, the user
> clicks the browser's back button, causing the browser to go back to
> the page that contains the token in the url, the token is successfully
> consumed and the user is successfully logged in. Go figure.
>
> Why "backing" into the page causes GData to successfully consume the
> token i have no idea - especially since refreshing the page at step 4
> has no effect.
>
> My guess is that when backing into the page IE will use a cached
> version of the GData script, which is processed immediately and may
> make the difference.
>
> Bobby
>
> On Aug 14, 1:37 am, Bobby <[email protected]> wrote:
>
> > This was outside GWT. I'm trying to find the cause of the IE AuthSub
> > issue outside of GWT first. Basically, when google.load() is called
> > after the page has finished loading - such as from a button click,
> > AuthSub doesn't succeed.
>
> > Bobby
>
> > On Aug 14, 12:17 am, Eric Ayers <[email protected]> wrote:
>
> > > If you are calling JavaScript inside of a GWT JSNI function, you
> > > should be using $wnd.google.load(...)
>
> > > On Thu, Aug 13, 2009 at 11:55 PM, Bobby<[email protected]> wrote:
>
> > > > This IE AuthSub issue is not because of the IFrame, the transferToken
> > > > approach didn't make a difference.
>
> > > > I tried placing the google.load('gdata', '1.10'); call in a button
> > > > click event. Here's the code:
> > > > <html>
> > > > <body>
> > > >    <img src="logo-small.png" />
> > > >    <script type="text/javascript" src="http://www.google.com/jsapi";></
> > > > script>
> > > >    <script type="text/javascript">
> > > >        function loadGData() {
> > > >                google.load('gdata', '1.10');
> > > >        }
> > > >    </script>
> > > >    <input type="button" value="Load GData" onclick="loadGData();" />
> > > > </body>
> > > > </html>
>
> > > > If you try this, when you click "Load GData", the page is cleared and
> > > > nothing really happens. If you look at the page source after clicking
> > > > the button you see the following:
> > > > <script src="http://www.google.com/uds/?file=gdata&v=1.10"; type="text/
> > > > javascript"></script>
>
> > > > This is what would happen if document.write was being used and would
> > > > explain a few things.
>
> > > > Eric, does your AjaxLoader module use google.load() from the jsapi?
>
> > > > Bobby
>
> > > > On Aug 13, 10:20 pm, Bobby <[email protected]> wrote:
> > > >> By the way, i've finished porting the samples (70 of them) i'm
> > > >> currently polishing and commenting the samples code.
>
> > > >> I've added specialized Callbacks into the API, for example
> > > >> BlogEntryCallback (extending AsyncCallback<BlogEntry>) - this meant
> > > >> adding specialized methods for insert/update/delete, but makes for a
> > > >> better API. There have been other changes and design choices as well.
>
> > > >> In the Maps samples, the create/update features are not working
> > > >> because of a KML-related defect which i might try to get around with
> > > >> GWT:http://code.google.com/p/gmaps-api-issues/issues/detail?id=1585
>
> > > >> Other than that i have a small list of items to wrap up (including
> > > >> this IE issue) and some documentation to write, but nothing major and
> > > >> i'm counting on having a download by the end of this week or next week
> > > >> at the latest.
>
> > > >> Bobby
>
> > > >> On Aug 13, 9:46 pm, Bobby <[email protected]> wrote:
>
> > > >> > The onModuleLoad is within an iframe, that's probably the cause. I
> > > >> > think i can find a way around this. For example, i can add the
> > > >> > following method to the GData module:
> > > >> > GData.transferTokenOrSomething();
>
> > > >> > This function would check the top frame for a token and append it to
> > > >> > the IFrame's location. I'll play around with this.
>
> > > >> > Bobby
>
> > > >> > On Aug 13, 9:29 pm, Bobby <[email protected]> wrote:
>
> > > >> > > Another possible cause could be for example if, in the compiled GWT
> > > >> > > app, the google.load call happens inside an IFrame.
>
> > > >> > > Currently, with google.load being called from onModuleLoad,
> > > >> > > google.accounts.user.login() causes the redirect to the Google
> > > >> > > Accounts authorization page, but when it redirects back, with the
> > > >> > > token in the URL (for example /HelloGData.html#tokenhere), the 
> > > >> > > token
> > > >> > > doesn't get consumed (in IE), and the authentication doesn't 
> > > >> > > succeed.
>
> > > >> > > If GWT is placing the onModuleLoad code inside an IFrame, then it 
> > > >> > > may
> > > >> > > cause the GData library to look for the token on the IFrame
> > > >> > > window.location, instead of the top's window.location.
>
> > > >> > > Bobby
>
> > > >> > > On Aug 13, 9:16 pm, Eric Ayers <[email protected]> wrote:
>
> > > >> > > > The gdata init shouldn't use document.write() - you should be 
> > > >> > > > able to
> > > >> > > > call it at any time.
>
> > > >> > > > There is a tradeoff of using the AjaxLoader module - it does add 
> > > >> > > > more
> > > >> > > > delay than using the script version.  Fortunately, you can code 
> > > >> > > > your
> > > >> > > > app using AjaxLoader and then if you need the speedup, just add 
> > > >> > > > the
> > > >> > > > logic in your host page.  AjaxLoader will detect that the jsapi 
> > > >> > > > is
> > > >> > > > already there and bypass it.  You can add that check in your 
> > > >> > > > version
> > > >> > > > of GData.loadGDataApi() if you like.
>
> > > >> > > > On Thu, Aug 13, 2009 at 9:11 PM, Bobby<[email protected]> 
> > > >> > > > wrote:
>
> > > >> > > > > In the GData JS library, in IE, AuthSub fails if 
> > > >> > > > > google.load("gdata",
> > > >> > > > > "1.10"); is asynchronous, after the page has finished 
> > > >> > > > > processing. For
> > > >> > > > > example, if i place the google.load("gdata", "1.10"); call 
> > > >> > > > > within the
> > > >> > > > > GWT onModuleLoad method, then AuthSub stops halfway.
>
> > > >> > > > > To avoid this we can directly add the following at the top of 
> > > >> > > > > the GWT
> > > >> > > > > html page:
> > > >> > > > >        <script type="text/javascript" 
> > > >> > > > > src="http://www.google.com/jsapi";></
> > > >> > > > > script>
> > > >> > > > >        <script type="text/javascript">google.load("gdata", 
> > > >> > > > > "1.10");</
> > > >> > > > > script>
>
> > > >> > > > > Or just use the auto-load feature of the JS API to collapse 
> > > >> > > > > these two
> > > >> > > > > into a single script load.
>
> > > >> > > > > But this wouldn't make use of the AjaxLoader module and it 
> > > >> > > > > means that
> > > >> > > > > the GWT app will have to wait for the GData libraries to load 
> > > >> > > > > before
> > > >> > > > > rendering, etc, instead of doing something like the following:
>
> > > >> > > > > public void onModuleLoad() {
> > > >> > > > >    //render main app here
> > > >> > > > >    GData.loadGDataApi(null, new Runnable() {
> > > >> > > > >      public void run() {
> > > >> > > > >        initialize();
> > > >> > > > >      }
> > > >> > > > >    });
> > > >> > > > > }
>
> > > >> > > > > I don't know the reason for this behavior but it could happen 
> > > >> > > > > if the
> > > >> > > > > gdata library uses document.write for example.
>
> > > >> > > > > Bobby
>
> > > >> > > > > On Jul 15, 1:30 am, Bobby <[email protected]> wrote:
> > > >> > > > >> I'm adding the GData samples here as i go, if you want to see 
> > > >> > > > >> the
> > > >> > > > >> library in 
> > > >> > > > >> action.http://1.latest.gwt-gdata.appspot.com/v/HelloGData.html
>
> > > >> > > > >> Bobby
>
> > > >> > > > >> On Jul 14, 9:54 am, Eric Ayers <[email protected]> wrote:
>
> > > >> > > > >> > Thanks for the update.
>
> > > >> > > > >> > On Mon, Jul 13, 2009 at 11:45 PM, 
> > > >> > > > >> > Bobby<[email protected]> wrote:
>
> > > >> > > > >> > > Status update: the library is ready, i'm translating the 
> > > >> > > > >> > > various JS
> > > >> > > > >> > > samples into GWT to include in the first download, using 
> > > >> > > > >> > > the same
> > > >> > > > >> > > format as the Google Maps sample app which is contained 
> > > >> > > > >> > > the in the gwt-
> > > >> > > > >> > > maps-1.0.4.zip available here:
> > > >> > > > >> > >http://code.google.com/p/gwt-google-apis/wiki/Downloads?tm=2
>
> > > >> > > > >> > > This is the fun part. :)
>
> > > >> > > > >> > > Bobby
>
> > > >> > > > >> > > On Jun 25, 8:20 am, Thomas Broyer <[email protected]> 
> > > >> > > > >> > > wrote:
> > > >> > > > >> > >> On 25 juin, 08:32, Bobby <[email protected]> wrote:
>
> > > >> > > > >> > >> > Actually, i've just noticed that the ArrayHelper in 
> > > >> > > > >> > >> > the AjaxLoader
> > > >> > > > >> > >> > module provides the same functionality. Question 
> > > >> > > > >> > >> > though, when calling
> > > >> > > > >> > >> > the fromArray() method from within a JSNI method, 
> > > >> > > > >> > >> > what's the parameter
> > > >> > > > >> > >> > signature that should be used? I'm not having any luck 
> > > >> > > > >> > >> > with fromArray
> > > >> > > > >> > >> > (Lcom/google/gwt/core/client/JavaScriptObject;).
>
> > > >> > > > >> > >> > I want to transform the following:
> > > >> > > > >> > >> > public final native void 
> > > >> > > > >> > >> > setProperties(JsArray<Property> properties) /
> > > >> > > > >> > >> > *-{
> > > >> > > > >> > >> >     this.setProperties(
> > > >> > > > >> > >> >       properties
> > > >> > > > >> > >> >     );
>
> > > >> > > > >> > >> > }-*/;
>
> > > >> > > > >> > >> > Into the following:
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
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