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

Unified Diff: chrome/browser/android/offline_pages/background_loader_offliner.cc

Issue 2737343002: [Offline Pages] Allow BackgroundLoader to track network bytes using prerenderer hook-in. (Closed)
Patch Set: Created 3 years, 9 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: chrome/browser/android/offline_pages/background_loader_offliner.cc
diff --git a/chrome/browser/android/offline_pages/background_loader_offliner.cc b/chrome/browser/android/offline_pages/background_loader_offliner.cc
index 07b32f956610f7021e66e5f8d32a9027f553c854..a4028a123db774c4bd48c86585d4ec32b4e1af60 100644
--- a/chrome/browser/android/offline_pages/background_loader_offliner.cc
+++ b/chrome/browser/android/offline_pages/background_loader_offliner.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/profiles/profile.h"
#include "components/offline_pages/core/background/save_page_request.h"
#include "components/offline_pages/core/client_namespace_constants.h"
+#include "components/offline_pages/core/downloads/download_ui_adapter.h"
#include "components/offline_pages/core/offline_page_model.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/navigation_handle.h"
@@ -19,9 +20,11 @@
namespace offline_pages {
namespace {
-long kOfflinePageDelayMs = 2000;
+const long kOfflinePageDelayMs = 2000;
} // namespace
+BackgroundLoaderOffliner* BackgroundLoaderOffliner::offliner_ = nullptr;
+
BackgroundLoaderOffliner::BackgroundLoaderOffliner(
content::BrowserContext* browser_context,
const OfflinerPolicy* policy,
@@ -32,14 +35,23 @@ BackgroundLoaderOffliner::BackgroundLoaderOffliner(
save_state_(NONE),
page_load_state_(SUCCESS),
page_delay_ms_(kOfflinePageDelayMs),
+ network_bytes_(0LL),
weak_ptr_factory_(this) {
DCHECK(offline_page_model_);
DCHECK(browser_context_);
+ offliner_ = this;
}
BackgroundLoaderOffliner::~BackgroundLoaderOffliner() {}
-// TODO(dimich): Invoke progress_callback as appropriate.
+// static
+BackgroundLoaderOffliner* BackgroundLoaderOffliner::FromWebContents(
+ content::WebContents* contents) {
dewittj 2017/03/09 22:33:17 It might be better to get it this way: auto contex
+ if (offliner_ && offliner_->web_contents() == contents)
+ return offliner_;
+ return nullptr;
+}
+
bool BackgroundLoaderOffliner::LoadAndSave(
const SavePageRequest& request,
const CompletionCallback& completion_callback,
@@ -109,6 +121,7 @@ bool BackgroundLoaderOffliner::LoadAndSave(
// Track copy of pending request.
pending_request_.reset(new SavePageRequest(request));
completion_callback_ = completion_callback;
+ progress_callback_ = progress_callback;
// Listen for app foreground/background change.
app_listener_.reset(new base::android::ApplicationStatusListener(
@@ -250,6 +263,14 @@ void BackgroundLoaderOffliner::SetPageDelayForTest(long delay_ms) {
page_delay_ms_ = delay_ms;
}
+void BackgroundLoaderOffliner::OnNetworkBytesChanged(int64_t bytes) {
+ if (pending_request_ && save_state_ != SAVING) {
+ network_bytes_ += bytes;
+ SavePageRequest request(*pending_request_.get());
+ progress_callback_.Run(request, network_bytes_);
+ }
+}
+
void BackgroundLoaderOffliner::SavePage() {
if (!pending_request_.get()) {
DVLOG(1) << "Pending request was cleared during delay.";
@@ -334,6 +355,7 @@ void BackgroundLoaderOffliner::OnPageSaved(SavePageResult save_result,
void BackgroundLoaderOffliner::ResetState() {
pending_request_.reset();
page_load_state_ = SUCCESS;
+ network_bytes_ = 0LL;
// TODO(chili): Remove after RequestCoordinator can handle multiple offliners.
// We reset the loader and observer after completion so loaders
// will not be re-used across different requests/tries. This is a temporary

Powered by Google App Engine
This is Rietveld 408576698