Hi,

I'm replying, but please keep in mind I haven't read the W3C API spec
for Screen Orientation.

On Wed, Jan 15, 2014 at 2:17 PM, Kenneth Rohde Christiansen
<kenneth.christian...@gmail.com> wrote:
> Hi there,
>
> The orientation extension has the issues that the values might not be
> set by the extension before they are accessed. I discussed this with
> Jeez and he suggested that we just always load the extension.


So, I had a closer look at this extension. I have double checked with
vinicius as well, and we are now convinced that always loading the
extension wouldn't fix the issue. In summary, what you want to make
sure with this extension is that calling:

"var my_orientation = screen.orientation;"

will always provide a valid and correct value. I had a look at the way
the native side of this extension is implemented nowadays and I could
see the flow for this property is:

1- ScreenOrientationInstance ctor calls
ScreenOrientationInstance::OnOrientationChanged passing the current
orientation, by posting this task to the UI thread;
2- OnOrientationChanged calls PostMessageToJS passing the orientation value;
3- screen.orientation gets its correct value on the JS side.

There is a race condition there, since currently screen.orientation is
an entry_point of this extension.  Even if we had loaded this
extension upfront, we wouldn't be able to guarantee that this flow
would have finished in time for the *FIRST* screen.orientation access.
Yes, it most likely would have finished in time, but we can't be 100%
sure.

The only idea we had was to change a bit how the JS shim is
implemented. I would do something like:

"
var orientationValue = "";

Object.defineProperty(window.screen, "orientation", {
  configurable: false,
  enumerable: true,
  get: function() {
         if (orientationValue === "") {
           var msg = JSON.stringify({'cmd' : 'GetScreenOrientation'});
           var result = extension.internal.sendSyncMessage(msg);
           orientationValue = JSON.parse(result);
         }

         return orientationValue;
       },
});
"

Putting in words, I would add a sync message to the initial
screen.orientation read. Note that it is not guaranteed this sync
message will always be used.


I hope that helps, but it would be nice to hear ideas from others.
Perhaps Thiago has faced similar situations during his SysApps' work?


Cheers,
jesus



>
> Thus we could load the extension possible just after creating the
> document (DOM readyState == loading) and we shouldn't have any
> problems.
>
> Any way to do this or to bypass the lazy loading? When exactly was the
> extensions loaded before without lazy loading?
>
> Cheers
> Kenneth
>
> --
> Kenneth Rohde Christiansen
> Web Platform Architect, Intel Corporation.
> Phone  +45 4294 9458 ﹆﹆﹆
> _______________________________________________
> Crosswalk-dev mailing list
> Crosswalk-dev@lists.crosswalk-project.org
> https://lists.crosswalk-project.org/mailman/listinfo/crosswalk-dev
_______________________________________________
Crosswalk-dev mailing list
Crosswalk-dev@lists.crosswalk-project.org
https://lists.crosswalk-project.org/mailman/listinfo/crosswalk-dev

Reply via email to