Title: [101418] trunk/Source/WebKit/chromium
Revision
101418
Author
ad...@chromium.org
Date
2011-11-29 13:33:55 -0800 (Tue, 29 Nov 2011)

Log Message

[chromium] WebKitMutationObserver::deliverAllMutations should be exposed through the Chromium API
https://bugs.webkit.org/show_bug.cgi?id=71242

Reviewed by Darin Fisher.

Add addTaskObserver and removeTaskObserver to WebThread,
along with a new WebThread::TaskObserver interface.

For mutation observers, add a TaskObserver to the main thread
to deliver mutations after each task runs.

The Chromium side of this patch is http://codereview.chromium.org/8586038/

* public/platform/WebThread.h:
(WebKit::WebThread::TaskObserver::~TaskObserver):
* src/WebKit.cpp:
(WebKit::initialize):
(WebKit::shutdown):

Modified Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (101417 => 101418)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-11-29 21:31:47 UTC (rev 101417)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-11-29 21:33:55 UTC (rev 101418)
@@ -1,3 +1,24 @@
+2011-11-28  Adam Klein  <ad...@chromium.org>
+
+        [chromium] WebKitMutationObserver::deliverAllMutations should be exposed through the Chromium API
+        https://bugs.webkit.org/show_bug.cgi?id=71242
+
+        Reviewed by Darin Fisher.
+
+        Add addTaskObserver and removeTaskObserver to WebThread,
+        along with a new WebThread::TaskObserver interface.
+
+        For mutation observers, add a TaskObserver to the main thread
+        to deliver mutations after each task runs.
+
+        The Chromium side of this patch is http://codereview.chromium.org/8586038/
+
+        * public/platform/WebThread.h:
+        (WebKit::WebThread::TaskObserver::~TaskObserver):
+        * src/WebKit.cpp:
+        (WebKit::initialize):
+        (WebKit::shutdown):
+
 2011-11-29  Pavel Feldman  <pfeld...@google.com>
 
         Web Inspector: split Preferences into Preferences and Capabilities.

Modified: trunk/Source/WebKit/chromium/public/platform/WebThread.h (101417 => 101418)


--- trunk/Source/WebKit/chromium/public/platform/WebThread.h	2011-11-29 21:31:47 UTC (rev 101417)
+++ trunk/Source/WebKit/chromium/public/platform/WebThread.h	2011-11-29 21:33:55 UTC (rev 101418)
@@ -43,8 +43,16 @@
         virtual void run() = 0;
     };
 
+    class TaskObserver {
+    public:
+        virtual ~TaskObserver() { }
+        virtual void didProcessTask() = 0;
+    };
+
     virtual void postTask(Task*) = 0;
     virtual void postDelayedTask(Task*, long long delayMs) = 0;
+    virtual void addTaskObserver(TaskObserver*) { }
+    virtual void removeTaskObserver(TaskObserver*) { }
 
     virtual ~WebThread() { }
 };

Modified: trunk/Source/WebKit/chromium/src/WebKit.cpp (101417 => 101418)


--- trunk/Source/WebKit/chromium/src/WebKit.cpp	2011-11-29 21:31:47 UTC (rev 101417)
+++ trunk/Source/WebKit/chromium/src/WebKit.cpp	2011-11-29 21:33:55 UTC (rev 101418)
@@ -39,9 +39,11 @@
 #include "Settings.h"
 #include "TextEncoding.h"
 #include "V8Binding.h"
+#include "WebKitMutationObserver.h"
 #include "WebKitPlatformSupport.h"
 #include "WebMediaPlayerClientImpl.h"
 #include "WebSocket.h"
+#include "WebThread.h"
 #include "WorkerContextExecutionProxy.h"
 #include "v8.h"
 
@@ -52,6 +54,22 @@
 
 namespace WebKit {
 
+#if ENABLE(MUTATION_OBSERVERS)
+namespace {
+
+class EndOfTaskRunner : public WebThread::TaskObserver {
+public:
+    virtual void didProcessTask()
+    {
+        WebCore::WebKitMutationObserver::deliverAllMutations();
+    }
+};
+
+} // namespace
+
+static WebThread::TaskObserver* s_endOfTaskRunner = 0;
+#endif // ENABLE(MUTATION_OBSERVERS)
+
 // Make sure we are not re-initialized in the same address space.
 // Doing so may cause hard to reproduce crashes.
 static bool s_webKitInitialized = false;
@@ -75,6 +93,12 @@
     v8::V8::SetEntropySource(&generateEntropy);
     v8::V8::Initialize();
     WebCore::V8BindingPerIsolateData::ensureInitialized(v8::Isolate::GetCurrent());
+
+#if ENABLE(MUTATION_OBSERVERS)
+    ASSERT(!s_endOfTaskRunner);
+    s_endOfTaskRunner = new EndOfTaskRunner;
+    webKitPlatformSupport->currentThread()->addTaskObserver(s_endOfTaskRunner);
+#endif
 }
 
 void initializeWithoutV8(WebKitPlatformSupport* webKitPlatformSupport)
@@ -107,6 +131,13 @@
 {
     delete WebCore::CCProxy::mainThread();
     WebCore::CCProxy::setMainThread(0);
+#if ENABLE(MUTATION_OBSERVERS)
+    if (s_endOfTaskRunner) {
+        s_webKitPlatformSupport->currentThread()->removeTaskObserver(s_endOfTaskRunner);
+        delete s_endOfTaskRunner;
+        s_endOfTaskRunner = 0;
+    }
+#endif
     s_webKitPlatformSupport = 0;
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to