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,
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                  const GURL& new_first_party_for_cookies,
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                  const ResourceResponseInfo& info) OVERRIDE;
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void OnReceivedData(const char* data,
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              int data_length,
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              int encoded_data_length) OVERRIDE;
67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void OnCompletedRequest(int error_code,
68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  bool was_ignored_by_handler,
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  bool stale_copy_in_cache,
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  const std::string& security_info,
71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  const base::TimeTicks& completion_time,
72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                  int64 total_transfer_size) OVERRIDE;
73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // |plugin_stream_| becomes NULL after Cancel() to ensure no further calls
75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // |reach it.
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  PluginStreamUrl* plugin_stream_;
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL url_;
7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL first_party_for_cookies_;
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string method_;
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  GURL referrer_;
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool notify_redirects_;
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool is_plugin_src_load_;
83e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int origin_pid_;
84e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int render_frame_id_;
85e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int render_view_id_;
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  unsigned long resource_id_;
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool copy_stream_data_;
88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  int64 data_offset_;
894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool pending_failure_notification_;
90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_ptr<webkit_glue::MultipartResponseDelegate> multipart_delegate_;
9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  scoped_ptr<webkit_glue::ResourceLoaderBridge> bridge_;
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginURLFetcher);
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace content
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CONTENT_CHILD_NPAPI_URL_FETCHER_H_
101