Changeset 72200 in webkit


Ignore:
Timestamp:
Nov 17, 2010 5:30:20 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2010-11-17 Eric Uhrhane <ericu@chromium.org>

Reviewed by David Levin.

[Chromium] implementation of async FileWriter for workers
https://bugs.webkit.org/show_bug.cgi?id=47681

Tests are in a separate changelist.

  • platform/CrossThreadCopier.h: Changed CrossThreadCopier[Base] to support PassRefPtrs

2010-11-17 Eric Uhrhane <ericu@chromium.org>

Reviewed by David Levin.

[Chromium] implementation of async FileWriter for workers
https://bugs.webkit.org/show_bug.cgi?id=47681

Tests are in a separate changelist.

Added new files.

  • WebKit.gyp:
  • src/WorkerAsyncFileSystemChromium.cpp: Added WorkerAsyncFileWriterChromium construction.
  • src/WorkerAsyncFileWriterChromium.cpp: Added.
  • src/WorkerAsyncFileWriterChromium.h: Added.

This class bridges between the context and main threads for the WorkerAsyncFileWriterChromium.

  • src/WorkerFileWriterCallbacksBridge.cpp: Added.
  • src/WorkerFileWriterCallbacksBridge.h: Added.
Location:
trunk
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r72191 r72200  
     12010-11-17  Eric Uhrhane  <ericu@chromium.org>
     2
     3        Reviewed by David Levin.
     4
     5        [Chromium] implementation of async FileWriter for workers
     6        https://bugs.webkit.org/show_bug.cgi?id=47681
     7
     8        Tests are in a separate changelist.
     9
     10        * platform/CrossThreadCopier.h: Changed CrossThreadCopier[Base] to support PassRefPtrs
     11
    1122010-11-17  Alejandro G. Castro  <alex@igalia.com>
    213
  • trunk/WebCore/platform/CrossThreadCopier.h

    r65021 r72200  
    7272    // Custom copy methods.
    7373    template<typename T> struct CrossThreadCopierBase<false, true, T> {
    74         typedef typename WTF::RemoveTemplate<T, RefPtr>::Type RefCountedType;
     74        typedef typename WTF::RemoveTemplate<T, RefPtr>::Type TypeWithoutRefPtr;
     75        typedef typename WTF::RemoveTemplate<TypeWithoutRefPtr, PassRefPtr>::Type RefCountedType;
    7576        typedef PassRefPtr<RefCountedType> Type;
    7677        static Type copy(const T& refPtr)
     
    114115
    115116    template<typename T> struct CrossThreadCopier : public CrossThreadCopierBase<WTF::IsConvertibleToInteger<T>::value,
    116                                                                                  WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, RefPtr>::Type, ThreadSafeShared>::value,
     117                                                                                 WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, RefPtr>::Type, ThreadSafeShared>::value
     118                                                                                     || WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, PassRefPtr>::Type, ThreadSafeShared>::value,
    117119                                                                                 T> {
    118120    };
  • trunk/WebKit/chromium/ChangeLog

    r72196 r72200  
     12010-11-17  Eric Uhrhane  <ericu@chromium.org>
     2
     3        Reviewed by David Levin.
     4
     5        [Chromium] implementation of async FileWriter for workers
     6        https://bugs.webkit.org/show_bug.cgi?id=47681
     7
     8        Tests are in a separate changelist.
     9
     10        Added new files.
     11        * WebKit.gyp:
     12
     13        * src/WorkerAsyncFileSystemChromium.cpp: Added WorkerAsyncFileWriterChromium construction.
     14        * src/WorkerAsyncFileWriterChromium.cpp: Added.
     15        * src/WorkerAsyncFileWriterChromium.h: Added.
     16
     17        This class bridges between the context and main threads for the WorkerAsyncFileWriterChromium.
     18        * src/WorkerFileWriterCallbacksBridge.cpp: Added.
     19        * src/WorkerFileWriterCallbacksBridge.h: Added.
     20
    1212010-11-17  John Mellor  <johnme@chromium.org>
    222
  • trunk/WebKit/chromium/WebKit.gyp

    r72112 r72200  
    548548                'src/WorkerAsyncFileSystemChromium.cpp',
    549549                'src/WorkerAsyncFileSystemChromium.h',
     550                'src/WorkerAsyncFileWriterChromium.cpp',
     551                'src/WorkerAsyncFileWriterChromium.h',
    550552                'src/WorkerFileSystemCallbacksBridge.cpp',
    551553                'src/WorkerFileSystemCallbacksBridge.h',
     554                'src/WorkerFileWriterCallbacksBridge.cpp',
     555                'src/WorkerFileWriterCallbacksBridge.h',
    552556                'src/WrappedResourceRequest.h',
    553557                'src/WrappedResourceResponse.h',
  • trunk/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp

    r69485 r72200  
    3535
    3636#include "AsyncFileSystemCallbacks.h"
     37#include "FileMetadata.h"
    3738#include "FileSystem.h"
    3839#include "NotImplemented.h"
    3940#include "WebFileSystem.h"
    4041#include "WebFileSystemCallbacksImpl.h"
     42#include "WebFileWriter.h"
    4143#include "WebKit.h"
    4244#include "WebKitClient.h"
    4345#include "WebWorkerBase.h"
     46#include "WorkerAsyncFileWriterChromium.h"
    4447#include "WorkerContext.h"
    4548#include "WorkerFileSystemCallbacksBridge.h"
     
    135138}
    136139
    137 void WorkerAsyncFileSystemChromium::createWriter(AsyncFileWriterClient*, const String&, PassOwnPtr<AsyncFileSystemCallbacks>)
    138 {
    139     notImplemented();
     140class WorkerFileWriterHelperCallbacks : public AsyncFileSystemCallbacks {
     141public:
     142    static PassOwnPtr<WorkerFileWriterHelperCallbacks> create(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks, WorkerContext* workerContext)
     143    {
     144        return adoptPtr(new WorkerFileWriterHelperCallbacks(client, path, webFileSystem, callbacks, workerContext));
     145    }
     146
     147    virtual void didSucceed()
     148    {
     149        ASSERT_NOT_REACHED();
     150    }
     151
     152    virtual void didReadMetadata(const FileMetadata& metadata)
     153    {
     154        ASSERT(m_callbacks);
     155        if (metadata.type != FileMetadata::TypeFile || metadata.length < 0)
     156            m_callbacks->didFail(WebKit::WebFileErrorInvalidState);
     157        else {
     158            OwnPtr<WorkerAsyncFileWriterChromium> asyncFileWriterChromium = WorkerAsyncFileWriterChromium::create(m_webFileSystem, m_path, m_workerContext, m_client, WorkerAsyncFileWriterChromium::Asynchronous);
     159            m_callbacks->didCreateFileWriter(asyncFileWriterChromium.release(), metadata.length);
     160        }
     161    }
     162
     163    virtual void didReadDirectoryEntry(const String& name, bool isDirectory)
     164    {
     165        ASSERT_NOT_REACHED();
     166    }
     167
     168    virtual void didReadDirectoryEntries(bool hasMore)
     169    {
     170        ASSERT_NOT_REACHED();
     171    }
     172
     173    virtual void didOpenFileSystem(const String&, PassOwnPtr<AsyncFileSystem>)
     174    {
     175        ASSERT_NOT_REACHED();
     176    }
     177
     178    // Called when an AsyncFileWrter has been created successfully.
     179    virtual void didCreateFileWriter(PassOwnPtr<AsyncFileWriter>, long long)
     180    {
     181        ASSERT_NOT_REACHED();
     182    }
     183
     184    virtual void didFail(int code)
     185    {
     186        ASSERT(m_callbacks);
     187        m_callbacks->didFail(code);
     188    }
     189
     190private:
     191    WorkerFileWriterHelperCallbacks(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks, WorkerContext* workerContext)
     192        : m_client(client)
     193        , m_path(path)
     194        , m_webFileSystem(webFileSystem)
     195        , m_callbacks(callbacks)
     196        , m_workerContext(workerContext)
     197    {
     198    }
     199
     200    AsyncFileWriterClient* m_client;
     201    String m_path;
     202    WebKit::WebFileSystem* m_webFileSystem;
     203    OwnPtr<WebCore::AsyncFileSystemCallbacks> m_callbacks;
     204    WorkerContext* m_workerContext;
     205};
     206
     207void WorkerAsyncFileSystemChromium::createWriter(AsyncFileWriterClient* client, const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
     208{
     209    createWorkerFileSystemCallbacksBridge(WorkerFileWriterHelperCallbacks::create(client, path, m_webFileSystem, callbacks, m_workerContext))->postReadMetadataToMainThread(m_webFileSystem, path, m_modeForCurrentOperation);
    140210}
    141211
Note: See TracChangeset for help on using the changeset viewer.