Index: remoting/host/setup/native_messaging_host_unittest.cc |
diff --git a/remoting/host/setup/native_messaging_host_unittest.cc b/remoting/host/setup/native_messaging_host_unittest.cc |
index 3a1de9a538e5dea1844c0af753479d569348d1dd..8ca2966b21d9ee6c46ccdce03fcf079e599ad7ce 100644 |
--- a/remoting/host/setup/native_messaging_host_unittest.cc |
+++ b/remoting/host/setup/native_messaging_host_unittest.cc |
@@ -16,6 +16,7 @@ |
#include "google_apis/gaia/gaia_oauth_client.h" |
#include "net/base/file_stream.h" |
#include "net/base/net_util.h" |
+#include "remoting/base/auto_thread_task_runner.h" |
#include "remoting/host/pin_hash.h" |
#include "remoting/host/setup/test_util.h" |
#include "remoting/protocol/pairing_registry.h" |
@@ -130,77 +131,86 @@ void VerifyStartDaemonResponse(scoped_ptr<base::DictionaryValue> response) { |
namespace remoting { |
-class MockDaemonController : public DaemonController { |
+class MockDaemonControllerDelegate : public DaemonController::Delegate { |
public: |
- MockDaemonController(); |
- virtual ~MockDaemonController(); |
- |
- virtual State GetState() OVERRIDE; |
- virtual void GetConfig(const GetConfigCallback& callback) OVERRIDE; |
- virtual void SetConfigAndStart(scoped_ptr<base::DictionaryValue> config, |
- bool consent, |
- const CompletionCallback& callback) OVERRIDE; |
- virtual void UpdateConfig(scoped_ptr<base::DictionaryValue> config, |
- const CompletionCallback& callback) OVERRIDE; |
- virtual void Stop(const CompletionCallback& callback) OVERRIDE; |
+ MockDaemonControllerDelegate(); |
+ virtual ~MockDaemonControllerDelegate(); |
+ |
+ // DaemonController::Delegate interface. |
+ virtual DaemonController::State GetState() OVERRIDE; |
+ virtual scoped_ptr<base::DictionaryValue> GetConfig() OVERRIDE; |
+ virtual void SetConfigAndStart( |
+ scoped_ptr<base::DictionaryValue> config, |
+ bool consent, |
+ const DaemonController::CompletionCallback& done) OVERRIDE; |
+ virtual void UpdateConfig( |
+ scoped_ptr<base::DictionaryValue> config, |
+ const DaemonController::CompletionCallback& done) OVERRIDE; |
+ virtual void Stop(const DaemonController::CompletionCallback& done) OVERRIDE; |
virtual void SetWindow(void* window_handle) OVERRIDE; |
- virtual void GetVersion(const GetVersionCallback& callback) OVERRIDE; |
- virtual void GetUsageStatsConsent( |
- const GetUsageStatsConsentCallback& callback) OVERRIDE; |
+ virtual std::string GetVersion() OVERRIDE; |
+ virtual DaemonController::UsageStatsConsent GetUsageStatsConsent() OVERRIDE; |
private: |
- DISALLOW_COPY_AND_ASSIGN(MockDaemonController); |
+ DISALLOW_COPY_AND_ASSIGN(MockDaemonControllerDelegate); |
}; |
-MockDaemonController::MockDaemonController() {} |
+MockDaemonControllerDelegate::MockDaemonControllerDelegate() {} |
-MockDaemonController::~MockDaemonController() {} |
+MockDaemonControllerDelegate::~MockDaemonControllerDelegate() {} |
-DaemonController::State MockDaemonController::GetState() { |
+DaemonController::State MockDaemonControllerDelegate::GetState() { |
return DaemonController::STATE_STARTED; |
} |
-void MockDaemonController::GetConfig(const GetConfigCallback& callback) { |
- scoped_ptr<base::DictionaryValue> config(new base::DictionaryValue()); |
- callback.Run(config.Pass()); |
+scoped_ptr<base::DictionaryValue> MockDaemonControllerDelegate::GetConfig() { |
+ return scoped_ptr<base::DictionaryValue>(new base::DictionaryValue()); |
} |
-void MockDaemonController::SetConfigAndStart( |
- scoped_ptr<base::DictionaryValue> config, bool consent, |
- const CompletionCallback& callback) { |
+void MockDaemonControllerDelegate::SetConfigAndStart( |
+ scoped_ptr<base::DictionaryValue> config, |
+ bool consent, |
+ const DaemonController::CompletionCallback& done) { |
// Verify parameters passed in. |
if (consent && config && config->HasKey("start")) { |
- callback.Run(DaemonController::RESULT_OK); |
+ done.Run(DaemonController::RESULT_OK); |
} else { |
- callback.Run(DaemonController::RESULT_FAILED); |
+ done.Run(DaemonController::RESULT_FAILED); |
} |
} |
-void MockDaemonController::UpdateConfig( |
+void MockDaemonControllerDelegate::UpdateConfig( |
scoped_ptr<base::DictionaryValue> config, |
- const CompletionCallback& callback) { |
+ const DaemonController::CompletionCallback& done) { |
if (config && config->HasKey("update")) { |
- callback.Run(DaemonController::RESULT_OK); |
+ done.Run(DaemonController::RESULT_OK); |
} else { |
- callback.Run(DaemonController::RESULT_FAILED); |
+ done.Run(DaemonController::RESULT_FAILED); |
} |
} |
-void MockDaemonController::Stop(const CompletionCallback& callback) { |
- callback.Run(DaemonController::RESULT_OK); |
+void MockDaemonControllerDelegate::Stop( |
+ const DaemonController::CompletionCallback& done) { |
+ done.Run(DaemonController::RESULT_OK); |
} |
-void MockDaemonController::SetWindow(void* window_handle) {} |
+void MockDaemonControllerDelegate::SetWindow(void* window_handle) {} |
-void MockDaemonController::GetVersion(const GetVersionCallback& callback) { |
+std::string MockDaemonControllerDelegate::GetVersion() { |
// Unused - NativeMessagingHost returns the compiled-in version string |
// instead of calling this method. |
+ NOTREACHED(); |
+ return std::string(); |
} |
-void MockDaemonController::GetUsageStatsConsent( |
- const GetUsageStatsConsentCallback& callback) { |
- callback.Run(true, true, true); |
+DaemonController::UsageStatsConsent |
+MockDaemonControllerDelegate::GetUsageStatsConsent() { |
+ DaemonController::UsageStatsConsent consent; |
+ consent.supported = true; |
+ consent.allowed = true; |
+ consent.set_by_policy = true; |
+ return consent; |
} |
class NativeMessagingHostTest : public testing::Test { |
@@ -213,6 +223,9 @@ class NativeMessagingHostTest : public testing::Test { |
void Run(); |
+ // Deletes |host_|. |
+ void DeleteHost(); |
+ |
scoped_ptr<base::DictionaryValue> ReadMessageFromOutputPipe(); |
void WriteMessageToInputPipe(const base::Value& message); |
@@ -224,8 +237,8 @@ class NativeMessagingHostTest : public testing::Test { |
void TestBadRequest(const base::Value& message); |
protected: |
- // Reference to the MockDaemonController, which is owned by |host_|. |
- MockDaemonController* daemon_controller_; |
+ // Reference to the MockDaemonControllerDelegate, which is owned by |host_|. |
+ MockDaemonControllerDelegate* daemon_controller_delegate_; |
private: |
// Each test creates two unidirectional pipes: "input" and "output". |
@@ -255,19 +268,27 @@ void NativeMessagingHostTest::SetUp() { |
ASSERT_TRUE(MakePipe(&input_read_handle_, &input_write_handle_)); |
ASSERT_TRUE(MakePipe(&output_read_handle_, &output_write_handle_)); |
- daemon_controller_ = new MockDaemonController(); |
- scoped_ptr<DaemonController> daemon_controller(daemon_controller_); |
+ // Arrange to run |message_loop_| until no components depend on it. |
+ scoped_refptr<AutoThreadTaskRunner> task_runner = new AutoThreadTaskRunner( |
+ message_loop_.message_loop_proxy(), run_loop_.QuitClosure()); |
+ |
+ daemon_controller_delegate_ = new MockDaemonControllerDelegate(); |
+ scoped_refptr<DaemonController> daemon_controller( |
+ new DaemonController( |
+ scoped_ptr<DaemonController::Delegate>(daemon_controller_delegate_))); |
scoped_refptr<PairingRegistry> pairing_registry = |
new SynchronousPairingRegistry(scoped_ptr<PairingRegistry::Delegate>( |
new MockPairingRegistryDelegate())); |
- host_.reset(new NativeMessagingHost(daemon_controller.Pass(), |
- pairing_registry, |
- scoped_ptr<remoting::OAuthClient>(), |
- input_read_handle_, output_write_handle_, |
- message_loop_.message_loop_proxy(), |
- run_loop_.QuitClosure())); |
+ host_.reset(new NativeMessagingHost( |
+ daemon_controller, |
+ pairing_registry, |
+ scoped_ptr<remoting::OAuthClient>(), |
+ input_read_handle_, output_write_handle_, |
+ task_runner, |
+ base::Bind(&NativeMessagingHostTest::DeleteHost, |
+ base::Unretained(this)))); |
} |
void NativeMessagingHostTest::TearDown() { |
@@ -283,7 +304,9 @@ void NativeMessagingHostTest::Run() { |
base::ClosePlatformFile(input_write_handle_); |
host_->Start(); |
run_loop_.Run(); |
+} |
+void NativeMessagingHostTest::DeleteHost() { |
// Destroy |host_| so that it closes its end of the output pipe, so that |
// TestBadRequest() will see EOF and won't block waiting for more data. |
host_.reset(); |