<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>31673</bug_id>
          
          <creation_ts>2009-11-19 10:03:03 -0800</creation_ts>
          <short_desc>[Qt] need an API to suspend and resume active Javascript DOM objects.</short_desc>
          <delta_ts>2014-02-03 03:15:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yongjun Zhang">yongjun.zhang</reporter>
          <assigned_to name="Yongjun Zhang">yongjun.zhang</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>hausmann</cc>
    
    <cc>jesus</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>sriram.neelakandan</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165008</commentid>
    <comment_count>0</comment_count>
    <who name="Yongjun Zhang">yongjun.zhang</who>
    <bug_when>2009-11-19 10:03:03 -0800</bug_when>
    <thetext>QtWebKit client would be interested to suspend/resume JavaScript DOM objects in some cases.  For example, in mobile, the client can select to suspend an invisible long running QWebPage to save battery energy and network bandwidth, and resume it when it comes to the foreground.  In WebCore, ScriptExecutionContext::suspendDOMActiveObjects()/resumeDOMActiveObjects() are designed for this purpose.  It would be nice to have an API in QWebFrame to expose the feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165858</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-23 08:23:03 -0800</bug_when>
    <thetext>We had a long discussion on IRC about all sorts of suspension mechanisms (from suspending the entire process to being able to suspend individual animations or scripts).

Unfortunately we did not reach a conclusion.

My guts feeling is that we may be able to define &quot;active objects&quot; in the documentation as a combination of active DOM objects (xhr, etc. - DOMActiveObject subclasses in WebCore) and animated graphical objects visible in the viewport. Then we could wrap that behind suspendActiveObjects() and resumeActiveObjects().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165878</commentid>
    <comment_count>2</comment_count>
    <who name="Yongjun Zhang">yongjun.zhang</who>
    <bug_when>2009-11-23 10:39:55 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; We had a long discussion on IRC about all sorts of suspension mechanisms (from
&gt; suspending the entire process to being able to suspend individual animations or
&gt; scripts).
&gt; 
&gt; Unfortunately we did not reach a conclusion.
&gt; 
&gt; My guts feeling is that we may be able to define &quot;active objects&quot; in the
&gt; documentation as a combination of active DOM objects (xhr, etc. -
&gt; DOMActiveObject subclasses in WebCore) and animated graphical objects visible
&gt; in the viewport. Then we could wrap that behind suspendActiveObjects() and
&gt; resumeActiveObjects().

Thanks, Simon.

My apologies that I missed the IRC weekly meeting - I was thing it was 8:00 AM Boston time ;)

I think originally the idea is to suspend DOMTimer which initialized by JS setTimeOut(). Certainly, it wouldn&apos;t hurt if we add options to suspend animated GIFs and plugins in this API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166408</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-25 05:17:52 -0800</bug_when>
    <thetext>This seems to be related to the following requirement: http://bugreports.qt.nokia.com/browse/QTWEBKIT-6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172789</commentid>
    <comment_count>4</comment_count>
      <attachid>45073</attachid>
    <who name="Yongjun Zhang">yongjun.zhang</who>
    <bug_when>2009-12-17 08:27:01 -0800</bug_when>
    <thetext>Created attachment 45073
first attempt to introduce the suspend/resume DOM objects API.

the patch only duplicates the names from ScriptExcutionContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172911</commentid>
    <comment_count>5</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2009-12-17 12:22:17 -0800</bug_when>
    <thetext>I&apos;m not sure if 4.6.1 is the correct version info. 

I would also think that we want to suspend more than just DOMTimers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177290</commentid>
    <comment_count>6</comment_count>
      <attachid>45918</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-01-05 12:14:22 -0800</bug_when>
    <thetext>Created attachment 45918
private API prepared to merge to 4.6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177292</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-05 12:17:27 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=45918) [details]
&gt; private API prepared to merge to 4.6

LGTM, r=me if you want it committed.

Jesus is investigating the use-cases and should come up with a nice API for suspending/resuming DOM objects, GIF animations etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177305</commentid>
    <comment_count>8</comment_count>
      <attachid>45919</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-01-05 12:30:55 -0800</bug_when>
    <thetext>Created attachment 45919
private API prepared to merge to 4.6 - 2nd try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177310</commentid>
    <comment_count>9</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-01-05 12:36:46 -0800</bug_when>
    <thetext>We might want to consider committing https://bugs.webkit.org/attachment.cgi?id=45919 to the trunk as well, just to keep the trunk in sync with 4.6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177312</commentid>
    <comment_count>10</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-01-05 12:37:08 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=45073) [details]
&gt; first attempt to introduce the suspend/resume DOM objects API.
&gt; 
&gt; the patch only duplicates the names from ScriptExcutionContext.

Yongjun, for the proper public API solution for the trunk, we will also need API tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177570</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-06 05:39:43 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; We had a long discussion on IRC about all sorts of suspension mechanisms (from
&gt; suspending the entire process to being able to suspend individual animations or
&gt; scripts).
&gt; 
&gt; Unfortunately we did not reach a conclusion.
&gt; 
&gt; My guts feeling is that we may be able to define &quot;active objects&quot; in the
&gt; documentation as a combination of active DOM objects (xhr, etc. -
&gt; DOMActiveObject subclasses in WebCore) and animated graphical objects visible
&gt; in the viewport. Then we could wrap that behind suspendActiveObjects() and
&gt; resumeActiveObjects().

Hi, let me chime in. Basically, I believe that we only have one use case for the moment; not wasting CPU cycles for pages/&quot;dashboard like widgets&quot; that are not visible to the user.

Disabling the entire process might not be good as it might break loading.

It seems that we do not need fine-grained API that makes it possible to suspend/resume individual active objects such as CSS animations, GIF animations, Script execution on objects etc, and as such I support the suggested suspend/resumeActiveObjects API with proper documentation.

If we in the future need more fine-grained API, that can easily be added without making the suspend/resumeActiveObjects obsolete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177572</commentid>
    <comment_count>12</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-01-06 05:48:42 -0800</bug_when>
    <thetext>I&apos;ve been investigating the use cases and discussing with Kenneth about a good API, but I&apos;d like to have some more input from you guys.

So, I think that we could define Active DOM Objects as Plugins, JavaScript, Animated GIFs, DOM events, CSS animations, DOMActiveObject subclasses and, as Simons stated, wrap them behind the API. Is there anything else (active objects, non-active objects) that we should be able to suspend/resume by now?

Kenneth and I were discussing, but we didn&apos;t reach a conclusion about all possible use-cases. Do we want to always stop the execution of all active DOM objects or do we want to have &quot;options&quot;? IMHO, it makes sense to stop everything for the use case that a browser is running on background, for instance, but it also makes sense to be able to suspend scripts only. I&apos;m not sure about the other DOM Objects (animated GIFs, CSS animations, etc), though.

About the API, I think that we could have methods (suspend/resume) on QWebFrame, as Yongjun Zhang proposed, but I&apos;m also willing to have a convenience API on QWebPage so we can suspend/resume the execution of all its sub-frames, in a more correct way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177575</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-06 05:56:08 -0800</bug_when>
    <thetext>&gt; So, I think that we could define Active DOM Objects as Plugins, JavaScript,
&gt; Animated GIFs, DOM events, CSS animations, DOMActiveObject subclasses and, as
&gt; Simons stated, wrap them behind the API. Is there anything else (active
&gt; objects, non-active objects) that we should be able to suspend/resume by now?

I guess that the ScriptExecutionContext::suspend... takes care of the DOM events, JS Objects etc. so I guess we only have plugins, GIF/(APNG?..) animations, and CSS animations.
  
&gt; About the API, I think that we could have methods (suspend/resume) on
&gt; QWebFrame, as Yongjun Zhang proposed, but I&apos;m also willing to have a
&gt; convenience API on QWebPage so we can suspend/resume the execution of all its
&gt; sub-frames, in a more correct way.

I guess we need it on the QWebFrame in order to be able to use it for &quot;dashboard like widgets&quot; etc and as it is a specialized method that will not be used that much by the general public, I guess we could leave it on the QWebFrame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177578</commentid>
    <comment_count>14</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-01-06 06:13:47 -0800</bug_when>
    <thetext>
&gt; I guess that the ScriptExecutionContext::suspend... takes care of the DOM
&gt; events, JS Objects etc. so I guess we only have plugins, GIF/(APNG?..)
&gt; animations, and CSS animations.

I&apos;d add SMIL to the list.

&gt; &gt; About the API, I think that we could have methods (suspend/resume) on
&gt; &gt; QWebFrame, as Yongjun Zhang proposed, but I&apos;m also willing to have a
&gt; &gt; convenience API on QWebPage so we can suspend/resume the execution of all its
&gt; &gt; sub-frames, in a more correct way.

I like have it per-qwebpage too, hence pausing main and sub frame at once, if one wants so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177581</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-06 06:25:21 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; I guess that the ScriptExecutionContext::suspend... takes care of the DOM
&gt; &gt; events, JS Objects etc. so I guess we only have plugins, GIF/(APNG?..)
&gt; &gt; animations, and CSS animations.
&gt; 
&gt; I&apos;d add SMIL to the list.
&gt; 
&gt; &gt; &gt; About the API, I think that we could have methods (suspend/resume) on
&gt; &gt; &gt; QWebFrame, as Yongjun Zhang proposed, but I&apos;m also willing to have a
&gt; &gt; &gt; convenience API on QWebPage so we can suspend/resume the execution of all its
&gt; &gt; &gt; sub-frames, in a more correct way.
&gt; 
&gt; I like have it per-qwebpage too, hence pausing main and sub frame at once, if
&gt; one wants so.

Of course, the API should include subframes. like if you suspend active objects for a frame, it will suspend for all subframes, and likewise for resume, thus the only difference becomes calling page-&gt;mainFrame()-&gt;suspend...() instead of page-&gt;suspend...().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177652</commentid>
    <comment_count>16</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-01-06 11:00:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; We had a long discussion on IRC about all sorts of suspension mechanisms 
&gt; I think originally the idea is to suspend DOMTimer which initialized by JS
&gt; setTimeOut(). Certainly, it wouldn&apos;t hurt if we add options to suspend animated
&gt; GIFs and plugins in this API.

You should note that according to the comments in bindings/js/JSDOMBinding.cpp, JS objects created by setTimeout do not have JS wrappers and are, AFAICT, not included in the ActiveDOMObjects and thus, not suspended at all.

Have you verified this? The comments even have a &quot;// FIXME: perhaps need to make sure even timers have a markable &apos;wrapper&apos;.&quot;.

Just check markActiveObjectsForContext for more info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177686</commentid>
    <comment_count>17</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-01-06 12:00:55 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; You should note that according to the comments in bindings/js/JSDOMBinding.cpp,
&gt; JS objects created by setTimeout do not have JS wrappers and are, AFAICT, not
&gt; included in the ActiveDOMObjects and thus, not suspended at all.
&gt; 
&gt; Have you verified this? The comments even have a &quot;// FIXME: perhaps need to
&gt; make sure even timers have a markable &apos;wrapper&apos;.&quot;.
&gt; 
&gt; Just check markActiveObjectsForContext for more info.

Ok, just found in WebCore/page/DOMTimer.cpp:87  :
// DOMTimer constructor links the new timer into a list of ActiveDOMObjects held by the &apos;context&apos;.

And looking at the constructor, line 64, found: scriptExecutionContext()-&gt;addTimeout(m_timeoutId, this);
Taking a look at the commit 177db693, which introduced this to DOMTimer, I can just conclude that the previous comment that I stated is no longer valid. Patching it right now. (and we are back to the original topic)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177794</commentid>
    <comment_count>18</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-01-06 14:50:45 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; We might want to consider committing
&gt; https://bugs.webkit.org/attachment.cgi?id=45919 to the trunk as well, just to
&gt; keep the trunk in sync with 4.6.

The patch will need changes in the Symbian def files as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178114</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-07 03:24:56 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #9)
&gt; &gt; We might want to consider committing
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=45919 to the trunk as well, just to
&gt; &gt; keep the trunk in sync with 4.6.
&gt; 
&gt; The patch will need changes in the Symbian def files as well.

Yep. I&apos;ll submit the change into the trunk, cherry-pick it into qtwebkit-4.6, update the def files there (weekly?), submit them also back into the trunk.

Once we remove the private API we mark those symbols as absent in the def files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178115</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-07 03:27:40 -0800</bug_when>
    <thetext>Landed in r52914 in the trunk and cherry-picked as 7f2f0abd29e5363012b24c2465226e8ec2f33183 into qtwebkit-4.6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178134</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-07 04:10:07 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Landed in r52914 in the trunk and cherry-picked as
&gt; 7f2f0abd29e5363012b24c2465226e8ec2f33183 into qtwebkit-4.6

Is this enough for the JIRA task? What is holding us from settling on a public API and add autotests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178150</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-07 05:14:13 -0800</bug_when>
    <thetext>Benjamin, Tor Arne: What do you think about the currently proposed names?

QWebFrame::suspendActiveDOMObjects
QWebFrame::resumeActiveDOMObjects

(see also Jesus&apos; analysis)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178159</commentid>
    <comment_count>23</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-01-07 05:51:08 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; So, I think that we could define Active DOM Objects as Plugins, JavaScript,
&gt; Animated GIFs, DOM events, CSS animations, DOMActiveObject subclasses and, as
&gt; Simons stated, wrap them behind the API. Is there anything else (active
&gt; objects, non-active objects) that we should be able to suspend/resume by now?

Does that mean frame-&gt;document()-&gt;suspendActiveDOMObjects() will include all those types of activities you mentioned, including plugins, animations, etc, or do we have to do some additional suspending of our own?

API-naming-vise I don&apos;t like &quot;Active&quot; as a prefix, as it somehow implies that those objects that are currently inactive are not suspended. What if they then wake up/become active, are they then not part of the group of suspended objects?

I also dislike &quot;DOMObjects&quot; as a catch-all representation of the classes you mentioned above, can we find something more descriptive? Or perhaps do we even need a postfix?

QWebFrame::suspend()
QWebFrame::resume()


?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178630</commentid>
    <comment_count>24</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-01-08 03:59:37 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Does that mean frame-&gt;document()-&gt;suspendActiveDOMObjects() will include all
&gt; those types of activities you mentioned, including plugins, animations, etc, or
&gt; do we have to do some additional suspending of our own?

My feelings are that our API should include everything. All Active DOM Objects, at least. I&apos;m not sure right now if animated GIFs and CSS animations are ActiveDOMObjects, but I&apos;ve already checked the others. XHR inherits ActiveDOMObject but it doesn&apos;t re-implement ActiveDOMObject::suspend() and ActiveDOMObject::resume() and, therefore, wouldn&apos;t be suspended/resumed. Maybe I should open a new bug for this?

&gt; 
&gt; API-naming-vise I don&apos;t like &quot;Active&quot; as a prefix, as it somehow implies that
&gt; those objects that are currently inactive are not suspended. What if they then
&gt; wake up/become active, are they then not part of the group of suspended
&gt; objects?
&gt; 
&gt; I also dislike &quot;DOMObjects&quot; as a catch-all representation of the classes you
&gt; mentioned above, can we find something more descriptive? Or perhaps do we even
&gt; need a postfix?
&gt; 
&gt; QWebFrame::suspend()
&gt; QWebFrame::resume()

Ok, I got it. Let me propose 4 API&apos;s with pros and cons:

- QWebFrame::suspendActiveDOMObjects() and QWebFrame::resumeActiveDOMObjects()
It&apos;s clear enough, but too long and can confuse because of the inactive objects that we also need to suspend.

- QWebFrame::suspend() and QWebFrame::resume()
Seems nice, but when I suspend all DOMObjects of a frame can I still click on hyperlinks? If so, the frame isn&apos;t completely suspended and the API would be inconsistent, IMHO. But yes, I have to check this.

- QWebFrame::suspendObjectsExecution() and QWebFrame::resumeObjectsExecution()
It&apos;s not too long and does not use Active or DOM as prefix or postfix.

And a brand new idea (thanks, Kenneth):
- QWebFrame::setExecutionMode(ExecutionMode)
Where &apos;ExecutionMode&apos; could be &apos;Default&apos;, &apos;PowerSaving&apos;, etc.
This is consistent with this bug&apos;s description and can be extended when more options and use-cases arrive (i.e.: if someday we need to just suspend scripts, animations, etc)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233197</commentid>
    <comment_count>25</comment_count>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2010-06-02 03:53:56 -0700</bug_when>
    <thetext>I think the bug mentions about everything that consumes CPU-cycles/battery-life when in background .. 

--&gt; JS Timers, DOM Events, Plugins, CSS animations, GIF animations

What about HTML5 audio/video playback ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632669</commentid>
    <comment_count>26</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-24 05:42:53 -0700</bug_when>
    <thetext>WebKit2 now has an API like this between WebProcess and UIProcess. It is currently called suspendActiveDOMObjectsAndAnimations(), since that is what it does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>975098</commentid>
    <comment_count>27</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2014-02-03 03:15:59 -0800</bug_when>
    <thetext>=== Bulk closing of Qt bugs ===

If you believe that this bug report is still relevant for a non-Qt port of webkit.org, please re-open it and remove [Qt] from the summary.

If you believe that this is still an important QtWebKit bug, please fill a new report at https://bugreports.qt-project.org and add a link to this issue. See http://qt-project.org/wiki/ReportingBugsInQt for additional guidelines.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45073</attachid>
            <date>2009-12-17 08:27:01 -0800</date>
            <delta_ts>2010-06-11 14:33:47 -0700</delta_ts>
            <desc>first attempt to introduce the suspend/resume DOM objects API.</desc>
            <filename>suspend_resume_dom_object.patch</filename>
            <type>text/plain</type>
            <size>2275</size>
            <attacher name="Yongjun Zhang">yongjun.zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNTIyNTQpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTItMTcgIFlvbmdqdW4gWmhhbmcgIDx5b25nanVu
LnpoYW5nQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE2NzMK
KyAgICAgICAgW1F0XSBuZWVkIGFuIEFQSSB0byBzdXNwZW5kIGFuZCByZXN1bWUgYWN0aXZlIEph
dmFzY3JpcHQgRE9NIG9iamVjdHMuCisKKyAgICAgICAgQWRkIHN1c3BlbmQgYW5kIHJlc3VtZSBE
T00gb2JqZWN0cyBBUEkgdG8gUVdlYkZyYW1lLCBhbmQgYWRkIEFQSQorICAgICAgICBkb2N1bWVu
dGF0aW9uLgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJh
bWU6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzKToKKyAgICAgICAgKFFXZWJGcmFtZTo6cmVzdW1l
QWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorCiAyMDA5LTEy
LTE3ICBLaW0gR3LDtm5ob2xtICA8a2ltLmdyb25ob2xtQG5vbW92b2suY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNp
b24gNTIyNTEpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNjMsNiArMTM2MywzMyBAQCBRV2ViU2VjdXJpdHlPcmlnaW4gUVdlYkZyYW1lOjpzZWN1
cml0eU9yCiAgICAgcmV0dXJuIFFXZWJTZWN1cml0eU9yaWdpbihwcml2KTsKIH0KIAorLyohCisg
ICAgXHNpbmNlIDQuNi4xCisKKyAgICBTdXNwZW5kIGFjdGl2ZSBET00gb2JqZWN0cyBpbiB0aGlz
IGZyYW1lLiAgRS5nLiwgRE9NVGltZXIgaW5pdGlhbGl6ZWQgYnkgSmF2YVNjcmlwdCBzZXRUaW1l
T3V0KCkgY291bGQKKyAgICBiZSBzdXNwZW5kZWQgd2hlbiB0aGUgY29udGFpbmluZyBRV2ViUGFn
ZSBpcyBpbiBiYWNrZ3JvdW5kLgorCisgICAgXHNhIHJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKQor
Ki8KK3ZvaWQgUVdlYkZyYW1lOjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpIGNvbnN0Cit7Cisg
ICAgaWYgKGQtPmZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICBkLT5mcmFtZS0+ZG9jdW1lbnQo
KS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKTsKK30KKworLyohCisgICAgXHNpbmNlIDQuNi4x
CisKKyAgICBSZXN1bWUgYWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUuCisKKyAgICBc
c2Egc3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKQorKi8KK3ZvaWQgUVdlYkZyYW1lOjpyZXN1bWVB
Y3RpdmVET01PYmplY3RzKCkgY29uc3QKK3sKKyAgICBpZiAoZC0+ZnJhbWUtPmRvY3VtZW50KCkp
CisgICAgICAgIGQtPmZyYW1lLT5kb2N1bWVudCgpLT5yZXN1bWVBY3RpdmVET01PYmplY3RzKCk7
Cit9CisKIFdlYkNvcmU6OkZyYW1lKiBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKFFXZWJGcmFtZSog
d2ViRnJhbWUpCiB7CiAgICAgcmV0dXJuIHdlYkZyYW1lLT5kLT5mcmFtZTsKSW5kZXg6IFdlYktp
dC9xdC9BcGkvcXdlYmZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViZnJh
bWUuaAkocmV2aXNpb24gNTIyNTEpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTQsNiArMTk0LDkgQEAgcHVibGljOgogCiAgICAgUVdlYlNlY3VyaXR5
T3JpZ2luIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAKKyAgICB2b2lkIHN1c3BlbmRBY3RpdmVE
T01PYmplY3RzKCkgY29uc3Q7CisgICAgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzKCkgY29u
c3Q7CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIFFWYXJpYW50IGV2YWx1YXRlSmF2YVNjcmlwdChj
b25zdCBRU3RyaW5nJiBzY3JpcHRTb3VyY2UpOwogI2lmbmRlZiBRVF9OT19QUklOVEVSCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45918</attachid>
            <date>2010-01-05 12:14:22 -0800</date>
            <delta_ts>2010-01-05 12:30:55 -0800</delta_ts>
            <desc>private API prepared to merge to 4.6</desc>
            <filename>31673.patch</filename>
            <type>text/plain</type>
            <size>1724</size>
            <attacher name="Laszlo Gombos">laszlo.gombos</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNTI4MTcpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDEtMDUgIFlvbmdqdW4gWmhhbmcgIDx5b25nanVu
LnpoYW5nQG5va2lhLmNvbT4sIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtR
dF0gbmVlZCBhbiBBUEkgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIGFjdGl2ZSBKYXZhc2NyaXB0IERP
TSBvYmplY3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE2NzMKKworICAgICAgICBBZGQgc3VzcGVuZCBhbmQgcmVzdW1lIERPTSBvYmplY3RzIHBy
aXZhdGUgQVBJIHRvIFFXZWJGcmFtZS4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgor
ICAgICAgICAocXRfc3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAocXRfcmVzdW1l
QWN0aXZlRE9NT2JqZWN0cyk6CisKIDIwMTAtMDEtMDUgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNpb24gNTI4MTMpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAsMjAgQEAg
UVN0cmluZyBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfY291bnRlclZhbAogICAgIHJldHVybiBRU3Ry
aW5nKCk7CiB9CiAKKy8vIFN1c3BlbmQgYWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUu
Cit2b2lkIHF0X3N1c3BlbmRBY3RpdmVET01PYmplY3RzKFFXZWJGcmFtZSogcUZyYW1lKSBjb25z
dAoreworICAgIGlmIChxRnJhbWUtPmZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICBxRnJhbWUt
PmZyYW1lLT5kb2N1bWVudCgpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOworfQorICAgICAg
ICAgICAgCisvLyBSZXN1bWUgYWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUuCit2b2lk
IHF0X3Jlc3VtZUFjdGl2ZURPTU9iamVjdHMoUVdlYkZyYW1lKiBxRnJhbWUpIGNvbnN0Cit7Cisg
ICAgaWYgKHFGcmFtZS0+ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHFGcmFtZS0+ZnJhbWUt
PmRvY3VtZW50KCktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHMoKTsKK30gICAgICAgICAgICAgICAg
ICAgICAgICAKKwogUVdlYkZyYW1lRGF0YTo6UVdlYkZyYW1lRGF0YShXZWJDb3JlOjpQYWdlKiBw
YXJlbnRQYWdlLCBXZWJDb3JlOjpGcmFtZSogcGFyZW50RnJhbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJGcmFtZUVs
ZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYgZnJhbWVOYW1lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45919</attachid>
            <date>2010-01-05 12:30:55 -0800</date>
            <delta_ts>2010-01-05 12:30:55 -0800</delta_ts>
            <desc>private API prepared to merge to 4.6 - 2nd try</desc>
            <filename>31673.patch</filename>
            <type>text/plain</type>
            <size>1814</size>
            <attacher name="Laszlo Gombos">laszlo.gombos</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNTI4MTcpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDEtMDUgIFlvbmdqdW4gWmhhbmcgIDx5b25nanVu
LnpoYW5nQG5va2lhLmNvbT4sIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtR
dF0gbmVlZCBhbiBBUEkgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIGFjdGl2ZSBKYXZhc2NyaXB0IERP
TSBvYmplY3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE2NzMKKworICAgICAgICBBZGQgc3VzcGVuZCBhbmQgcmVzdW1lIERPTSBvYmplY3RzIHBy
aXZhdGUgQVBJIHRvIFFXZWJGcmFtZS4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgor
ICAgICAgICAocXRfc3VzcGVuZEFjdGl2ZURPTU9iamVjdHMpOgorICAgICAgICAocXRfcmVzdW1l
QWN0aXZlRE9NT2JqZWN0cyk6CisKIDIwMTAtMDEtMDUgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNpb24gNTI4MTMpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAsMjIgQEAg
UVN0cmluZyBRV0VCS0lUX0VYUE9SVCBxdF9kcnRfY291bnRlclZhbAogICAgIHJldHVybiBRU3Ry
aW5nKCk7CiB9CiAKKy8vIFN1c3BlbmQgYWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUu
Cit2b2lkIFFXRUJLSVRfRVhQT1JUIHF0X3N1c3BlbmRBY3RpdmVET01PYmplY3RzKFFXZWJGcmFt
ZSogcUZyYW1lKQoreworICAgIEZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
cUZyYW1lKTsKKyAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIGZyYW1lLT5kb2N1
bWVudCgpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOworfQorICAgICAgICAgICAgCisvLyBS
ZXN1bWUgYWN0aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUuCit2b2lkIFFXRUJLSVRfRVhQ
T1JUIHF0X3Jlc3VtZUFjdGl2ZURPTU9iamVjdHMoUVdlYkZyYW1lKiBxRnJhbWUpCit7CisgICAg
RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxRnJhbWUpOworICAgIGlmIChm
cmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnJlc3VtZUFjdGl2
ZURPTU9iamVjdHMoKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAKKwogUVdlYkZyYW1lRGF0
YTo6UVdlYkZyYW1lRGF0YShXZWJDb3JlOjpQYWdlKiBwYXJlbnRQYWdlLCBXZWJDb3JlOjpGcmFt
ZSogcGFyZW50RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJGcmFtZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZnJhbWVOYW1lKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>