Replace services list with value generated from model device id Now it's the list with single value equal to UI kind generated from model id. BUG:25085528 Change-Id: I3a29915b4c68726a956079435dfe030d553d5c11 Reviewed-on: https://weave-review.googlesource.com/1424 Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/libweave/libweave.gypi b/libweave/libweave.gypi index d481996..f65eda7 100644 --- a/libweave/libweave.gypi +++ b/libweave/libweave.gypi
@@ -35,6 +35,7 @@ 'src/privet/cloud_delegate.cc', 'src/privet/constants.cc', 'src/privet/device_delegate.cc', + 'src/privet/device_ui_kind.cc', 'src/privet/openssl_utils.cc', 'src/privet/privet_handler.cc', 'src/privet/privet_manager.cc',
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc index b4ab288..4c28141 100644 --- a/libweave/src/privet/cloud_delegate.cc +++ b/libweave/src/privet/cloud_delegate.cc
@@ -99,15 +99,6 @@ return device_->GetSettings().model_name; } - std::set<std::string> GetServices() const override { - std::set<std::string> result; - for (base::DictionaryValue::Iterator it{command_defs_}; !it.IsAtEnd(); - it.Advance()) { - result.emplace(it.key()); - } - return result; - } - AuthScope GetAnonymousMaxScope() const override { return device_->GetSettings().local_anonymous_access_role; }
diff --git a/libweave/src/privet/cloud_delegate.h b/libweave/src/privet/cloud_delegate.h index 3875580..8763fbe 100644 --- a/libweave/src/privet/cloud_delegate.h +++ b/libweave/src/privet/cloud_delegate.h
@@ -78,10 +78,6 @@ // Returns the model name of the device. virtual std::string GetModelName() const = 0; - // Returns the list of services supported by device. - // E.g. printer, scanner etc. Should match services published on DNS-SD. - virtual std::set<std::string> GetServices() const = 0; - // Returns max scope available for anonymous user. virtual AuthScope GetAnonymousMaxScope() const = 0;
diff --git a/libweave/src/privet/device_ui_kind.cc b/libweave/src/privet/device_ui_kind.cc new file mode 100644 index 0000000..08b9312 --- /dev/null +++ b/libweave/src/privet/device_ui_kind.cc
@@ -0,0 +1,42 @@ +// Copyright 2015 The Weave 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 "src/privet/device_ui_kind.h" + +#include <base/logging.h> + +namespace weave { +namespace privet { + +std::string GetDeviceUiKind(const std::string& manifest_id) { + CHECK_EQ(5u, manifest_id.size()); + std::string kind = manifest_id.substr(0, 2); + if (kind == "AC") + return "accessPoint"; + if (kind == "AK") + return "aggregator"; + if (kind == "AM") + return "camera"; + if (kind == "AB") + return "developmentBoard"; + if (kind == "AE") + return "printer"; + if (kind == "AF") + return "scanner"; + if (kind == "AD") + return "speaker"; + if (kind == "AL") + return "storage"; + if (kind == "AJ") + return "toy"; + if (kind == "AA") + return "vendor"; + if (kind == "AN") + return "video"; + LOG(FATAL) << "Invalid model id: " << manifest_id; + return std::string(); +} + +} // namespace privet +} // namespace weave
diff --git a/libweave/src/privet/device_ui_kind.h b/libweave/src/privet/device_ui_kind.h new file mode 100644 index 0000000..cd05f0e --- /dev/null +++ b/libweave/src/privet/device_ui_kind.h
@@ -0,0 +1,18 @@ +// Copyright 2015 The Weave Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBWEAVE_SRC_PRIVET_DEVICE_UI_KIND_H_ +#define LIBWEAVE_SRC_PRIVET_DEVICE_UI_KIND_H_ + +#include <string> + +namespace weave { +namespace privet { + +std::string GetDeviceUiKind(const std::string& manifest_id); + +} // namespace privet +} // namespace weave + +#endif // LIBWEAVE_SRC_PRIVET_DEVICE_UI_KIND_H_
diff --git a/libweave/src/privet/mock_delegates.h b/libweave/src/privet/mock_delegates.h index 159fa09..755110e 100644 --- a/libweave/src/privet/mock_delegates.h +++ b/libweave/src/privet/mock_delegates.h
@@ -146,7 +146,6 @@ const std::string&)); MOCK_CONST_METHOD0(GetOemName, std::string()); MOCK_CONST_METHOD0(GetModelName, std::string()); - MOCK_CONST_METHOD0(GetServices, std::set<std::string>()); MOCK_CONST_METHOD0(GetAnonymousMaxScope, AuthScope()); MOCK_CONST_METHOD0(GetConnectionState, const ConnectionState&()); MOCK_CONST_METHOD0(GetSetupState, const SetupState&()); @@ -177,8 +176,6 @@ EXPECT_CALL(*this, UpdateDeviceInfo(_, _, _)).WillRepeatedly(Return()); EXPECT_CALL(*this, GetOemName()).WillRepeatedly(Return("Chromium")); EXPECT_CALL(*this, GetModelName()).WillRepeatedly(Return("Brillo")); - EXPECT_CALL(*this, GetServices()) - .WillRepeatedly(Return(std::set<std::string>{})); EXPECT_CALL(*this, GetAnonymousMaxScope()) .WillRepeatedly(Return(AuthScope::kUser)); EXPECT_CALL(*this, GetConnectionState())
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc index fc344ab..d959f66 100644 --- a/libweave/src/privet/privet_handler.cc +++ b/libweave/src/privet/privet_handler.cc
@@ -20,6 +20,7 @@ #include "src/privet/cloud_delegate.h" #include "src/privet/constants.h" #include "src/privet/device_delegate.h" +#include "src/privet/device_ui_kind.h" #include "src/privet/security_delegate.h" #include "src/privet/wifi_delegate.h" #include "src/string_utils.h" @@ -216,40 +217,11 @@ return ReturnError(*error, callback); } -std::string GetDeviceKind(const std::string& manifest_id) { - CHECK_EQ(5u, manifest_id.size()); - std::string kind = manifest_id.substr(0, 2); - if (kind == "AC") - return "accessPoint"; - if (kind == "AK") - return "aggregator"; - if (kind == "AM") - return "camera"; - if (kind == "AB") - return "developmentBoard"; - if (kind == "AE") - return "printer"; - if (kind == "AF") - return "scanner"; - if (kind == "AD") - return "speaker"; - if (kind == "AL") - return "storage"; - if (kind == "AJ") - return "toy"; - if (kind == "AA") - return "vendor"; - if (kind == "AN") - return "video"; - LOG(FATAL) << "Invalid model id: " << manifest_id; - return std::string(); -} - std::unique_ptr<base::DictionaryValue> CreateManifestSection( - const std::string& model_id, const CloudDelegate& cloud) { std::unique_ptr<base::DictionaryValue> manifest(new base::DictionaryValue()); - manifest->SetString(kInfoManifestUiDeviceKind, GetDeviceKind(model_id)); + manifest->SetString(kInfoManifestUiDeviceKind, + GetDeviceUiKind(cloud.GetModelId())); manifest->SetString(kInfoManifestOemName, cloud.GetOemName()); manifest->SetString(kInfoManifestModelName, cloud.GetModelName()); return manifest; @@ -487,9 +459,11 @@ output.SetString(kLocationKey, location); output.SetString(kInfoModelIdKey, model_id); - output.Set(kInfoModelManifestKey, - CreateManifestSection(model_id, *cloud_).release()); - output.Set(kInfoServicesKey, ToValue(cloud_->GetServices()).release()); + output.Set(kInfoModelManifestKey, CreateManifestSection(*cloud_).release()); + output.Set( + kInfoServicesKey, + ToValue(std::vector<std::string>{GetDeviceUiKind(cloud_->GetModelId())}) + .release()); output.Set( kInfoAuthenticationKey,
diff --git a/libweave/src/privet/privet_handler_unittest.cc b/libweave/src/privet/privet_handler_unittest.cc index 6f123e2..d430935 100644 --- a/libweave/src/privet/privet_handler_unittest.cc +++ b/libweave/src/privet/privet_handler_unittest.cc
@@ -238,7 +238,7 @@ 'version': '3.0', 'id': 'TestId', 'name': 'TestDevice', - 'services': [], + 'services': [ "developmentBoard" ], 'modelManifestId': "ABMID", 'basicModelManifest': { 'uiDeviceKind': 'developmentBoard', @@ -275,8 +275,6 @@ EXPECT_CALL(cloud_, GetDescription()) .WillRepeatedly(Return("TestDescription")); EXPECT_CALL(cloud_, GetLocation()).WillRepeatedly(Return("TestLocation")); - EXPECT_CALL(cloud_, GetServices()) - .WillRepeatedly(Return(std::set<std::string>{"service1", "service2"})); EXPECT_CALL(device_, GetHttpEnpoint()) .WillRepeatedly(Return(std::make_pair(80, 10080))); EXPECT_CALL(device_, GetHttpsEnpoint()) @@ -290,10 +288,7 @@ 'name': 'TestDevice', 'description': 'TestDescription', 'location': 'TestLocation', - 'services': [ - "service1", - "service2" - ], + 'services': [ "developmentBoard" ], 'modelManifestId': "ABMID", 'basicModelManifest': { 'uiDeviceKind': 'developmentBoard',
diff --git a/libweave/src/privet/publisher.cc b/libweave/src/privet/publisher.cc index f323dac..62e980e 100644 --- a/libweave/src/privet/publisher.cc +++ b/libweave/src/privet/publisher.cc
@@ -11,6 +11,7 @@ #include "src/privet/cloud_delegate.h" #include "src/privet/device_delegate.h" +#include "src/privet/device_ui_kind.h" #include "src/privet/wifi_bootstrap_manager.h" #include "src/privet/wifi_ssid_generator.h" #include "src/string_utils.h" @@ -54,15 +55,10 @@ const uint16_t port = device_->GetHttpEnpoint().first; DCHECK_NE(port, 0); - std::string services; - if (!cloud_->GetServices().empty()) - services += "_"; - services += Join(",_", cloud_->GetServices()); - std::vector<std::string> txt_record{ {"txtvers=3"}, {"ty=" + name}, - {"services=" + services}, + {"services=" + GetDeviceUiKind(model_id)}, {"id=" + cloud_->GetDeviceId()}, {"mmid=" + model_id}, {"flags=" + WifiSsidGenerator{cloud_, wifi_}.GenerateFlags()},
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc index eb41294..6ff3f6d 100644 --- a/libweave/src/weave_unittest.cc +++ b/libweave/src/weave_unittest.cc
@@ -190,9 +190,9 @@ } void InitDnsSdPublishing(bool registered, const std::string& flags) { - std::vector<std::string> txt{{"id=TEST_DEVICE_ID"}, {"flags=" + flags}, - {"mmid=ABCDE"}, {"services=_base"}, - {"txtvers=3"}, {"ty=TEST_NAME"}}; + std::vector<std::string> txt{ + {"id=TEST_DEVICE_ID"}, {"flags=" + flags}, {"mmid=ABCDE"}, + {"services=developmentBoard"}, {"txtvers=3"}, {"ty=TEST_NAME"}}; if (registered) { txt.push_back("gcd_id=CLOUD_ID");