diff options
author | stoyan@chromium.org <stoyan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-01 19:48:36 +0000 |
---|---|---|
committer | stoyan@chromium.org <stoyan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-01 19:48:36 +0000 |
commit | 3eb07da6e868e49e28cb5a6d8a57037f2c45a20e (patch) | |
tree | b9e05e275e38b176b1473e0f9e66075706ca238b /chrome_frame/npapi_url_request.h | |
parent | 55750b57e30ecc9f3657d1ebd08853e232ba4e23 (diff) | |
download | chromium_src-3eb07da6e868e49e28cb5a6d8a57037f2c45a20e.zip chromium_src-3eb07da6e868e49e28cb5a6d8a57037f2c45a20e.tar.gz chromium_src-3eb07da6e868e49e28cb5a6d8a57037f2c45a20e.tar.bz2 |
TEST=new tests added.
Review URL: http://codereview.chromium.org/545093
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37728 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/npapi_url_request.h')
-rw-r--r-- | chrome_frame/npapi_url_request.h | 70 |
1 files changed, 44 insertions, 26 deletions
diff --git a/chrome_frame/npapi_url_request.h b/chrome_frame/npapi_url_request.h index 9151fcf..87e40a9 100644 --- a/chrome_frame/npapi_url_request.h +++ b/chrome_frame/npapi_url_request.h @@ -5,40 +5,58 @@ #ifndef CHROME_FRAME_NPAPI_URL_REQUEST_H_ #define CHROME_FRAME_NPAPI_URL_REQUEST_H_ +#include <map> + #include "base/platform_thread.h" #include "chrome_frame/plugin_url_request.h" #include "third_party/WebKit/WebCore/bridge/npapi.h" -class NPAPIUrlRequest : public PluginUrlRequest { +class NPAPIUrlRequest; +class NPAPIUrlRequestManager : public PluginUrlRequestManager, + public PluginUrlRequestDelegate { public: - explicit NPAPIUrlRequest(NPP instance); - ~NPAPIUrlRequest(); - - virtual bool Start(); - virtual void Stop(); - virtual bool Read(int bytes_to_read); - - // Called from NPAPI - bool OnStreamCreated(const char* mime_type, NPStream* stream); - void OnStreamDestroyed(NPReason reason); - int OnWriteReady(); - int OnWrite(void* buffer, int len); - - // Thread unsafe implementation of ref counting, since - // this will be called on the plugin UI thread only. - virtual unsigned long API_CALL AddRef(); - virtual unsigned long API_CALL Release(); + NPAPIUrlRequestManager(); + ~NPAPIUrlRequestManager(); + + void set_NPPInstance(NPP instance) { + instance_ = instance; + } + + // Notifications from the browser. We find the appropriate NPAPIUrlRequest + // and forward the call. + bool NewStream(NPMIMEType type, NPStream* stream, + NPBool seekable, uint16* stream_type); + int32 WriteReady(NPStream* stream); + int32 Write(NPStream* stream, int32 offset, int32 len, void* buffer); + NPError DestroyStream(NPStream* stream, NPReason reason); + void UrlNotify(const char* url, NPReason reason, void* notify_data); private: - unsigned long ref_count_; - NPP instance_; - NPStream* stream_; - size_t pending_read_size_; - URLRequestStatus status_; + // PluginUrlRequestManager implementation. Called from AutomationClient. + virtual bool IsThreadSafe(); + virtual void StartRequest(int request_id, + const IPC::AutomationURLRequest& request_info); + virtual void ReadRequest(int request_id, int bytes_to_read); + virtual void EndRequest(int request_id); + virtual void StopAll(); + + // Outstanding requests map. + typedef std::map<int, scoped_refptr<NPAPIUrlRequest> > RequestMap; + RequestMap request_map_; + + // PluginUrlRequestDelegate implementation. Forwards back to delegate. + virtual void OnResponseStarted(int request_id, const char* mime_type, + const char* headers, int size, + base::Time last_modified, const std::string& peristent_cookies, + const std::string& redirect_url, int redirect_status); + virtual void OnReadComplete(int request_id, const void* buffer, int len); + virtual void OnResponseEnd(int request_id, const URLRequestStatus& status); + + static inline NPAPIUrlRequest* RequestFromNotifyData(void* notify_data) { + return reinterpret_cast<NPAPIUrlRequest*>(notify_data); + } - PlatformThreadId thread_; - static int instance_count_; - DISALLOW_COPY_AND_ASSIGN(NPAPIUrlRequest); + NPP instance_; }; #endif // CHROME_FRAME_NPAPI_URL_REQUEST_H_ |