OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_IMPORTER_FIREFOX_IMPORTER_UNITTEST_UTILS_H_ | |
6 #define CHROME_BROWSER_IMPORTER_FIREFOX_IMPORTER_UNITTEST_UTILS_H_ | |
7 | |
8 #include "base/basictypes.h" | |
9 #include "base/memory/scoped_ptr.h" | |
10 #include "base/process_util.h" | |
11 #include "chrome/browser/importer/nss_decryptor.h" | |
12 | |
13 class FFDecryptorServerChannelListener; | |
14 | |
15 namespace base { | |
16 class MessageLoopForIO; | |
17 } | |
18 | |
19 namespace IPC { | |
20 class Channel; | |
21 } // namespace IPC | |
22 | |
23 // On OS X NSSDecryptor needs to run in a separate process. To allow us to use | |
24 // the same unit test on all platforms we use a proxy class which spawns a | |
25 // child process to do decryption on OS X, and calls through directly | |
26 // to NSSDecryptor on other platforms. | |
27 // On OS X: | |
28 // 2 IPC messages are sent for every method of NSSDecryptor, one containing the | |
29 // input arguments sent from Server->Child and one coming back containing | |
30 // the return argument e.g. | |
31 // | |
32 // -> Msg_Decryptor_Init(dll_path, db_path) | |
33 // <- Msg_Decryptor_InitReturnCode(bool) | |
34 class FFUnitTestDecryptorProxy { | |
35 public: | |
36 FFUnitTestDecryptorProxy(); | |
37 virtual ~FFUnitTestDecryptorProxy(); | |
38 | |
39 // Initialize a decryptor, returns true if the object was | |
40 // constructed successfully. | |
41 bool Setup(const base::FilePath& nss_path); | |
42 | |
43 // This match the parallel functions in NSSDecryptor. | |
44 bool DecryptorInit(const base::FilePath& dll_path, | |
45 const base::FilePath& db_path); | |
46 string16 Decrypt(const std::string& crypt); | |
47 | |
48 private: | |
49 #if defined(OS_MACOSX) | |
50 // Blocks until either a timeout is reached, or until the client process | |
51 // responds to an IPC message. | |
52 // Returns true if a reply was received successfully and false if the | |
53 // the operation timed out. | |
54 bool WaitForClientResponse(); | |
55 | |
56 base::ProcessHandle child_process_; | |
57 scoped_ptr<IPC::Channel> channel_; | |
58 scoped_ptr<FFDecryptorServerChannelListener> listener_; | |
59 scoped_ptr<base::MessageLoopForIO> message_loop_; | |
60 #else | |
61 NSSDecryptor decryptor_; | |
62 #endif // !OS_MACOSX | |
63 DISALLOW_COPY_AND_ASSIGN(FFUnitTestDecryptorProxy); | |
64 }; | |
65 | |
66 // On Non-OSX platforms FFUnitTestDecryptorProxy simply calls through to | |
67 // NSSDecryptor. | |
68 #if !defined(OS_MACOSX) | |
69 FFUnitTestDecryptorProxy::FFUnitTestDecryptorProxy() { | |
70 } | |
71 | |
72 FFUnitTestDecryptorProxy::~FFUnitTestDecryptorProxy() { | |
73 } | |
74 | |
75 bool FFUnitTestDecryptorProxy::Setup(const base::FilePath& nss_path) { | |
76 return true; | |
77 } | |
78 | |
79 bool FFUnitTestDecryptorProxy::DecryptorInit(const base::FilePath& dll_path, | |
80 const base::FilePath& db_path) { | |
81 return decryptor_.Init(dll_path, db_path); | |
82 } | |
83 | |
84 string16 FFUnitTestDecryptorProxy::Decrypt(const std::string& crypt) { | |
85 return decryptor_.Decrypt(crypt); | |
86 } | |
87 #endif // !OS_MACOSX | |
88 | |
89 #endif // CHROME_BROWSER_IMPORTER_FIREFOX_IMPORTER_UNITTEST_UTILS_H_ | |
OLD | NEW |