Chromium Code Reviews| Index: third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp | 
| diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp | 
| index 3c31da4684da9313397612866157f75d57771d1b..4d0008813ff1bc4e5438b73cc5b4be80dde61949 100644 | 
| --- a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp | 
| +++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp | 
| @@ -30,6 +30,7 @@ | 
| #include "modules/webdatabase/DatabaseTracker.h" | 
| +#include "core/dom/CrossThreadTask.h" | 
| #include "core/dom/Document.h" | 
| #include "core/dom/ExecutionContext.h" | 
| #include "core/dom/ExecutionContextTask.h" | 
| @@ -45,6 +46,7 @@ | 
| #include "public/platform/WebSecurityOrigin.h" | 
| #include "public/platform/WebTraceLocation.h" | 
| #include "wtf/Assertions.h" | 
| +#include "wtf/Functional.h" | 
| #include "wtf/PtrUtil.h" | 
| #include "wtf/StdLibExtras.h" | 
| @@ -166,31 +168,6 @@ unsigned long long DatabaseTracker::getMaxSizeForDatabase(const Database* databa | 
| return databaseSize + spaceAvailable; | 
| } | 
| -class DatabaseTracker::CloseOneDatabaseImmediatelyTask final : public ExecutionContextTask { | 
| -public: | 
| - static std::unique_ptr<CloseOneDatabaseImmediatelyTask> create(const String& originString, const String& name, Database* database) | 
| - { | 
| - return wrapUnique(new CloseOneDatabaseImmediatelyTask(originString, name, database)); | 
| - } | 
| - | 
| - void performTask(ExecutionContext*) override | 
| - { | 
| - DatabaseTracker::tracker().closeOneDatabaseImmediately(m_originString, m_name, m_database); | 
| - } | 
| - | 
| -private: | 
| - CloseOneDatabaseImmediatelyTask(const String& originString, const String& name, Database* database) | 
| - : m_originString(originString.isolatedCopy()) | 
| - , m_name(name.isolatedCopy()) | 
| - , m_database(database) | 
| - { | 
| - } | 
| - | 
| - String m_originString; | 
| - String m_name; | 
| - CrossThreadPersistent<Database> m_database; | 
| -}; | 
| - | 
| void DatabaseTracker::closeDatabasesImmediately(SecurityOrigin* origin, const String& name) | 
| { | 
| String originString = origin->toRawString(); | 
| @@ -208,7 +185,7 @@ void DatabaseTracker::closeDatabasesImmediately(SecurityOrigin* origin, const St | 
| // We have to call closeImmediately() on the context thread. | 
| for (DatabaseSet::iterator it = databaseSet->begin(); it != databaseSet->end(); ++it) | 
| - (*it)->getDatabaseContext()->getExecutionContext()->postTask(BLINK_FROM_HERE, CloseOneDatabaseImmediatelyTask::create(originString, name, *it)); | 
| + (*it)->getDatabaseContext()->getExecutionContext()->postTask(BLINK_FROM_HERE, createCrossThreadTask(&DatabaseTracker::closeOneDatabaseImmediately, crossThreadUnretained(this), originString, name, *it)); | 
| 
 
hiroshige
2016/06/26 10:51:02
This CL passes |this| across thread, instead of ca
 
haraken
2016/06/27 01:13:52
Why don't you use wrapCrossThreadPersistent?
 
hiroshige
2016/06/27 07:20:06
Because DatabaseTracker is not GCed type.
 
 | 
| } | 
| void DatabaseTracker::forEachOpenDatabaseInPage(Page* page, std::unique_ptr<DatabaseCallback> callback) |