OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/chromeos/extensions/screenlock_private_api.h" | |
6 | |
7 #include "base/lazy_instance.h" | |
8 #include "base/values.h" | |
9 #include "chrome/browser/chromeos/login/screen_locker.h" | |
10 #include "chrome/browser/extensions/event_router.h" | |
11 #include "chrome/browser/extensions/extension_system.h" | |
12 #include "chrome/common/extensions/api/screenlock_private.h" | |
13 #include "chromeos/dbus/dbus_thread_manager.h" | |
14 | |
15 using chromeos::ScreenLocker; | |
16 | |
17 namespace screenlock = extensions::api::screenlock_private; | |
18 | |
19 namespace extensions { | |
20 | |
21 ScreenlockPrivateGetLockedFunction::ScreenlockPrivateGetLockedFunction() {} | |
22 | |
23 ScreenlockPrivateGetLockedFunction::~ScreenlockPrivateGetLockedFunction() {} | |
24 | |
25 bool ScreenlockPrivateGetLockedFunction::RunImpl() { | |
26 bool locked = false; | |
27 ScreenLocker* locker = ScreenLocker::default_screen_locker(); | |
28 if (locker) | |
29 locked = locker->locked(); | |
30 SetResult(new base::FundamentalValue(locked)); | |
31 SendResponse(error_.empty()); | |
32 return true; | |
33 } | |
34 | |
35 ScreenlockPrivateSetLockedFunction::ScreenlockPrivateSetLockedFunction() {} | |
36 | |
37 ScreenlockPrivateSetLockedFunction::~ScreenlockPrivateSetLockedFunction() {} | |
38 | |
39 bool ScreenlockPrivateSetLockedFunction::RunImpl() { | |
40 scoped_ptr<screenlock::SetLocked::Params> params( | |
41 screenlock::SetLocked::Params::Create(*args_)); | |
42 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
43 if (params->locked) { | |
44 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.
| |
45 } else { | |
46 ScreenLocker* locker = ScreenLocker::default_screen_locker(); | |
47 if (locker) | |
48 ScreenLocker::Hide(); | |
49 } | |
50 SendResponse(error_.empty()); | |
51 return true; | |
52 } | |
53 | |
54 ScreenlockPrivateShowMessageFunction::ScreenlockPrivateShowMessageFunction() {} | |
55 | |
56 ScreenlockPrivateShowMessageFunction::~ScreenlockPrivateShowMessageFunction() {} | |
57 | |
58 bool ScreenlockPrivateShowMessageFunction::RunImpl() { | |
59 scoped_ptr<screenlock::SetLocked::Params> params( | |
60 screenlock::SetLocked::Params::Create(*args_)); | |
61 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
62 ScreenLocker* locker = ScreenLocker::default_screen_locker(); | |
63 if (!locker) { | |
64 SendResponse(error_.empty()); | |
65 return true; | |
66 } | |
67 // TODO locker->ShowMessage(params->message); | |
68 SendResponse(error_.empty()); | |
69 return true; | |
70 } | |
71 | |
72 ScreenlockPrivateEventRouter::ScreenlockPrivateEventRouter(Profile* profile) | |
73 : profile_(profile) { | |
74 chromeos::SessionManagerClient* session_manager = | |
75 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); | |
76 if (!session_manager->HasObserver(this)) | |
77 session_manager->AddObserver(this); | |
78 } | |
79 | |
80 ScreenlockPrivateEventRouter::~ScreenlockPrivateEventRouter() {} | |
81 | |
82 void ScreenlockPrivateEventRouter::ScreenIsLocked() { | |
83 DispatchEvent(screenlock::OnChanged::kEventName, | |
84 new base::FundamentalValue(true)); | |
85 } | |
86 | |
87 void ScreenlockPrivateEventRouter::ScreenIsUnlocked() { | |
88 DispatchEvent(screenlock::OnChanged::kEventName, | |
89 new base::FundamentalValue(false)); | |
90 } | |
91 | |
92 void ScreenlockPrivateEventRouter::DispatchEvent( | |
93 const std::string& event_name, | |
94 base::Value* arg) { | |
95 scoped_ptr<base::ListValue> args(new base::ListValue()); | |
96 args->Append(arg); | |
97 scoped_ptr<extensions::Event> event(new extensions::Event( | |
98 event_name, args.Pass())); | |
99 extensions::ExtensionSystem::Get(profile_)->event_router()-> | |
100 BroadcastEvent(event.Pass()); | |
101 } | |
102 | |
103 static base::LazyInstance<extensions::ProfileKeyedAPIFactory< | |
104 ScreenlockPrivateEventRouter> > | |
105 g_factory = LAZY_INSTANCE_INITIALIZER; | |
106 | |
107 // static | |
108 extensions::ProfileKeyedAPIFactory<ScreenlockPrivateEventRouter>* | |
109 ScreenlockPrivateEventRouter::GetFactoryInstance() { | |
110 return &g_factory.Get(); | |
111 } | |
112 | |
113 void ScreenlockPrivateEventRouter::Shutdown() { | |
114 chromeos::SessionManagerClient* session_manager = | |
115 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); | |
116 if (session_manager->HasObserver(this)) | |
117 session_manager->RemoveObserver(this); | |
118 } | |
119 | |
120 } // namespace extensions | |
OLD | NEW |