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

Side by Side Diff: chromeos/dbus/session_manager_client.cc

Issue 14761012: Updated SessionManagerClient to use the multi-profile user policy calls. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chromeos/dbus/session_manager_client.h" 5 #include "chromeos/dbus/session_manager_client.h"
6 6
7 #include <map>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/file_util.h"
12 #include "base/files/file_path.h"
13 #include "base/location.h"
14 #include "base/path_service.h"
9 #include "base/string_util.h" 15 #include "base/string_util.h"
16 #include "base/threading/worker_pool.h"
17 #include "chromeos/chromeos_paths.h"
10 #include "dbus/bus.h" 18 #include "dbus/bus.h"
11 #include "dbus/message.h" 19 #include "dbus/message.h"
12 #include "dbus/object_path.h" 20 #include "dbus/object_path.h"
13 #include "dbus/object_proxy.h" 21 #include "dbus/object_proxy.h"
14 #include "third_party/cros_system_api/dbus/service_constants.h" 22 #include "third_party/cros_system_api/dbus/service_constants.h"
15 23
16 namespace chromeos { 24 namespace chromeos {
17 25
18 // The SessionManagerClient implementation used in production. 26 // The SessionManagerClient implementation used in production.
19 class SessionManagerClientImpl : public SessionManagerClient { 27 class SessionManagerClientImpl : public SessionManagerClient {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 login_manager::kSessionManagerUnlockScreen); 180 login_manager::kSessionManagerUnlockScreen);
173 } 181 }
174 182
175 virtual void NotifyLockScreenDismissed() OVERRIDE { 183 virtual void NotifyLockScreenDismissed() OVERRIDE {
176 SimpleMethodCallToSessionManager( 184 SimpleMethodCallToSessionManager(
177 login_manager::kSessionManagerHandleLockScreenDismissed); 185 login_manager::kSessionManagerHandleLockScreenDismissed);
178 } 186 }
179 187
180 virtual void RetrieveDevicePolicy( 188 virtual void RetrieveDevicePolicy(
181 const RetrievePolicyCallback& callback) OVERRIDE { 189 const RetrievePolicyCallback& callback) OVERRIDE {
182 CallRetrievePolicy(login_manager::kSessionManagerRetrievePolicy, 190 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
183 callback); 191 login_manager::kSessionManagerRetrievePolicy);
192 session_manager_proxy_->CallMethod(
193 &method_call,
194 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
195 base::Bind(&SessionManagerClientImpl::OnRetrievePolicy,
196 weak_ptr_factory_.GetWeakPtr(),
197 login_manager::kSessionManagerRetrievePolicy,
198 callback));
184 } 199 }
185 200
186 virtual void RetrieveUserPolicy( 201 virtual void RetrievePolicyForUser(
202 const std::string& username,
187 const RetrievePolicyCallback& callback) OVERRIDE { 203 const RetrievePolicyCallback& callback) OVERRIDE {
188 CallRetrievePolicy(login_manager::kSessionManagerRetrieveUserPolicy, 204 CallRetrievePolicyForUsername(
189 callback); 205 login_manager::kSessionManagerRetrievePolicyForUser,
206 username,
207 callback);
190 } 208 }
191 209
192 virtual void RetrieveDeviceLocalAccountPolicy( 210 virtual void RetrieveDeviceLocalAccountPolicy(
193 const std::string& account_name, 211 const std::string& account_name,
194 const RetrievePolicyCallback& callback) OVERRIDE { 212 const RetrievePolicyCallback& callback) OVERRIDE {
195 dbus::MethodCall method_call( 213 CallRetrievePolicyForUsername(
196 login_manager::kSessionManagerInterface, 214 login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy,
197 login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy); 215 account_name,
198 dbus::MessageWriter writer(&method_call); 216 callback);
199 writer.AppendString(account_name);
200 session_manager_proxy_->CallMethod(
201 &method_call,
202 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
203 base::Bind(
204 &SessionManagerClientImpl::OnRetrievePolicy,
205 weak_ptr_factory_.GetWeakPtr(),
206 login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy,
207 callback));
208 } 217 }
209 218
210 virtual void StoreDevicePolicy(const std::string& policy_blob, 219 virtual void StoreDevicePolicy(const std::string& policy_blob,
211 const StorePolicyCallback& callback) OVERRIDE { 220 const StorePolicyCallback& callback) OVERRIDE {
212 CallStorePolicy(login_manager::kSessionManagerStorePolicy, 221 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
213 policy_blob, callback); 222 login_manager::kSessionManagerStorePolicy);
223 dbus::MessageWriter writer(&method_call);
224 // static_cast does not work due to signedness.
225 writer.AppendArrayOfBytes(
226 reinterpret_cast<const uint8*>(policy_blob.data()), policy_blob.size());
227 session_manager_proxy_->CallMethod(
228 &method_call,
229 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
230 base::Bind(&SessionManagerClientImpl::OnStorePolicy,
231 weak_ptr_factory_.GetWeakPtr(),
232 login_manager::kSessionManagerStorePolicy,
233 callback));
214 } 234 }
215 235
216 virtual void StoreUserPolicy(const std::string& policy_blob, 236 virtual void StorePolicyForUser(
217 const StorePolicyCallback& callback) OVERRIDE { 237 const std::string& username,
218 CallStorePolicy(login_manager::kSessionManagerStoreUserPolicy, 238 const std::string& policy_blob,
219 policy_blob, callback); 239 const std::string& ignored_policy_key,
240 const StorePolicyCallback& callback) OVERRIDE {
241 CallStorePolicyForUsername(login_manager::kSessionManagerStorePolicyForUser,
242 username,
243 policy_blob,
244 callback);
220 } 245 }
221 246
222 virtual void StoreDeviceLocalAccountPolicy( 247 virtual void StoreDeviceLocalAccountPolicy(
223 const std::string& account_name, 248 const std::string& account_name,
224 const std::string& policy_blob, 249 const std::string& policy_blob,
225 const StorePolicyCallback& callback) OVERRIDE { 250 const StorePolicyCallback& callback) OVERRIDE {
226 dbus::MethodCall method_call( 251 CallStorePolicyForUsername(
227 login_manager::kSessionManagerInterface, 252 login_manager::kSessionManagerStoreDeviceLocalAccountPolicy,
228 login_manager::kSessionManagerStoreDeviceLocalAccountPolicy); 253 account_name,
229 dbus::MessageWriter writer(&method_call); 254 policy_blob,
230 writer.AppendString(account_name); 255 callback);
231 // static_cast does not work due to signedness.
232 writer.AppendArrayOfBytes(
233 reinterpret_cast<const uint8*>(policy_blob.data()), policy_blob.size());
234 session_manager_proxy_->CallMethod(
235 &method_call,
236 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
237 base::Bind(
238 &SessionManagerClientImpl::OnStorePolicy,
239 weak_ptr_factory_.GetWeakPtr(),
240 login_manager::kSessionManagerStoreDeviceLocalAccountPolicy,
241 callback));
242 } 256 }
243 257
244 private: 258 private:
245 // Makes a method call to the session manager with no arguments and no 259 // Makes a method call to the session manager with no arguments and no
246 // response. 260 // response.
247 void SimpleMethodCallToSessionManager(const std::string& method_name) { 261 void SimpleMethodCallToSessionManager(const std::string& method_name) {
248 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 262 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
249 method_name); 263 method_name);
250 session_manager_proxy_->CallMethod( 264 session_manager_proxy_->CallMethod(
251 &method_call, 265 &method_call,
252 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 266 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
253 dbus::ObjectProxy::EmptyResponseCallback()); 267 dbus::ObjectProxy::EmptyResponseCallback());
254 } 268 }
255 269
256 // Helper for Retrieve{User,Device}Policy. 270 // Helper for RetrieveDeviceLocalAccountPolicy and RetrievePolicyForUser.
257 virtual void CallRetrievePolicy(const std::string& method_name, 271 void CallRetrievePolicyForUsername(const std::string& method_name,
Mattias Nissler (ping if slow) 2013/05/10 12:40:15 Can we rename to CallRetrievePolicyByUsername in o
Joao da Silva 2013/05/13 09:39:23 Done.
258 const RetrievePolicyCallback& callback) { 272 const std::string& username,
273 const RetrievePolicyCallback& callback) {
259 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 274 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
260 method_name); 275 method_name);
276 dbus::MessageWriter writer(&method_call);
277 writer.AppendString(username);
261 session_manager_proxy_->CallMethod( 278 session_manager_proxy_->CallMethod(
262 &method_call, 279 &method_call,
263 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 280 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
264 base::Bind(&SessionManagerClientImpl::OnRetrievePolicy, 281 base::Bind(
265 weak_ptr_factory_.GetWeakPtr(), 282 &SessionManagerClientImpl::OnRetrievePolicy,
266 method_name, 283 weak_ptr_factory_.GetWeakPtr(),
267 callback)); 284 method_name,
285 callback));
268 } 286 }
269 287
270 // Helper for Store{User,Device}Policy. 288 void CallStorePolicyForUsername(const std::string& method_name,
Mattias Nissler (ping if slow) 2013/05/10 12:40:15 Ditto re nameing, i.e. CallStorePolicyByUsername
Joao da Silva 2013/05/13 09:39:23 Done.
271 virtual void CallStorePolicy(const std::string& method_name, 289 const std::string& username,
272 const std::string& policy_blob, 290 const std::string& policy_blob,
273 const StorePolicyCallback& callback) { 291 const StorePolicyCallback& callback) {
274 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 292 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
275 method_name); 293 method_name);
276 dbus::MessageWriter writer(&method_call); 294 dbus::MessageWriter writer(&method_call);
295 writer.AppendString(username);
277 // static_cast does not work due to signedness. 296 // static_cast does not work due to signedness.
278 writer.AppendArrayOfBytes( 297 writer.AppendArrayOfBytes(
279 reinterpret_cast<const uint8*>(policy_blob.data()), policy_blob.size()); 298 reinterpret_cast<const uint8*>(policy_blob.data()), policy_blob.size());
280 session_manager_proxy_->CallMethod( 299 session_manager_proxy_->CallMethod(
281 &method_call, 300 &method_call,
282 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 301 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
283 base::Bind(&SessionManagerClientImpl::OnStorePolicy, 302 base::Bind(
284 weak_ptr_factory_.GetWeakPtr(), 303 &SessionManagerClientImpl::OnStorePolicy,
285 method_name, 304 weak_ptr_factory_.GetWeakPtr(),
286 callback)); 305 method_name,
306 callback));
287 } 307 }
288 308
289 // Called when kSessionManagerRestartJob method is complete. 309 // Called when kSessionManagerRestartJob method is complete.
290 void OnRestartJob(dbus::Response* response) { 310 void OnRestartJob(dbus::Response* response) {
291 LOG_IF(ERROR, !response) 311 LOG_IF(ERROR, !response)
292 << "Failed to call " 312 << "Failed to call "
293 << login_manager::kSessionManagerRestartJob; 313 << login_manager::kSessionManagerRestartJob;
294 } 314 }
295 315
296 // Called when kSessionManagerStartSession method is complete. 316 // Called when kSessionManagerStartSession method is complete.
(...skipping 11 matching lines...) Expand all
308 } 328 }
309 329
310 // Called when kSessionManagerStopSession method is complete. 330 // Called when kSessionManagerStopSession method is complete.
311 void OnDeviceWipe(dbus::Response* response) { 331 void OnDeviceWipe(dbus::Response* response) {
312 LOG_IF(ERROR, !response) 332 LOG_IF(ERROR, !response)
313 << "Failed to call " 333 << "Failed to call "
314 << login_manager::kSessionManagerStartDeviceWipe; 334 << login_manager::kSessionManagerStartDeviceWipe;
315 } 335 }
316 336
317 // Called when kSessionManagerRetrievePolicy or 337 // Called when kSessionManagerRetrievePolicy or
318 // kSessionManagerRetrieveUserPolicy method is complete. 338 // kSessionManagerRetrievePolicyForUser method is complete.
319 void OnRetrievePolicy(const std::string& method_name, 339 void OnRetrievePolicy(const std::string& method_name,
320 const RetrievePolicyCallback& callback, 340 const RetrievePolicyCallback& callback,
321 dbus::Response* response) { 341 dbus::Response* response) {
322 if (!response) { 342 if (!response) {
323 LOG(ERROR) << "Failed to call " << method_name; 343 LOG(ERROR) << "Failed to call " << method_name;
324 callback.Run(""); 344 callback.Run("");
325 return; 345 return;
326 } 346 }
327 dbus::MessageReader reader(response); 347 dbus::MessageReader reader(response);
328 uint8* values = NULL; 348 uint8* values = NULL;
329 size_t length = 0; 349 size_t length = 0;
330 if (!reader.PopArrayOfBytes(&values, &length)) { 350 if (!reader.PopArrayOfBytes(&values, &length)) {
331 LOG(ERROR) << "Invalid response: " << response->ToString(); 351 LOG(ERROR) << "Invalid response: " << response->ToString();
332 callback.Run(""); 352 callback.Run("");
333 return; 353 return;
334 } 354 }
335 // static_cast does not work due to signedness. 355 // static_cast does not work due to signedness.
336 std::string serialized_proto(reinterpret_cast<char*>(values), length); 356 std::string serialized_proto(reinterpret_cast<char*>(values), length);
337 callback.Run(serialized_proto); 357 callback.Run(serialized_proto);
338 } 358 }
339 359
340 // Called when kSessionManagerStorePolicy or kSessionManagerStoreUserPolicy 360 // Called when kSessionManagerStorePolicy or kSessionManagerStorePolicyForUser
341 // method is complete. 361 // method is complete.
342 void OnStorePolicy(const std::string& method_name, 362 void OnStorePolicy(const std::string& method_name,
343 const StorePolicyCallback& callback, 363 const StorePolicyCallback& callback,
344 dbus::Response* response) { 364 dbus::Response* response) {
345 bool success = false; 365 bool success = false;
346 if (!response) { 366 if (!response) {
347 LOG(ERROR) << "Failed to call " << method_name; 367 LOG(ERROR) << "Failed to call " << method_name;
348 } else { 368 } else {
349 dbus::MessageReader reader(response); 369 dbus::MessageReader reader(response);
350 if (!reader.PopBool(&success)) 370 if (!reader.PopBool(&success))
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 // invalidate its weak pointers before any other members are destroyed. 432 // invalidate its weak pointers before any other members are destroyed.
413 base::WeakPtrFactory<SessionManagerClientImpl> weak_ptr_factory_; 433 base::WeakPtrFactory<SessionManagerClientImpl> weak_ptr_factory_;
414 434
415 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientImpl); 435 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientImpl);
416 }; 436 };
417 437
418 // The SessionManagerClient implementation used on Linux desktop, 438 // The SessionManagerClient implementation used on Linux desktop,
419 // which does nothing. 439 // which does nothing.
420 class SessionManagerClientStubImpl : public SessionManagerClient { 440 class SessionManagerClientStubImpl : public SessionManagerClient {
421 public: 441 public:
422 SessionManagerClientStubImpl() {} 442 SessionManagerClientStubImpl() {
443 // Make sure that there are no keys left over from a previous browser run.
444 base::FilePath user_policy_key_dir;
445 if (PathService::Get(chromeos::DIR_USER_POLICY_KEYS,
446 &user_policy_key_dir)) {
447 base::WorkerPool::PostTask(
448 FROM_HERE,
449 base::Bind(base::IgnoreResult(&file_util::Delete),
450 user_policy_key_dir, true),
451 false);
452 }
453 }
423 virtual ~SessionManagerClientStubImpl() {} 454 virtual ~SessionManagerClientStubImpl() {}
424 455
425 // SessionManagerClient overrides. 456 // SessionManagerClient overrides.
426 virtual void AddObserver(Observer* observer) OVERRIDE { 457 virtual void AddObserver(Observer* observer) OVERRIDE {
427 observers_.AddObserver(observer); 458 observers_.AddObserver(observer);
428 } 459 }
429 virtual void RemoveObserver(Observer* observer) OVERRIDE { 460 virtual void RemoveObserver(Observer* observer) OVERRIDE {
430 observers_.RemoveObserver(observer); 461 observers_.RemoveObserver(observer);
431 } 462 }
432 virtual bool HasObserver(Observer* observer) OVERRIDE { 463 virtual bool HasObserver(Observer* observer) OVERRIDE {
(...skipping 15 matching lines...) Expand all
448 virtual void RequestUnlockScreen() OVERRIDE { 479 virtual void RequestUnlockScreen() OVERRIDE {
449 FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen()); 480 FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen());
450 } 481 }
451 virtual void NotifyLockScreenDismissed() OVERRIDE { 482 virtual void NotifyLockScreenDismissed() OVERRIDE {
452 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked()); 483 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked());
453 } 484 }
454 virtual void RetrieveDevicePolicy( 485 virtual void RetrieveDevicePolicy(
455 const RetrievePolicyCallback& callback) OVERRIDE { 486 const RetrievePolicyCallback& callback) OVERRIDE {
456 callback.Run(device_policy_); 487 callback.Run(device_policy_);
457 } 488 }
458 virtual void RetrieveUserPolicy( 489 virtual void RetrievePolicyForUser(
490 const std::string& username,
459 const RetrievePolicyCallback& callback) OVERRIDE { 491 const RetrievePolicyCallback& callback) OVERRIDE {
460 callback.Run(user_policy_); 492 callback.Run(user_policies_[username]);
461 } 493 }
462 virtual void RetrieveDeviceLocalAccountPolicy( 494 virtual void RetrieveDeviceLocalAccountPolicy(
463 const std::string& account_name, 495 const std::string& account_name,
464 const RetrievePolicyCallback& callback) OVERRIDE { 496 const RetrievePolicyCallback& callback) OVERRIDE {
465 callback.Run(""); 497 callback.Run(user_policies_[account_name]);
466 } 498 }
467 virtual void StoreDevicePolicy(const std::string& policy_blob, 499 virtual void StoreDevicePolicy(const std::string& policy_blob,
468 const StorePolicyCallback& callback) OVERRIDE { 500 const StorePolicyCallback& callback) OVERRIDE {
469 device_policy_ = policy_blob; 501 device_policy_ = policy_blob;
470 callback.Run(true); 502 callback.Run(true);
471 } 503 }
472 virtual void StoreUserPolicy(const std::string& policy_blob, 504 virtual void StorePolicyForUser(
473 const StorePolicyCallback& callback) OVERRIDE { 505 const std::string& username,
474 user_policy_ = policy_blob; 506 const std::string& policy_blob,
475 callback.Run(true); 507 const std::string& policy_key,
508 const StorePolicyCallback& callback) OVERRIDE {
509 if (policy_key.empty()) {
510 user_policies_[username] = policy_blob;
511 callback.Run(true);
512 return;
513 }
514 // The session manager writes the user policy key to a well-known
515 // location. Do the same with the stub impl, so that user policy works and
516 // can be tested on desktop builds.
Mattias Nissler (ping if slow) 2013/05/10 12:40:15 If you need this, why not extract the policy key f
Joao da Silva 2013/05/13 09:39:23 That'd be my preferred solution, but chromeos/ can
Mattias Nissler (ping if slow) 2013/05/13 10:27:14 Bummer. Any chance to get an exception into chrome
Joao da Silva 2013/05/13 10:54:19 Can we propose that change in another CL? I'd rath
517 base::FilePath key_path;
518 if (!PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &key_path)) {
519 callback.Run(false);
520 return;
521 }
522 // Keep this in sync with CryptohomeClientStubImpl::GetSanitizedUsername.
523 const std::string sanitized = username + "-profile";
524 key_path = key_path.AppendASCII(sanitized).AppendASCII("policy.pub");
Mattias Nissler (ping if slow) 2013/05/10 12:40:15 This is misleading, please name it policy_key.pub
Joao da Silva 2013/05/13 09:39:23 This has to be the same name that the session_mana
Mattias Nissler (ping if slow) 2013/05/13 10:27:14 Oh right, I guess I should have payed closer atten
525 // Assume that the key write is successful.
526 user_policies_[username] = policy_blob;
527 base::WorkerPool::PostTaskAndReply(
528 FROM_HERE,
529 base::Bind(&SessionManagerClientStubImpl::StoreFileInBackground,
530 key_path, policy_key),
531 base::Bind(callback, true),
532 false);
476 } 533 }
477 virtual void StoreDeviceLocalAccountPolicy( 534 virtual void StoreDeviceLocalAccountPolicy(
478 const std::string& account_name, 535 const std::string& account_name,
479 const std::string& policy_blob, 536 const std::string& policy_blob,
480 const StorePolicyCallback& callback) OVERRIDE { 537 const StorePolicyCallback& callback) OVERRIDE {
538 user_policies_[account_name] = policy_blob;
481 callback.Run(true); 539 callback.Run(true);
482 } 540 }
483 541
542 static void StoreFileInBackground(const base::FilePath& path,
543 const std::string& data) {
544 const int size = static_cast<int>(data.size());
545 if (!file_util::CreateDirectory(path.DirName()) ||
546 file_util::WriteFile(path, data.data(), size) != size) {
547 LOG(WARNING) << "Failed to write policy key to " << path.value();
548 }
549 }
550
484 private: 551 private:
485 ObserverList<Observer> observers_; 552 ObserverList<Observer> observers_;
486 std::string device_policy_; 553 std::string device_policy_;
487 std::string user_policy_; 554 std::map<std::string, std::string> user_policies_;
488 555
489 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientStubImpl); 556 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientStubImpl);
490 }; 557 };
491 558
492 SessionManagerClient::SessionManagerClient() { 559 SessionManagerClient::SessionManagerClient() {
493 } 560 }
494 561
495 SessionManagerClient::~SessionManagerClient() { 562 SessionManagerClient::~SessionManagerClient() {
496 } 563 }
497 564
498 SessionManagerClient* SessionManagerClient::Create( 565 SessionManagerClient* SessionManagerClient::Create(
499 DBusClientImplementationType type, 566 DBusClientImplementationType type,
500 dbus::Bus* bus) { 567 dbus::Bus* bus) {
501 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 568 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
502 return new SessionManagerClientImpl(bus); 569 return new SessionManagerClientImpl(bus);
503 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 570 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
504 return new SessionManagerClientStubImpl(); 571 return new SessionManagerClientStubImpl();
505 } 572 }
506 573
507 } // namespace chromeos 574 } // namespace chromeos
OLDNEW
« chromeos/dbus/session_manager_client.h ('K') | « chromeos/dbus/session_manager_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698