Title: [88914] trunk
Revision
88914
Author
[email protected]
Date
2011-06-15 01:24:41 -0700 (Wed, 15 Jun 2011)

Log Message

2011-06-10  Yury Semikhatsky  <[email protected]>

        Reviewed by Dmitry Titov.

        [Chromium] Worker object may be garbage collected if it doesn't send any messages
        https://bugs.webkit.org/show_bug.cgi?id=62446

        * fast/workers/resources/worker-init.js: Added.
        * fast/workers/worker-init-expected.txt: Added.
        * fast/workers/worker-init.html: Added.
2011-06-10  Yury Semikhatsky  <[email protected]>

        Reviewed by Dmitry Titov.

        [Chromium] Worker object may be garbage collected if it doesn't send any messages
        https://bugs.webkit.org/show_bug.cgi?id=62446

        Assume that WorkerContext has pending activity before explicit notification
        is received from it. It prevents worker object from being collected before
        the first message from its context is received.

        * src/WebWorkerClientImpl.cpp:
        (WebKit::WebWorkerClientImpl::startWorkerContext):
        (WebKit::WebWorkerClientImpl::startWorkerContextInternal):
        (WebKit::WebWorkerClientImpl::startWorkerContextTask):
        * src/WebWorkerClientImpl.h:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (88913 => 88914)


--- trunk/LayoutTests/ChangeLog	2011-06-15 08:02:37 UTC (rev 88913)
+++ trunk/LayoutTests/ChangeLog	2011-06-15 08:24:41 UTC (rev 88914)
@@ -1,3 +1,14 @@
+2011-06-10  Yury Semikhatsky  <[email protected]>
+
+        Reviewed by Dmitry Titov.
+
+        [Chromium] Worker object may be garbage collected if it doesn't send any messages
+        https://bugs.webkit.org/show_bug.cgi?id=62446
+
+        * fast/workers/resources/worker-init.js: Added.
+        * fast/workers/worker-init-expected.txt: Added.
+        * fast/workers/worker-init.html: Added.
+
 2011-06-15  Nikolas Zimmermann  <[email protected]>
 
         Reviewed by David Hyatt.

Added: trunk/LayoutTests/fast/workers/resources/worker-init.js (0 => 88914)


--- trunk/LayoutTests/fast/workers/resources/worker-init.js	                        (rev 0)
+++ trunk/LayoutTests/fast/workers/resources/worker-init.js	2011-06-15 08:24:41 UTC (rev 88914)
@@ -0,0 +1,2 @@
+postMessage("SUCCESS: Worker context initialized");
+
Property changes on: trunk/LayoutTests/fast/workers/resources/worker-init.js
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/fast/workers/worker-init-expected.txt (0 => 88914)


--- trunk/LayoutTests/fast/workers/worker-init-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/workers/worker-init-expected.txt	2011-06-15 08:24:41 UTC (rev 88914)
@@ -0,0 +1,4 @@
+Test that worker object is not garbage collected if there is a message from worker context. Should print "SUCCESS". Bug 62446
+
+SUCCESS: Worker context initialized
+
Property changes on: trunk/LayoutTests/fast/workers/worker-init-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/fast/workers/worker-init.html (0 => 88914)


--- trunk/LayoutTests/fast/workers/worker-init.html	                        (rev 0)
+++ trunk/LayoutTests/fast/workers/worker-init.html	2011-06-15 08:24:41 UTC (rev 88914)
@@ -0,0 +1,43 @@
+<body>
+<p>Test that worker object is not garbage collected if there is a message from
+worker context. Should print "SUCCESS".
+<a href="" 62446</a></p>
+<div id=result></div>
+<script>
+function log(message)
+{
+    document.getElementById("result").innerHTML += message + "<br>";
+}
+
+function gc()
+{
+    if (window.GCController)
+        return GCController.collect();
+
+    var head;
+    for (var i = 0; i < 10000; i++) {
+        var newHead = new Array(1000);
+        newHead[0] = head;
+        head = newHead;
+    }
+}
+
+if (window.layoutTestController) {
+    layoutTestController.dumpAsText();
+    layoutTestController.waitUntilDone();
+}
+
+var interval = setInterval(gc, 0);
+
+var worker = new Worker('resources/worker-init.js');
+worker._onmessage_ = function(evt) {
+    log(evt.data);
+    clearInterval(interval);
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
+}
+worker = 0;
+gc();
+</script>
+</body>
+</html>
Property changes on: trunk/LayoutTests/fast/workers/worker-init.html
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/Source/WebKit/chromium/ChangeLog (88913 => 88914)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-06-15 08:02:37 UTC (rev 88913)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-06-15 08:24:41 UTC (rev 88914)
@@ -1,3 +1,20 @@
+2011-06-10  Yury Semikhatsky  <[email protected]>
+
+        Reviewed by Dmitry Titov.
+
+        [Chromium] Worker object may be garbage collected if it doesn't send any messages
+        https://bugs.webkit.org/show_bug.cgi?id=62446
+
+        Assume that WorkerContext has pending activity before explicit notification
+        is received from it. It prevents worker object from being collected before
+        the first message from its context is received.
+
+        * src/WebWorkerClientImpl.cpp:
+        (WebKit::WebWorkerClientImpl::startWorkerContext):
+        (WebKit::WebWorkerClientImpl::startWorkerContextInternal):
+        (WebKit::WebWorkerClientImpl::startWorkerContextTask):
+        * src/WebWorkerClientImpl.h:
+
 2011-06-14  Eric Uhrhane  <[email protected]>
 
         Reviewed by Darin Fisher.

Modified: trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.cpp (88913 => 88914)


--- trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.cpp	2011-06-15 08:02:37 UTC (rev 88913)
+++ trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.cpp	2011-06-15 08:24:41 UTC (rev 88914)
@@ -150,7 +150,13 @@
             sourceCode));
         return;
     }
+    startWorkerContextInternal(scriptURL, userAgent, sourceCode);
+}
+
+void WebWorkerClientImpl::startWorkerContextInternal(const KURL& scriptURL, const WTF::String& userAgent, const WTF::String& sourceCode)
+{
     m_webWorker->startWorkerContext(scriptURL, userAgent, sourceCode);
+    m_workerContextHadPendingActivity = true; // Worker initialization means a pending activity.
 }
 
 void WebWorkerClientImpl::terminateWorkerContext()
@@ -351,8 +357,7 @@
                                                  const String& userAgent,
                                                  const String& sourceCode)
 {
-    thisPtr->m_webWorker->startWorkerContext(KURL(ParsedURLString, scriptURL),
-                                             userAgent, sourceCode);
+    thisPtr->startWorkerContextInternal(KURL(ParsedURLString, scriptURL), userAgent, sourceCode);
 }
 
 void WebWorkerClientImpl::terminateWorkerContextTask(ScriptExecutionContext* context,

Modified: trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.h (88913 => 88914)


--- trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.h	2011-06-15 08:02:37 UTC (rev 88913)
+++ trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.h	2011-06-15 08:24:41 UTC (rev 88914)
@@ -159,6 +159,8 @@
                                           WebWorkerClientImpl* thisPtr,
                                           bool hasPendingActivity);
 
+    void startWorkerContextInternal(const WebCore::KURL& scriptURL, const WTF::String& userAgent, const WTF::String& sourceCode);
+
     // Guard against context from being destroyed before a worker exits.
     RefPtr<WebCore::ScriptExecutionContext> m_scriptExecutionContext;
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to