<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">Actually, one small change.  I think I need the <span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(94, 160, 227); background-position: initial initial; background-repeat: initial initial; ">idle</span> time in seconds in the event, in case different UAs implement different idles as their minimum time.<div>
<br></div><div><span style="font-family: Verdana; font-size: 13px; background-color: rgb(255, 255, 255); "><div class="im" style="color: rgb(80, 0, 80); "><div style="margin-top: 0px; margin-bottom: 0px; ">// The event fired when the <span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(94, 160, 227); background-position: initial initial; background-repeat: initial initial; ">idle</span> state of the system changes.</div>
</div><div style="margin-top: 0px; margin-bottom: 0px; "><div class="im" style="color: rgb(80, 0, 80); "><font face="'Courier New'">interface IdleStateChangeEvent : Event<br>{<br> const unsigned short AWAY;<br> const unsigned short ACTIVE;<br>
 const unsigned short </font><span style="background-color: rgb(94, 160, 227); "><font face="'Courier New'"><span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(94, 160, 227); background-position: initial initial; background-repeat: initial initial; ">IDLE</span></font></span></div>
<font face="'Courier New'">;<div class="im" style="color: rgb(80, 0, 80); "><br><br> readonly attribute unsigned short idleState;<br></div><span style="font-family: 'Courier New'; "> readonly attribute unsigned long idleTimeInSec;<br>
</span>};<br></font></div><div><font face="'Courier New'"><br></font></div><div><font face="'Courier New'">This way the js can find the actual time and do a timer event to get the <span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(94, 160, 227); background-position: initial initial; background-repeat: initial initial; ">idle</span> time it is looking for.</font></div>
<div><font face="'Courier New'"><br></font></div><div><font face="'Courier New'">Thanks,</font></div><div><font face="'Courier New'">David.</font></div></span></div></span><br><div class="gmail_quote">
On Tue, Sep 15, 2009 at 5:13 PM, David Bennett <span dir="ltr"><<a href="mailto:ddt@google.com">ddt@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Morning,<div><br></div><div>Updated the document for the proposal which now uses an event callback for the system idle along with a method to get the current system idle time.</div><div><br></div><div>Comments on the update proposal?</div>

<div><br></div><div>Thanks,</div><div>David.</div><div><br></div><div><span style="font-family:'Times New Roman';font-size:medium"><div style="margin-top:6px;margin-right:6px;margin-bottom:6px;margin-left:6px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;font-family:Verdana;font-size:10pt;background-color:rgb(255, 255, 255);min-height:1100px;line-height:normal">

SUMMARY<br><div style="margin-top:0px;margin-bottom:0px;color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)"><br>There currently is no way to detect the system idle state in the browser.  This makes it difficult to deal with any sort of chat room or instant messaging client inside the browser since the idle will always be incorrect.<br>

<br>USE CASE<br><div class="im"><br>Any instant messaging client, or any client that requires user presence, will use this to keep track of the users idle state.  Currently the idle state of a user inside a browser tell tend to be incorrect, and this leads to problems with people being unable to rely on the available status of a user.  Without this information it is difficult to do a full featured and reliable instant messaging client inside the browser since this makes the users' status somewhat unreliable.<br>

<br>Lots of social networking sites and other sites centered around user interactions on the net keep track of the users idle state for enabling interactions with people that are currently online, this would be especially useful for interactive online gaming.<br>

<br>A process that would like to do some heavy duty processing, like seti@home, could use the system idle detection to enable the processing only when the user is idle and enable it to not interfere with or degrade their normal browsing experience.<br>

<br></div><div class="im">WORK AROUNDS<br><br>The idle state of the user is currently detected by looking at the brower window and detecting the last activity time for the window.  This is inaccurate since if the user is not looking at the page the state will be incorrect and means that the idle time is set to longer than would be desirable so there is also a window in which the user is actually idle but it has not yet been detected.<br>

<br>PROPOSAL</div></div><br style="color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)"><span style="color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)">I propose an api which enables an event for the minimum idle timeout and has a query to determine the current system idle.  The event is fired when the state changes.  Active->idle, Active->away, idle->away, idle->active, away->active.</span><br style="color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)">

<div style="margin-top:0px;margin-bottom:0px;color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)"><br>The idle times are all specified in seconds, the event will be fired when the idle state changes.  <div class="im">
<br>
<br><div style="margin-top:0px;margin-bottom:0px">Not explicitly specified, and thus intentionally left to the UA, include:</div></div><div style="margin-top:0px;margin-bottom:0px">* The event will be fired after the minimum system idle time for the property; 2 minutes. [1]<br>

</div><div class="im"><div style="margin-top:0px;margin-bottom:0px">* Any jitter intentionally added to the idle times reported [1]<br></div><div style="margin-top:0px;margin-bottom:0px">* The granularity of the times reported (e.g. a UA may round them to multiples of 15 seconds)</div>

</div></div><div style="margin-top:0px;margin-bottom:0px;color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)"><div style="margin-top:0px;margin-bottom:0px"><br><font face="Courier New"><div class="im">[NoInterfaceObject, ImplementedOn=<a href="http://www.w3.org/TR/html5/browsers.html#window" target="_blank">Window</a>] interface WindowTimers {<br>

// timers<br></div><div class="im">// Returns the current system idle state.<br>int systemIdleState();</div></font></div><div style="margin-top:0px;margin-bottom:0px"><br></div><div style="margin-top:0px;margin-bottom:0px">
// The event fired when the idle state of the system changes.</div><div class="im">
<div style="margin-top:0px;margin-bottom:0px"><font face="'Courier New'">interface IdleStateChangeEvent : Event<br>{<br> const unsigned short AWAY;<br> const unsigned short ACTIVE;<br>
 const unsigned short </font><span style="background-color:rgb(94, 160, 227)"><font face="'Courier New'">IDLE</font></span><font face="'Courier New'">;<br>
<br> readonly attribute unsigned short idleState;<br>};<br></font></div></div><div class="im"><div style="margin-top:0px;margin-bottom:0px"><br><font face="Courier New"><span style="font-family:Verdana;background-color:rgb(255, 255, 255)">Where idleState is one of:</span></font></div>

  idleState : active = 1, idle = 2, away = 3<br><br>Away is defined as locked/screen saver enabled or any other system mechanism that is defined as away.<br><br></div></div><div class="im">REFERENCES<br><br>1] There is research showing that it is possible to detemine a users key strokes and which keys they are actually typeing by using millisecond accuracy idle time information.  This is the reason this spec emphasises the jitter and granularity aspects of the idle detection.<br>

<a href="http://portal.acm.org/citation.cfm?id=1267637" target="_blank">http://portal.acm.org/citation.cfm?id=1267637</a><br><div style="margin-top:0px;margin-bottom:0px;color:rgb(0, 0, 0);background-color:rgb(255, 255, 255)">

 </div></div></div></span><div><div></div><div class="h5"><br><div class="gmail_quote">On Tue, Sep 1, 2009 at 4:33 PM, David Bennett <span dir="ltr"><<a href="mailto:ddt@google.com" target="_blank">ddt@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="gmail_quote"><div>On Tue, Sep 1, 2009 at 4:26 PM, Jeremy Orlow <span dir="ltr"><<a href="mailto:jorlow@chromium.org" target="_blank">jorlow@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div>On Tue, Sep 1, 2009 at 3:53 PM, Mike Wilson <span dir="ltr"><<a href="mailto:mikewse@hotmail.com" target="_blank">mikewse@hotmail.com</a>></span> wrote:<br></div><div class="gmail_quote"><div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div><div><div></div><div>
<div dir="ltr" align="left">David Bennett<span> 
wrote:</span></div><font face="Verdana" size="2"></font><font face="Verdana" size="2"></font><br>
<blockquote dir="ltr" style="padding-left:5px;margin-left:5px;border-left:#000000 2px solid;margin-right:0px">
  <div class="gmail_quote">On Mon, Aug 31, 2009 at 5:30 PM, Drew Wilson <span dir="ltr"><<a href="mailto:atwilson@google.com" target="_blank">atwilson@google.com</a>></span> 
wrote:<br>
  <blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:#ccc 1px solid">This 
    would be my inclination as well. I'm not entirely convinced that "every web 
    app should define their own idle timeout" is such desirable behavior that we 
    should build our API around it by forcing every caller to specify their idle 
    timeout - having a standard event that's fired with an exposed state for 
    apps that need it seems like a cleaner approach.
    <div></div></blockquote>
  <div><br></div>
  <div>The trouble with this is it doesn't allow any experimentation on the part 
  of the app/entity to figure out what is the best idle time for it's purposes. 
   In terms of chat it might be that a 3 minute or 5 minute idle time works 
  best in terms of people's attention.  For something like watching a 
  video perhaps a 15 minute idle would be a better length of time, or for an 
  online game a longer idle time is probably useful before being signed out. 
   Different purposes have different requirements for the idle time so it 
  makes sense to allow them to specify the different 
timeouts.</div></div></blockquote>
</div></div><div dir="ltr"><font face="Verdana" size="2"><span>This 
requirement could be solved in several other ways, f ex making sure that the 
"standard" timeout period is short enough to not be longer than what any app 
wants. Then (as was previously suggested) an app that wants a longer timeout can 
do setTimeout and trigger its own idle stuff if status has not come back to 
"active" during that time.</span></font></div></div></blockquote><div><br></div></div><div>If we went the route of using events, I definitely think this is the way to go.  Since the originally proposed API was based off of the timer API, you're really only adding one step if you want that behavior.  Having a globally configured value seems sloppy and you'll have to manually use timeouts if, for example, you were using 2 libraries that used it for different purposes and thus wanted different idle timeouts.</div>


</div></blockquote><div><br></div></div><div>I have been thinking about this.  I think this sounds reasonable too, perhaps we should specify a minimum idle event timeout?  For example make the event fire after 2 minutes idle?  Be easy to hook up to the property without a timeout to see if the user is still idle after this time.</div>

<div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><font face="Verdana" size="2"><span></span></font></div>
<div dir="ltr"><span style="font-family:Verdana">Another 
alternative is to have no event, and just a property:</span></div>
<div dir="ltr"><font face="Verdana" size="2"><span>  
  window.lastUserActionTime</span></font></div>
<div dir="ltr"><font face="Verdana" size="2"><span>which is kept updated with the "msec since 
epoch" for the latest user input on the desktop. Then an app can implement its 
own idle functionality with totally own rules. This API has the drawback of 
maybe exposing too much information (the rate of input events to other apps), 
but may spawn some ideas.</span></font></div></div></blockquote><div><br></div></div><div>Then you're poling, which seems pretty ugly.  I'd much prefer events to this.</div><div><br></div><div>2009/8/31 Max Romantschuk <span dir="ltr"><<a href="mailto:max@romantschuk.fi" target="_blank">max@romantschuk.fi</a>></span><div class="gmail_quote">


<div>

<blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">

<div>One issue:</div></blockquote><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">




<br>Is the user idle when the tab is in the background, when the browser is in the background, or when the user is away from the machine? These are all distinct cases of different levels of "idleness", and it's largely depended on the use case which kind of "idleness" makes sense for a particular application.<br>




</blockquote><div><br></div></div><div>I would argue that "when the browser is in the background" should be no different from "when the tab is in the background".  Given that the information the system uses to determine idleness (mouse movements and such) are all available to a web app while it's in the foreground tab, it seems as though knowing the idle time just from the perspective of your tab is not terribly useful.  So, to me, I think it's pretty clear this should be system wide idleness.</div>


</div></div></div></blockquote><div><br></div></div><div>Yes, I agree idlessness form being in the background should be a different event/information if it is supported.</div><div><br></div><div>I will update my document with these ideas and then repost.</div>


<div><br></div><div>Thanks,</div><div>David.</div></div><font color="#888888"><br>
</font></blockquote></div><br></div></div></div>
</blockquote></div><br>