Home | History | Annotate | Download | only in npapi
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_CHILD_NPAPI_URL_FETCHER_H_
      6 #define CONTENT_CHILD_NPAPI_URL_FETCHER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/memory/scoped_ptr.h"
     11 #include "content/public/child/request_peer.h"
     12 #include "url/gurl.h"
     13 
     14 namespace content {
     15 class MultipartResponseDelegate;
     16 class PluginStreamUrl;
     17 class ResourceLoaderBridge;
     18 
     19 // Fetches URLS for a plugin using ResourceDispatcher.
     20 class PluginURLFetcher : public RequestPeer {
     21  public:
     22   PluginURLFetcher(PluginStreamUrl* plugin_stream,
     23                    const GURL& url,
     24                    const GURL& first_party_for_cookies,
     25                    const std::string& method,
     26                    const char* buf,
     27                    unsigned int len,
     28                    const GURL& referrer,
     29                    const std::string& range,
     30                    bool notify_redirects,
     31                    bool is_plugin_src_load,
     32                    int origin_pid,
     33                    int render_frame_id,
     34                    int render_view_id,
     35                    unsigned long resource_id,
     36                    bool copy_stream_data);
     37   virtual ~PluginURLFetcher();
     38 
     39   // Cancels the current request.
     40   void Cancel();
     41 
     42   // Called with the plugin's reply to NPP_URLRedirectNotify.
     43   void URLRedirectResponse(bool allow);
     44 
     45   GURL first_party_for_cookies() { return first_party_for_cookies_; }
     46   GURL referrer() { return referrer_; }
     47   int origin_pid() { return origin_pid_; }
     48   int render_frame_id() { return render_frame_id_; }
     49   int render_view_id() { return render_view_id_; }
     50   bool copy_stream_data() { return copy_stream_data_; }
     51   bool pending_failure_notification() { return pending_failure_notification_; }
     52 
     53  private:
     54   // RequestPeer implementation:
     55   virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
     56   virtual bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
     57                                   const ResourceResponseInfo& info) OVERRIDE;
     58   virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
     59   virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
     60   virtual void OnReceivedData(const char* data,
     61                               int data_length,
     62                               int encoded_data_length) OVERRIDE;
     63   virtual void OnCompletedRequest(int error_code,
     64                                   bool was_ignored_by_handler,
     65                                   bool stale_copy_in_cache,
     66                                   const std::string& security_info,
     67                                   const base::TimeTicks& completion_time,
     68                                   int64 total_transfer_size) OVERRIDE;
     69 
     70   // |plugin_stream_| becomes NULL after Cancel() to ensure no further calls
     71   // |reach it.
     72   PluginStreamUrl* plugin_stream_;
     73   GURL url_;
     74   GURL first_party_for_cookies_;
     75   GURL referrer_;
     76   bool notify_redirects_;
     77   bool is_plugin_src_load_;
     78   int origin_pid_;
     79   int render_frame_id_;
     80   int render_view_id_;
     81   unsigned long resource_id_;
     82   bool copy_stream_data_;
     83   int64 data_offset_;
     84   bool pending_failure_notification_;
     85 
     86   scoped_ptr<MultipartResponseDelegate> multipart_delegate_;
     87 
     88   scoped_ptr<ResourceLoaderBridge> bridge_;
     89 
     90   DISALLOW_COPY_AND_ASSIGN(PluginURLFetcher);
     91 };
     92 
     93 }  // namespace content
     94 
     95 #endif  // CONTENT_CHILD_NPAPI_URL_FETCHER_H_
     96