| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 #include "KURL.h" | 36 #include "KURL.h" |
| 37 #include "WebFileError.h" | 37 #include "WebFileError.h" |
| 38 #include "WebFileWriterClient.h" | 38 #include "WebFileWriterClient.h" |
| 39 #include "WorkerContext.h" | 39 #include "WorkerContext.h" |
| 40 #include <wtf/PassOwnPtr.h> | 40 #include <wtf/PassOwnPtr.h> |
| 41 #include <wtf/PassRefPtr.h> | 41 #include <wtf/PassRefPtr.h> |
| 42 #include <wtf/ThreadSafeRefCounted.h> | 42 #include <wtf/ThreadSafeRefCounted.h> |
| 43 | 43 |
| 44 namespace WebCore { | 44 namespace WebCore { |
| 45 class AsyncFileWriterClient; | 45 class AsyncFileWriterClient; |
| 46 class BlobDataHandle; |
| 46 class KURL; | 47 class KURL; |
| 47 class WorkerLoaderProxy; | 48 class WorkerLoaderProxy; |
| 48 } | 49 } |
| 49 | 50 |
| 50 namespace WTF { | 51 namespace WTF { |
| 51 class String; | 52 class String; |
| 52 } | 53 } |
| 53 using WTF::String; | 54 using WTF::String; |
| 54 | 55 |
| 55 namespace WebKit { | 56 namespace WebKit { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 88 |
| 88 // WorkerContext::Observer method. | 89 // WorkerContext::Observer method. |
| 89 virtual void notifyStop(); | 90 virtual void notifyStop(); |
| 90 | 91 |
| 91 static PassRefPtr<WorkerFileWriterCallbacksBridge> create(const WebCore::KUR
L& path, WebCore::WorkerLoaderProxy* proxy, WebCore::ScriptExecutionContext* wor
kerContext, WebCore::AsyncFileWriterClient* client) | 92 static PassRefPtr<WorkerFileWriterCallbacksBridge> create(const WebCore::KUR
L& path, WebCore::WorkerLoaderProxy* proxy, WebCore::ScriptExecutionContext* wor
kerContext, WebCore::AsyncFileWriterClient* client) |
| 92 { | 93 { |
| 93 return adoptRef(new WorkerFileWriterCallbacksBridge(path, proxy, workerC
ontext, client)); | 94 return adoptRef(new WorkerFileWriterCallbacksBridge(path, proxy, workerC
ontext, client)); |
| 94 } | 95 } |
| 95 | 96 |
| 96 // Methods that create an instance and post an initial request task to the m
ain thread. They must be called on the worker thread. | 97 // Methods that create an instance and post an initial request task to the m
ain thread. They must be called on the worker thread. |
| 97 void postWriteToMainThread(long long position, const WebCore::KURL& data); | 98 void postWriteToMainThread(long long position, PassRefPtr<WebCore::BlobDataH
andle> blobDataHandle); |
| 98 void postTruncateToMainThread(long long length); | 99 void postTruncateToMainThread(long long length); |
| 99 void postAbortToMainThread(); | 100 void postAbortToMainThread(); |
| 100 | 101 |
| 101 // The owning WorkerAsyncFileWriterChromium should call this method before d
ropping its last reference to the bridge, on the context thread. | 102 // The owning WorkerAsyncFileWriterChromium should call this method before d
ropping its last reference to the bridge, on the context thread. |
| 102 // The actual deletion of the WorkerFileWriterCallbacksBridge may happen on
either the main or context thread, depending on where the last reference goes aw
ay; that's safe as long as this is called first. | 103 // The actual deletion of the WorkerFileWriterCallbacksBridge may happen on
either the main or context thread, depending on where the last reference goes aw
ay; that's safe as long as this is called first. |
| 103 void postShutdownToMainThread(PassRefPtr<WorkerFileWriterCallbacksBridge>); | 104 void postShutdownToMainThread(PassRefPtr<WorkerFileWriterCallbacksBridge>); |
| 104 | 105 |
| 105 // Callback methods that are called on the main thread. | 106 // Callback methods that are called on the main thread. |
| 106 // These are the implementation of WebKit::WebFileWriterClient. | 107 // These are the implementation of WebKit::WebFileWriterClient. |
| 107 void didWrite(long long bytes, bool complete); | 108 void didWrite(long long bytes, bool complete); |
| 108 void didFail(WebFileError); | 109 void didFail(WebFileError); |
| 109 void didTruncate(); | 110 void didTruncate(); |
| 110 | 111 |
| 111 // Call this on the context thread to wait for the current operation to comp
lete. | 112 // Call this on the context thread to wait for the current operation to comp
lete. |
| 112 bool waitForOperationToComplete(); | 113 bool waitForOperationToComplete(); |
| 113 | 114 |
| 114 private: | 115 private: |
| 115 WorkerFileWriterCallbacksBridge(const WebCore::KURL& path, WebCore::WorkerLo
aderProxy*, WebCore::ScriptExecutionContext*, WebCore::AsyncFileWriterClient*); | 116 WorkerFileWriterCallbacksBridge(const WebCore::KURL& path, WebCore::WorkerLo
aderProxy*, WebCore::ScriptExecutionContext*, WebCore::AsyncFileWriterClient*); |
| 116 | 117 |
| 117 void postInitToMainThread(const WebCore::KURL& path); | 118 void postInitToMainThread(const WebCore::KURL& path); |
| 118 | 119 |
| 119 // Methods that are to be called on the main thread. | 120 // Methods that are to be called on the main thread. |
| 120 static void writeOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<W
orkerFileWriterCallbacksBridge>, long long position, const WebCore::KURL& data); | 121 static void writeOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<W
orkerFileWriterCallbacksBridge>, long long position, PassRefPtr<WebCore::BlobDat
aHandle> blobDataHandle); |
| 121 static void truncateOnMainThread(WebCore::ScriptExecutionContext*, PassRefPt
r<WorkerFileWriterCallbacksBridge>, long long length); | 122 static void truncateOnMainThread(WebCore::ScriptExecutionContext*, PassRefPt
r<WorkerFileWriterCallbacksBridge>, long long length); |
| 122 static void abortOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<W
orkerFileWriterCallbacksBridge>); | 123 static void abortOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<W
orkerFileWriterCallbacksBridge>); |
| 123 static void initOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<Wo
rkerFileWriterCallbacksBridge>, const WebCore::KURL& path); | 124 static void initOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<Wo
rkerFileWriterCallbacksBridge>, const WebCore::KURL& path); |
| 124 static void shutdownOnMainThread(WebCore::ScriptExecutionContext*, PassRefPt
r<WorkerFileWriterCallbacksBridge>); | 125 static void shutdownOnMainThread(WebCore::ScriptExecutionContext*, PassRefPt
r<WorkerFileWriterCallbacksBridge>); |
| 125 | 126 |
| 126 // Methods that dispatch to AsyncFileWriterClient on the worker threads. | 127 // Methods that dispatch to AsyncFileWriterClient on the worker threads. |
| 127 static void didWriteOnWorkerThread(WebCore::ScriptExecutionContext*, PassRef
Ptr<WorkerFileWriterCallbacksBridge>, long long length, bool complete); | 128 static void didWriteOnWorkerThread(WebCore::ScriptExecutionContext*, PassRef
Ptr<WorkerFileWriterCallbacksBridge>, long long length, bool complete); |
| 128 static void didFailOnWorkerThread(WebCore::ScriptExecutionContext*, PassRefP
tr<WorkerFileWriterCallbacksBridge>, WebFileError); | 129 static void didFailOnWorkerThread(WebCore::ScriptExecutionContext*, PassRefP
tr<WorkerFileWriterCallbacksBridge>, WebFileError); |
| 129 static void didTruncateOnWorkerThread(WebCore::ScriptExecutionContext*, Pass
RefPtr<WorkerFileWriterCallbacksBridge>); | 130 static void didTruncateOnWorkerThread(WebCore::ScriptExecutionContext*, Pass
RefPtr<WorkerFileWriterCallbacksBridge>); |
| 130 | 131 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 158 | 159 |
| 159 // Used by postTaskForModeToWorkerContext and runInMode. | 160 // Used by postTaskForModeToWorkerContext and runInMode. |
| 160 String m_mode; | 161 String m_mode; |
| 161 }; | 162 }; |
| 162 | 163 |
| 163 } // namespace WebCore | 164 } // namespace WebCore |
| 164 | 165 |
| 165 #endif | 166 #endif |
| 166 | 167 |
| 167 #endif // WorkerFileWriterCallbacksBridge_h | 168 #endif // WorkerFileWriterCallbacksBridge_h |
| OLD | NEW |