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

Unified Diff: components/offline_pages/core/background/request_coordinator.cc

Issue 2836863002: [Offline pages] Removing active_request_ from request coordinator (Closed)
Patch Set: Addressing code review feedback and fixing app status change bug Created 3 years, 8 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
« no previous file with comments | « components/offline_pages/core/background/request_coordinator.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/offline_pages/core/background/request_coordinator.cc
diff --git a/components/offline_pages/core/background/request_coordinator.cc b/components/offline_pages/core/background/request_coordinator.cc
index e1a7170a7da2ba79eec4380d8850a3f58d8026d2..c8ef7aeb6144ed9e655231e5534daa92163fd5fe 100644
--- a/components/offline_pages/core/background/request_coordinator.cc
+++ b/components/offline_pages/core/background/request_coordinator.cc
@@ -207,7 +207,7 @@ RequestCoordinator::RequestCoordinator(
scheduler_(std::move(scheduler)),
policy_controller_(new ClientPolicyController()),
network_quality_estimator_(network_quality_estimator),
- active_request_(nullptr),
+ active_request_id_(0),
last_offlining_status_(Offliner::RequestStatus::UNKNOWN),
scheduler_callback_(base::Bind(&EmptySchedulerCallback)),
internal_start_processing_callback_(base::Bind(&EmptySchedulerCallback)),
@@ -284,21 +284,19 @@ void RequestCoordinator::GetQueuedRequestsCallback(
callback.Run(std::move(requests));
}
-void RequestCoordinator::StopPrerendering(
- const Offliner::CancelCallback& final_callback,
- Offliner::RequestStatus stop_status) {
+void RequestCoordinator::StopPrerendering(const CancelCallback& final_callback,
+ Offliner::RequestStatus stop_status) {
if (offliner_ && state_ == RequestCoordinatorState::OFFLINING) {
- DCHECK(active_request_.get());
- offliner_->Cancel(base::Bind(
- &RequestCoordinator::HandleCancelUpdateStatusCallback,
- weak_ptr_factory_.GetWeakPtr(), final_callback, stop_status));
- return;
+ DCHECK_NE(active_request_id_, 0);
+ if (offliner_->Cancel(base::Bind(
+ &RequestCoordinator::HandleCancelUpdateStatusCallback,
+ weak_ptr_factory_.GetWeakPtr(), final_callback, stop_status))) {
+ return;
+ }
}
UpdateStatusForCancel(stop_status);
- int64_t request_id =
- active_request_.get() ? active_request_->request_id() : 0LL;
- final_callback.Run(request_id);
+ final_callback.Run(active_request_id_);
}
void RequestCoordinator::GetRequestsForSchedulingCallback(
@@ -326,9 +324,9 @@ bool RequestCoordinator::CancelActiveRequestIfItMatches(
// If we have a request in progress and need to cancel it, call the
// pre-renderer to cancel. TODO Make sure we remove any page created by the
// prerenderer if it doesn't get the cancel in time.
- if (active_request_ != nullptr) {
- if (request_ids.end() != std::find(request_ids.begin(), request_ids.end(),
- active_request_->request_id())) {
+ if (active_request_id_ != 0) {
+ if (request_ids.end() !=
+ std::find(request_ids.begin(), request_ids.end(), active_request_id_)) {
StopPrerendering(
base::Bind(&RequestCoordinator::ResetActiveRequestCallback,
weak_ptr_factory_.GetWeakPtr()),
@@ -526,42 +524,33 @@ void RequestCoordinator::HandleRemovedRequests(
}
void RequestCoordinator::HandleCancelUpdateStatusCallback(
- const Offliner::CancelCallback& final_callback,
+ const CancelCallback& final_callback,
Offliner::RequestStatus stop_status,
- int64_t offline_id) {
+ const SavePageRequest& canceled_request) {
if (stop_status == Offliner::RequestStatus::REQUEST_COORDINATOR_TIMED_OUT ||
stop_status == Offliner::RequestStatus::BACKGROUND_SCHEDULER_CANCELED) {
// Consider watchdog timeout a completed attempt.
- SavePageRequest request(*active_request_.get());
- UpdateRequestForCompletedAttempt(request, stop_status);
+ UpdateRequestForCompletedAttempt(canceled_request, stop_status);
} else {
// Otherwise consider this stop an aborted attempt.
- UpdateRequestForAbortedAttempt(*active_request_.get());
+ UpdateRequestForAbortedAttempt(canceled_request);
}
+ RecordOfflinerResult(canceled_request, stop_status);
UpdateStatusForCancel(stop_status);
- final_callback.Run(offline_id);
+ final_callback.Run(canceled_request.request_id());
}
void RequestCoordinator::UpdateStatusForCancel(
Offliner::RequestStatus stop_status) {
// Stopping offliner means it will not call callback so set last status.
last_offlining_status_ = stop_status;
-
- if (active_request_) {
- event_logger_.RecordOfflinerResult(active_request_->client_id().name_space,
- last_offlining_status_,
- active_request_->request_id());
- RecordOfflinerResultUMA(active_request_->client_id(),
- active_request_->creation_time(),
- last_offlining_status_);
- active_request_.reset();
- }
+ active_request_id_ = 0;
state_ = RequestCoordinatorState::IDLE;
}
void RequestCoordinator::ResetActiveRequestCallback(int64_t offline_id) {
- active_request_.reset();
+ active_request_id_ = 0;
}
void RequestCoordinator::StartSchedulerCallback(int64_t offline_id) {
@@ -589,7 +578,7 @@ void RequestCoordinator::StopProcessing(Offliner::RequestStatus stop_status) {
void RequestCoordinator::HandleWatchdogTimeout() {
Offliner::RequestStatus watchdog_status =
Offliner::REQUEST_COORDINATOR_TIMED_OUT;
- if (offliner_->HandleTimeout(*active_request_.get()))
+ if (offliner_->HandleTimeout(active_request_id_))
return;
StopPrerendering(base::Bind(&RequestCoordinator::TryNextRequestCallback,
weak_ptr_factory_.GetWeakPtr()),
@@ -886,10 +875,7 @@ void RequestCoordinator::StartOffliner(
return;
}
- // TODO(fgorski): Switch to request_id only, so that this value is not written
- // back to the store.
- active_request_.reset(
- new SavePageRequest(update_result->updated_items.at(0)));
+ active_request_id_ = request_id;
// Start the load and save process in the offliner (Async).
if (offliner_->LoadAndSave(
@@ -909,7 +895,7 @@ void RequestCoordinator::StartOffliner(
}
// Inform observer of active request.
- NotifyChanged(*active_request_.get());
+ NotifyChanged(update_result->updated_items.at(0));
// Start a watchdog timer to catch pre-renders running too long
watchdog_timer_.Start(FROM_HERE, timeout, this,
@@ -932,14 +918,11 @@ void RequestCoordinator::OfflinerDoneCallback(const SavePageRequest& request,
<< ", status: " << static_cast<int>(status) << ", " << __func__;
DCHECK_NE(status, Offliner::RequestStatus::UNKNOWN);
DCHECK_NE(status, Offliner::RequestStatus::LOADED);
- event_logger_.RecordOfflinerResult(request.client_id().name_space, status,
- request.request_id());
+ RecordOfflinerResult(request, status);
last_offlining_status_ = status;
- RecordOfflinerResultUMA(request.client_id(), request.creation_time(),
- last_offlining_status_);
watchdog_timer_.Stop();
state_ = RequestCoordinatorState::IDLE;
- active_request_.reset(nullptr);
+ active_request_id_ = 0;
UpdateRequestForCompletedAttempt(request, status);
if (ShouldTryNextRequest(status))
@@ -1103,6 +1086,13 @@ ClientPolicyController* RequestCoordinator::GetPolicyController() {
return policy_controller_.get();
}
+void RequestCoordinator::RecordOfflinerResult(const SavePageRequest& request,
+ Offliner::RequestStatus status) {
+ event_logger_.RecordOfflinerResult(request.client_id().name_space, status,
+ request.request_id());
+ RecordOfflinerResultUMA(request.client_id(), request.creation_time(), status);
+}
+
void RequestCoordinator::Shutdown() {
network_quality_estimator_ = nullptr;
}
« no previous file with comments | « components/offline_pages/core/background/request_coordinator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698