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

Unified Diff: chrome/browser/ui/webui/policy_ui.cc

Issue 7828042: Implemented status section functionality for about:policy. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 9 years, 4 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
« chrome/browser/resources/policy.js ('K') | « chrome/browser/ui/webui/policy_ui.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/policy_ui.cc
diff --git a/chrome/browser/ui/webui/policy_ui.cc b/chrome/browser/ui/webui/policy_ui.cc
index 99ebb3e2bba09d7ba130336868c9d6caa7ea5c66..1da6e2ff46a150097e1a8ece5d46f1f0a8a6090a 100644
--- a/chrome/browser/ui/webui/policy_ui.cc
+++ b/chrome/browser/ui/webui/policy_ui.cc
@@ -4,9 +4,19 @@
#include "chrome/browser/ui/webui/policy_ui.h"
-#include "chrome/browser/policy/policy_status_info.h"
+#include "base/i18n/time_formatting.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/login/user_manager.h"
+#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/browser/policy/browser_policy_connector.h"
+#include "chrome/browser/policy/cloud_policy_cache_base.h"
+#include "chrome/browser/policy/cloud_policy_data_store.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
Mattias Nissler (ping if slow) 2011/09/02 11:16:09 What do you need ProfileManager for?
simo 2011/09/02 15:32:02 Oh, nothing, forgot to take that out.
#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h"
+#include "chrome/common/time_format.h"
+#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "grit/browser_resources.h"
@@ -26,6 +36,10 @@ ChromeWebUIDataSource* CreatePolicyUIHTMLSource() {
IDS_POLICY_USER_POLICIES);
source->AddLocalizedString("enrollmentDomainText",
IDS_POLICY_ENROLLMENT_DOMAIN);
+ source->AddLocalizedString("deviceIdText", IDS_POLICY_DEVICE_ID);
+ source->AddLocalizedString("usernameText",
+ IDS_POLICY_USERNAME);
+ source->AddLocalizedString("userIdText", IDS_POLICY_USER_ID);
source->AddLocalizedString("lastFetchedText", IDS_POLICY_LAST_FETCHED);
source->AddLocalizedString("fetchIntervalText", IDS_POLICY_FETCH_INTERVAL);
source->AddLocalizedString("serverStatusText", IDS_POLICY_SERVER_STATUS);
@@ -39,6 +53,8 @@ ChromeWebUIDataSource* CreatePolicyUIHTMLSource() {
source->AddLocalizedString("policyValueTableHeader", IDS_POLICY_ENTRY_VALUE);
source->AddLocalizedString("policyStatusTableHeader",
IDS_POLICY_ENTRY_STATUS);
+ source->AddLocalizedString("showMoreText", IDS_POLICY_SHOW_MORE);
+ source->AddLocalizedString("hideText", IDS_POLICY_HIDE);
source->set_json_path("strings.js");
// Add required resources.
@@ -68,9 +84,11 @@ PolicyUIHandler::PolicyUIHandler() {
managed_cloud,
recommended_platform,
recommended_cloud));
+ policy_status_->AddObserver(this);
}
PolicyUIHandler::~PolicyUIHandler() {
+ policy_status_->RemoveObserver(this);
}
WebUIMessageHandler* PolicyUIHandler::Attach(WebUI* web_ui) {
@@ -78,17 +96,161 @@ WebUIMessageHandler* PolicyUIHandler::Attach(WebUI* web_ui) {
}
void PolicyUIHandler::RegisterMessages() {
- web_ui_->RegisterMessageCallback("requestPolicyData",
- NewCallback(this, &PolicyUIHandler::HandleRequestPolicyData));
+ web_ui_->RegisterMessageCallback("requestData",
+ NewCallback(this, &PolicyUIHandler::HandleRequestData));
+ web_ui_->RegisterMessageCallback("updateFetchTimes",
+ NewCallback(this, &PolicyUIHandler::HandleUpdateFetchTimes));
+ web_ui_->RegisterMessageCallback("fetchPolicy",
+ NewCallback(this, &PolicyUIHandler::HandleFetchPolicy));
}
-void PolicyUIHandler::HandleRequestPolicyData(const ListValue* args) {
+void PolicyUIHandler::OnPolicyValuesChanged() {
+ SendDataToUI(true);
+}
+
+void PolicyUIHandler::HandleRequestData(const ListValue* args) {
+ SendDataToUI(false);
+}
+
+void PolicyUIHandler::HandleUpdateFetchTimes(const ListValue* args) {
Mattias Nissler (ping if slow) 2011/09/02 11:16:09 I see that you poll for these from the JS side. I
simo 2011/09/02 15:32:02 Since I can't find any time formatting in javascri
+ policy::BrowserPolicyConnector* connector =
+ g_browser_process->browser_policy_connector();
+ policy::CloudPolicySubsystem* device_subsystem =
+ connector->device_cloud_policy_subsystem();
+ policy::CloudPolicySubsystem* user_subsystem =
+ connector->user_cloud_policy_subsystem();
+ DictionaryValue result;
+
+ if (device_subsystem)
+ result.SetString("deviceLastFetchTime",
+ GetLastFetchTime(device_subsystem));
+ if (user_subsystem)
+ result.SetString("userLastFetchTime",
+ GetLastFetchTime(user_subsystem));
+
+ web_ui_->CallJavascriptFunction("Policy.returnFetchTimes", result);
+}
+
+void PolicyUIHandler::HandleFetchPolicy(const ListValue* args) {
+ policy::BrowserPolicyConnector* connector =
+ g_browser_process->browser_policy_connector();
+ connector->FetchDevicePolicy();
+ connector->FetchUserPolicy();
+ SendDataToUI(true);
+}
+
+void PolicyUIHandler::SendDataToUI(bool is_policy_update) {
+ DictionaryValue results;
bool any_policies_sent;
ListValue* list = policy_status_->GetPolicyStatusList(&any_policies_sent);
- DictionaryValue results;
results.Set("policies", list);
results.SetBoolean("anyPoliciesSet", any_policies_sent);
- web_ui_->CallJavascriptFunction("Policy.returnPolicyData", results);
+ DictionaryValue* dict = GetStatusData(is_policy_update);
+ results.Set("status", dict);
+
+ if (is_policy_update)
+ web_ui_->CallJavascriptFunction("Policy.updatePolicyData", results);
+ else
+ web_ui_->CallJavascriptFunction("Policy.returnData", results);
+}
+
+DictionaryValue* PolicyUIHandler::GetStatusData(bool is_policy_update) {
+ DictionaryValue* results = new DictionaryValue();
+ policy::BrowserPolicyConnector* connector =
+ g_browser_process->browser_policy_connector();
+
+ policy::CloudPolicySubsystem* device_subsystem =
+ connector->device_cloud_policy_subsystem();
+ policy::CloudPolicySubsystem* user_subsystem =
+ connector->user_cloud_policy_subsystem();
+
+ // If no CloudPolicySubsystem is available, the status section is not
+ // displayed and we can return here.
+ if (!device_subsystem || !user_subsystem) {
+ results->SetBoolean("displayStatusSection", false);
+ return results;
+ } else {
+ results->SetBoolean("displayStatusSection", true);
+ }
+
+ // Get the server status message and the time at which policy was last fetched
+ // for both user and device policy from the appropriate CloudPolicySubsystem.
+ string16 device_status_message =
+ CreateStatusMessageString(device_subsystem->error_details());
+ string16 user_status_message =
+ CreateStatusMessageString(user_subsystem->error_details());
+
+ string16 device_last_fetch_time = GetLastFetchTime(device_subsystem);
+ string16 user_last_fetch_time = GetLastFetchTime(user_subsystem);
Mattias Nissler (ping if slow) 2011/09/02 11:16:09 No need for all the local variables, just put the
simo 2011/09/02 15:32:02 Done.
+
+ results->SetString("deviceStatusMessage", device_status_message);
+ results->SetString("deviceLastFetchTime", device_last_fetch_time);
+ results->SetString("userStatusMessage", user_status_message);
+ results->SetString("userLastFetchTime", user_last_fetch_time);
+
+ // Get device id and user id.
+ const policy::CloudPolicyDataStore* device_data_store =
+ connector->GetDeviceCloudPolicyDataStore();
+ const policy::CloudPolicyDataStore* user_data_store =
+ connector->GetUserCloudPolicyDataStore();
+
+ string16 device_id = device_data_store ?
+ ASCIIToUTF16(device_data_store->device_id()) : string16();
+ string16 user_id = user_data_store ?
+ ASCIIToUTF16(user_data_store->device_id()) : string16();
+ results->SetString("deviceId", device_id);
+ results->SetString("userId", user_id);
Mattias Nissler (ping if slow) 2011/09/02 11:16:09 Looks like for the identifiers, you could also int
simo 2011/09/02 15:32:02 Done.
+
+ // Get enterprise domain and username (only on ChromeOS).
+#if defined (OS_CHROMEOS)
+ string16 enterprise_domain = ASCIIToUTF16(connector->GetEnterpriseDomain());
+ chromeos::UserManager::User user =
+ chromeos::UserManager::Get()->logged_in_user();
+ string16 username = ASCIIToUTF16(user.email());
+ results->SetString("devicePolicyDomain", enterprise_domain);
+ results->SetString("user", username);
Mattias Nissler (ping if slow) 2011/09/02 11:16:09 Again, no need for local variables.
simo 2011/09/02 15:32:02 Done.
+#else
+ results->SetString("devicePolicyDomain", string16());
+ results->SetString("user", string16());
+#endif
+
+ // Get policy fetch interval for both device and user policy.
+ PrefService* prefs = g_browser_process->local_state();
+
+ base::TimeDelta device_fetch_interval = base::TimeDelta::FromMilliseconds(
+ prefs->GetInteger(prefs::kDevicePolicyRefreshRate));
Mattias Nissler (ping if slow) 2011/09/02 11:16:09 Another good case for a helper function that wraps
simo 2011/09/02 15:32:02 Done.
+ base::TimeDelta user_fetch_interval = base::TimeDelta::FromMilliseconds(
+ prefs->GetInteger(prefs::kUserPolicyRefreshRate));
+
+ results->SetString("deviceFetchInterval",
+ TimeFormat::TimeRemainingShort(device_fetch_interval));
+ results->SetString("userFetchInterval",
+ TimeFormat::TimeRemainingShort(user_fetch_interval));
+
+ return results;
+}
+
+string16 PolicyUIHandler::GetLastFetchTime(
+ policy::CloudPolicySubsystem* subsystem) {
+ policy::CloudPolicyCacheBase* cache_base =
+ subsystem->GetCloudPolicyCacheBase();
+ base::TimeDelta time_delta =
+ base::Time::NowFromSystemTime() - cache_base->last_policy_refresh_time();
+
+ return TimeFormat::TimeElapsed(time_delta);
+}
+
+// static
+string16 PolicyUIHandler::CreateStatusMessageString(
+ CloudPolicySubsystem::ErrorDetails error_details) {
+ static string16 error_to_string[] = { ASCIIToUTF16("OK."),
+ ASCIIToUTF16("Network error."),
+ ASCIIToUTF16("Network error."),
+ ASCIIToUTF16("Bad DMToken."),
+ ASCIIToUTF16("Local error."),
+ ASCIIToUTF16("Signature mismatch.") };
+ DCHECK(static_cast<size_t>(error_details) < arraysize(error_to_string));
+ return error_to_string[error_details];
}
////////////////////////////////////////////////////////////////////////////////
« chrome/browser/resources/policy.js ('K') | « chrome/browser/ui/webui/policy_ui.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698