| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_FRAME_URLMON_URL_REQUEST_H_ | 5 #ifndef CHROME_FRAME_URLMON_URL_REQUEST_H_ |
| 6 #define CHROME_FRAME_URLMON_URL_REQUEST_H_ | 6 #define CHROME_FRAME_URLMON_URL_REQUEST_H_ |
| 7 | 7 |
| 8 #include <urlmon.h> | 8 #include <urlmon.h> |
| 9 #include <atlbase.h> | 9 #include <atlbase.h> |
| 10 #include <atlcom.h> | 10 #include <atlcom.h> |
| 11 #include <atlwin.h> |
| 11 | 12 |
| 12 #include <algorithm> | 13 #include <algorithm> |
| 13 | 14 |
| 14 #include "base/lock.h" | 15 #include "base/lock.h" |
| 15 #include "base/platform_thread.h" | 16 #include "base/platform_thread.h" |
| 16 #include "base/thread.h" | 17 #include "base/thread.h" |
| 17 #include "base/scoped_comptr_win.h" | 18 #include "base/scoped_comptr_win.h" |
| 18 #include "chrome_frame/plugin_url_request.h" | 19 #include "chrome_frame/plugin_url_request.h" |
| 19 #include "chrome_frame/chrome_frame_delegate.h" | 20 #include "chrome_frame/chrome_frame_delegate.h" |
| 20 | 21 |
| 21 #include "net/base/net_errors.h" | 22 #include "net/base/net_errors.h" |
| 22 #include "net/base/upload_data.h" | 23 #include "net/base/upload_data.h" |
| 23 | 24 |
| 24 class UrlmonUrlRequest | 25 class UrlmonUrlRequest |
| 25 : public CComObjectRootEx<CComSingleThreadModel>, | 26 : public CComObjectRootEx<CComSingleThreadModel>, |
| 26 public PluginUrlRequest, | 27 public PluginUrlRequest, |
| 27 public IServiceProviderImpl<UrlmonUrlRequest>, | 28 public IServiceProviderImpl<UrlmonUrlRequest>, |
| 28 public IBindStatusCallback, | 29 public IBindStatusCallback, |
| 29 public IHttpNegotiate, | 30 public IHttpNegotiate, |
| 30 public IAuthenticate, | 31 public IAuthenticate, |
| 31 public IHttpSecurity { | 32 public IHttpSecurity, |
| 33 public CWindowImpl<UrlmonUrlRequest>, |
| 34 public TaskMarshallerThroughWindowsMessages<UrlmonUrlRequest> { |
| 32 public: | 35 public: |
| 36 typedef TaskMarshallerThroughWindowsMessages<UrlmonUrlRequest> |
| 37 TaskMarshaller; |
| 38 |
| 33 UrlmonUrlRequest(); | 39 UrlmonUrlRequest(); |
| 34 ~UrlmonUrlRequest(); | 40 ~UrlmonUrlRequest(); |
| 35 | 41 |
| 36 BEGIN_COM_MAP(UrlmonUrlRequest) | 42 BEGIN_COM_MAP(UrlmonUrlRequest) |
| 37 COM_INTERFACE_ENTRY(IHttpNegotiate) | 43 COM_INTERFACE_ENTRY(IHttpNegotiate) |
| 38 COM_INTERFACE_ENTRY(IServiceProvider) | 44 COM_INTERFACE_ENTRY(IServiceProvider) |
| 39 COM_INTERFACE_ENTRY(IBindStatusCallback) | 45 COM_INTERFACE_ENTRY(IBindStatusCallback) |
| 40 COM_INTERFACE_ENTRY(IWindowForBindingUI) | 46 COM_INTERFACE_ENTRY(IWindowForBindingUI) |
| 41 COM_INTERFACE_ENTRY(IAuthenticate) | 47 COM_INTERFACE_ENTRY(IAuthenticate) |
| 42 COM_INTERFACE_ENTRY(IHttpSecurity) | 48 COM_INTERFACE_ENTRY(IHttpSecurity) |
| 43 END_COM_MAP() | 49 END_COM_MAP() |
| 44 | 50 |
| 45 BEGIN_SERVICE_MAP(UrlmonUrlRequest) | 51 BEGIN_SERVICE_MAP(UrlmonUrlRequest) |
| 46 SERVICE_ENTRY(IID_IHttpNegotiate); | 52 SERVICE_ENTRY(IID_IHttpNegotiate); |
| 47 END_SERVICE_MAP() | 53 END_SERVICE_MAP() |
| 48 | 54 |
| 55 BEGIN_MSG_MAP(UrlmonUrlRequest) |
| 56 CHAIN_MSG_MAP(TaskMarshaller) |
| 57 END_MSG_MAP() |
| 58 |
| 49 // PluginUrlRequest implementation | 59 // PluginUrlRequest implementation |
| 50 virtual bool Start(); | 60 virtual bool Start(); |
| 51 virtual void Stop(); | 61 virtual void Stop(); |
| 52 virtual bool Read(int bytes_to_read); | 62 virtual bool Read(int bytes_to_read); |
| 53 | 63 |
| 54 // IBindStatusCallback implementation | 64 // IBindStatusCallback implementation |
| 55 STDMETHOD(OnStartBinding)(DWORD reserved, IBinding* binding); | 65 STDMETHOD(OnStartBinding)(DWORD reserved, IBinding* binding); |
| 56 STDMETHOD(GetPriority)(LONG* priority); | 66 STDMETHOD(GetPriority)(LONG* priority); |
| 57 STDMETHOD(OnLowResource)(DWORD reserved); | 67 STDMETHOD(OnLowResource)(DWORD reserved); |
| 58 STDMETHOD(OnProgress)(ULONG progress, ULONG max_progress, | 68 STDMETHOD(OnProgress)(ULONG progress, ULONG max_progress, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 // Needed to support PostTask. | 102 // Needed to support PostTask. |
| 93 static bool ImplementsThreadSafeReferenceCounting() { | 103 static bool ImplementsThreadSafeReferenceCounting() { |
| 94 return true; | 104 return true; |
| 95 } | 105 } |
| 96 | 106 |
| 97 // URL requests are handled on this thread. | 107 // URL requests are handled on this thread. |
| 98 void set_worker_thread(base::Thread* worker_thread) { | 108 void set_worker_thread(base::Thread* worker_thread) { |
| 99 worker_thread_ = worker_thread; | 109 worker_thread_ = worker_thread; |
| 100 } | 110 } |
| 101 | 111 |
| 102 void set_task_marshaller(TaskMarshaller* task_marshaller) { | 112 virtual void OnFinalMessage(HWND window); |
| 103 task_marshaller_ = task_marshaller; | |
| 104 } | |
| 105 | 113 |
| 106 protected: | 114 protected: |
| 107 // The following functions issue and handle Urlmon requests on the dedicated | 115 // The following functions issue and handle Urlmon requests on the dedicated |
| 108 // Urlmon thread. | 116 // Urlmon thread. |
| 109 void StartAsync(); | 117 void StartAsync(); |
| 110 void StopAsync(); | 118 void StopAsync(); |
| 111 void ReadAsync(int bytes_to_read); | 119 void ReadAsync(int bytes_to_read); |
| 112 | 120 |
| 113 static const size_t kCopyChunkSize = 32 * 1024; | 121 static const size_t kCopyChunkSize = 32 * 1024; |
| 114 // URL requests are handled on this thread. | 122 // URL requests are handled on this thread. |
| 115 base::Thread* worker_thread_; | 123 base::Thread* worker_thread_; |
| 116 | 124 |
| 117 TaskMarshaller* task_marshaller_; | |
| 118 | |
| 119 // A fake stream class to make it easier to copy received data using | 125 // A fake stream class to make it easier to copy received data using |
| 120 // IStream::CopyTo instead of allocating temporary buffers and keeping | 126 // IStream::CopyTo instead of allocating temporary buffers and keeping |
| 121 // track of data copied so far. | 127 // track of data copied so far. |
| 122 class SendStream | 128 class SendStream |
| 123 : public CComObjectRoot, | 129 : public CComObjectRoot, |
| 124 public IStream { | 130 public IStream { |
| 125 public: | 131 public: |
| 126 SendStream() { | 132 SendStream() { |
| 127 } | 133 } |
| 128 | 134 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 URLRequestStatus status_; | 253 URLRequestStatus status_; |
| 248 | 254 |
| 249 PlatformThreadId thread_; | 255 PlatformThreadId thread_; |
| 250 static int instance_count_; | 256 static int instance_count_; |
| 251 HWND parent_window_; | 257 HWND parent_window_; |
| 252 DISALLOW_COPY_AND_ASSIGN(UrlmonUrlRequest); | 258 DISALLOW_COPY_AND_ASSIGN(UrlmonUrlRequest); |
| 253 }; | 259 }; |
| 254 | 260 |
| 255 #endif // CHROME_FRAME_URLMON_URL_REQUEST_H_ | 261 #endif // CHROME_FRAME_URLMON_URL_REQUEST_H_ |
| 256 | 262 |
| OLD | NEW |