Title: [105355] branches/chromium/912
Revision
105355
Author
tse...@chromium.org
Date
2012-01-18 16:49:41 -0800 (Wed, 18 Jan 2012)

Log Message

Merge 103429 - Source/WebCore: [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread
BUG=107873
Review URL: https://chromiumcodereview.appspot.com/9254017

Modified Paths

Diff

Modified: branches/chromium/912/LayoutTests/platform/chromium/test_expectations.txt (105354 => 105355)


--- branches/chromium/912/LayoutTests/platform/chromium/test_expectations.txt	2012-01-19 00:42:00 UTC (rev 105354)
+++ branches/chromium/912/LayoutTests/platform/chromium/test_expectations.txt	2012-01-19 00:49:41 UTC (rev 105355)
@@ -162,6 +162,29 @@
 WONTFIX SKIP : http/tests/inspector/network/network-shared-worker.html = PASS TIMEOUT FAIL
 WONTFIX SKIP : http/tests/inspector/network/network-worker.html = PASS TIMEOUT FAIL
 
+// test_shell does not support message ports
+BUGWK74459 SKIP : fast/workers/termination-with-port-messages.html = CRASH
+BUGWK74459 SKIP : fast/workers/worker-cloneport.html = CRASH
+BUGWK74459 SKIP : fast/workers/worker-context-multi-port.html = CRASH
+BUGWK74459 SKIP : fast/workers/worker-messageport-gc.html = CRASH
+BUGWK74459 SKIP : fast/workers/worker-messageport.html = CRASH
+BUGWK74459 SKIP : fast/workers/worker-multi-port.html = CRASH
+
+BUGWK74449 SKIP : fast/workers/dedicated-worker-lifecycle.html = TIMEOUT
+BUGWK74449 SKIP : fast/workers/worker-close-more.html = TIMEOUT
+BUGWK74449 SKIP : fast/workers/worker-lifecycle.html = TIMEOUT
+
+BUGWK74466 : fast/workers/worker-script-error.html = PASS TIMEOUT FAIL
+
+// Tests timing out because layoutTestController.workerThreadCount is not implemented in DRT
+BUGWK74653 SKIP : http/tests/xmlhttprequest/workers/abort-exception-assert.html = TIMEOUT
+BUGWK74653 SKIP : http/tests/workers/interrupt-database-sync-open-crash.html = TIMEOUT
+BUGWK74653 SKIP : fast/workers/storage/interrupt-database.html = TIMEOUT
+
+BUGWK71968 : fast/files/workers/worker-apply-blob-url-to-xhr.html = TEXT
+
+BUGWK74654 SKIP : http/tests/inspector/network/network-worker.html = PASS TIMEOUT FAIL
+
 // Page Cache - based tests. Chromium disables page cache because the WebKit page cache keeps previously
 // loaded pages alive in memory to be able to quickly substitute them when user clicks History buttons.
 // Chromium wants those to be separate navigations made via browser process to be able to make decision

Modified: branches/chromium/912/Source/WebCore/storage/AbstractDatabase.cpp (105354 => 105355)


--- branches/chromium/912/Source/WebCore/storage/AbstractDatabase.cpp	2012-01-19 00:42:00 UTC (rev 105354)
+++ branches/chromium/912/Source/WebCore/storage/AbstractDatabase.cpp	2012-01-19 00:49:41 UTC (rev 105355)
@@ -211,6 +211,7 @@
 
 AbstractDatabase::~AbstractDatabase()
 {
+    ASSERT(!m_opened);
 }
 
 void AbstractDatabase::closeDatabase()

Modified: branches/chromium/912/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp (105354 => 105355)


--- branches/chromium/912/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp	2012-01-19 00:42:00 UTC (rev 105354)
+++ branches/chromium/912/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp	2012-01-19 00:49:41 UTC (rev 105355)
@@ -97,20 +97,25 @@
     DatabaseObserver::databaseOpened(database);
 }
 
-class TrackerRemoveOpenDatabaseTask : public ScriptExecutionContext::Task {
+class NotifyDatabaseObserverOnCloseTask : public ScriptExecutionContext::Task {
 public:
-    static PassOwnPtr<TrackerRemoveOpenDatabaseTask> create(PassRefPtr<AbstractDatabase> database)
+    static PassOwnPtr<NotifyDatabaseObserverOnCloseTask> create(PassRefPtr<AbstractDatabase> database)
     {
-        return adoptPtr(new TrackerRemoveOpenDatabaseTask(database));
+        return adoptPtr(new NotifyDatabaseObserverOnCloseTask(database));
     }
 
     virtual void performTask(ScriptExecutionContext* context)
     {
-        DatabaseTracker::tracker().removeOpenDatabase(m_database.get());
+        DatabaseObserver::databaseClosed(m_database.get());
     }
 
+    virtual bool isCleanupTask() const
+    {
+        return true;
+    }
+
 private:
-    TrackerRemoveOpenDatabaseTask(PassRefPtr<AbstractDatabase> database)
+    NotifyDatabaseObserverOnCloseTask(PassRefPtr<AbstractDatabase> database)
         : m_database(database)
     {
     }
@@ -120,11 +125,6 @@
 
 void DatabaseTracker::removeOpenDatabase(AbstractDatabase* database)
 {
-    if (!database->scriptExecutionContext()->isContextThread()) {
-        database->scriptExecutionContext()->postTask(TrackerRemoveOpenDatabaseTask::create(database));
-        return;
-    }
-
     String originIdentifier = database->securityOrigin()->databaseIdentifier();
     MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
     ASSERT(m_openDatabaseMap);
@@ -151,7 +151,10 @@
         }
     }
 
-    DatabaseObserver::databaseClosed(database);
+    if (!database->scriptExecutionContext()->isContextThread())
+        database->scriptExecutionContext()->postTask(NotifyDatabaseObserverOnCloseTask::create(database));
+    else
+        DatabaseObserver::databaseClosed(database);
 }
 
 void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<AbstractDatabase> >* databases)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to