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

Unified Diff: chrome/browser/background/background_contents_service.cc

Issue 2310463002: Update component extension reload backoff logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 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
« no previous file with comments | « chrome/browser/background/background_contents_service.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/background/background_contents_service.cc
diff --git a/chrome/browser/background/background_contents_service.cc b/chrome/browser/background/background_contents_service.cc
index 52d401d5ecf1f37403302fe11cb02a187c7b7067..cd4a4dd7ba3e34c137a12bba7fcf87bc18ceeda8 100644
--- a/chrome/browser/background/background_contents_service.cc
+++ b/chrome/browser/background/background_contents_service.cc
@@ -294,6 +294,11 @@ BackgroundContentsService::~BackgroundContentsService() {
// BackgroundContents should be shutdown before we go away, as otherwise
// our browser process refcount will be off.
DCHECK(contents_map_.empty());
+
+ // Clear any remaining BackoffEntry objects for extensions. This resets the
+ // backoff with a change in profile (e.g. when the browser restarts), as
+ // |this| is a keyed service.
+ backoff_map_.clear();
Wez 2016/09/02 23:54:44 This will just clear the map on browser shutdown,
apacible 2016/09/03 01:14:26 Component extensions are "installed" but are loade
}
// static
@@ -478,6 +483,22 @@ void BackgroundContentsService::OnExtensionLoaded(
}
}
+ // If there is an existing BackoffEntry for the extension, clear it if
+ // the component extension stays loaded for 60 seconds. This avoids the
+ // situation of effectively disabling an extension for the entire browser
+ // session if there was a periodic crash (sometimes caused by another source).
+ if (extensions::Manifest::IsComponentLocation(extension->location())) {
+ ExtensionBackoffEntryMap::const_iterator it =
+ backoff_map_.find(extension->id());
+ if (it != backoff_map_.end()) {
+ net::BackoffEntry* entry = backoff_map_[extension->id()].get();
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(FROM_HERE,
+ base::Bind(&BackgroundContentsService::MaybeClearBackoffEntry,
+ base::Unretained(this), extension->id(), entry->failure_count()),
Wez 2016/09/02 23:54:44 What happens if you reach here but the BackgroundC
apacible 2016/09/03 01:14:27 Talked offline -- switching to using weak ptr.
+ base::TimeDelta::FromMilliseconds(60000 /* 60 seconds */));
+ }
+ }
+
// Close the crash notification balloon for the app/extension, if any.
ScheduleCloseBalloon(extension->id(), profile);
SendChangeNotification(profile);
@@ -604,6 +625,22 @@ void BackgroundContentsService::SendChangeNotification(Profile* profile) {
content::Details<BackgroundContentsService>(this));
}
+void BackgroundContentsService::MaybeClearBackoffEntry(
+ const std::string extension_id,
+ int expected_failure_count) {
+ ExtensionBackoffEntryMap::const_iterator it =
+ backoff_map_.find(extension_id);
+ if (it == backoff_map_.end())
+ return;
+
+ net::BackoffEntry* entry = backoff_map_[extension_id].get();
+
+ // Only remove the BackoffEntry if there has has been no extension failure
+ // since loading.
Wez 2016/09/02 23:54:43 You mean no additional failure since expected_fail
apacible 2016/09/03 01:14:27 Correct, or more specifically, "no additional fail
+ if (entry->failure_count() == expected_failure_count)
+ backoff_map_.erase(it);
+}
+
void BackgroundContentsService::LoadBackgroundContentsForExtension(
Profile* profile,
const std::string& extension_id) {
« no previous file with comments | « chrome/browser/background/background_contents_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698