// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_CHILD_NPAPI_URL_FETCHER_H_
#define CONTENT_CHILD_NPAPI_URL_FETCHER_H_
#include <string>
#include "base/memory/scoped_ptr.h"
#include "content/public/child/request_peer.h"
#include "url/gurl.h"
namespace content {
class MultipartResponseDelegate;
class PluginStreamUrl;
class ResourceLoaderBridge;
// Fetches URLS for a plugin using ResourceDispatcher.
class PluginURLFetcher : public RequestPeer {
public:
PluginURLFetcher(PluginStreamUrl* plugin_stream,
const GURL& url,
const GURL& first_party_for_cookies,
const std::string& method,
const char* buf,
unsigned int len,
const GURL& referrer,
const std::string& range,
bool notify_redirects,
bool is_plugin_src_load,
int origin_pid,
int render_frame_id,
int render_view_id,
unsigned long resource_id,
bool copy_stream_data);
virtual ~PluginURLFetcher();
// Cancels the current request.
void Cancel();
// Called with the plugin's reply to NPP_URLRedirectNotify.
void URLRedirectResponse(bool allow);
GURL first_party_for_cookies() { return first_party_for_cookies_; }
GURL referrer() { return referrer_; }
int origin_pid() { return origin_pid_; }
int render_frame_id() { return render_frame_id_; }
int render_view_id() { return render_view_id_; }
bool copy_stream_data() { return copy_stream_data_; }
bool pending_failure_notification() { return pending_failure_notification_; }
private:
// RequestPeer implementation:
virtual void OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
virtual bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
const ResourceResponseInfo& info) OVERRIDE;
virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE;
virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE;
virtual void OnReceivedData(const char* data,
int data_length,
int encoded_data_length) OVERRIDE;
virtual void OnCompletedRequest(int error_code,
bool was_ignored_by_handler,
bool stale_copy_in_cache,
const std::string& security_info,
const base::TimeTicks& completion_time,
int64 total_transfer_size) OVERRIDE;
// |plugin_stream_| becomes NULL after Cancel() to ensure no further calls
// |reach it.
PluginStreamUrl* plugin_stream_;
GURL url_;
GURL first_party_for_cookies_;
GURL referrer_;
bool notify_redirects_;
bool is_plugin_src_load_;
int origin_pid_;
int render_frame_id_;
int render_view_id_;
unsigned long resource_id_;
bool copy_stream_data_;
int64 data_offset_;
bool pending_failure_notification_;
scoped_ptr<MultipartResponseDelegate> multipart_delegate_;
scoped_ptr<ResourceLoaderBridge> bridge_;
DISALLOW_COPY_AND_ASSIGN(PluginURLFetcher);
};
} // namespace content
#endif // CONTENT_CHILD_NPAPI_URL_FETCHER_H_