On Fri, Mar 6, 2009 at 1:19 AM, Michael Nordman <[email protected]> wrote:
>> Ah! well, because it actually seems to make a difference on mobile --
>> we have at least one case of a webapp using gears that has large
>> manifests, and the update seems to slow everything down until the
>> network connection attempts timeout... as we can know if we have
>> network access or not, it makes sense to take advantage of that
>> information to be more efficient when we can, I think.
>
> I see.
>
>>>> Uh... I'm not sure I understand -- AsyncTasks can span multiple page
>>>> navigations ?
>>>
>>> NPN_GetValue takes an NPP instance as a parameter. AsyncTasks can run
>>> where there are no NPP instances.
>>
>> Yes, in that case we simply consider that we are online, and attempt
>> the connection.
>
> AsyncTasks started via one NPP instance can outlive the NPP instance
> that started it.  I think NPN_GetValue may get called with a dangling
> pointer in that case?
>
>
> Some ideas...
>
> * Can android be modified to support NPN_GetValue(NULL,
> NPNVOnline_Android, &result) callable from any thread?
>
> * Sounds like ApacheHttpRequestAndroid doesn't know about online or
> not. Would it be possible to modify that class do know about this
> state? Would be closer to the root of the issue i think.
>

Thinking about it more, I believe that this is the right solution. We
discussed doing this initially but discarded it since we thought we
don't have access to the 'android.content.Context' object (required to
get a handle to system services such as the network manager) when
we're inside a worker. However, we forgot we had already solved this
problem with the WebViewManager class.

The only problem is with update tasks that are fired as a result of
Gears serving resources from a managed resource store. This can happen
without the application ever making any call to Gears (gears_init.js
is not even parsed by the browser at that point) so we don't have any
NPP instances to poke at.

The only solution I see (without modifying the browser in any way) is
to somehow get the jobject corresponding to the network manager in
NP_Initialize(), and then cache it as a global variable. We can then
pass it to the ApacheHttpRequestAndroid whenever we need.

Thanks,
Andrei

Reply via email to