OOR-CORS: Origin access list support for Chrome Extensions

This patch makes Chrome Extensions to call BrowserContext
functions to have right permission access lists in all
relevant processes including NetworkService that also has
CORS checks.

Since NetworkService is accessed over mojo, all operations
need to be asynchronous. This requires that PermissionsUpdater
take a completion callback to let callers know its completion.
PermissionsUpdater now relies on a private helper class that
outlives it to handle the asynchronous completion.

Bug: 870172
Cq-Include-Trybots: luci.chromium.try:linux_mojo
Change-Id: I1c0642f162a0a71034c2529262150dbf4a1e4da8
Reviewed-on: https://chromium-review.googlesource.com/c/1186382
Commit-Queue: Takashi Toyoshima <[email protected]>
Reviewed-by: Devlin <[email protected]>
Reviewed-by: Ɓukasz Anforowicz <[email protected]>
Cr-Commit-Position: refs/heads/master@{#609194}
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index c1177d09..52e01ba 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -63,6 +63,7 @@
 #include "chrome/browser/extensions/pack_extension_job.h"
 #include "chrome/browser/extensions/pending_extension_info.h"
 #include "chrome/browser/extensions/pending_extension_manager.h"
+#include "chrome/browser/extensions/permissions_test_util.h"
 #include "chrome/browser/extensions/permissions_updater.h"
 #include "chrome/browser/extensions/test_blacklist.h"
 #include "chrome/browser/extensions/test_extension_system.h"
@@ -616,9 +617,8 @@
     const Extension* extension = service()->GetInstalledExtension(id);
     const PermissionSet& all_optional_permissions =
         PermissionsParser::GetOptionalPermissions(extension);
-    PermissionsUpdater perms_updater(profile());
-    perms_updater.GrantOptionalPermissions(*extension,
-                                           all_optional_permissions);
+    permissions_test_util::GrantOptionalPermissionsAndWaitForCompletion(
+        profile(), *extension, all_optional_permissions);
   }
 
   testing::AssertionResult IsBlocked(const std::string& id) {