| Index: net/base/file_stream_context.h
 | 
| diff --git a/net/base/file_stream_context.h b/net/base/file_stream_context.h
 | 
| index 4f01d9d21c8b60d0b4389ad067acf026553ce046..cb1b7aa02d5400cc5b3668150a666203898dcafc 100644
 | 
| --- a/net/base/file_stream_context.h
 | 
| +++ b/net/base/file_stream_context.h
 | 
| @@ -161,12 +161,19 @@ class FileStream::Context {
 | 
|                               DWORD bytes_read,
 | 
|                               DWORD error) override;
 | 
|  
 | 
| +  // Invokes the user callback.
 | 
| +  void InvokeUserCallback();
 | 
| +
 | 
| +  // Deletes an orphaned context.
 | 
| +  void DeleteOrphanedContext();
 | 
| +
 | 
|    // The ReadFile call on Windows can execute synchonously at times.
 | 
|    // http://support.microsoft.com/kb/156932. This ends up blocking the calling
 | 
|    // thread which is undesirable. To avoid this we execute the ReadFile call
 | 
|    // on a worker thread.
 | 
| -  // The |context| parameter is a weak pointer instance passed to the worker
 | 
| -  // pool.
 | 
| +  // The |context| parameter is a pointer to the current Context instance. It
 | 
| +  // is safe to pass this as is to the pool as the Context instance should
 | 
| +  // remain valid until the pending Read operation completes.
 | 
|    // The |file| parameter is the handle to the file being read.
 | 
|    // The |buf| parameter is the buffer where we want the ReadFile to read the
 | 
|    // data into.
 | 
| @@ -176,7 +183,7 @@ class FileStream::Context {
 | 
|    // The |origin_thread_loop| is a MessageLoopProxy instance used to post tasks
 | 
|    // back to the originating thread.
 | 
|    static void ReadAsync(
 | 
| -      const base::WeakPtr<FileStream::Context>& context,
 | 
| +      FileStream::Context* context,
 | 
|        HANDLE file,
 | 
|        scoped_refptr<net::IOBuffer> buf,
 | 
|        int buf_len,
 | 
| @@ -185,9 +192,13 @@ class FileStream::Context {
 | 
|  
 | 
|    // This callback executes on the main calling thread. It informs the caller
 | 
|    // about the result of the ReadFile call.
 | 
| +  // The |read_file_ret| parameter contains the return value of the ReadFile
 | 
| +  // call.
 | 
| +  // The |bytes_read| contains the number of bytes read from the file, if
 | 
| +  // ReadFile succeeds.
 | 
|    // The |os_error| parameter contains the value of the last error returned by
 | 
|    // the ReadFile API.
 | 
| -  void ReadAsyncResult(DWORD os_error);
 | 
| +  void ReadAsyncResult(BOOL read_file_ret, DWORD bytes_read, DWORD os_error);
 | 
|  
 | 
|  #elif defined(OS_POSIX)
 | 
|    // ReadFileImpl() is a simple wrapper around read() that handles EINTR
 | 
| @@ -209,8 +220,18 @@ class FileStream::Context {
 | 
|    base::MessageLoopForIO::IOContext io_context_;
 | 
|    CompletionCallback callback_;
 | 
|    scoped_refptr<IOBuffer> in_flight_buf_;
 | 
| -  // WeakPtrFactory for posting tasks back to |this|.
 | 
| -  base::WeakPtrFactory<Context> weak_ptr_factory_;
 | 
| +  // This flag is set to true when we receive a Read request which is queued to
 | 
| +  // the thread pool.
 | 
| +  bool async_read_initiated_;
 | 
| +  // This flag is set to true when we receive a notification ReadAsyncResult()
 | 
| +  // on the calling thread which indicates that the asynchronous Read
 | 
| +  // operation is complete.
 | 
| +  bool async_read_completed_;
 | 
| +  // This flag is set to true when we receive an IO completion notification for
 | 
| +  // an asynchonously initiated Read operaton. OnIOComplete().
 | 
| +  bool io_complete_for_read_received_;
 | 
| +  // Tracks the result of the IO completion operation. Set in OnIOComplete.
 | 
| +  int result_;
 | 
|  #endif
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(Context);
 | 
| 
 |