Title: [120926] trunk/Source/WebCore
Revision
120926
Author
[email protected]
Date
2012-06-21 08:28:10 -0700 (Thu, 21 Jun 2012)

Log Message

Web Inspector: Unify FileSystem callbacks
https://bugs.webkit.org/show_bug.cgi?id=89420

Patch by Taiju Tsuiki <[email protected]> on 2012-06-21
Reviewed by Vsevolod Vlasov.

* inspector/InspectorFileSystemAgent.cpp:
(WebCore):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (120925 => 120926)


--- trunk/Source/WebCore/ChangeLog	2012-06-21 15:11:48 UTC (rev 120925)
+++ trunk/Source/WebCore/ChangeLog	2012-06-21 15:28:10 UTC (rev 120926)
@@ -1,3 +1,13 @@
+2012-06-21  Taiju Tsuiki  <[email protected]>
+
+        Web Inspector: Unify FileSystem callbacks
+        https://bugs.webkit.org/show_bug.cgi?id=89420
+
+        Reviewed by Vsevolod Vlasov.
+
+        * inspector/InspectorFileSystemAgent.cpp:
+        (WebCore):
+
 2012-06-20  Hans Wennborg  <[email protected]>
 
         Speech _javascript_ API: SpeechRecognition should hook up with ActiveDOMObject more

Modified: trunk/Source/WebCore/inspector/InspectorFileSystemAgent.cpp (120925 => 120926)


--- trunk/Source/WebCore/inspector/InspectorFileSystemAgent.cpp	2012-06-21 15:11:48 UTC (rev 120925)
+++ trunk/Source/WebCore/inspector/InspectorFileSystemAgent.cpp	2012-06-21 15:28:10 UTC (rev 120926)
@@ -96,6 +96,40 @@
 
 namespace {
 
+template<typename BaseCallback, typename Handler, typename Argument>
+class CallbackDispatcher : public BaseCallback {
+public:
+    typedef bool (Handler::*HandlingMethod)(Argument*);
+
+    static PassRefPtr<CallbackDispatcher> create(PassRefPtr<Handler> handler, HandlingMethod handlingMethod)
+    {
+        return adoptRef(new CallbackDispatcher(handler, handlingMethod));
+    }
+
+    virtual bool handleEvent(Argument* argument) OVERRIDE
+    {
+        return (m_handler.get()->*m_handlingMethod)(argument);
+    }
+
+private:
+    CallbackDispatcher(PassRefPtr<Handler> handler, HandlingMethod handlingMethod)
+        : m_handler(handler)
+        , m_handlingMethod(handlingMethod) { }
+
+    RefPtr<Handler> m_handler;
+    HandlingMethod m_handlingMethod;
+};
+
+template<typename BaseCallback>
+class CallbackDispatcherFactory {
+public:
+    template<typename Handler, typename Argument>
+    static PassRefPtr<CallbackDispatcher<BaseCallback, Handler, Argument> > create(Handler* handler, bool (Handler::*handlingMethod)(Argument*))
+    {
+        return CallbackDispatcher<BaseCallback, Handler, Argument>::create(PassRefPtr<Handler>(handler), handlingMethod);
+    }
+};
+
 class GetFileSystemRootTask : public RefCounted<GetFileSystemRootTask> {
     WTF_MAKE_NONCOPYABLE(GetFileSystemRootTask);
 public:
@@ -107,11 +141,9 @@
     void start(ScriptExecutionContext*);
 
 private:
-    class ErrorCallback;
-    class GetEntryCallback;
+    bool didHitError(FileError*);
+    bool gotEntry(Entry*);
 
-    void gotEntry(Entry*);
-
     void reportResult(FileError::ErrorCode errorCode, PassRefPtr<TypeBuilder::FileSystem::Entry> entry)
     {
         if (!m_frontendProvider || !m_frontendProvider->frontend())
@@ -130,46 +162,12 @@
     String m_type;
 };
 
-class GetFileSystemRootTask::ErrorCallback : public WebCore::ErrorCallback {
-    WTF_MAKE_NONCOPYABLE(ErrorCallback);
-public:
-    static PassRefPtr<GetFileSystemRootTask::ErrorCallback> create(PassRefPtr<GetFileSystemRootTask> getFileSystemRootTask)
-    {
-        return adoptRef(new GetFileSystemRootTask::ErrorCallback(getFileSystemRootTask));
-    }
+bool GetFileSystemRootTask::didHitError(FileError* error)
+{
+    reportResult(error->code(), 0);
+    return true;
+}
 
-    virtual bool handleEvent(FileError* error) OVERRIDE
-    {
-        m_getFileSystemRootTask->reportResult(error->code(), 0);
-        return true;
-    }
-
-private:
-    ErrorCallback(PassRefPtr<GetFileSystemRootTask> getFileSystemRootTask)
-        : m_getFileSystemRootTask(getFileSystemRootTask) { }
-    RefPtr<GetFileSystemRootTask> m_getFileSystemRootTask;
-};
-
-class GetFileSystemRootTask::GetEntryCallback : public WebCore::EntryCallback {
-    WTF_MAKE_NONCOPYABLE(GetEntryCallback);
-public:
-    static PassRefPtr<GetFileSystemRootTask::GetEntryCallback> create(PassRefPtr<GetFileSystemRootTask> getFileSystemRootTask)
-    {
-        return adoptRef(new GetFileSystemRootTask::GetEntryCallback(getFileSystemRootTask));
-    }
-
-    virtual bool handleEvent(Entry* entry) OVERRIDE
-    {
-        m_getFileSystemRootTask->gotEntry(entry);
-        return true;
-    }
-
-private:
-    GetEntryCallback(PassRefPtr<GetFileSystemRootTask> getFileSystemRootTask)
-        : m_getFileSystemRootTask(getFileSystemRootTask) { }
-    RefPtr<GetFileSystemRootTask> m_getFileSystemRootTask;
-};
-
 void GetFileSystemRootTask::start(ScriptExecutionContext* scriptExecutionContext)
 {
     FileSystemType type;
@@ -182,17 +180,18 @@
         return;
     }
 
-    RefPtr<EntryCallback> successCallback = GetFileSystemRootTask::GetEntryCallback::create(this);
-    RefPtr<ErrorCallback> errorCallback = GetFileSystemRootTask::ErrorCallback::create(this);
+    RefPtr<EntryCallback> successCallback = CallbackDispatcherFactory<EntryCallback>::create(this, &GetFileSystemRootTask::gotEntry);
+    RefPtr<ErrorCallback> errorCallback = CallbackDispatcherFactory<ErrorCallback>::create(this, &GetFileSystemRootTask::didHitError);
     OwnPtr<ResolveURICallbacks> fileSystemCallbacks = ResolveURICallbacks::create(successCallback, errorCallback, scriptExecutionContext, type, "/");
 
     LocalFileSystem::localFileSystem().readFileSystem(scriptExecutionContext, type, fileSystemCallbacks.release());
 }
 
-void GetFileSystemRootTask::gotEntry(Entry* entry)
+bool GetFileSystemRootTask::gotEntry(Entry* entry)
 {
     RefPtr<TypeBuilder::FileSystem::Entry> result(TypeBuilder::FileSystem::Entry::create().setUrl(entry->toURL()).setName("/").setIsDirectory(true));
     reportResult(static_cast<FileError::ErrorCode>(0), result);
+    return true;
 }
 
 class ReadDirectoryTask : public RefCounted<ReadDirectoryTask> {
@@ -211,12 +210,14 @@
     void start(ScriptExecutionContext*);
 
 private:
-    class ErrorCallback;
-    class GetEntryCallback;
-    class ReadDirectoryEntriesCallback;
+    bool didHitError(FileError* error)
+    {
+        reportResult(error->code(), 0);
+        return true;
+    }
 
-    void gotEntry(Entry*);
-    void didReadDirectoryEntries(EntryArray*);
+    bool gotEntry(Entry*);
+    bool didReadDirectoryEntries(EntryArray*);
 
     void reportResult(FileError::ErrorCode errorCode, PassRefPtr<Array<TypeBuilder::FileSystem::Entry> > entries)
     {
@@ -240,68 +241,6 @@
     RefPtr<DirectoryReader> m_directoryReader;
 };
 
-class ReadDirectoryTask::ErrorCallback : public WebCore::ErrorCallback {
-    WTF_MAKE_NONCOPYABLE(ErrorCallback);
-public:
-    static PassRefPtr<ReadDirectoryTask::ErrorCallback> create(PassRefPtr<ReadDirectoryTask> readDirectoryTask)
-    {
-        return adoptRef(new ReadDirectoryTask::ErrorCallback(readDirectoryTask));
-    }
-
-    virtual bool handleEvent(FileError* error) OVERRIDE
-    {
-        if (m_readDirectoryTask)
-            m_readDirectoryTask->reportResult(error->code(), 0);
-        return true;
-    }
-
-private:
-    ErrorCallback(PassRefPtr<ReadDirectoryTask> readDirectoryTask)
-        : m_readDirectoryTask(readDirectoryTask) { }
-    RefPtr<ReadDirectoryTask> m_readDirectoryTask;
-};
-
-class ReadDirectoryTask::GetEntryCallback : public EntryCallback {
-    WTF_MAKE_NONCOPYABLE(GetEntryCallback);
-public:
-    static PassRefPtr<ReadDirectoryTask::GetEntryCallback> create(PassRefPtr<ReadDirectoryTask> readDirectoryTask)
-    {
-        return adoptRef(new ReadDirectoryTask::GetEntryCallback(readDirectoryTask));
-    }
-
-    virtual bool handleEvent(Entry* fileSystem) OVERRIDE
-    {
-        m_readDirectoryTask->gotEntry(fileSystem);
-        return true;
-    }
-
-private:
-    GetEntryCallback(PassRefPtr<ReadDirectoryTask> readDirectoryTask)
-        : m_readDirectoryTask(readDirectoryTask) { }
-    RefPtr<ReadDirectoryTask> m_readDirectoryTask;
-};
-
-class ReadDirectoryTask::ReadDirectoryEntriesCallback : public EntriesCallback {
-    WTF_MAKE_NONCOPYABLE(ReadDirectoryEntriesCallback);
-public:
-    static PassRefPtr<ReadDirectoryTask::ReadDirectoryEntriesCallback> create(PassRefPtr<ReadDirectoryTask> readDirectoryTask)
-    {
-        return adoptRef(new ReadDirectoryTask::ReadDirectoryEntriesCallback(readDirectoryTask));
-    }
-
-    virtual bool handleEvent(EntryArray* entries) OVERRIDE
-    {
-        ASSERT(entries);
-        m_readDirectoryTask->didReadDirectoryEntries(entries);
-        return true;
-    }
-
-private:
-    ReadDirectoryEntriesCallback(PassRefPtr<ReadDirectoryTask> readDirectoryTask)
-        : m_readDirectoryTask(readDirectoryTask) { }
-    RefPtr<ReadDirectoryTask> m_readDirectoryTask;
-};
-
 void ReadDirectoryTask::start(ScriptExecutionContext* scriptExecutionContext)
 {
     ASSERT(scriptExecutionContext);
@@ -313,23 +252,24 @@
         return;
     }
 
-    RefPtr<EntryCallback> successCallback = ReadDirectoryTask::GetEntryCallback::create(this);
-    RefPtr<ErrorCallback> errorCallback = ReadDirectoryTask::ErrorCallback::create(this);
+    RefPtr<EntryCallback> successCallback = CallbackDispatcherFactory<EntryCallback>::create(this, &ReadDirectoryTask::gotEntry);
+    RefPtr<ErrorCallback> errorCallback = CallbackDispatcherFactory<ErrorCallback>::create(this, &ReadDirectoryTask::didHitError);
     OwnPtr<ResolveURICallbacks> fileSystemCallbacks = ResolveURICallbacks::create(successCallback, errorCallback, scriptExecutionContext, type, path);
 
     LocalFileSystem::localFileSystem().readFileSystem(scriptExecutionContext, type, fileSystemCallbacks.release());
 }
 
-void ReadDirectoryTask::gotEntry(Entry* entry)
+bool ReadDirectoryTask::gotEntry(Entry* entry)
 {
     if (!entry->isDirectory()) {
         reportResult(FileError::TYPE_MISMATCH_ERR, 0);
-        return;
+        return true;
     }
 
     m_directoryReader = static_cast<DirectoryEntry*>(entry)->createReader();
     m_entries = Array<TypeBuilder::FileSystem::Entry>::create();
     readDirectoryEntries();
+    return true;
 }
 
 void ReadDirectoryTask::readDirectoryEntries()
@@ -339,16 +279,16 @@
         return;
     }
 
-    RefPtr<EntriesCallback> successCallback = ReadDirectoryTask::ReadDirectoryEntriesCallback::create(this);
-    RefPtr<ErrorCallback> errorCallback = ReadDirectoryTask::ErrorCallback::create(this);
+    RefPtr<EntriesCallback> successCallback = CallbackDispatcherFactory<EntriesCallback>::create(this, &ReadDirectoryTask::didReadDirectoryEntries);
+    RefPtr<ErrorCallback> errorCallback = CallbackDispatcherFactory<ErrorCallback>::create(this, &ReadDirectoryTask::didHitError);
     m_directoryReader->readEntries(successCallback, errorCallback);
 }
 
-void ReadDirectoryTask::didReadDirectoryEntries(EntryArray* entries)
+bool ReadDirectoryTask::didReadDirectoryEntries(EntryArray* entries)
 {
     if (!entries->length()) {
         reportResult(static_cast<FileError::ErrorCode>(0), m_entries);
-        return;
+        return true;
     }
 
     for (unsigned i = 0; i < entries->length(); ++i) {
@@ -375,6 +315,7 @@
         m_entries->addItem(entryForFrontend);
     }
     readDirectoryEntries();
+    return true;
 }
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to