Chromium Code Reviews| Index: chrome/browser/chromeos/extensions/screenlock_private_api.cc |
| diff --git a/chrome/browser/chromeos/extensions/screenlock_private_api.cc b/chrome/browser/chromeos/extensions/screenlock_private_api.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..92e214f29a4ff646f99823ba5be1156b5d1202b1 |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/extensions/screenlock_private_api.cc |
| @@ -0,0 +1,120 @@ |
| +// Copyright (c) 2013 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/chromeos/extensions/screenlock_private_api.h" |
| + |
| +#include "base/lazy_instance.h" |
| +#include "base/values.h" |
| +#include "chrome/browser/chromeos/login/screen_locker.h" |
| +#include "chrome/browser/extensions/event_router.h" |
| +#include "chrome/browser/extensions/extension_system.h" |
| +#include "chrome/common/extensions/api/screenlock_private.h" |
| +#include "chromeos/dbus/dbus_thread_manager.h" |
| + |
| +using chromeos::ScreenLocker; |
| + |
| +namespace screenlock = extensions::api::screenlock_private; |
| + |
| +namespace extensions { |
| + |
| +ScreenlockPrivateGetLockedFunction::ScreenlockPrivateGetLockedFunction() {} |
| + |
| +ScreenlockPrivateGetLockedFunction::~ScreenlockPrivateGetLockedFunction() {} |
| + |
| +bool ScreenlockPrivateGetLockedFunction::RunImpl() { |
| + bool locked = false; |
| + ScreenLocker* locker = ScreenLocker::default_screen_locker(); |
| + if (locker) |
| + locked = locker->locked(); |
| + SetResult(new base::FundamentalValue(locked)); |
| + SendResponse(error_.empty()); |
| + return true; |
| +} |
| + |
| +ScreenlockPrivateSetLockedFunction::ScreenlockPrivateSetLockedFunction() {} |
| + |
| +ScreenlockPrivateSetLockedFunction::~ScreenlockPrivateSetLockedFunction() {} |
| + |
| +bool ScreenlockPrivateSetLockedFunction::RunImpl() { |
| + scoped_ptr<screenlock::SetLocked::Params> params( |
| + screenlock::SetLocked::Params::Create(*args_)); |
| + EXTENSION_FUNCTION_VALIDATE(params.get()); |
| + if (params->locked) { |
| + ScreenLocker::Show(); |
|
xiyuan
2013/11/13 20:47:30
Let's do the locking via session manager.
BusThre
benjhayden
2013/11/13 21:42:22
Done.
|
| + } else { |
| + ScreenLocker* locker = ScreenLocker::default_screen_locker(); |
| + if (locker) |
| + ScreenLocker::Hide(); |
| + } |
| + SendResponse(error_.empty()); |
| + return true; |
| +} |
| + |
| +ScreenlockPrivateShowMessageFunction::ScreenlockPrivateShowMessageFunction() {} |
| + |
| +ScreenlockPrivateShowMessageFunction::~ScreenlockPrivateShowMessageFunction() {} |
| + |
| +bool ScreenlockPrivateShowMessageFunction::RunImpl() { |
| + scoped_ptr<screenlock::SetLocked::Params> params( |
| + screenlock::SetLocked::Params::Create(*args_)); |
| + EXTENSION_FUNCTION_VALIDATE(params.get()); |
| + ScreenLocker* locker = ScreenLocker::default_screen_locker(); |
| + if (!locker) { |
| + SendResponse(error_.empty()); |
| + return true; |
| + } |
| + // TODO locker->ShowMessage(params->message); |
| + SendResponse(error_.empty()); |
| + return true; |
| +} |
| + |
| +ScreenlockPrivateEventRouter::ScreenlockPrivateEventRouter(Profile* profile) |
| + : profile_(profile) { |
| + chromeos::SessionManagerClient* session_manager = |
| + chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); |
| + if (!session_manager->HasObserver(this)) |
| + session_manager->AddObserver(this); |
| +} |
| + |
| +ScreenlockPrivateEventRouter::~ScreenlockPrivateEventRouter() {} |
| + |
| +void ScreenlockPrivateEventRouter::ScreenIsLocked() { |
| + DispatchEvent(screenlock::OnChanged::kEventName, |
| + new base::FundamentalValue(true)); |
| +} |
| + |
| +void ScreenlockPrivateEventRouter::ScreenIsUnlocked() { |
| + DispatchEvent(screenlock::OnChanged::kEventName, |
| + new base::FundamentalValue(false)); |
| +} |
| + |
| +void ScreenlockPrivateEventRouter::DispatchEvent( |
| + const std::string& event_name, |
| + base::Value* arg) { |
| + scoped_ptr<base::ListValue> args(new base::ListValue()); |
| + args->Append(arg); |
| + scoped_ptr<extensions::Event> event(new extensions::Event( |
| + event_name, args.Pass())); |
| + extensions::ExtensionSystem::Get(profile_)->event_router()-> |
| + BroadcastEvent(event.Pass()); |
| +} |
| + |
| +static base::LazyInstance<extensions::ProfileKeyedAPIFactory< |
| + ScreenlockPrivateEventRouter> > |
| + g_factory = LAZY_INSTANCE_INITIALIZER; |
| + |
| +// static |
| +extensions::ProfileKeyedAPIFactory<ScreenlockPrivateEventRouter>* |
| +ScreenlockPrivateEventRouter::GetFactoryInstance() { |
| + return &g_factory.Get(); |
| +} |
| + |
| +void ScreenlockPrivateEventRouter::Shutdown() { |
| + chromeos::SessionManagerClient* session_manager = |
| + chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); |
| + if (session_manager->HasObserver(this)) |
| + session_manager->RemoveObserver(this); |
| +} |
| + |
| +} // namespace extensions |