Index: components/web_resource/web_resource_service.cc |
diff --git a/components/web_resource/web_resource_service.cc b/components/web_resource/web_resource_service.cc |
index 6e05d4159c142ffb195c05799bb75ef423463e38..5db95f9bf2bb32126f16d73324d104bc72f3abb6 100644 |
--- a/components/web_resource/web_resource_service.cc |
+++ b/components/web_resource/web_resource_service.cc |
@@ -43,7 +43,9 @@ WebResourceService::WebResourceService( |
const char* disable_network_switch, |
const ParseJSONCallback& parse_json_callback) |
: prefs_(prefs), |
- resource_request_allowed_notifier_(prefs, disable_network_switch), |
+ resource_request_allowed_notifier_( |
+ new ResourceRequestAllowedNotifier(prefs, disable_network_switch)), |
+ fetch_scheduled_(false), |
in_fetch_(false), |
web_resource_server_(web_resource_server), |
application_locale_(application_locale), |
@@ -53,13 +55,13 @@ WebResourceService::WebResourceService( |
request_context_(request_context), |
parse_json_callback_(parse_json_callback), |
weak_ptr_factory_(this) { |
- resource_request_allowed_notifier_.Init(this); |
+ resource_request_allowed_notifier_->Init(this); |
DCHECK(prefs); |
} |
void WebResourceService::StartAfterDelay() { |
// If resource requests are not allowed, we'll get a callback when they are. |
- if (resource_request_allowed_notifier_.ResourceRequestsAllowed()) |
+ if (resource_request_allowed_notifier_->ResourceRequestsAllowed()) |
OnResourceRequestsAllowed(); |
} |
@@ -99,15 +101,35 @@ void WebResourceService::OnURLFetchComplete(const net::URLFetcher* source) { |
// Delay initial load of resource data into cache so as not to interfere |
// with startup time. |
void WebResourceService::ScheduleFetch(int64_t delay_ms) { |
+ if (fetch_scheduled_) |
+ return; |
+ fetch_scheduled_ = true; |
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
FROM_HERE, base::Bind(&WebResourceService::StartFetch, |
weak_ptr_factory_.GetWeakPtr()), |
base::TimeDelta::FromMilliseconds(delay_ms)); |
} |
+void WebResourceService::SetResourceRequestAllowedNotifier( |
+ std::unique_ptr<ResourceRequestAllowedNotifier> notifier) { |
+ resource_request_allowed_notifier_ = std::move(notifier); |
+ resource_request_allowed_notifier_->Init(this); |
+} |
+ |
+bool WebResourceService::GetFetchScheduled() const { |
+ return fetch_scheduled_; |
+} |
+ |
// Initializes the fetching of data from the resource server. Data |
// load calls OnURLFetchComplete. |
void WebResourceService::StartFetch() { |
+ // Set to false so that next fetch can be scheduled after this fetch or |
+ // if we recieve notification that resource is allowed. |
+ fetch_scheduled_ = false; |
+ // Check whether fetching is allowed. |
+ if (!resource_request_allowed_notifier_->ResourceRequestsAllowed()) |
+ return; |
+ |
// First, put our next cache load on the MessageLoop. |
ScheduleFetch(cache_update_delay_ms_); |