| Index: chrome/browser/importer/firefox_importer_unittest_utils_mac.cc | 
| diff --git a/chrome/browser/importer/firefox_importer_unittest_utils_mac.cc b/chrome/browser/importer/firefox_importer_unittest_utils_mac.cc | 
| deleted file mode 100644 | 
| index 33c877a03eb3b30e52055031dea7f5042eda6e12..0000000000000000000000000000000000000000 | 
| --- a/chrome/browser/importer/firefox_importer_unittest_utils_mac.cc | 
| +++ /dev/null | 
| @@ -1,280 +0,0 @@ | 
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -#include "chrome/browser/importer/firefox_importer_unittest_utils.h" | 
| - | 
| -#include "base/base_switches.h" | 
| -#include "base/bind.h" | 
| -#include "base/command_line.h" | 
| -#include "base/file_util.h" | 
| -#include "base/files/file_path.h" | 
| -#include "base/message_loop.h" | 
| -#include "base/test/test_timeouts.h" | 
| -#include "chrome/browser/importer/firefox_importer_utils.h" | 
| -#include "ipc/ipc_channel.h" | 
| -#include "ipc/ipc_descriptors.h" | 
| -#include "ipc/ipc_listener.h" | 
| -#include "ipc/ipc_message.h" | 
| -#include "ipc/ipc_multiprocess_test.h" | 
| -#include "ipc/ipc_switches.h" | 
| -#include "testing/multiprocess_func_list.h" | 
| - | 
| -#define IPC_MESSAGE_IMPL | 
| -#include "chrome/browser/importer/firefox_importer_unittest_messages_internal.h" | 
| - | 
| -namespace { | 
| - | 
| -// Name of IPC Channel to use for Server<-> Child Communications. | 
| -const char kTestChannelID[] = "T1"; | 
| - | 
| -// Launch the child process: | 
| -// |nss_path| - path to the NSS directory holding the decryption libraries. | 
| -// |channel| - IPC Channel to use for communication. | 
| -// |handle| - On return, the process handle to use to communicate with the | 
| -// child. | 
| -bool LaunchNSSDecrypterChildProcess(const base::FilePath& nss_path, | 
| -    IPC::Channel* channel, base::ProcessHandle* handle) { | 
| -  CommandLine cl(*CommandLine::ForCurrentProcess()); | 
| -  cl.AppendSwitchASCII(switches::kTestChildProcess, "NSSDecrypterChildProcess"); | 
| - | 
| -  // Set env variable needed for FF encryption libs to load. | 
| -  // See "chrome/browser/importer/nss_decryptor_mac.mm" for an explanation of | 
| -  // why we need this. | 
| -  base::EnvironmentVector env; | 
| -  std::pair<std::string, std::string> dyld_override; | 
| -  dyld_override.first = "DYLD_FALLBACK_LIBRARY_PATH"; | 
| -  dyld_override.second = nss_path.value(); | 
| -  env.push_back(dyld_override); | 
| - | 
| -  int ipcfd = channel->TakeClientFileDescriptor(); | 
| -  if (ipcfd == -1) | 
| -    return false; | 
| - | 
| -  file_util::ScopedFD client_file_descriptor_closer(&ipcfd); | 
| -  base::FileHandleMappingVector fds_to_map; | 
| -  fds_to_map.push_back(std::pair<int,int>(ipcfd, kPrimaryIPCChannel + 3)); | 
| - | 
| -  bool debug_on_start = CommandLine::ForCurrentProcess()->HasSwitch( | 
| -                            switches::kDebugChildren); | 
| -  base::LaunchOptions options; | 
| -  options.environ = &env; | 
| -  options.fds_to_remap = &fds_to_map; | 
| -  options.wait = debug_on_start; | 
| -  return base::LaunchProcess(cl.argv(), options, handle); | 
| -} | 
| - | 
| -}  // namespace | 
| - | 
| -//----------------------- Server -------------------- | 
| - | 
| -// Class to communicate on the server side of the IPC Channel. | 
| -// Method calls are sent over IPC and replies are read back into class | 
| -// variables. | 
| -// This class needs to be called on a single thread. | 
| -class FFDecryptorServerChannelListener : public IPC::Listener { | 
| - public: | 
| -  FFDecryptorServerChannelListener() | 
| -      : got_result(false), sender_(NULL) {} | 
| - | 
| -  void SetSender(IPC::Sender* sender) { | 
| -    sender_ = sender; | 
| -  } | 
| - | 
| -  void OnInitDecryptorResponse(bool result) { | 
| -    DCHECK(!got_result); | 
| -    result_bool = result; | 
| -    got_result = true; | 
| -    base::MessageLoop::current()->Quit(); | 
| -  } | 
| - | 
| -  void OnDecryptedTextResonse(const string16& decrypted_text) { | 
| -    DCHECK(!got_result); | 
| -    result_string = decrypted_text; | 
| -    got_result = true; | 
| -    base::MessageLoop::current()->Quit(); | 
| -  } | 
| - | 
| -  void QuitClient() { | 
| -    if (sender_) | 
| -      sender_->Send(new Msg_Decryptor_Quit()); | 
| -  } | 
| - | 
| -  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE { | 
| -    bool handled = true; | 
| -    IPC_BEGIN_MESSAGE_MAP(FFDecryptorServerChannelListener, msg) | 
| -      IPC_MESSAGE_HANDLER(Msg_Decryptor_InitReturnCode, OnInitDecryptorResponse) | 
| -      IPC_MESSAGE_HANDLER(Msg_Decryptor_Response, OnDecryptedTextResonse) | 
| -      IPC_MESSAGE_UNHANDLED(handled = false) | 
| -    IPC_END_MESSAGE_MAP() | 
| -    return handled; | 
| -  } | 
| - | 
| -  // If an error occured, just kill the message Loop. | 
| -  virtual void OnChannelError() OVERRIDE { | 
| -    got_result = false; | 
| -    base::MessageLoop::current()->Quit(); | 
| -  } | 
| - | 
| -  // Results of IPC calls. | 
| -  string16 result_string; | 
| -  bool result_bool; | 
| -  // True if IPC call succeeded and data in above variables is valid. | 
| -  bool got_result; | 
| - | 
| - private: | 
| -  IPC::Sender* sender_;  // weak | 
| -}; | 
| - | 
| -FFUnitTestDecryptorProxy::FFUnitTestDecryptorProxy() | 
| -    : child_process_(0) { | 
| -} | 
| - | 
| -bool FFUnitTestDecryptorProxy::Setup(const base::FilePath& nss_path) { | 
| -  // Create a new message loop and spawn the child process. | 
| -  message_loop_.reset(new base::MessageLoopForIO()); | 
| - | 
| -  listener_.reset(new FFDecryptorServerChannelListener()); | 
| -  channel_.reset(new IPC::Channel(kTestChannelID, | 
| -                                  IPC::Channel::MODE_SERVER, | 
| -                                  listener_.get())); | 
| -  CHECK(channel_->Connect()); | 
| -  listener_->SetSender(channel_.get()); | 
| - | 
| -  // Spawn child and set up sync IPC connection. | 
| -  bool ret = LaunchNSSDecrypterChildProcess(nss_path, | 
| -                                            channel_.get(), | 
| -                                            &child_process_); | 
| -  return ret && (child_process_ != 0); | 
| -} | 
| - | 
| -FFUnitTestDecryptorProxy::~FFUnitTestDecryptorProxy() { | 
| -  listener_->QuitClient(); | 
| -  channel_->Close(); | 
| - | 
| -  if (child_process_) { | 
| -    base::WaitForSingleProcess(child_process_, base::TimeDelta::FromSeconds(5)); | 
| -    base::CloseProcessHandle(child_process_); | 
| -  } | 
| -} | 
| - | 
| -// A message_loop task that quits the message loop when invoked, setting cancel | 
| -// causes the task to do nothing when invoked. | 
| -class CancellableQuitMsgLoop : public base::RefCounted<CancellableQuitMsgLoop> { | 
| - public: | 
| -  CancellableQuitMsgLoop() : cancelled_(false) {} | 
| -  void QuitNow() { | 
| -    if (!cancelled_) | 
| -      base::MessageLoop::current()->Quit(); | 
| -  } | 
| -  bool cancelled_; | 
| - | 
| - private: | 
| -  friend class base::RefCounted<CancellableQuitMsgLoop>; | 
| -  ~CancellableQuitMsgLoop() {} | 
| -}; | 
| - | 
| -// Spin until either a client response arrives or a timeout occurs. | 
| -bool FFUnitTestDecryptorProxy::WaitForClientResponse() { | 
| -  // What we're trying to do here is to wait for an RPC message to go over the | 
| -  // wire and the client to reply.  If the client does not reply by a given | 
| -  // timeout we kill the message loop. | 
| -  // The way we do this is to post a CancellableQuitMsgLoop for 3 seconds in | 
| -  // the future and cancel it if an RPC message comes back earlier. | 
| -  // This relies on the IPC listener class to quit the message loop itself when | 
| -  // a message comes in. | 
| -  scoped_refptr<CancellableQuitMsgLoop> quit_task( | 
| -      new CancellableQuitMsgLoop()); | 
| -  base::MessageLoop::current()->PostDelayedTask( | 
| -      FROM_HERE, | 
| -      base::Bind(&CancellableQuitMsgLoop::QuitNow, quit_task.get()), | 
| -      TestTimeouts::action_max_timeout()); | 
| - | 
| -  message_loop_->Run(); | 
| -  bool ret = !quit_task->cancelled_; | 
| -  quit_task->cancelled_ = false; | 
| -  return ret; | 
| -} | 
| - | 
| -bool FFUnitTestDecryptorProxy::DecryptorInit(const base::FilePath& dll_path, | 
| -                                             const base::FilePath& db_path) { | 
| -  channel_->Send(new Msg_Decryptor_Init(dll_path, db_path)); | 
| -  bool ok = WaitForClientResponse(); | 
| -  if (ok && listener_->got_result) { | 
| -    listener_->got_result = false; | 
| -    return listener_->result_bool; | 
| -  } | 
| -  return false; | 
| -} | 
| - | 
| -string16 FFUnitTestDecryptorProxy::Decrypt(const std::string& crypt) { | 
| -  channel_->Send(new Msg_Decrypt(crypt)); | 
| -  bool ok = WaitForClientResponse(); | 
| -  if (ok && listener_->got_result) { | 
| -    listener_->got_result = false; | 
| -    return listener_->result_string; | 
| -  } | 
| -  return string16(); | 
| -} | 
| - | 
| -//---------------------------- Child Process ----------------------- | 
| - | 
| -// Class to listen on the client side of the ipc channel, it calls through | 
| -// to the NSSDecryptor and sends back a reply. | 
| -class FFDecryptorClientChannelListener : public IPC::Listener { | 
| - public: | 
| -  FFDecryptorClientChannelListener() | 
| -      : sender_(NULL) {} | 
| - | 
| -  void SetSender(IPC::Sender* sender) { | 
| -    sender_ = sender; | 
| -  } | 
| - | 
| -  void OnDecryptor_Init(base::FilePath dll_path, base::FilePath db_path) { | 
| -    bool ret = decryptor_.Init(dll_path, db_path); | 
| -    sender_->Send(new Msg_Decryptor_InitReturnCode(ret)); | 
| -  } | 
| - | 
| -  void OnDecrypt(std::string crypt) { | 
| -    string16 unencrypted_str = decryptor_.Decrypt(crypt); | 
| -    sender_->Send(new Msg_Decryptor_Response(unencrypted_str)); | 
| -  } | 
| - | 
| -  void OnQuitRequest() { | 
| -    base::MessageLoop::current()->Quit(); | 
| -  } | 
| - | 
| -  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE { | 
| -    bool handled = true; | 
| -    IPC_BEGIN_MESSAGE_MAP(FFDecryptorClientChannelListener, msg) | 
| -      IPC_MESSAGE_HANDLER(Msg_Decryptor_Init, OnDecryptor_Init) | 
| -      IPC_MESSAGE_HANDLER(Msg_Decrypt, OnDecrypt) | 
| -      IPC_MESSAGE_HANDLER(Msg_Decryptor_Quit, OnQuitRequest) | 
| -      IPC_MESSAGE_UNHANDLED(handled = false) | 
| -    IPC_END_MESSAGE_MAP() | 
| -    return handled; | 
| -  } | 
| - | 
| -  virtual void OnChannelError() OVERRIDE { | 
| -    base::MessageLoop::current()->Quit(); | 
| -  } | 
| - | 
| - private: | 
| -  NSSDecryptor decryptor_; | 
| -  IPC::Sender* sender_; | 
| -}; | 
| - | 
| -// Entry function in child process. | 
| -MULTIPROCESS_IPC_TEST_MAIN(NSSDecrypterChildProcess) { | 
| -  base::MessageLoopForIO main_message_loop; | 
| -  FFDecryptorClientChannelListener listener; | 
| - | 
| -  IPC::Channel channel(kTestChannelID, IPC::Channel::MODE_CLIENT, &listener); | 
| -  CHECK(channel.Connect()); | 
| -  listener.SetSender(&channel); | 
| - | 
| -  // run message loop | 
| -  base::MessageLoop::current()->Run(); | 
| - | 
| -  return 0; | 
| -} | 
|  |