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

Unified Diff: remoting/host/setup/me2me_native_messaging_host.cc

Issue 558403002: Remote Assistance on Chrome OS Part II - Native Messaging renaming (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on ToT Created 6 years, 3 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: remoting/host/setup/me2me_native_messaging_host.cc
diff --git a/remoting/host/setup/me2me_native_messaging_host.cc b/remoting/host/setup/me2me_native_messaging_host.cc
index 51b77ef574887820a5e37c5b60d58763940dfd51..fc77b9f963e180f404eee4f811aa5dc862c9317f 100644
--- a/remoting/host/setup/me2me_native_messaging_host.cc
+++ b/remoting/host/setup/me2me_native_messaging_host.cc
@@ -21,6 +21,7 @@
#include "ipc/ipc_channel.h"
#include "net/base/net_util.h"
#include "remoting/base/rsa_key_pair.h"
+#include "remoting/host/native_messaging/pipe_messaging_channel.h"
#include "remoting/host/pin_hash.h"
#include "remoting/host/setup/oauth_client.h"
#include "remoting/protocol/pairing_registry.h"
@@ -72,7 +73,7 @@ namespace remoting {
Me2MeNativeMessagingHost::Me2MeNativeMessagingHost(
bool needs_elevation,
intptr_t parent_window_handle,
- scoped_ptr<NativeMessagingChannel> channel,
+ scoped_ptr<extensions::NativeMessagingChannel> channel,
scoped_refptr<DaemonController> daemon_controller,
scoped_refptr<protocol::PairingRegistry> pairing_registry,
scoped_ptr<OAuthClient> oauth_client)
@@ -93,71 +94,76 @@ Me2MeNativeMessagingHost::~Me2MeNativeMessagingHost() {
void Me2MeNativeMessagingHost::Start(
const base::Closure& quit_closure) {
DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(!quit_closure.is_null());
quit_closure_ = quit_closure;
- channel_->Start(
- base::Bind(&Me2MeNativeMessagingHost::ProcessRequest, weak_ptr_),
- base::Bind(&Me2MeNativeMessagingHost::Stop, weak_ptr_));
+ channel_->Start(this);
}
-void Me2MeNativeMessagingHost::ProcessRequest(
- scoped_ptr<base::DictionaryValue> message) {
+void Me2MeNativeMessagingHost::OnMessage(scoped_ptr<base::Value> message) {
DCHECK(thread_checker_.CalledOnValidThread());
+ scoped_ptr<base::DictionaryValue> message_dict(
+ static_cast<base::DictionaryValue*>(message.release()));
scoped_ptr<base::DictionaryValue> response(new base::DictionaryValue());
// If the client supplies an ID, it will expect it in the response. This
// might be a string or a number, so cope with both.
const base::Value* id;
- if (message->Get("id", &id))
+ if (message_dict->Get("id", &id))
response->Set("id", id->DeepCopy());
std::string type;
- if (!message->GetString("type", &type)) {
+ if (!message_dict->GetString("type", &type)) {
LOG(ERROR) << "'type' not found";
- channel_->SendMessage(scoped_ptr<base::DictionaryValue>());
+ channel_->SendMessage(scoped_ptr<base::Value>());
return;
}
response->SetString("type", type + "Response");
if (type == "hello") {
- ProcessHello(message.Pass(), response.Pass());
+ ProcessHello(message_dict.Pass(), response.Pass());
} else if (type == "clearPairedClients") {
- ProcessClearPairedClients(message.Pass(), response.Pass());
+ ProcessClearPairedClients(message_dict.Pass(), response.Pass());
} else if (type == "deletePairedClient") {
- ProcessDeletePairedClient(message.Pass(), response.Pass());
+ ProcessDeletePairedClient(message_dict.Pass(), response.Pass());
} else if (type == "getHostName") {
- ProcessGetHostName(message.Pass(), response.Pass());
+ ProcessGetHostName(message_dict.Pass(), response.Pass());
} else if (type == "getPinHash") {
- ProcessGetPinHash(message.Pass(), response.Pass());
+ ProcessGetPinHash(message_dict.Pass(), response.Pass());
} else if (type == "generateKeyPair") {
- ProcessGenerateKeyPair(message.Pass(), response.Pass());
+ ProcessGenerateKeyPair(message_dict.Pass(), response.Pass());
} else if (type == "updateDaemonConfig") {
- ProcessUpdateDaemonConfig(message.Pass(), response.Pass());
+ ProcessUpdateDaemonConfig(message_dict.Pass(), response.Pass());
} else if (type == "getDaemonConfig") {
- ProcessGetDaemonConfig(message.Pass(), response.Pass());
+ ProcessGetDaemonConfig(message_dict.Pass(), response.Pass());
} else if (type == "getPairedClients") {
- ProcessGetPairedClients(message.Pass(), response.Pass());
+ ProcessGetPairedClients(message_dict.Pass(), response.Pass());
} else if (type == "getUsageStatsConsent") {
- ProcessGetUsageStatsConsent(message.Pass(), response.Pass());
+ ProcessGetUsageStatsConsent(message_dict.Pass(), response.Pass());
} else if (type == "startDaemon") {
- ProcessStartDaemon(message.Pass(), response.Pass());
+ ProcessStartDaemon(message_dict.Pass(), response.Pass());
} else if (type == "stopDaemon") {
- ProcessStopDaemon(message.Pass(), response.Pass());
+ ProcessStopDaemon(message_dict.Pass(), response.Pass());
} else if (type == "getDaemonState") {
- ProcessGetDaemonState(message.Pass(), response.Pass());
+ ProcessGetDaemonState(message_dict.Pass(), response.Pass());
} else if (type == "getHostClientId") {
- ProcessGetHostClientId(message.Pass(), response.Pass());
+ ProcessGetHostClientId(message_dict.Pass(), response.Pass());
} else if (type == "getCredentialsFromAuthCode") {
- ProcessGetCredentialsFromAuthCode(message.Pass(), response.Pass());
+ ProcessGetCredentialsFromAuthCode(message_dict.Pass(), response.Pass());
} else {
LOG(ERROR) << "Unsupported request type: " << type;
OnError();
}
}
+void Me2MeNativeMessagingHost::OnDisconnect() {
+ if (!quit_closure_.is_null())
+ base::ResetAndReturn(&quit_closure_).Run();
+}
+
void Me2MeNativeMessagingHost::ProcessHello(
scoped_ptr<base::DictionaryValue> message,
scoped_ptr<base::DictionaryValue> response) {
@@ -168,7 +174,7 @@ void Me2MeNativeMessagingHost::ProcessHello(
supported_features_list->AppendStrings(std::vector<std::string>(
kSupportedFeatures, kSupportedFeatures + arraysize(kSupportedFeatures)));
response->Set("supportedFeatures", supported_features_list.release());
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::ProcessClearPairedClients(
@@ -226,7 +232,7 @@ void Me2MeNativeMessagingHost::ProcessGetHostName(
DCHECK(thread_checker_.CalledOnValidThread());
response->SetString("hostname", net::GetHostName());
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::ProcessGetPinHash(
@@ -247,7 +253,7 @@ void Me2MeNativeMessagingHost::ProcessGetPinHash(
return;
}
response->SetString("hash", MakeHostPinHash(host_id, pin));
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::ProcessGenerateKeyPair(
@@ -258,7 +264,7 @@ void Me2MeNativeMessagingHost::ProcessGenerateKeyPair(
scoped_refptr<RsaKeyPair> key_pair = RsaKeyPair::Generate();
response->SetString("privateKey", key_pair->ToString());
response->SetString("publicKey", key_pair->GetPublicKey());
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::ProcessUpdateDaemonConfig(
@@ -381,7 +387,7 @@ void Me2MeNativeMessagingHost::ProcessGetDaemonState(
response->SetString("state", "UNKNOWN");
break;
}
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::ProcessGetHostClientId(
@@ -391,7 +397,7 @@ void Me2MeNativeMessagingHost::ProcessGetHostClientId(
response->SetString("clientId", google_apis::GetOAuth2ClientID(
google_apis::CLIENT_REMOTING_HOST));
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::ProcessGetCredentialsFromAuthCode(
@@ -428,7 +434,7 @@ void Me2MeNativeMessagingHost::SendConfigResponse(
} else {
response->Set("config", base::Value::CreateNullValue());
}
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::SendPairedClientsResponse(
@@ -437,7 +443,7 @@ void Me2MeNativeMessagingHost::SendPairedClientsResponse(
DCHECK(thread_checker_.CalledOnValidThread());
response->Set("pairedClients", pairings.release());
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::SendUsageStatsConsentResponse(
@@ -448,7 +454,7 @@ void Me2MeNativeMessagingHost::SendUsageStatsConsentResponse(
response->SetBoolean("supported", consent.supported);
response->SetBoolean("allowed", consent.allowed);
response->SetBoolean("setByPolicy", consent.set_by_policy);
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::SendAsyncResult(
@@ -470,7 +476,7 @@ void Me2MeNativeMessagingHost::SendAsyncResult(
response->SetString("result", "FAILED_DIRECTORY");
break;
}
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::SendBooleanResult(
@@ -478,7 +484,7 @@ void Me2MeNativeMessagingHost::SendBooleanResult(
DCHECK(thread_checker_.CalledOnValidThread());
response->SetBoolean("result", result);
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::SendCredentialsResponse(
@@ -489,12 +495,12 @@ void Me2MeNativeMessagingHost::SendCredentialsResponse(
response->SetString("userEmail", user_email);
response->SetString("refreshToken", refresh_token);
- channel_->SendMessage(response.Pass());
+ channel_->SendMessage(response.PassAs<base::Value>());
}
void Me2MeNativeMessagingHost::OnError() {
// Trigger a host shutdown by sending a NULL message.
- channel_->SendMessage(scoped_ptr<base::DictionaryValue>());
+ channel_->SendMessage(scoped_ptr<base::Value>());
}
void Me2MeNativeMessagingHost::Stop() {
@@ -505,6 +511,22 @@ void Me2MeNativeMessagingHost::Stop() {
}
#if defined(OS_WIN)
+Me2MeNativeMessagingHost::ElevatedChannelEventHandler::
+ ElevatedChannelEventHandler(Me2MeNativeMessagingHost* host)
+ : parent_(host) {
+}
+
+void Me2MeNativeMessagingHost::ElevatedChannelEventHandler::OnMessage(
+ scoped_ptr<base::Value> message) {
+ DCHECK(parent_->thread_checker_.CalledOnValidThread());
+
+ // Simply pass along the response from the elevated host to the client.
+ parent_->channel_->SendMessage(message.Pass());
+}
+
+void Me2MeNativeMessagingHost::ElevatedChannelEventHandler::OnDisconnect() {
+ parent_->OnDisconnect();
+}
bool Me2MeNativeMessagingHost::DelegateToElevatedHost(
scoped_ptr<base::DictionaryValue> message) {
@@ -514,7 +536,7 @@ bool Me2MeNativeMessagingHost::DelegateToElevatedHost(
// elevated_channel_ will be null if user rejects the UAC request.
if (elevated_channel_)
- elevated_channel_->SendMessage(message.Pass());
+ elevated_channel_->SendMessage(message.PassAs<base::Value>());
return elevated_channel_ != NULL;
}
@@ -658,28 +680,20 @@ void Me2MeNativeMessagingHost::EnsureElevatedHostCreated() {
}
// Set up the native messaging channel to talk to the elevated host.
- // Note that input for the elevate channel is output forthe elevated host.
- elevated_channel_.reset(new NativeMessagingChannel(
- base::File(delegate_read_handle.Take()),
- base::File(delegate_write_handle.Take())));
+ // Note that input for the elevated channel is output for the elevated host.
+ elevated_channel_.reset(
+ new PipeMessagingChannel(base::File(delegate_read_handle.Take()),
+ base::File(delegate_write_handle.Take())));
- elevated_channel_->Start(
- base::Bind(&Me2MeNativeMessagingHost::ProcessDelegateResponse, weak_ptr_),
- base::Bind(&Me2MeNativeMessagingHost::Stop, weak_ptr_));
+ elevated_channel_event_handler_.reset(
+ new Me2MeNativeMessagingHost::ElevatedChannelEventHandler(this));
+ elevated_channel_->Start(elevated_channel_event_handler_.get());
elevated_host_timer_.Start(
FROM_HERE, base::TimeDelta::FromSeconds(kElevatedHostTimeoutSeconds),
this, &Me2MeNativeMessagingHost::DisconnectElevatedHost);
}
-void Me2MeNativeMessagingHost::ProcessDelegateResponse(
- scoped_ptr<base::DictionaryValue> message) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- // Simply pass along the response from the elevated host to the client.
- channel_->SendMessage(message.Pass());
-}
-
void Me2MeNativeMessagingHost::DisconnectElevatedHost() {
DCHECK(thread_checker_.CalledOnValidThread());
« no previous file with comments | « remoting/host/setup/me2me_native_messaging_host.h ('k') | remoting/host/setup/me2me_native_messaging_host_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698