Index: components/offline_pages/snapshot_controller.cc |
diff --git a/components/offline_pages/snapshot_controller.cc b/components/offline_pages/snapshot_controller.cc |
index 171149955269cd617a70c886d4742bc00ac5aa66..0ff9841847df60b1b38ba2e332db7c9eff627b34 100644 |
--- a/components/offline_pages/snapshot_controller.cc |
+++ b/components/offline_pages/snapshot_controller.cc |
@@ -10,10 +10,14 @@ |
#include "base/time/time.h" |
namespace { |
-// Delay, in milliseconds, between the main document parsed event and snapshot. |
-// Note if the "load" event fires before this delay is up, then the snapshot |
-// is taken immediately. |
-const size_t kDelayAfterDocumentAvailable = 7000; |
+// Default delay, in milliseconds, between the main document parsed event and |
+// snapshot. Note: this snapshot might not occur if the OnLoad event and |
+// OnLoad delay elapses first to trigger a final snapshot. |
+const size_t kDefaultDelayAfterDocumentAvailableMs = 7000; |
+ |
+// Default delay, in milliseconds, between the main document OnLoad event and |
+// snapshot. |
+const size_t kDelayAfterDocumentOnLoadCompletedMs = 1000; |
} // namespace |
@@ -25,8 +29,25 @@ SnapshotController::SnapshotController( |
: task_runner_(task_runner), |
client_(client), |
state_(State::READY), |
- weak_ptr_factory_(this) { |
-} |
+ delay_after_document_available_ms_( |
+ kDefaultDelayAfterDocumentAvailableMs), |
+ delay_after_document_on_load_completed_ms_( |
+ kDelayAfterDocumentOnLoadCompletedMs), |
+ weak_ptr_factory_(this) {} |
+ |
+SnapshotController::SnapshotController( |
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
+ SnapshotController::Client* client, |
+ size_t delay_after_document_available_ms, |
+ size_t delay_after_document_on_load_completed_ms) |
+ : task_runner_(task_runner), |
+ client_(client), |
+ state_(State::READY), |
+ delay_after_document_available_ms_( |
+ delay_after_document_available_ms), |
+ delay_after_document_on_load_completed_ms_( |
+ delay_after_document_on_load_completed_ms), |
+ weak_ptr_factory_(this) {} |
SnapshotController::~SnapshotController() {} |
@@ -49,20 +70,21 @@ void SnapshotController::PendingSnapshotCompleted() { |
} |
void SnapshotController::DocumentAvailableInMainFrame() { |
- // Post a delayed task. The snapshot will happen either when the delay |
- // is up, or if the "load" event is dispatched in the main frame. |
+ // Post a delayed task to snapshot. |
task_runner_->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&SnapshotController::MaybeStartSnapshot, |
- weak_ptr_factory_.GetWeakPtr()), |
- base::TimeDelta::FromMilliseconds(kDelayAfterDocumentAvailable)); |
+ FROM_HERE, base::Bind(&SnapshotController::MaybeStartSnapshot, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::TimeDelta::FromMilliseconds( |
+ delay_after_document_available_ms_)); |
} |
void SnapshotController::DocumentOnLoadCompletedInMainFrame() { |
- MaybeStartSnapshot(); |
- // No more snapshots after onLoad (there still can be other events |
- // or delayed tasks that can try to start another snapshot) |
- Stop(); |
+ // Post a delayed task to snapshot and then stop this controller. |
+ task_runner_->PostDelayedTask( |
+ FROM_HERE, base::Bind(&SnapshotController::MaybeStartSnapshotThenStop, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::TimeDelta::FromMilliseconds( |
+ delay_after_document_on_load_completed_ms_)); |
} |
void SnapshotController::MaybeStartSnapshot() { |
@@ -72,8 +94,17 @@ void SnapshotController::MaybeStartSnapshot() { |
client_->StartSnapshot(); |
} |
+void SnapshotController::MaybeStartSnapshotThenStop() { |
+ MaybeStartSnapshot(); |
+ Stop(); |
+} |
+ |
size_t SnapshotController::GetDelayAfterDocumentAvailableForTest() { |
- return kDelayAfterDocumentAvailable; |
+ return delay_after_document_available_ms_; |
+} |
+ |
+size_t SnapshotController::GetDelayAfterDocumentOnLoadCompletedForTest() { |
+ return delay_after_document_on_load_completed_ms_; |
} |