summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-30 22:30:42 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-30 22:30:42 +0000
commit7335ab0c8b9afb8a3c702d97925c1a0278a45ab7 (patch)
tree164f7ba73256cd36ab67ed1f02992eb740428e87
parent07e666801f64a26dd1c68ec3dc64fdd0f16603f7 (diff)
downloadchromium_src-7335ab0c8b9afb8a3c702d97925c1a0278a45ab7.zip
chromium_src-7335ab0c8b9afb8a3c702d97925c1a0278a45ab7.tar.gz
chromium_src-7335ab0c8b9afb8a3c702d97925c1a0278a45ab7.tar.bz2
Stop using ScopedAllowIO in content::ResourceDispatcherHostImpl
Summary: UploadData::GetContentLengthSync() call is removed from ResourceDispatcherHostImpl. The return type of net::URLRequest::GetUploadProgress() is changed from uint64 to net::UploadProgress. A new member 'upload_size' is added to AutomationURLResponse for Chrome Frame. content::ResourceDispatcherHostImpl has been using UploadData::GetContentLengthSync() which needs ScopedAllowIO. To stop using ScopedAllowIO, there were three options considered. 1. Use asynchronous version UploadData::GetContentLength() which does not need ScopedAllowIO. pros: Changes would be minimal and straight-forward. cons: GetContentLength() is also called in UploadDataStream::Init(). If we start reusing the value, there is no need to call the same method here. 2. Communicate the upload data size to ResourceDispatcherHost by adding an event OnRequestBodyInitialized() to URLRequest::Delegate. pros: No duplicated GetContentLength() call here and in UploadDataStream::Init(). cons: Complicated interface. 3. Return upload data size as well as upload progress from URLRequest::GetUploadProgress(). pros: No duplicated GetContentLength() call here and in UploadDataStream::Init(). Simple interface. Making sense because upload progress and upload size are almost always used together (see ResourceHandler::OnUploadProgress and DOM ProgressEvent as examples). cons: Polling upload data size may imply that the size may change. We've decided to go with #3. The return type of net::URLRequest::GetUploadProgress() is changed from uint64 to net::UploadProgress, and URLRequest::GetUploadProgress() is used to get the upload size from ResourceDispatcherHostImpl instead of UploadData::GetContentLengthSync(). In Chrome Frame, URLRequestAutomationJob is used instead of URLRequestHttpJob and UploadDataStream is not initialized in the browser process. This is problematic since we cannot know the size of upload data without UploadDataStream. To deal with this, a new member 'upload_size' is added to AutomationURLResponse and the value is used to implement URLRequestAutomationJob::GetUploadProgress(). BUG=112607 TEST=Can upload files Review URL: https://chromiumcodereview.appspot.com/10825073 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154286 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/automation/url_request_automation_job.cc12
-rw-r--r--chrome/browser/automation/url_request_automation_job.h5
-rw-r--r--chrome/common/automation_messages.h1
-rw-r--r--chrome_frame/chrome_frame_automation.cc8
-rw-r--r--chrome_frame/chrome_frame_automation.h9
-rw-r--r--chrome_frame/plugin_url_request.h14
-rw-r--r--chrome_frame/test/automation_client_mock.h2
-rw-r--r--chrome_frame/test/url_request_test.cc18
-rw-r--r--chrome_frame/urlmon_url_request.cc27
-rw-r--r--chrome_frame/urlmon_url_request.h11
-rw-r--r--content/browser/renderer_host/resource_dispatcher_host_impl.cc16
-rw-r--r--content/browser/renderer_host/resource_loader.cc19
-rw-r--r--content/browser/renderer_host/resource_request_info_impl.cc7
-rw-r--r--content/browser/renderer_host/resource_request_info_impl.h5
-rw-r--r--content/public/browser/resource_request_info.h4
-rw-r--r--net/url_request/url_fetcher_core.cc2
-rw-r--r--net/url_request/url_request.cc10
-rw-r--r--net/url_request/url_request.h5
-rw-r--r--net/url_request/url_request_ftp_job.cc4
-rw-r--r--net/url_request/url_request_ftp_job.h2
-rw-r--r--net/url_request/url_request_http_job.cc5
-rw-r--r--net/url_request/url_request_http_job.h2
-rw-r--r--net/url_request/url_request_job.cc4
-rw-r--r--net/url_request/url_request_job.h3
-rw-r--r--webkit/tools/test_shell/simple_resource_loader_bridge.cc19
25 files changed, 99 insertions, 115 deletions
diff --git a/chrome/browser/automation/url_request_automation_job.cc b/chrome/browser/automation/url_request_automation_job.cc
index f7cd433..a5c790d 100644
--- a/chrome/browser/automation/url_request_automation_job.cc
+++ b/chrome/browser/automation/url_request_automation_job.cc
@@ -65,6 +65,7 @@ URLRequestAutomationJob::URLRequestAutomationJob(
redirect_status_(0),
request_id_(request_id),
is_pending_(is_pending),
+ upload_size_(0),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
DVLOG(1) << "URLRequestAutomationJob create. Count: " << ++instance_count_;
DCHECK(message_filter_ != NULL);
@@ -232,17 +233,15 @@ bool URLRequestAutomationJob::IsRedirectResponse(
return true;
}
-uint64 URLRequestAutomationJob::GetUploadProgress() const {
+net::UploadProgress URLRequestAutomationJob::GetUploadProgress() const {
+ uint64 progress = 0;
if (request_ && request_->status().is_success()) {
// We don't support incremental progress notifications in ChromeFrame. When
// we receive a response for the POST request from Chromeframe, it means
// that the upload is fully complete.
- const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_);
- if (info) {
- return info->GetUploadSize();
- }
+ progress = upload_size_;
}
- return 0;
+ return net::UploadProgress(progress, upload_size_);
}
net::HostPortPair URLRequestAutomationJob::GetSocketAddress() const {
@@ -305,6 +304,7 @@ void URLRequestAutomationJob::OnRequestStarted(
response.headers.size()));
}
socket_address_ = response.socket_address;
+ upload_size_ = response.upload_size;
NotifyHeadersComplete();
}
diff --git a/chrome/browser/automation/url_request_automation_job.h b/chrome/browser/automation/url_request_automation_job.h
index ec7cce7..9c12f59 100644
--- a/chrome/browser/automation/url_request_automation_job.h
+++ b/chrome/browser/automation/url_request_automation_job.h
@@ -48,7 +48,7 @@ class URLRequestAutomationJob : public net::URLRequestJob {
virtual void GetResponseInfo(net::HttpResponseInfo* info);
virtual int GetResponseCode() const;
virtual bool IsRedirectResponse(GURL* location, int* http_status_code);
- virtual uint64 GetUploadProgress() const;
+ virtual net::UploadProgress GetUploadProgress() const;
virtual net::HostPortPair GetSocketAddress() const;
// Peek and process automation messages for URL requests.
@@ -130,6 +130,9 @@ class URLRequestAutomationJob : public net::URLRequestJob {
// Contains the ip address and port of the destination host.
net::HostPortPair socket_address_;
+ // Size of the upload data appended to the request.
+ uint64 upload_size_;
+
base::WeakPtrFactory<URLRequestAutomationJob> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(URLRequestAutomationJob);
diff --git a/chrome/common/automation_messages.h b/chrome/common/automation_messages.h
index 1d880249..1d86150 100644
--- a/chrome/common/automation_messages.h
+++ b/chrome/common/automation_messages.h
@@ -51,6 +51,7 @@ IPC_STRUCT_BEGIN(AutomationURLResponse)
IPC_STRUCT_MEMBER(std::string, redirect_url)
IPC_STRUCT_MEMBER(int, redirect_status)
IPC_STRUCT_MEMBER(net::HostPortPair, socket_address)
+ IPC_STRUCT_MEMBER(uint64, upload_size)
IPC_STRUCT_END()
IPC_STRUCT_BEGIN(ExternalTabSettings)
diff --git a/chrome_frame/chrome_frame_automation.cc b/chrome_frame/chrome_frame_automation.cc
index 12f14cf..c4fe26a 100644
--- a/chrome_frame/chrome_frame_automation.cc
+++ b/chrome_frame/chrome_frame_automation.cc
@@ -1305,10 +1305,11 @@ void ChromeFrameAutomationClient::OnUnload(bool* should_unload) {
// PluginUrlRequestDelegate implementation.
// Forward network related responses to Chrome.
-void ChromeFrameAutomationClient::OnResponseStarted(int request_id,
- const char* mime_type, const char* headers, int size,
+void ChromeFrameAutomationClient::OnResponseStarted(
+ int request_id, const char* mime_type, const char* headers, int size,
base::Time last_modified, const std::string& redirect_url,
- int redirect_status, const net::HostPortPair& socket_address) {
+ int redirect_status, const net::HostPortPair& socket_address,
+ uint64 upload_size) {
AutomationURLResponse response;
response.mime_type = mime_type;
if (headers)
@@ -1318,6 +1319,7 @@ void ChromeFrameAutomationClient::OnResponseStarted(int request_id,
response.redirect_url = redirect_url;
response.redirect_status = redirect_status;
response.socket_address = socket_address;
+ response.upload_size = upload_size;
automation_server_->Send(new AutomationMsg_RequestStarted(
tab_->handle(), request_id, response));
diff --git a/chrome_frame/chrome_frame_automation.h b/chrome_frame/chrome_frame_automation.h
index 0c778b7..8d591fc 100644
--- a/chrome_frame/chrome_frame_automation.h
+++ b/chrome_frame/chrome_frame_automation.h
@@ -457,10 +457,11 @@ class ChromeFrameAutomationClient
// PluginUrlRequestDelegate implementation. Simply adds tab's handle
// as parameter and forwards to Chrome via IPC.
- virtual void OnResponseStarted(int request_id, const char* mime_type,
- const char* headers, int size, base::Time last_modified,
- const std::string& redirect_url, int redirect_status,
- const net::HostPortPair& socket_address);
+ virtual void OnResponseStarted(
+ int request_id, const char* mime_type, const char* headers, int size,
+ base::Time last_modified, const std::string& redirect_url,
+ int redirect_status, const net::HostPortPair& socket_address,
+ uint64 upload_size);
virtual void OnReadComplete(int request_id, const std::string& data);
virtual void OnResponseEnd(int request_id,
const net::URLRequestStatus& status);
diff --git a/chrome_frame/plugin_url_request.h b/chrome_frame/plugin_url_request.h
index 879620c..bd14655 100644
--- a/chrome_frame/plugin_url_request.h
+++ b/chrome_frame/plugin_url_request.h
@@ -25,10 +25,11 @@ class PluginUrlRequestManager;
class DECLSPEC_NOVTABLE PluginUrlRequestDelegate { // NOLINT
public:
- virtual void OnResponseStarted(int request_id, const char* mime_type,
- const char* headers, int size, base::Time last_modified,
- const std::string& redirect_url, int redirect_status,
- const net::HostPortPair& socket_address) = 0;
+ virtual void OnResponseStarted(
+ int request_id, const char* mime_type, const char* headers, int size,
+ base::Time last_modified, const std::string& redirect_url,
+ int redirect_status, const net::HostPortPair& socket_address,
+ uint64 upload_size) = 0;
virtual void OnReadComplete(int request_id, const std::string& data) = 0;
virtual void OnResponseEnd(int request_id,
const net::URLRequestStatus& status) = 0;
@@ -169,11 +170,6 @@ class PluginUrlRequest {
url_ = url;
}
- void ClearPostData() {
- upload_data_.Release();
- post_data_len_ = 0;
- }
-
void SendData();
bool enable_frame_busting_;
diff --git a/chrome_frame/test/automation_client_mock.h b/chrome_frame/test/automation_client_mock.h
index 4cd89dc..1debab7 100644
--- a/chrome_frame/test/automation_client_mock.h
+++ b/chrome_frame/test/automation_client_mock.h
@@ -67,7 +67,7 @@ struct MockCFDelegate : public ChromeFrameDelegateImpl {
void ReplyStarted(int request_id, const char* headers) {
request_delegate_->OnResponseStarted(request_id, "text/html", headers,
- 0, base::Time::Now(), EmptyString(), 0, net::HostPortPair());
+ 0, base::Time::Now(), EmptyString(), 0, net::HostPortPair(), 0);
}
void ReplyData(int request_id, const std::string* data) {
diff --git a/chrome_frame/test/url_request_test.cc b/chrome_frame/test/url_request_test.cc
index b1fb6b2..6c1790f 100644
--- a/chrome_frame/test/url_request_test.cc
+++ b/chrome_frame/test/url_request_test.cc
@@ -39,10 +39,10 @@ static void AppendToStream(IStream* s, void* buffer, ULONG cb) {
class MockUrlDelegate : public PluginUrlRequestDelegate {
public:
- MOCK_METHOD8(OnResponseStarted, void(int request_id, const char* mime_type,
+ MOCK_METHOD9(OnResponseStarted, void(int request_id, const char* mime_type,
const char* headers, int size, base::Time last_modified,
const std::string& redirect_url, int redirect_status,
- const net::HostPortPair& socket_address));
+ const net::HostPortPair& socket_address, uint64 upload_size));
MOCK_METHOD2(OnReadComplete, void(int request_id, const std::string& data));
MOCK_METHOD2(OnResponseEnd, void(int request_id,
const net::URLRequestStatus& status));
@@ -89,7 +89,7 @@ TEST(UrlmonUrlRequestTest, Simple1) {
testing::InSequence s;
EXPECT_CALL(mock, OnResponseStarted(1, testing::_, testing::_, testing::_,
testing::_, testing::_, testing::_,
- testing::_))
+ testing::_, testing::_))
.Times(1)
.WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(CreateFunctor(
&request, &UrlmonUrlRequest::Read, 512))));
@@ -138,7 +138,7 @@ TEST(UrlmonUrlRequestTest, Head) {
testing::InSequence s;
EXPECT_CALL(mock, OnResponseStarted(1, testing::_, testing::_, testing::_,
testing::_, testing::_, testing::_,
- testing::_))
+ testing::_, testing::_))
.Times(1)
.WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(CreateFunctor(
&request, &UrlmonUrlRequest::Read, 512))));
@@ -183,7 +183,7 @@ TEST(UrlmonUrlRequestTest, UnreachableUrl) {
EXPECT_CALL(mock, OnResponseStarted(1, testing::_,
testing::StartsWith("HTTP/1.1 404"),
testing::_, testing::_, testing::_,
- testing::_, testing::_))
+ testing::_, testing::_, testing::_))
.Times(1)
.WillOnce(QUIT_LOOP_SOON(loop, base::TimeDelta::FromSeconds(2)));
@@ -222,7 +222,7 @@ TEST(UrlmonUrlRequestTest, ZeroLengthResponse) {
// Expect headers
EXPECT_CALL(mock, OnResponseStarted(1, testing::_, testing::_, testing::_,
testing::_, testing::_, testing::_,
- testing::_))
+ testing::_, testing::_))
.Times(1)
.WillOnce(QUIT_LOOP(loop));
@@ -272,7 +272,8 @@ TEST(UrlmonUrlRequestManagerTest, Simple1) {
r1.load_flags = 0;
EXPECT_CALL(mock, OnResponseStarted(1, testing::_, testing::_, testing::_,
- testing::_, testing::_, testing::_, testing::_))
+ testing::_, testing::_, testing::_, testing::_,
+ testing::_))
.Times(1)
.WillOnce(ManagerRead(&loop, mgr.get(), 1, 512));
@@ -308,7 +309,8 @@ TEST(UrlmonUrlRequestManagerTest, Abort1) {
r1.load_flags = 0;
EXPECT_CALL(mock, OnResponseStarted(1, testing::_, testing::_, testing::_,
- testing::_, testing::_, testing::_, testing::_))
+ testing::_, testing::_, testing::_, testing::_,
+ testing::_))
.Times(1)
.WillOnce(testing::DoAll(
ManagerEndRequest(&loop, mgr.get(), 1),
diff --git a/chrome_frame/urlmon_url_request.cc b/chrome_frame/urlmon_url_request.cc
index b2ed8c7..bf441b3 100644
--- a/chrome_frame/urlmon_url_request.cc
+++ b/chrome_frame/urlmon_url_request.cc
@@ -691,13 +691,14 @@ STDMETHODIMP UrlmonUrlRequest::OnResponse(DWORD dwResponseCode,
headers_received_ = true;
DCHECK_NE(id(), -1);
delegate_->OnResponseStarted(id(),
- "", // mime_type
- raw_headers.c_str(), // headers
- 0, // size
- base::Time(), // last_modified
- status_.get_redirection().utf8_url,
- status_.get_redirection().http_code,
- socket_address_);
+ "", // mime_type
+ raw_headers.c_str(), // headers
+ 0, // size
+ base::Time(), // last_modified
+ status_.get_redirection().utf8_url,
+ status_.get_redirection().http_code,
+ socket_address_,
+ post_data_len());
return S_OK;
}
@@ -1323,10 +1324,11 @@ void UrlmonUrlRequestManager::StopAllRequestsHelper(
request_map_lock->Release();
}
-void UrlmonUrlRequestManager::OnResponseStarted(int request_id,
- const char* mime_type, const char* headers, int size,
+void UrlmonUrlRequestManager::OnResponseStarted(
+ int request_id, const char* mime_type, const char* headers, int size,
base::Time last_modified, const std::string& redirect_url,
- int redirect_status, const net::HostPortPair& socket_address) {
+ int redirect_status, const net::HostPortPair& socket_address,
+ uint64 upload_size) {
DCHECK_NE(request_id, -1);
DVLOG(1) << __FUNCTION__;
@@ -1339,8 +1341,9 @@ void UrlmonUrlRequestManager::OnResponseStarted(int request_id,
}
DCHECK(request != NULL);
#endif // NDEBUG
- delegate_->OnResponseStarted(request_id, mime_type, headers, size,
- last_modified, redirect_url, redirect_status, socket_address);
+ delegate_->OnResponseStarted(
+ request_id, mime_type, headers, size, last_modified, redirect_url,
+ redirect_status, socket_address, upload_size);
}
void UrlmonUrlRequestManager::OnReadComplete(int request_id,
diff --git a/chrome_frame/urlmon_url_request.h b/chrome_frame/urlmon_url_request.h
index 037de1d..b74b881 100644
--- a/chrome_frame/urlmon_url_request.h
+++ b/chrome_frame/urlmon_url_request.h
@@ -96,12 +96,11 @@ class UrlmonUrlRequestManager
virtual void SetCookiesForUrl(const GURL& url, const std::string& cookie);
// PluginUrlRequestDelegate implementation
- virtual void OnResponseStarted(int request_id, const char* mime_type,
- const char* headers, int size,
- base::Time last_modified,
- const std::string& redirect_url,
- int redirect_status,
- const net::HostPortPair& socket_address);
+ virtual void OnResponseStarted(
+ int request_id, const char* mime_type, const char* headers, int size,
+ base::Time last_modified, const std::string& redirect_url,
+ int redirect_status, const net::HostPortPair& socket_address,
+ uint64 upload_size);
virtual void OnReadComplete(int request_id, const std::string& data);
virtual void OnResponseEnd(int request_id,
const net::URLRequestStatus& status);
diff --git a/content/browser/renderer_host/resource_dispatcher_host_impl.cc b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
index 2059938..450641e 100644
--- a/content/browser/renderer_host/resource_dispatcher_host_impl.cc
+++ b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
@@ -21,7 +21,6 @@
#include "base/shared_memory.h"
#include "base/stl_util.h"
#include "base/third_party/dynamic_annotations/dynamic_annotations.h"
-#include "base/threading/thread_restrictions.h"
#include "content/browser/appcache/chrome_appcache_service.h"
#include "content/browser/cert_store_impl.h"
#include "content/browser/child_process_security_policy_impl.h"
@@ -958,14 +957,10 @@ void ResourceDispatcherHostImpl::BeginRequest(
request->set_priority(DetermineRequestPriority(request_data.resource_type));
// Resolve elements from request_body and prepare upload data.
- uint64 upload_size = 0;
if (request_data.request_body) {
request->set_upload(
request_data.request_body->ResolveElementsAndCreateUploadData(
GetBlobStorageControllerForResourceContext(resource_context)));
- // This results in performing file IO. crbug.com/112607.
- base::ThreadRestrictions::ScopedAllowIO allow_io;
- upload_size = request->get_upload_mutable()->GetContentLengthSync();
}
bool allow_download = request_data.allow_download &&
@@ -985,7 +980,6 @@ void ResourceDispatcherHostImpl::BeginRequest(
request_data.parent_frame_id,
request_data.resource_type,
request_data.transition_type,
- upload_size,
false, // is download
allow_download,
request_data.has_user_gesture,
@@ -1185,7 +1179,6 @@ ResourceRequestInfoImpl* ResourceDispatcherHostImpl::CreateRequestInfo(
-1, // parent_frame_id
ResourceType::SUB_RESOURCE,
PAGE_TRANSITION_LINK,
- 0, // upload_size
download, // is_download
download, // allow_download
false, // has_user_gesture
@@ -1592,7 +1585,7 @@ void ResourceDispatcherHostImpl::UpdateLoadStates() {
for (i = pending_loaders_.begin(); i != pending_loaders_.end(); ++i) {
net::URLRequest* request = i->second->request();
ResourceRequestInfoImpl* info = i->second->GetRequestInfo();
- uint64 upload_size = info->GetUploadSize();
+ uint64 upload_size = request->GetUploadProgress().size();
if (request->GetLoadState().state != net::LOAD_STATE_SENDING_REQUEST)
upload_size = 0;
std::pair<int, int> key(info->GetChildID(), info->GetRouteID());
@@ -1604,6 +1597,7 @@ void ResourceDispatcherHostImpl::UpdateLoadStates() {
net::URLRequest* request = i->second->request();
ResourceRequestInfoImpl* info = i->second->GetRequestInfo();
net::LoadStateWithParam load_state = request->GetLoadState();
+ net::UploadProgress progress = request->GetUploadProgress();
// We also poll for upload progress on this timer and send upload
// progress ipc messages to the plugin process.
@@ -1614,7 +1608,7 @@ void ResourceDispatcherHostImpl::UpdateLoadStates() {
// If a request is uploading data, ignore all other requests so that the
// upload progress takes priority for being shown in the status bar.
if (largest_upload_size.find(key) != largest_upload_size.end() &&
- info->GetUploadSize() < largest_upload_size[key])
+ progress.size() < largest_upload_size[key])
continue;
net::LoadStateWithParam to_insert = load_state;
@@ -1628,8 +1622,8 @@ void ResourceDispatcherHostImpl::UpdateLoadStates() {
LoadInfo& load_info = info_map[key];
load_info.url = request->url();
load_info.load_state = to_insert;
- load_info.upload_size = info->GetUploadSize();
- load_info.upload_position = request->GetUploadProgress();
+ load_info.upload_size = progress.size();
+ load_info.upload_position = progress.position();
}
if (info_map.empty())
diff --git a/content/browser/renderer_host/resource_loader.cc b/content/browser/renderer_host/resource_loader.cc
index e928724..0cbc455 100644
--- a/content/browser/renderer_host/resource_loader.cc
+++ b/content/browser/renderer_host/resource_loader.cc
@@ -107,31 +107,32 @@ void ResourceLoader::ReportUploadProgress() {
if (waiting_for_upload_progress_ack_)
return; // Send one progress event at a time.
- uint64 size = info->GetUploadSize();
- if (!size)
+ net::UploadProgress progress = request_->GetUploadProgress();
+ if (!progress.size())
return; // Nothing to upload.
- uint64 position = request_->GetUploadProgress();
- if (position == last_upload_position_)
+ if (progress.position() == last_upload_position_)
return; // No progress made since last time.
const uint64 kHalfPercentIncrements = 200;
const TimeDelta kOneSecond = TimeDelta::FromMilliseconds(1000);
- uint64 amt_since_last = position - last_upload_position_;
+ uint64 amt_since_last = progress.position() - last_upload_position_;
TimeDelta time_since_last = TimeTicks::Now() - last_upload_ticks_;
- bool is_finished = (size == position);
- bool enough_new_progress = (amt_since_last > (size / kHalfPercentIncrements));
+ bool is_finished = (progress.size() == progress.position());
+ bool enough_new_progress =
+ (amt_since_last > (progress.size() / kHalfPercentIncrements));
bool too_much_time_passed = time_since_last > kOneSecond;
if (is_finished || enough_new_progress || too_much_time_passed) {
if (request_->load_flags() & net::LOAD_ENABLE_UPLOAD_PROGRESS) {
- handler_->OnUploadProgress(info->GetRequestID(), position, size);
+ handler_->OnUploadProgress(
+ info->GetRequestID(), progress.position(), progress.size());
waiting_for_upload_progress_ack_ = true;
}
last_upload_ticks_ = TimeTicks::Now();
- last_upload_position_ = position;
+ last_upload_position_ = progress.position();
}
}
diff --git a/content/browser/renderer_host/resource_request_info_impl.cc b/content/browser/renderer_host/resource_request_info_impl.cc
index c063d1d..c1f2437 100644
--- a/content/browser/renderer_host/resource_request_info_impl.cc
+++ b/content/browser/renderer_host/resource_request_info_impl.cc
@@ -41,7 +41,6 @@ void ResourceRequestInfo::AllocateForTesting(
0, // parent_frame_id
resource_type, // resource_type
PAGE_TRANSITION_LINK, // transition_type
- 0, // upload_size
false, // is_download
true, // allow_download
false, // has_user_gesture
@@ -91,7 +90,6 @@ ResourceRequestInfoImpl::ResourceRequestInfoImpl(
int64 parent_frame_id,
ResourceType::Type resource_type,
PageTransition transition_type,
- uint64 upload_size,
bool is_download,
bool allow_download,
bool has_user_gesture,
@@ -113,7 +111,6 @@ ResourceRequestInfoImpl::ResourceRequestInfoImpl(
has_user_gesture_(has_user_gesture),
resource_type_(resource_type),
transition_type_(transition_type),
- upload_size_(upload_size),
memory_cost_(0),
referrer_policy_(referrer_policy),
context_(context) {
@@ -166,10 +163,6 @@ WebKit::WebReferrerPolicy ResourceRequestInfoImpl::GetReferrerPolicy() const {
return referrer_policy_;
}
-uint64 ResourceRequestInfoImpl::GetUploadSize() const {
- return upload_size_;
-}
-
bool ResourceRequestInfoImpl::HasUserGesture() const {
return has_user_gesture_;
}
diff --git a/content/browser/renderer_host/resource_request_info_impl.h b/content/browser/renderer_host/resource_request_info_impl.h
index b21944c..f2bc718 100644
--- a/content/browser/renderer_host/resource_request_info_impl.h
+++ b/content/browser/renderer_host/resource_request_info_impl.h
@@ -54,7 +54,6 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo,
int64 parent_frame_id,
ResourceType::Type resource_type,
PageTransition transition_type,
- uint64 upload_size,
bool is_download,
bool allow_download,
bool has_user_gesture,
@@ -74,7 +73,6 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo,
virtual int64 GetParentFrameID() const OVERRIDE;
virtual ResourceType::Type GetResourceType() const OVERRIDE;
virtual WebKit::WebReferrerPolicy GetReferrerPolicy() const OVERRIDE;
- virtual uint64 GetUploadSize() const OVERRIDE;
virtual bool HasUserGesture() const OVERRIDE;
virtual bool GetAssociatedRenderView(int* render_process_id,
int* render_view_id) const OVERRIDE;
@@ -113,8 +111,6 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo,
PageTransition transition_type() const { return transition_type_; }
- void set_upload_size(uint64 upload_size) { upload_size_ = upload_size; }
-
// The approximate in-memory size (bytes) that we credited this request
// as consuming in |outstanding_requests_memory_cost_map_|.
int memory_cost() const { return memory_cost_; }
@@ -146,7 +142,6 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo,
bool has_user_gesture_;
ResourceType::Type resource_type_;
PageTransition transition_type_;
- uint64 upload_size_;
int memory_cost_;
scoped_refptr<webkit_blob::BlobData> requested_blob_data_;
WebKit::WebReferrerPolicy referrer_policy_;
diff --git a/content/public/browser/resource_request_info.h b/content/public/browser/resource_request_info.h
index 18db167..61cac09 100644
--- a/content/public/browser/resource_request_info.h
+++ b/content/public/browser/resource_request_info.h
@@ -80,10 +80,6 @@ class ResourceRequestInfo {
// Returns the associated referrer policy.
virtual WebKit::WebReferrerPolicy GetReferrerPolicy() const = 0;
- // When there is upload data, this is the byte count of that data. When there
- // is no upload, this will be 0.
- virtual uint64 GetUploadSize() const = 0;
-
// True if the request was initiated by a user action (like a tap to follow
// a link).
virtual bool HasUserGesture() const = 0;
diff --git a/net/url_request/url_fetcher_core.cc b/net/url_request/url_fetcher_core.cc
index 9c64c6e..043d220 100644
--- a/net/url_request/url_fetcher_core.cc
+++ b/net/url_request/url_fetcher_core.cc
@@ -944,7 +944,7 @@ void URLFetcherCore::DisownFile() {
void URLFetcherCore::InformDelegateUploadProgress() {
DCHECK(network_task_runner_->BelongsToCurrentThread());
if (request_.get()) {
- int64 current = request_->GetUploadProgress();
+ int64 current = request_->GetUploadProgress().position();
if (current_upload_bytes_ != current) {
current_upload_bytes_ = current;
int64 total = -1;
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index 9084053..cc7bfe6 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -149,7 +149,6 @@ URLRequest::URLRequest(const GURL& url,
delegate_(delegate),
is_pending_(false),
redirect_limit_(kMaxRedirects),
- final_upload_progress_(0),
priority_(LOWEST),
identifier_(GenerateURLRequestIdentifier()),
blocked_on_delegate_(false),
@@ -187,7 +186,6 @@ URLRequest::URLRequest(const GURL& url,
delegate_(delegate),
is_pending_(false),
redirect_limit_(kMaxRedirects),
- final_upload_progress_(0),
priority_(LOWEST),
identifier_(GenerateURLRequestIdentifier()),
blocked_on_delegate_(false),
@@ -327,12 +325,12 @@ LoadStateWithParam URLRequest::GetLoadState() const {
string16());
}
-uint64 URLRequest::GetUploadProgress() const {
+UploadProgress URLRequest::GetUploadProgress() const {
if (!job_) {
// We haven't started or the request was cancelled
- return 0;
+ return UploadProgress();
}
- if (final_upload_progress_) {
+ if (final_upload_progress_.position()) {
// The first job completed and none of the subsequent series of
// GETs when following redirects will upload anything, so we return the
// cached results from the initial job, the POST.
@@ -793,7 +791,7 @@ int URLRequest::Redirect(const GURL& location, int http_status_code) {
url_chain_.push_back(location);
--redirect_limit_;
- if (!final_upload_progress_)
+ if (!final_upload_progress_.position())
final_upload_progress_ = job_->GetUploadProgress();
PrepareToRestart();
diff --git a/net/url_request/url_request.h b/net/url_request/url_request.h
index 4a2a2e4..cf5b081 100644
--- a/net/url_request/url_request.h
+++ b/net/url_request/url_request.h
@@ -23,6 +23,7 @@
#include "net/base/net_log.h"
#include "net/base/network_delegate.h"
#include "net/base/request_priority.h"
+#include "net/base/upload_progress.h"
#include "net/cookies/canonical_cookie.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_info.h"
@@ -455,7 +456,7 @@ class NET_EXPORT URLRequest : NON_EXPORTED_BASE(public base::NonThreadSafe),
}
// Returns the current upload progress in bytes.
- uint64 GetUploadProgress() const;
+ UploadProgress GetUploadProgress() const;
// Get response header(s) by ID or name. These methods may only be called
// once the delegate's OnResponseStarted method has been called. Headers
@@ -785,7 +786,7 @@ class NET_EXPORT URLRequest : NON_EXPORTED_BASE(public base::NonThreadSafe),
// Cached value for use after we've orphaned the job handling the
// first transaction in a request involving redirects.
- uint64 final_upload_progress_;
+ UploadProgress final_upload_progress_;
// The priority level for this request. Objects like ClientSocketPool use
// this to determine which URLRequest to allocate sockets to first.
diff --git a/net/url_request/url_request_ftp_job.cc b/net/url_request/url_request_ftp_job.cc
index e910625..27021a3 100644
--- a/net/url_request/url_request_ftp_job.cc
+++ b/net/url_request/url_request_ftp_job.cc
@@ -233,8 +233,8 @@ void URLRequestFtpJob::CancelAuth() {
weak_factory_.GetWeakPtr(), OK));
}
-uint64 URLRequestFtpJob::GetUploadProgress() const {
- return 0;
+UploadProgress URLRequestFtpJob::GetUploadProgress() const {
+ return UploadProgress();
}
bool URLRequestFtpJob::ReadRawData(IOBuffer* buf,
diff --git a/net/url_request/url_request_ftp_job.h b/net/url_request/url_request_ftp_job.h
index 6deaf0a..d05e3d8 100644
--- a/net/url_request/url_request_ftp_job.h
+++ b/net/url_request/url_request_ftp_job.h
@@ -61,7 +61,7 @@ class URLRequestFtpJob : public URLRequestJob {
virtual void CancelAuth() OVERRIDE;
// TODO(ibrar): Yet to give another look at this function.
- virtual uint64 GetUploadProgress() const OVERRIDE;
+ virtual UploadProgress GetUploadProgress() const OVERRIDE;
virtual bool ReadRawData(IOBuffer* buf,
int buf_size,
int *bytes_read) OVERRIDE;
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 52d5dae..309f0fb 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -1021,8 +1021,9 @@ LoadState URLRequestHttpJob::GetLoadState() const {
transaction_->GetLoadState() : LOAD_STATE_IDLE;
}
-uint64 URLRequestHttpJob::GetUploadProgress() const {
- return transaction_.get() ? transaction_->GetUploadProgress().position() : 0;
+UploadProgress URLRequestHttpJob::GetUploadProgress() const {
+ return transaction_.get() ?
+ transaction_->GetUploadProgress() : UploadProgress();
}
bool URLRequestHttpJob::GetMimeType(std::string* mime_type) const {
diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h
index 063d399..8ee24b2 100644
--- a/net/url_request/url_request_http_job.h
+++ b/net/url_request/url_request_http_job.h
@@ -78,7 +78,7 @@ class URLRequestHttpJob : public URLRequestJob {
virtual void Start() OVERRIDE;
virtual void Kill() OVERRIDE;
virtual LoadState GetLoadState() const OVERRIDE;
- virtual uint64 GetUploadProgress() const OVERRIDE;
+ virtual UploadProgress GetUploadProgress() const OVERRIDE;
virtual bool GetMimeType(std::string* mime_type) const OVERRIDE;
virtual bool GetCharset(std::string* charset) OVERRIDE;
virtual void GetResponseInfo(HttpResponseInfo* info) OVERRIDE;
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc
index 9ba5578..66fc9f3 100644
--- a/net/url_request/url_request_job.cc
+++ b/net/url_request/url_request_job.cc
@@ -106,8 +106,8 @@ LoadState URLRequestJob::GetLoadState() const {
return LOAD_STATE_IDLE;
}
-uint64 URLRequestJob::GetUploadProgress() const {
- return 0;
+UploadProgress URLRequestJob::GetUploadProgress() const {
+ return UploadProgress();
}
bool URLRequestJob::GetCharset(std::string* charset) {
diff --git a/net/url_request/url_request_job.h b/net/url_request/url_request_job.h
index 6e3dbba..0af7fa1 100644
--- a/net/url_request/url_request_job.h
+++ b/net/url_request/url_request_job.h
@@ -17,6 +17,7 @@
#include "net/base/host_port_pair.h"
#include "net/base/load_states.h"
#include "net/base/net_export.h"
+#include "net/base/upload_progress.h"
#include "net/cookies/canonical_cookie.h"
namespace net {
@@ -99,7 +100,7 @@ class NET_EXPORT URLRequestJob : public base::RefCounted<URLRequestJob>,
virtual LoadState GetLoadState() const;
// Called to get the upload progress in bytes.
- virtual uint64 GetUploadProgress() const;
+ virtual UploadProgress GetUploadProgress() const;
// Called to fetch the charset for this request. Only makes sense for some
// types of requests. Returns true on success. Calling this on a type that
diff --git a/webkit/tools/test_shell/simple_resource_loader_bridge.cc b/webkit/tools/test_shell/simple_resource_loader_bridge.cc
index d233da6..a6becac 100644
--- a/webkit/tools/test_shell/simple_resource_loader_bridge.cc
+++ b/webkit/tools/test_shell/simple_resource_loader_bridge.cc
@@ -618,32 +618,29 @@ class RequestProxy
return;
}
- // GetContentLengthSync() may perform file IO, but it's ok here, as file
- // IO is not prohibited in IOThread defined in the file.
- uint64 size = request_->get_upload_mutable()->GetContentLengthSync();
- uint64 position = request_->GetUploadProgress();
- if (position == last_upload_position_)
+ net::UploadProgress progress = request_->GetUploadProgress();
+ if (progress.position() == last_upload_position_)
return; // no progress made since last time
const uint64 kHalfPercentIncrements = 200;
const base::TimeDelta kOneSecond = base::TimeDelta::FromMilliseconds(1000);
- uint64 amt_since_last = position - last_upload_position_;
+ uint64 amt_since_last = progress.position() - last_upload_position_;
base::TimeDelta time_since_last = base::TimeTicks::Now() -
last_upload_ticks_;
- bool is_finished = (size == position);
- bool enough_new_progress = (amt_since_last > (size /
+ bool is_finished = (progress.size() == progress.position());
+ bool enough_new_progress = (amt_since_last > (progress.size() /
kHalfPercentIncrements));
bool too_much_time_passed = time_since_last > kOneSecond;
if (is_finished || enough_new_progress || too_much_time_passed) {
owner_loop_->PostTask(
FROM_HERE,
- base::Bind(&RequestProxy::NotifyUploadProgress, this, position,
- size));
+ base::Bind(&RequestProxy::NotifyUploadProgress, this,
+ progress.position(), progress.size()));
last_upload_ticks_ = base::TimeTicks::Now();
- last_upload_position_ = position;
+ last_upload_position_ = progress.position();
}
}