Views/Permissions: Update desktop UI to display BLOCK for embargoed permissions.

Update the website settings popup (the OIB) to show the appropriate 'block' text
when an permission is in embargo. For permissions embargoed because a kill
switch is turned on via Finch, prevent the user from being able to manually
allow this permission.

Note that while this currently doesn't work for media permissions, that will
change once they have been refactored to run through PermissionsManager.
See https://crbug.com/689799.

BUG=679877

Review-Url: https://codereview.chromium.org/2726853007
Cr-Commit-Position: refs/heads/master@{#455359}
diff --git a/chrome/browser/ui/website_settings/website_settings.cc b/chrome/browser/ui/website_settings/website_settings.cc
index a8549dd..88cf98b3 100644
--- a/chrome/browser/ui/website_settings/website_settings.cc
+++ b/chrome/browser/ui/website_settings/website_settings.cc
@@ -32,6 +32,8 @@
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/permissions/chooser_context_base.h"
+#include "chrome/browser/permissions/permission_manager.h"
+#include "chrome/browser/permissions/permission_result.h"
 #include "chrome/browser/permissions/permission_uma_util.h"
 #include "chrome/browser/permissions/permission_util.h"
 #include "chrome/browser/profiles/profile.h"
@@ -674,6 +676,28 @@
                                                       NULL);
     }
 
+    // For permissions that are still prompting the user and haven't been
+    // explicitly set by another source, check its embargo status.
+    if (PermissionUtil::IsPermission(permission_info.type) &&
+        permission_info.setting == CONTENT_SETTING_DEFAULT &&
+        permission_info.source ==
+            content_settings::SettingSource::SETTING_SOURCE_USER) {
+      // TODO(raymes): Use GetPermissionStatus() to retrieve information
+      // about *all* permissions once it has default behaviour implemented for
+      // ContentSettingTypes that aren't permissions.
+      PermissionResult permission_result =
+          PermissionManager::Get(profile_)->GetPermissionStatus(
+              permission_info.type, site_url_, site_url_);
+
+      // If under embargo, update |permission_info| to reflect that.
+      if (permission_result.content_setting == CONTENT_SETTING_BLOCK &&
+          (permission_result.source ==
+               PermissionStatusSource::MULTIPLE_DISMISSALS ||
+           permission_result.source ==
+               PermissionStatusSource::SAFE_BROWSING_BLACKLIST))
+        permission_info.setting = permission_result.content_setting;
+    }
+
     permission_info_list.push_back(permission_info);
   }