OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/chromeos/cros/login_library.h" | 5 #include "chrome/browser/chromeos/cros/login_library.h" |
6 | 6 |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "chrome/browser/chrome_thread.h" | 8 #include "chrome/browser/chrome_thread.h" |
9 #include "chrome/browser/chromeos/cros/cros_library.h" | 9 #include "chrome/browser/chromeos/cros/cros_library.h" |
10 | 10 |
11 namespace chromeos { | 11 namespace chromeos { |
12 | 12 |
13 class LoginLibraryImpl : public LoginLibrary { | 13 class LoginLibraryImpl : public LoginLibrary { |
14 public: | 14 public: |
15 LoginLibraryImpl() {} | 15 LoginLibraryImpl() |
16 virtual ~LoginLibraryImpl() {} | 16 : set_owner_key_callback_(NULL) { |
| 17 } |
| 18 virtual ~LoginLibraryImpl() { |
| 19 if (session_connection_) { |
| 20 chromeos::DisconnectSession(session_connection_); |
| 21 } |
| 22 } |
17 | 23 |
18 bool EmitLoginPromptReady() { | 24 bool EmitLoginPromptReady() { |
19 return chromeos::EmitLoginPromptReady(); | 25 return chromeos::EmitLoginPromptReady(); |
20 } | 26 } |
21 | 27 |
| 28 bool SetOwnerKey(const std::vector<uint8>& public_key_der, |
| 29 Delegate<bool>* callback) { |
| 30 DCHECK(callback) << "must provide a callback to SetOwnerKey()"; |
| 31 set_owner_key_callback_ = callback; |
| 32 return chromeos::SetOwnerKey(public_key_der); |
| 33 } |
| 34 |
22 bool StartSession(const std::string& user_email, | 35 bool StartSession(const std::string& user_email, |
23 const std::string& unique_id /* unused */) { | 36 const std::string& unique_id /* unused */) { |
24 // only pass unique_id through once we use it for something. | 37 // only pass unique_id through once we use it for something. |
25 return chromeos::StartSession(user_email.c_str(), ""); | 38 return chromeos::StartSession(user_email.c_str(), ""); |
26 } | 39 } |
27 | 40 |
28 bool StopSession(const std::string& unique_id /* unused */) { | 41 bool StopSession(const std::string& unique_id /* unused */) { |
29 // only pass unique_id through once we use it for something. | 42 // only pass unique_id through once we use it for something. |
30 return chromeos::StopSession(""); | 43 return chromeos::StopSession(""); |
31 } | 44 } |
32 | 45 |
33 bool RestartJob(int pid, const std::string& command_line) { | 46 bool RestartJob(int pid, const std::string& command_line) { |
34 return chromeos::RestartJob(pid, command_line.c_str()); | 47 return chromeos::RestartJob(pid, command_line.c_str()); |
35 } | 48 } |
36 | 49 |
37 private: | 50 private: |
| 51 static void Handler(void* object, const OwnershipEvent& event) { |
| 52 LoginLibraryImpl* self = static_cast<LoginLibraryImpl*>(object); |
| 53 switch (event) { |
| 54 case SetKeySuccess: |
| 55 self->CompleteSetOwnerKey(true); |
| 56 break; |
| 57 case SetKeyFailure: |
| 58 self->CompleteSetOwnerKey(false); |
| 59 break; |
| 60 case WhitelistOpSuccess: |
| 61 case WhitelistOpFailure: |
| 62 case SettingsOpSuccess: |
| 63 case SettingsOpFailure: |
| 64 NOTIMPLEMENTED(); |
| 65 break; |
| 66 default: |
| 67 NOTREACHED(); |
| 68 } |
| 69 } |
| 70 |
| 71 void Init() { |
| 72 session_connection_ = chromeos::MonitorSession(&Handler, this); |
| 73 } |
| 74 |
| 75 void CompleteSetOwnerKey(bool result) { |
| 76 CHECK(set_owner_key_callback_) << "CompleteSetOwnerKey() called without " |
| 77 "a registered callback!"; |
| 78 set_owner_key_callback_->Run(result); |
| 79 set_owner_key_callback_ = NULL; |
| 80 } |
| 81 |
| 82 chromeos::SessionConnection session_connection_; |
| 83 |
| 84 Delegate<bool>* set_owner_key_callback_; |
| 85 |
38 DISALLOW_COPY_AND_ASSIGN(LoginLibraryImpl); | 86 DISALLOW_COPY_AND_ASSIGN(LoginLibraryImpl); |
39 }; | 87 }; |
40 | 88 |
41 class LoginLibraryStubImpl : public LoginLibrary { | 89 class LoginLibraryStubImpl : public LoginLibrary { |
42 public: | 90 public: |
43 LoginLibraryStubImpl() {} | 91 LoginLibraryStubImpl() {} |
44 virtual ~LoginLibraryStubImpl() {} | 92 virtual ~LoginLibraryStubImpl() {} |
45 | 93 |
46 bool EmitLoginPromptReady() { return true; } | 94 bool EmitLoginPromptReady() { return true; } |
| 95 bool SetOwnerKey(const std::vector<uint8>& public_key_der, |
| 96 Delegate<bool>* callback) { |
| 97 ChromeThread::PostTask( |
| 98 ChromeThread::UI, FROM_HERE, |
| 99 NewRunnableFunction(&SetOwnerKeyStubCallback, callback)); |
| 100 return true; |
| 101 } |
47 bool StartSession(const std::string& user_email, | 102 bool StartSession(const std::string& user_email, |
48 const std::string& unique_id /* unused */) { return true; } | 103 const std::string& unique_id /* unused */) { return true; } |
49 bool StopSession(const std::string& unique_id /* unused */) { return true; } | 104 bool StopSession(const std::string& unique_id /* unused */) { return true; } |
50 bool RestartJob(int pid, const std::string& command_line) { return true; } | 105 bool RestartJob(int pid, const std::string& command_line) { return true; } |
51 | 106 |
52 private: | 107 private: |
| 108 static void SetOwnerKeyStubCallback(Delegate<bool>* callback) { |
| 109 callback->Run(true); |
| 110 } |
| 111 |
53 DISALLOW_COPY_AND_ASSIGN(LoginLibraryStubImpl); | 112 DISALLOW_COPY_AND_ASSIGN(LoginLibraryStubImpl); |
54 }; | 113 }; |
55 | 114 |
56 // static | 115 // static |
57 LoginLibrary* LoginLibrary::GetImpl(bool stub) { | 116 LoginLibrary* LoginLibrary::GetImpl(bool stub) { |
58 if (stub) | 117 if (stub) |
59 return new LoginLibraryStubImpl(); | 118 return new LoginLibraryStubImpl(); |
60 else | 119 else |
61 return new LoginLibraryImpl(); | 120 return new LoginLibraryImpl(); |
62 } | 121 } |
63 | 122 |
64 } // namespace chromeos | 123 } // namespace chromeos |
OLD | NEW |