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

Unified Diff: chrome/browser/extensions/api/gcd_private/gcd_private_api.cc

Issue 1106183006: Added gcdPrivate.getDeviceInfo function (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@no_establish
Patch Set: Mon Apr 27 22:56:49 PDT 2015 Created 5 years, 8 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/extensions/api/gcd_private/gcd_private_api.cc
diff --git a/chrome/browser/extensions/api/gcd_private/gcd_private_api.cc b/chrome/browser/extensions/api/gcd_private/gcd_private_api.cc
index 46db5da95349d974288bfaf8858095f6e7fe96ef..c63202f98126024c2d1d1b178453f3d4c1951540 100644
--- a/chrome/browser/extensions/api/gcd_private/gcd_private_api.cc
+++ b/chrome/browser/extensions/api/gcd_private/gcd_private_api.cc
@@ -101,8 +101,8 @@ class GcdPrivateAPIImpl : public EventRouter::Observer,
typedef base::Callback<void(int session_id,
api::gcd_private::Status status,
- const std::vector<api::gcd_private::PairingType>&
- pairing_types)> EstablishSessionCallback;
+ const base::DictionaryValue& info)>
+ CreateSessionCallback;
typedef base::Callback<void(api::gcd_private::Status status)> SessionCallback;
@@ -117,12 +117,8 @@ class GcdPrivateAPIImpl : public EventRouter::Observer,
bool QueryForDevices();
- void EstablishSession(const std::string& ip_address,
- int port,
- const EstablishSessionCallback& callback);
-
void CreateSession(const std::string& service_name,
- const EstablishSessionCallback& callback);
+ const CreateSessionCallback& callback);
void StartPairing(int session_id,
api::gcd_private::PairingType pairing_type,
@@ -141,6 +137,7 @@ class GcdPrivateAPIImpl : public EventRouter::Observer,
const SuccessCallback& callback);
void RemoveSession(int session_id);
+ void RemoveSessionDelayed(int session_id);
scoped_ptr<base::ListValue> GetPrefetchedSSIDList();
@@ -169,7 +166,7 @@ class GcdPrivateAPIImpl : public EventRouter::Observer,
const MessageResponseCallback& callback);
void OnServiceResolved(int session_id,
- const EstablishSessionCallback& callback,
+ const CreateSessionCallback& callback,
scoped_ptr<local_discovery::PrivetHTTPClient> client);
#if defined(ENABLE_WIFI_BOOTSTRAPPING)
@@ -200,6 +197,10 @@ class GcdPrivateAPIImpl : public EventRouter::Observer,
scoped_ptr<local_discovery::wifi::WifiManager> wifi_manager_;
#endif
PasswordMap wifi_passwords_;
+
+ base::WeakPtrFactory<GcdPrivateAPIImpl> weak_ptr_factory_{this};
+
+ DISALLOW_COPY_AND_ASSIGN(GcdPrivateAPIImpl);
};
@@ -309,37 +310,9 @@ bool GcdPrivateAPIImpl::QueryForDevices() {
return true;
}
-void GcdPrivateAPIImpl::EstablishSession(
- const std::string& ip_address,
- int port,
- const EstablishSessionCallback& callback) {
- std::string host_string;
- net::IPAddressNumber address_number;
-
- if (net::ParseIPLiteralToNumber(ip_address, &address_number) &&
- address_number.size() == net::kIPv6AddressSize) {
- host_string = base::StringPrintf("[%s]", ip_address.c_str());
- } else {
- host_string = ip_address;
- }
-
- scoped_ptr<local_discovery::PrivetHTTPClient> http_client(
- new local_discovery::PrivetHTTPClientImpl(
- "", net::HostPortPair(host_string, port),
- browser_context_->GetRequestContext()));
-
+void GcdPrivateAPIImpl::CreateSession(const std::string& service_name,
+ const CreateSessionCallback& callback) {
int session_id = last_session_id_++;
- auto& session_data = sessions_[session_id];
- session_data.session.reset(
- new local_discovery::PrivetV3Session(http_client.Pass()));
- session_data.session->Init(base::Bind(callback, session_id));
-}
-
-void GcdPrivateAPIImpl::CreateSession(
- const std::string& service_name,
- const EstablishSessionCallback& callback) {
- int session_id = last_session_id_++;
-
scoped_ptr<local_discovery::PrivetHTTPAsynchronousFactory> factory(
local_discovery::PrivetHTTPAsynchronousFactory::CreateInstance(
browser_context_->GetRequestContext()));
@@ -353,11 +326,11 @@ void GcdPrivateAPIImpl::CreateSession(
void GcdPrivateAPIImpl::OnServiceResolved(
int session_id,
- const EstablishSessionCallback& callback,
+ const CreateSessionCallback& callback,
scoped_ptr<local_discovery::PrivetHTTPClient> client) {
if (!client) {
return callback.Run(session_id, gcd_private::STATUS_SERVICERESOLUTIONERROR,
- std::vector<gcd_private::PairingType>());
+ base::DictionaryValue());
}
auto& session_data = sessions_[session_id];
session_data.session.reset(
@@ -473,6 +446,12 @@ void GcdPrivateAPIImpl::RemoveSession(int session_id) {
sessions_.erase(session_id);
}
+void GcdPrivateAPIImpl::RemoveSessionDelayed(int session_id) {
+ base::MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(&GcdPrivateAPIImpl::RemoveSession,
+ weak_ptr_factory_.GetWeakPtr(), session_id));
+}
+
scoped_ptr<base::ListValue> GcdPrivateAPIImpl::GetPrefetchedSSIDList() {
scoped_ptr<base::ListValue> retval(new base::ListValue);
@@ -636,6 +615,42 @@ void GcdPrivatePrefetchWifiPasswordFunction::OnResponse(bool response) {
SendResponse(true);
}
+GcdPrivateGetDeviceInfoFunction::GcdPrivateGetDeviceInfoFunction() {
+}
+
+GcdPrivateGetDeviceInfoFunction::~GcdPrivateGetDeviceInfoFunction() {
+}
+
+bool GcdPrivateGetDeviceInfoFunction::RunAsync() {
+ scoped_ptr<gcd_private::CreateSession::Params> params =
+ gcd_private::CreateSession::Params::Create(*args_);
+
+ if (!params)
+ return false;
+
+ GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile());
+
+ GcdPrivateAPIImpl::CreateSessionCallback callback =
+ base::Bind(&GcdPrivateGetDeviceInfoFunction::OnSessionInitialized, this);
+ gcd_api->CreateSession(params->service_name, callback);
+
+ return true;
+}
+
+void GcdPrivateGetDeviceInfoFunction::OnSessionInitialized(
+ int session_id,
+ api::gcd_private::Status status,
+ const base::DictionaryValue& info) {
+ gcd_private::GetDeviceInfo::Results::DeviceInfo device_info;
+ device_info.additional_properties.MergeDictionary(&info);
+
+ results_ = gcd_private::GetDeviceInfo::Results::Create(status, device_info);
+ SendResponse(true);
+
+ GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile());
+ gcd_api->RemoveSessionDelayed(session_id);
+}
+
GcdPrivateCreateSessionFunction::GcdPrivateCreateSessionFunction() {
}
@@ -651,7 +666,7 @@ bool GcdPrivateCreateSessionFunction::RunAsync() {
GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile());
- GcdPrivateAPIImpl::EstablishSessionCallback callback =
+ GcdPrivateAPIImpl::CreateSessionCallback callback =
base::Bind(&GcdPrivateCreateSessionFunction::OnSessionInitialized, this);
gcd_api->CreateSession(params->service_name, callback);
@@ -661,7 +676,27 @@ bool GcdPrivateCreateSessionFunction::RunAsync() {
void GcdPrivateCreateSessionFunction::OnSessionInitialized(
int session_id,
api::gcd_private::Status status,
- const std::vector<api::gcd_private::PairingType>& pairing_types) {
+ const base::DictionaryValue& info) {
+ std::vector<api::gcd_private::PairingType> pairing_types;
+
+ // TODO(vitalybuka): Remove this parsing and |pairing_types| from callback.
+ if (status == gcd_private::STATUS_SUCCESS) {
+ const base::ListValue* pairing = nullptr;
+ if (info.GetList("authentication.pairing", &pairing)) {
+ for (const base::Value* value : *pairing) {
+ std::string pairing_string;
+ if (value->GetAsString(&pairing_string)) {
+ api::gcd_private::PairingType pairing_type =
+ api::gcd_private::ParsePairingType(pairing_string);
+ if (pairing_type != api::gcd_private::PAIRING_TYPE_NONE)
+ pairing_types.push_back(pairing_type);
+ }
+ }
+ } else {
+ status = gcd_private::STATUS_SESSIONERROR;
+ }
+ }
+
results_ = gcd_private::CreateSession::Results::Create(session_id, status,
pairing_types);
SendResponse(true);

Powered by Google App Engine
This is Rietveld 408576698