OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/screenlock_private/screenlock_private_ap
i.h" | 5 #include "chrome/browser/extensions/api/screenlock_private/screenlock_private_ap
i.h" |
6 | 6 |
7 #include <vector> | |
8 | |
9 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
10 #include "base/strings/utf_string_conversions.h" | |
11 #include "base/values.h" | 8 #include "base/values.h" |
12 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
13 #include "chrome/common/extensions/api/screenlock_private.h" | 10 #include "chrome/common/extensions/api/screenlock_private.h" |
14 #include "extensions/browser/event_router.h" | 11 #include "extensions/browser/event_router.h" |
15 #include "extensions/browser/image_loader.h" | |
16 #include "ui/gfx/image/image.h" | |
17 | 12 |
18 namespace screenlock = extensions::api::screenlock_private; | 13 namespace screenlock = extensions::api::screenlock_private; |
19 | 14 |
20 namespace extensions { | 15 namespace extensions { |
21 | 16 |
22 namespace { | 17 namespace { |
23 | 18 |
24 const char kNotLockedError[] = "Screen is not currently locked."; | 19 const char kNotLockedError[] = "Screen is not currently locked."; |
25 const char kInvalidIconError[] = "Invalid custom icon data."; | |
26 | |
27 ScreenlockBridge::LockHandler::AuthType ToLockHandlerAuthType( | |
28 screenlock::AuthType auth_type) { | |
29 switch (auth_type) { | |
30 case screenlock::AUTH_TYPE_OFFLINEPASSWORD: | |
31 return ScreenlockBridge::LockHandler::OFFLINE_PASSWORD; | |
32 case screenlock::AUTH_TYPE_NUMERICPIN: | |
33 return ScreenlockBridge::LockHandler::NUMERIC_PIN; | |
34 case screenlock::AUTH_TYPE_USERCLICK: | |
35 return ScreenlockBridge::LockHandler::USER_CLICK; | |
36 case screenlock::AUTH_TYPE_NONE: | |
37 break; | |
38 } | |
39 NOTREACHED(); | |
40 return ScreenlockBridge::LockHandler::OFFLINE_PASSWORD; | |
41 } | |
42 | 20 |
43 screenlock::AuthType FromLockHandlerAuthType( | 21 screenlock::AuthType FromLockHandlerAuthType( |
44 ScreenlockBridge::LockHandler::AuthType auth_type) { | 22 ScreenlockBridge::LockHandler::AuthType auth_type) { |
45 switch (auth_type) { | 23 switch (auth_type) { |
46 case ScreenlockBridge::LockHandler::OFFLINE_PASSWORD: | 24 case ScreenlockBridge::LockHandler::OFFLINE_PASSWORD: |
47 return screenlock::AUTH_TYPE_OFFLINEPASSWORD; | 25 return screenlock::AUTH_TYPE_OFFLINEPASSWORD; |
48 case ScreenlockBridge::LockHandler::NUMERIC_PIN: | 26 case ScreenlockBridge::LockHandler::NUMERIC_PIN: |
49 return screenlock::AUTH_TYPE_NUMERICPIN; | 27 return screenlock::AUTH_TYPE_NUMERICPIN; |
50 case ScreenlockBridge::LockHandler::USER_CLICK: | 28 case ScreenlockBridge::LockHandler::USER_CLICK: |
51 return screenlock::AUTH_TYPE_USERCLICK; | 29 return screenlock::AUTH_TYPE_USERCLICK; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 screenlock::SetLocked::Params::Create(*args_)); | 63 screenlock::SetLocked::Params::Create(*args_)); |
86 EXTENSION_FUNCTION_VALIDATE(params.get()); | 64 EXTENSION_FUNCTION_VALIDATE(params.get()); |
87 if (params->locked) | 65 if (params->locked) |
88 ScreenlockBridge::Get()->Lock(GetProfile()); | 66 ScreenlockBridge::Get()->Lock(GetProfile()); |
89 else | 67 else |
90 ScreenlockBridge::Get()->Unlock(GetProfile()); | 68 ScreenlockBridge::Get()->Unlock(GetProfile()); |
91 SendResponse(error_.empty()); | 69 SendResponse(error_.empty()); |
92 return true; | 70 return true; |
93 } | 71 } |
94 | 72 |
95 ScreenlockPrivateShowMessageFunction::ScreenlockPrivateShowMessageFunction() {} | |
96 | |
97 ScreenlockPrivateShowMessageFunction::~ScreenlockPrivateShowMessageFunction() {} | |
98 | |
99 bool ScreenlockPrivateShowMessageFunction::RunAsync() { | |
100 scoped_ptr<screenlock::ShowMessage::Params> params( | |
101 screenlock::ShowMessage::Params::Create(*args_)); | |
102 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
103 ScreenlockBridge::LockHandler* locker = | |
104 ScreenlockBridge::Get()->lock_handler(); | |
105 if (locker) | |
106 locker->ShowBannerMessage(base::UTF8ToUTF16(params->message)); | |
107 SendResponse(error_.empty()); | |
108 return true; | |
109 } | |
110 | |
111 ScreenlockPrivateShowCustomIconFunction:: | |
112 ScreenlockPrivateShowCustomIconFunction() {} | |
113 | |
114 ScreenlockPrivateShowCustomIconFunction:: | |
115 ~ScreenlockPrivateShowCustomIconFunction() {} | |
116 | |
117 bool ScreenlockPrivateShowCustomIconFunction::RunAsync() { | |
118 scoped_ptr<screenlock::ShowCustomIcon::Params> params( | |
119 screenlock::ShowCustomIcon::Params::Create(*args_)); | |
120 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
121 ScreenlockBridge::LockHandler* locker = | |
122 ScreenlockBridge::Get()->lock_handler(); | |
123 if (!locker) { | |
124 SetError(kNotLockedError); | |
125 return false; | |
126 } | |
127 | |
128 const int kMaxButtonIconSize = 40; | |
129 bool has_scale_100P = false; | |
130 std::vector<extensions::ImageLoader::ImageRepresentation> icon_info; | |
131 for (size_t i = 0; i < params->icon.size(); ++i) { | |
132 ui::ScaleFactor scale_factor; | |
133 if (params->icon[i]->scale_factor == 1.) { | |
134 scale_factor = ui::SCALE_FACTOR_100P; | |
135 } else if (params->icon[i]->scale_factor == 2.) { | |
136 scale_factor = ui::SCALE_FACTOR_200P; | |
137 } else { | |
138 continue; | |
139 } | |
140 | |
141 ExtensionResource resource = extension()->GetResource(params->icon[i]->url); | |
142 if (resource.empty()) | |
143 continue; | |
144 | |
145 icon_info.push_back( | |
146 ImageLoader::ImageRepresentation( | |
147 resource, | |
148 ImageLoader::ImageRepresentation::RESIZE_WHEN_LARGER, | |
149 gfx::Size(kMaxButtonIconSize * params->icon[i]->scale_factor, | |
150 kMaxButtonIconSize * params->icon[i]->scale_factor), | |
151 scale_factor)); | |
152 if (scale_factor == ui::SCALE_FACTOR_100P) | |
153 has_scale_100P = true; | |
154 } | |
155 | |
156 if (!has_scale_100P) { | |
157 SetError(kInvalidIconError); | |
158 return false; | |
159 } | |
160 | |
161 extensions::ImageLoader* loader = extensions::ImageLoader::Get(GetProfile()); | |
162 loader->LoadImagesAsync( | |
163 extension(), | |
164 icon_info, | |
165 base::Bind(&ScreenlockPrivateShowCustomIconFunction::OnImageLoaded, | |
166 this)); | |
167 return true; | |
168 } | |
169 | |
170 void ScreenlockPrivateShowCustomIconFunction::OnImageLoaded( | |
171 const gfx::Image& image) { | |
172 ScreenlockBridge::LockHandler* locker = | |
173 ScreenlockBridge::Get()->lock_handler(); | |
174 if (!locker) { | |
175 SetError(kNotLockedError); | |
176 SendResponse(false); | |
177 return; | |
178 } | |
179 | |
180 ScreenlockBridge::UserPodCustomIconOptions icon; | |
181 icon.SetIconAsImage(image); | |
182 locker->ShowUserPodCustomIcon( | |
183 ScreenlockBridge::GetAuthenticatedUserEmail(GetProfile()), | |
184 icon); | |
185 SendResponse(error_.empty()); | |
186 } | |
187 | |
188 ScreenlockPrivateHideCustomIconFunction:: | |
189 ScreenlockPrivateHideCustomIconFunction() { | |
190 } | |
191 | |
192 ScreenlockPrivateHideCustomIconFunction:: | |
193 ~ScreenlockPrivateHideCustomIconFunction() { | |
194 } | |
195 | |
196 bool ScreenlockPrivateHideCustomIconFunction::RunAsync() { | |
197 ScreenlockBridge::LockHandler* locker = | |
198 ScreenlockBridge::Get()->lock_handler(); | |
199 if (locker) { | |
200 locker->HideUserPodCustomIcon( | |
201 ScreenlockBridge::GetAuthenticatedUserEmail(GetProfile())); | |
202 } else { | |
203 SetError(kNotLockedError); | |
204 } | |
205 SendResponse(error_.empty()); | |
206 return true; | |
207 } | |
208 | |
209 ScreenlockPrivateSetAuthTypeFunction::ScreenlockPrivateSetAuthTypeFunction() {} | |
210 | |
211 ScreenlockPrivateSetAuthTypeFunction::~ScreenlockPrivateSetAuthTypeFunction() {} | |
212 | |
213 bool ScreenlockPrivateSetAuthTypeFunction::RunAsync() { | |
214 scoped_ptr<screenlock::SetAuthType::Params> params( | |
215 screenlock::SetAuthType::Params::Create(*args_)); | |
216 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
217 | |
218 ScreenlockBridge::LockHandler* locker = | |
219 ScreenlockBridge::Get()->lock_handler(); | |
220 if (locker) { | |
221 std::string initial_value = | |
222 params->initial_value.get() ? *(params->initial_value.get()) : ""; | |
223 locker->SetAuthType( | |
224 ScreenlockBridge::GetAuthenticatedUserEmail(GetProfile()), | |
225 ToLockHandlerAuthType(params->auth_type), | |
226 base::UTF8ToUTF16(initial_value)); | |
227 } else { | |
228 SetError(kNotLockedError); | |
229 } | |
230 SendResponse(error_.empty()); | |
231 return true; | |
232 } | |
233 | |
234 ScreenlockPrivateGetAuthTypeFunction::ScreenlockPrivateGetAuthTypeFunction() {} | |
235 | |
236 ScreenlockPrivateGetAuthTypeFunction::~ScreenlockPrivateGetAuthTypeFunction() {} | |
237 | |
238 bool ScreenlockPrivateGetAuthTypeFunction::RunAsync() { | |
239 ScreenlockBridge::LockHandler* locker = | |
240 ScreenlockBridge::Get()->lock_handler(); | |
241 if (locker) { | |
242 ScreenlockBridge::LockHandler::AuthType auth_type = locker->GetAuthType( | |
243 ScreenlockBridge::GetAuthenticatedUserEmail(GetProfile())); | |
244 std::string auth_type_name = | |
245 screenlock::ToString(FromLockHandlerAuthType(auth_type)); | |
246 SetResult(new base::StringValue(auth_type_name)); | |
247 } else { | |
248 SetError(kNotLockedError); | |
249 } | |
250 SendResponse(error_.empty()); | |
251 return true; | |
252 } | |
253 | |
254 ScreenlockPrivateAcceptAuthAttemptFunction:: | 73 ScreenlockPrivateAcceptAuthAttemptFunction:: |
255 ScreenlockPrivateAcceptAuthAttemptFunction() {} | 74 ScreenlockPrivateAcceptAuthAttemptFunction() {} |
256 | 75 |
257 ScreenlockPrivateAcceptAuthAttemptFunction:: | 76 ScreenlockPrivateAcceptAuthAttemptFunction:: |
258 ~ScreenlockPrivateAcceptAuthAttemptFunction() {} | 77 ~ScreenlockPrivateAcceptAuthAttemptFunction() {} |
259 | 78 |
260 bool ScreenlockPrivateAcceptAuthAttemptFunction::RunAsync() { | 79 bool ScreenlockPrivateAcceptAuthAttemptFunction::RunAsync() { |
261 scoped_ptr<screenlock::AcceptAuthAttempt::Params> params( | 80 scoped_ptr<screenlock::AcceptAuthAttempt::Params> params( |
262 screenlock::AcceptAuthAttempt::Params::Create(*args_)); | 81 screenlock::AcceptAuthAttempt::Params::Create(*args_)); |
263 EXTENSION_FUNCTION_VALIDATE(params.get()); | 82 EXTENSION_FUNCTION_VALIDATE(params.get()); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 scoped_ptr<base::ListValue> args(new base::ListValue()); | 144 scoped_ptr<base::ListValue> args(new base::ListValue()); |
326 args->AppendString(screenlock::ToString(FromLockHandlerAuthType(auth_type))); | 145 args->AppendString(screenlock::ToString(FromLockHandlerAuthType(auth_type))); |
327 args->AppendString(value); | 146 args->AppendString(value); |
328 | 147 |
329 scoped_ptr<extensions::Event> event(new extensions::Event( | 148 scoped_ptr<extensions::Event> event(new extensions::Event( |
330 screenlock::OnAuthAttempted::kEventName, args.Pass())); | 149 screenlock::OnAuthAttempted::kEventName, args.Pass())); |
331 extensions::EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass()); | 150 extensions::EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass()); |
332 } | 151 } |
333 | 152 |
334 } // namespace extensions | 153 } // namespace extensions |
OLD | NEW |