oom_intervention: Add opt-out logic

Opt-out logic:
- If user declined intervention, don't trigger it until OOM is observed on
  the same site.
- If user declined intervention again even after OOM is observed on the site,
  never trigger intervention on the site.
- If len(blacklist) > kMaxBlacklistSize, the user is permanently opted out.

We use PerfService as datastore.

Bug: 776665
Change-Id: Ie94ae5360a08f68320a955881017270d2f4f096c
Reviewed-on: https://chromium-review.googlesource.com/807969
Reviewed-by: Martin Šrámek <[email protected]>
Reviewed-by: Dominic Battré <[email protected]>
Reviewed-by: Kentaro Hara <[email protected]>
Commit-Queue: Kenichi Ishibashi <[email protected]>
Cr-Commit-Position: refs/heads/master@{#522703}
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index d8e532a..385f6fc 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -174,6 +174,7 @@
 #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
 #include "chrome/browser/android/ntp/content_suggestions_notifier_service.h"
 #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h"
+#include "chrome/browser/android/oom_intervention/oom_intervention_decider.h"
 #include "chrome/browser/android/preferences/browser_prefs_android.h"
 #include "chrome/browser/geolocation/geolocation_permission_context_android.h"
 #include "chrome/browser/ntp_snippets/download_suggestions_provider.h"
@@ -596,6 +597,7 @@
   ntp_snippets::RecentTabSuggestionsProvider::RegisterProfilePrefs(registry);
   ntp_snippets::SubscriptionManagerImpl::RegisterProfilePrefs(registry);
   OmniboxFieldTrial::RegisterProfilePrefs(registry);
+  OomInterventionDecider::RegisterProfilePrefs(registry);
 #endif  // defined(OS_ANDROID)
 
 #if !defined(OS_ANDROID)