Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1021)

Unified Diff: content/browser/loader/mojo_async_resource_handler.cc

Issue 2574143003: Implement upload progress handling in Mojo loading (Closed)
Patch Set: s/OnMesnsageReceived/Dispatch/ Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/loader/mojo_async_resource_handler.cc
diff --git a/content/browser/loader/mojo_async_resource_handler.cc b/content/browser/loader/mojo_async_resource_handler.cc
index 8792cd59f8cbce7db2ba30b73037942fb993b52a..0a74dc9004e26b7bf722c158fc1a3c97de6af6a2 100644
--- a/content/browser/loader/mojo_async_resource_handler.cc
+++ b/content/browser/loader/mojo_async_resource_handler.cc
@@ -4,13 +4,16 @@
#include "content/browser/loader/mojo_async_resource_handler.h"
+#include <algorithm>
#include <utility>
#include <vector>
+#include "base/bind.h"
#include "base/command_line.h"
-#include "base/containers/hash_tables.h"
+#include "base/location.h"
#include "base/logging.h"
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/time/time.h"
#include "content/browser/loader/downloaded_temp_file_impl.h"
@@ -18,6 +21,7 @@
#include "content/browser/loader/resource_controller.h"
#include "content/browser/loader/resource_dispatcher_host_impl.h"
#include "content/browser/loader/resource_request_info_impl.h"
+#include "content/browser/loader/upload_progress_tracker.h"
#include "content/common/resource_request_completion_status.h"
#include "content/public/browser/global_request_id.h"
#include "content/public/browser/resource_dispatcher_host_delegate.h"
@@ -25,7 +29,6 @@
#include "mojo/public/c/system/data_pipe.h"
#include "mojo/public/cpp/bindings/message.h"
#include "net/base/io_buffer.h"
-#include "net/base/load_flags.h"
#include "net/base/mime_sniffer.h"
#include "net/url_request/redirect_info.h"
@@ -156,8 +159,12 @@ bool MojoAsyncResourceHandler::OnRequestRedirected(
bool MojoAsyncResourceHandler::OnResponseStarted(ResourceResponse* response,
bool* defer) {
- const ResourceRequestInfoImpl* info = GetRequestInfo();
+ if (upload_progress_tracker_) {
+ upload_progress_tracker_->OnUploadCompleted();
+ upload_progress_tracker_ = nullptr;
+ }
+ const ResourceRequestInfoImpl* info = GetRequestInfo();
if (rdh_->delegate()) {
rdh_->delegate()->OnResponseStarted(request(), info->GetContext(),
response);
@@ -193,6 +200,14 @@ bool MojoAsyncResourceHandler::OnResponseStarted(ResourceResponse* response,
}
bool MojoAsyncResourceHandler::OnWillStart(const GURL& url, bool* defer) {
+ if (GetRequestInfo()->is_upload_progress_enabled() &&
+ request()->has_upload()) {
+ upload_progress_tracker_ = CreateUploadProgressTracker(
+ FROM_HERE,
+ base::BindRepeating(&MojoAsyncResourceHandler::SendUploadProgress,
+ base::Unretained(this)));
+ }
+
return true;
}
@@ -345,6 +360,11 @@ net::IOBufferWithSize* MojoAsyncResourceHandler::GetResponseMetadata(
void MojoAsyncResourceHandler::OnResponseCompleted(
const net::URLRequestStatus& status,
bool* defer) {
+ if (upload_progress_tracker_) {
+ upload_progress_tracker_->OnUploadCompleted();
+ upload_progress_tracker_ = nullptr;
dcheng 2017/01/24 10:38:58 This might be a dumb question, but why do we need
tzik 2017/01/24 12:04:59 Yes, we skip it on cancellation and error cases. A
+ }
+
shared_writer_ = nullptr;
buffer_ = nullptr;
handle_watcher_.Cancel();
@@ -486,6 +506,14 @@ void MojoAsyncResourceHandler::ReportBadMessage(const std::string& error) {
mojo::ReportBadMessage(error);
}
+std::unique_ptr<UploadProgressTracker>
+MojoAsyncResourceHandler::CreateUploadProgressTracker(
+ const tracked_objects::Location& from_here,
+ UploadProgressTracker::UploadProgressReportCallback callback) {
+ return base::MakeUnique<UploadProgressTracker>(from_here, std::move(callback),
+ request());
+}
+
void MojoAsyncResourceHandler::OnTransfer(
mojom::URLLoaderAssociatedRequest mojo_request,
mojom::URLLoaderClientAssociatedPtr url_loader_client) {
@@ -496,4 +524,17 @@ void MojoAsyncResourceHandler::OnTransfer(
url_loader_client_ = std::move(url_loader_client);
}
+void MojoAsyncResourceHandler::SendUploadProgress(
+ const net::UploadProgress& progress) {
+ url_loader_client_->OnUploadProgress(
+ progress.position(), progress.size(),
+ base::Bind(&MojoAsyncResourceHandler::OnUploadProgressACK,
+ weak_factory_.GetWeakPtr()));
+}
+
+void MojoAsyncResourceHandler::OnUploadProgressACK() {
+ if (upload_progress_tracker_)
+ upload_progress_tracker_->OnAckReceived();
+}
+
} // namespace content
« no previous file with comments | « content/browser/loader/mojo_async_resource_handler.h ('k') | content/browser/loader/mojo_async_resource_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698