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 9d2e5d70abc9fb0925ca71918b8db8d7156b9bd6..ee7279f092e11665807ca2de1f7bd98b3dd158e1 100644 |
--- a/components/web_resource/web_resource_service.cc |
+++ b/components/web_resource/web_resource_service.cc |
@@ -44,7 +44,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), |
@@ -54,13 +56,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(); |
} |
@@ -100,15 +102,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_); |