Title: [101842] trunk/Source/WebKit/chromium
Revision
101842
Author
[email protected]
Date
2011-12-02 11:39:04 -0800 (Fri, 02 Dec 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.

Relanding, depends on http://codereview.chromium.org/8748015/
to fix a sandboxing issue on Chromium/Linux.

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 implementation of the new WebThread methods is in
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 (101841 => 101842)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-12-02 19:31:10 UTC (rev 101841)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-12-02 19:39:04 UTC (rev 101842)
@@ -1,3 +1,28 @@
+2011-11-30  Adam Klein  <[email protected]>
+
+        [chromium] WebKitMutationObserver::deliverAllMutations should be exposed through the Chromium API
+        https://bugs.webkit.org/show_bug.cgi?id=71242
+
+        Reviewed by Darin Fisher.
+
+        Relanding, depends on http://codereview.chromium.org/8748015/
+        to fix a sandboxing issue on Chromium/Linux.
+
+        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 implementation of the new WebThread methods is in
+        http://codereview.chromium.org/8586038/.
+
+        * public/platform/WebThread.h:
+        (WebKit::WebThread::TaskObserver::~TaskObserver):
+        * src/WebKit.cpp:
+        (WebKit::initialize):
+        (WebKit::shutdown):
+
 2011-12-02  Sheriff Bot  <[email protected]>
 
         Unreviewed, rolling out r101833.

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


--- trunk/Source/WebKit/chromium/public/platform/WebThread.h	2011-12-02 19:31:10 UTC (rev 101841)
+++ trunk/Source/WebKit/chromium/public/platform/WebThread.h	2011-12-02 19:39:04 UTC (rev 101842)
@@ -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 (101841 => 101842)


--- trunk/Source/WebKit/chromium/src/WebKit.cpp	2011-12-02 19:31:10 UTC (rev 101841)
+++ trunk/Source/WebKit/chromium/src/WebKit.cpp	2011-12-02 19:39:04 UTC (rev 101842)
@@ -37,9 +37,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"
 
@@ -50,6 +52,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;
@@ -73,6 +91,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)
@@ -101,6 +125,13 @@
 
 void shutdown()
 {
+#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
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to