component updater: persistent metadata.

Add a table to track cross-profile component usage. The table is a
protobuf that has entries recording component usage for each component
installed.

When a user signs in:
Component updater adds component usage entry when Load is called AND a
component is loaded(succeed or fail). Component updater deletes component
usage entry when Unload is called.
When no user signs in:
No entry is added or deleted.

BUG=chromium:811431
TEST=unittest
platform_AddPrinter.epson
e2e test: Load/Unload when multiple users sign in/sign out. Manually check
persistent metadata/component existence is corrrect after each operation.
TODO: have an autotest to cover the e2e test. crbug.com/839542


Change-Id: I5e72ee8734adf6c6f1d8e885f4a41ebd33822af2
Reviewed-on: https://chromium-review.googlesource.com/946559
Commit-Queue: Xiaochu Liu <[email protected]>
Reviewed-by: Lei Zhang <[email protected]>
Reviewed-by: Joshua Pawlicki <[email protected]>
Cr-Commit-Position: refs/heads/master@{#557785}
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 00bb7e3..793b6af 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -143,6 +143,7 @@
 #include "extensions/browser/extension_prefs.h"
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h"
+#include "chrome/browser/component_updater/metadata_table_chromeos.h"
 #endif
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 
@@ -434,6 +435,7 @@
   chromeos::UserImageManager::RegisterPrefs(registry);
   chromeos::UserSessionManager::RegisterPrefs(registry);
   chromeos::echo_offer::RegisterPrefs(registry);
+  component_updater::MetadataTable::RegisterPrefs(registry);
   cryptauth::CryptAuthDeviceIdProviderImpl::RegisterLocalPrefs(registry);
   extensions::ExtensionAssetsManagerChromeOS::RegisterPrefs(registry);
   extensions::lock_screen_data::LockScreenItemStorage::RegisterLocalState(