plugin_url_fetcher.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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
14namespace webkit_glue {
15class ResourceLoaderBridge;
16}
17
18namespace content {
19class MultipartResponseDelegate;
20class PluginStreamUrl;
21
22// Fetches URLS for a plugin using ResourceDispatcher.
23class 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
48  GURL first_party_for_cookies() { return first_party_for_cookies_; }
49  GURL referrer() { return referrer_; }
50  int origin_pid() { return origin_pid_; }
51  int render_frame_id() { return render_frame_id_; }
52  int render_view_id() { return render_view_id_; }
53  bool copy_stream_data() { return copy_stream_data_; }
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 net::RedirectInfo& redirect_info,
60                                  const ResourceResponseInfo& info) OVERRIDE;
61  virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
62  virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
63  virtual void OnReceivedData(const char* data,
64                              int data_length,
65                              int encoded_data_length) OVERRIDE;
66  virtual void OnCompletedRequest(int error_code,
67                                  bool was_ignored_by_handler,
68                                  bool stale_copy_in_cache,
69                                  const std::string& security_info,
70                                  const base::TimeTicks& completion_time,
71                                  int64 total_transfer_size) OVERRIDE;
72
73  // |plugin_stream_| becomes NULL after Cancel() to ensure no further calls
74  // |reach it.
75  PluginStreamUrl* plugin_stream_;
76  GURL url_;
77  GURL first_party_for_cookies_;
78  GURL referrer_;
79  bool notify_redirects_;
80  bool is_plugin_src_load_;
81  int origin_pid_;
82  int render_frame_id_;
83  int render_view_id_;
84  unsigned long resource_id_;
85  bool copy_stream_data_;
86  int64 data_offset_;
87  bool pending_failure_notification_;
88
89  scoped_ptr<MultipartResponseDelegate> multipart_delegate_;
90
91  scoped_ptr<webkit_glue::ResourceLoaderBridge> bridge_;
92
93  DISALLOW_COPY_AND_ASSIGN(PluginURLFetcher);
94};
95
96}  // namespace content
97
98#endif  // CONTENT_CHILD_NPAPI_URL_FETCHER_H_
99