• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 webkit_glue {
15 class MultipartResponseDelegate;
16 class ResourceLoaderBridge;
17 }
18 
19 namespace content {
20 class PluginStreamUrl;
21 
22 // Fetches URLS for a plugin using ResourceDispatcher.
23 class PluginURLFetcher : public RequestPeer {
24  public:
25   PluginURLFetcher(PluginStreamUrl* plugin_stream,
26                    const GURL& url,
27                    const GURL& first_party_for_cookies,
28                    const std::string& method,
29                    const char* buf,
30                    unsigned int len,
31                    const GURL& referrer,
32                    const std::string& range,
33                    bool notify_redirects,
34                    bool is_plugin_src_load,
35                    int origin_pid,
36                    int render_frame_id,
37                    int render_view_id,
38                    unsigned long resource_id,
39                    bool copy_stream_data);
40   virtual ~PluginURLFetcher();
41 
42   // Cancels the current request.
43   void Cancel();
44 
45   // Called with the plugin's reply to NPP_URLRedirectNotify.
46   void URLRedirectResponse(bool allow);
47 
first_party_for_cookies()48   GURL first_party_for_cookies() { return first_party_for_cookies_; }
referrer()49   GURL referrer() { return referrer_; }
origin_pid()50   int origin_pid() { return origin_pid_; }
render_frame_id()51   int render_frame_id() { return render_frame_id_; }
render_view_id()52   int render_view_id() { return render_view_id_; }
copy_stream_data()53   bool copy_stream_data() { return copy_stream_data_; }
pending_failure_notification()54   bool pending_failure_notification() { return pending_failure_notification_; }
55 
56  private:
57   // RequestPeer implementation:
58   virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
59   virtual bool OnReceivedRedirect(const GURL& new_url,
60                                   const GURL& new_first_party_for_cookies,
61                                   const ResourceResponseInfo& info) OVERRIDE;
62   virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
63   virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
64   virtual void OnReceivedData(const char* data,
65                               int data_length,
66                               int encoded_data_length) OVERRIDE;
67   virtual void OnCompletedRequest(int error_code,
68                                   bool was_ignored_by_handler,
69                                   bool stale_copy_in_cache,
70                                   const std::string& security_info,
71                                   const base::TimeTicks& completion_time,
72                                   int64 total_transfer_size) OVERRIDE;
73 
74   // |plugin_stream_| becomes NULL after Cancel() to ensure no further calls
75   // |reach it.
76   PluginStreamUrl* plugin_stream_;
77   GURL url_;
78   GURL first_party_for_cookies_;
79   std::string method_;
80   GURL referrer_;
81   bool notify_redirects_;
82   bool is_plugin_src_load_;
83   int origin_pid_;
84   int render_frame_id_;
85   int render_view_id_;
86   unsigned long resource_id_;
87   bool copy_stream_data_;
88   int64 data_offset_;
89   bool pending_failure_notification_;
90 
91   scoped_ptr<webkit_glue::MultipartResponseDelegate> multipart_delegate_;
92 
93   scoped_ptr<webkit_glue::ResourceLoaderBridge> bridge_;
94 
95   DISALLOW_COPY_AND_ASSIGN(PluginURLFetcher);
96 };
97 
98 }  // namespace content
99 
100 #endif  // CONTENT_CHILD_NPAPI_URL_FETCHER_H_
101