| Index: components/scheduler/renderer/web_view_scheduler_impl.cc | 
| diff --git a/components/scheduler/renderer/web_view_scheduler_impl.cc b/components/scheduler/renderer/web_view_scheduler_impl.cc | 
| index 4ab4c11c570b329381533f53069073ab19c9eb29..48f565c02f6d4df15209c2cf8034ecd53850a7e3 100644 | 
| --- a/components/scheduler/renderer/web_view_scheduler_impl.cc | 
| +++ b/components/scheduler/renderer/web_view_scheduler_impl.cc | 
| @@ -24,6 +24,8 @@ WebViewSchedulerImpl::WebViewSchedulerImpl( | 
| : virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO), | 
| web_view_(web_view), | 
| renderer_scheduler_(renderer_scheduler), | 
| +      pending_resource_load_count_(0), | 
| +      virtual_time_policy_(VirtualTimePolicy::ADVANCE), | 
| page_visible_(true), | 
| disable_background_timer_throttling_(disable_background_timer_throttling), | 
| allow_virtual_time_to_advance_(true) { | 
| @@ -112,4 +114,51 @@ void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance( | 
| } | 
| } | 
|  | 
| +bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const { | 
| +  return allow_virtual_time_to_advance_; | 
| +} | 
| + | 
| +void WebViewSchedulerImpl::incrementPendingResourceLoadCount() { | 
| +  pending_resource_load_count_++; | 
| + | 
| +  if (virtual_time_policy_ != | 
| +      VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) { | 
| +    return; | 
| +  } | 
| + | 
| +  if (pending_resource_load_count_ == 1) | 
| +    setAllowVirtualTimeToAdvance(false); | 
| +} | 
| + | 
| +void WebViewSchedulerImpl::decrementPendingResourceLoadCount() { | 
| +  pending_resource_load_count_--; | 
| +  DCHECK_GE(pending_resource_load_count_, 0); | 
| + | 
| +  if (virtual_time_policy_ != | 
| +      VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) { | 
| +      return; | 
| +  } | 
| + | 
| +  if (pending_resource_load_count_ == 0) | 
| +      setAllowVirtualTimeToAdvance(true); | 
| +} | 
| + | 
| +void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) { | 
| +  virtual_time_policy_ = policy; | 
| + | 
| +  switch (virtual_time_policy_) { | 
| +    case VirtualTimePolicy::ADVANCE: | 
| +      setAllowVirtualTimeToAdvance(true); | 
| +      break; | 
| + | 
| +    case VirtualTimePolicy::PAUSE: | 
| +      setAllowVirtualTimeToAdvance(false); | 
| +      break; | 
| + | 
| +    case VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING: | 
| +      setAllowVirtualTimeToAdvance(pending_resource_load_count_ == 0); | 
| +      break; | 
| +  } | 
| +} | 
| + | 
| }  // namespace scheduler | 
|  |