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

Unified Diff: chrome/browser/importer/firefox_importer_unittest_utils_mac.cc

Issue 18501013: Move most importer code to chrome/utility/importer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: another gyp attempt Created 7 years, 5 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 side-by-side diff with in-line comments
Download patch
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;
-}
« no previous file with comments | « chrome/browser/importer/firefox_importer_unittest_utils.h ('k') | chrome/browser/importer/firefox_importer_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698