plugin_url_fetcher.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CONTENT_CHILD_NPAPI_URL_FETCHER_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CONTENT_CHILD_NPAPI_URL_FETCHER_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <string>
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/public/child/request_peer.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "url/gurl.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace webkit_glue {
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class MultipartResponseDelegate;
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ResourceLoaderBridge;
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace content {
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PluginStreamUrl;
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Fetches URLS for a plugin using ResourceDispatcher.
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass PluginURLFetcher : public RequestPeer {
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  PluginURLFetcher(PluginStreamUrl* plugin_stream,
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   const GURL& url,
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   const GURL& first_party_for_cookies,
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   const std::string& method,
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                   const char* buf,
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                   unsigned int len,
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   const GURL& referrer,
32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                   const std::string& range,
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   bool notify_redirects,
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   bool is_plugin_src_load,
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   int origin_pid,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   int render_frame_id,
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                   int render_view_id,
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   unsigned long resource_id,
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   bool copy_stream_data);
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~PluginURLFetcher();
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Cancels the current request.
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void Cancel();
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Called with the plugin's reply to NPP_URLRedirectNotify.
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void URLRedirectResponse(bool allow);
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  GURL first_party_for_cookies() { return first_party_for_cookies_; }
49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  GURL referrer() { return referrer_; }
50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int origin_pid() { return origin_pid_; }
51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int render_frame_id() { return render_frame_id_; }
52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int render_view_id() { return render_view_id_; }
53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  bool copy_stream_data() { return copy_stream_data_; }
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool pending_failure_notification() { return pending_failure_notification_; }
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // RequestPeer implementation:
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool OnReceivedRedirect(const GURL& new_url,
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                  const webkit_glue::ResourceResponseInfo& info,
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                  bool* has_new_first_party_for_cookies,
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                  GURL* new_first_party_for_cookies) OVERRIDE;
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnReceivedResponse(
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const webkit_glue::ResourceResponseInfo& info) OVERRIDE;
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnReceivedData(const char* data,
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              int data_length,
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              int encoded_data_length) OVERRIDE;
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void OnCompletedRequest(int error_code,
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  bool was_ignored_by_handler,
71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  bool stale_copy_in_cache,
72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  const std::string& security_info,
73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  const base::TimeTicks& completion_time,
74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  int64 total_transfer_size) OVERRIDE;
75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // |plugin_stream_| becomes NULL after Cancel() to ensure no further calls
77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // |reach it.
7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  PluginStreamUrl* plugin_stream_;
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL url_;
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL first_party_for_cookies_;
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string method_;
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL referrer_;
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool notify_redirects_;
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool is_plugin_src_load_;
85e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int origin_pid_;
86e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int render_frame_id_;
87e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int render_view_id_;
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  unsigned long resource_id_;
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool copy_stream_data_;
90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  int64 data_offset_;
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool pending_failure_notification_;
92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_ptr<webkit_glue::MultipartResponseDelegate> multipart_delegate_;
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  scoped_ptr<webkit_glue::ResourceLoaderBridge> bridge_;
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginURLFetcher);
9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace content
10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CONTENT_CHILD_NPAPI_URL_FETCHER_H_
103