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

Unified Diff: chrome/browser/extensions/api/system_private/system_private_api.cc

Issue 12089062: Move API functions registrations out of ExtensionFunctionRegistry. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 7 years, 10 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
Index: chrome/browser/extensions/api/system_private/system_private_api.cc
===================================================================
--- chrome/browser/extensions/api/system_private/system_private_api.cc (revision 0)
+++ chrome/browser/extensions/api/system_private/system_private_api.cc (revision 0)
@@ -0,0 +1,157 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/system_private/system_private_api.h"
+
+#include "base/prefs/pref_service.h"
+#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/extensions/event_router_forwarder.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/pref_names.h"
+
+#if defined(OS_CHROMEOS)
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/update_engine_client.h"
+#else
+#include "chrome/browser/upgrade_detector.h"
+#endif
+
+namespace {
+
+// Maps prefs::kIncognitoModeAvailability values (0 = enabled, ...)
+// to strings exposed to extensions.
+const char* kIncognitoModeAvailabilityStrings[] = {
+ "enabled",
+ "disabled",
+ "forced"
+};
+
+// Property keys.
+const char kBrightnessKey[] = "brightness";
+const char kDownloadProgressKey[] = "downloadProgress";
+const char kIsVolumeMutedKey[] = "isVolumeMuted";
+const char kStateKey[] = "state";
+const char kUserInitiatedKey[] = "userInitiated";
+const char kVolumeKey[] = "volume";
+
+// System update states.
+const char kNotAvailableState[] = "NotAvailable";
+const char kUpdatingState[] = "Updating";
+const char kNeedRestartState[] = "NeedRestart";
+
+// Event names.
+const char kOnBrightnessChanged[] = "systemPrivate.onBrightnessChanged";
+const char kOnVolumeChanged[] = "systemPrivate.onVolumeChanged";
+const char kOnScreenUnlocked[] = "systemPrivate.onScreenUnlocked";
+const char kOnWokeUp[] = "systemPrivate.onWokeUp";
+
+// Dispatches an extension event with |argument|
+void DispatchEvent(const std::string& event_name, base::Value* argument) {
+ scoped_ptr<base::ListValue> list_args(new base::ListValue());
+ if (argument) {
+ list_args->Append(argument);
+ }
+ g_browser_process->extension_event_router_forwarder()->
+ BroadcastEventToRenderers(event_name, list_args.Pass(), GURL());
+}
+
+} // namespace
+
+namespace extensions {
+
+bool SystemPrivateGetIncognitoModeAvailabilityFunction::RunImpl() {
+ PrefService* prefs = profile_->GetPrefs();
+ int value = prefs->GetInteger(prefs::kIncognitoModeAvailability);
+ EXTENSION_FUNCTION_VALIDATE(
+ value >= 0 &&
+ value < static_cast<int>(arraysize(kIncognitoModeAvailabilityStrings)));
+ SetResult(Value::CreateStringValue(kIncognitoModeAvailabilityStrings[value]));
+ return true;
+}
+
+bool SystemPrivateGetUpdateStatusFunction::RunImpl() {
+ std::string state;
+ double download_progress = 0;
+#if defined(OS_CHROMEOS)
+ // With UpdateEngineClient, we can provide more detailed information about
+ // system updates on ChromeOS.
+ const chromeos::UpdateEngineClient::Status status =
+ chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->
+ GetLastStatus();
+ // |download_progress| is set to 1 after download finishes
+ // (i.e. verify, finalize and need-reboot phase) to indicate the progress
+ // even though |status.download_progress| is 0 in these phases.
+ switch (status.status) {
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_ERROR:
+ state = kNotAvailableState;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_IDLE:
+ state = kNotAvailableState;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE:
+ state = kNotAvailableState;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE:
+ state = kUpdatingState;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_DOWNLOADING:
+ state = kUpdatingState;
+ download_progress = status.download_progress;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_VERIFYING:
+ state = kUpdatingState;
+ download_progress = 1;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_FINALIZING:
+ state = kUpdatingState;
+ download_progress = 1;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT:
+ state = kNeedRestartState;
+ download_progress = 1;
+ break;
+ case chromeos::UpdateEngineClient::UPDATE_STATUS_REPORTING_ERROR_EVENT:
+ state = kNotAvailableState;
+ break;
+ }
+#else
+ if (UpgradeDetector::GetInstance()->notify_upgrade()) {
+ state = kNeedRestartState;
+ download_progress = 1;
+ } else {
+ state = kNotAvailableState;
+ }
+#endif
+ DictionaryValue* dict = new DictionaryValue();
+ dict->SetString(kStateKey, state);
+ dict->SetDouble(kDownloadProgressKey, download_progress);
+ SetResult(dict);
+
+ return true;
+}
+
+void DispatchVolumeChangedEvent(double volume, bool is_volume_muted) {
+ DictionaryValue* dict = new DictionaryValue();
+ dict->SetDouble(kVolumeKey, volume);
+ dict->SetBoolean(kIsVolumeMutedKey, is_volume_muted);
+ DispatchEvent(kOnVolumeChanged, dict);
+}
+
+void DispatchBrightnessChangedEvent(int brightness, bool user_initiated) {
+ DictionaryValue* dict = new DictionaryValue();
+ dict->SetInteger(kBrightnessKey, brightness);
+ dict->SetBoolean(kUserInitiatedKey, user_initiated);
+ DispatchEvent(kOnBrightnessChanged, dict);
+}
+
+void DispatchScreenUnlockedEvent() {
+ DispatchEvent(kOnScreenUnlocked, NULL);
+}
+
+void DispatchWokeUpEvent() {
+ DispatchEvent(kOnWokeUp, NULL);
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698