Removing legacy API from libweave

It's been awhile since we switched to the new components/traits model.

Removing the legacy state/commandDef APIs now.

BUG:25917432
Change-Id: I824e65248ceebc3624fb1e1ea0d32bbc1b8513c0
Reviewed-on: https://weave-review.googlesource.com/2720
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/include/weave/device.h b/include/weave/device.h
index 9a29574..b79e6a3 100644
--- a/include/weave/device.h
+++ b/include/weave/device.h
@@ -193,68 +193,6 @@
       provider::HttpServer* http_server,
       provider::Wifi* wifi,
       provider::Bluetooth* bluetooth_provider);
-
-  //========================== Deprecated APIs =========================
-
-  // Adds provided commands definitions. Can be called multiple times with
-  // condition that definitions do not conflict.
-  // Invalid value is fatal.
-  // DO NOT USE IN YOUR CODE: use AddTraitDefinitions() instead.
-  LIBWEAVE_DEPRECATED virtual void AddCommandDefinitionsFromJson(
-      const std::string& json) = 0;
-  LIBWEAVE_DEPRECATED virtual void AddCommandDefinitions(
-      const base::DictionaryValue& dict) = 0;
-
-  // Sets handler for new commands added to the queue.
-  // |command_name| is the full command name of the command to handle. e.g.
-  // "base.reboot". Each command can have no more than one handler.
-  // Empty |command_name| sets default handler for all unhanded commands.
-  // No new command handlers can be set after default handler was set.
-  // DO NOT USE IN YOUR CODE: use AddCommandHandler() with component parameter.
-  LIBWEAVE_DEPRECATED virtual void AddCommandHandler(
-      const std::string& command_name,
-      const CommandHandlerCallback& callback) = 0;
-
-  // Adds provided state definitions. Can be called multiple times with
-  // condition that definitions do not conflict.
-  // Invalid value is fatal.
-  // DO NOT USE IN YOUR CODE: use AddTraitDefinitions() instead.
-  LIBWEAVE_DEPRECATED virtual void AddStateDefinitionsFromJson(
-      const std::string& json) = 0;
-  LIBWEAVE_DEPRECATED virtual void AddStateDefinitions(
-      const base::DictionaryValue& dict) = 0;
-
-  // Sets value of multiple properties of the state.
-  // It's recommended to call this to initialize state defined by
-  // AddStateDefinitions.
-  // Example:
-  //   device->SetStatePropertiesFromJson("{'base':{'firmwareVersion':'123'}}")
-  // Method completely replaces properties included |json| or |dict|.
-  // Properties of the state not included |json| or |dict| will stay unchanged.
-  // DO NOT USE IN YOUR CODE: use SetStateProperties() with component parameter.
-  LIBWEAVE_DEPRECATED virtual bool SetStatePropertiesFromJson(
-      const std::string& json,
-      ErrorPtr* error) = 0;
-  LIBWEAVE_DEPRECATED virtual bool SetStateProperties(
-      const base::DictionaryValue& dict,
-      ErrorPtr* error) = 0;
-
-  // Returns value of the single property.
-  // |name| is full property name, including package name. e.g. "base.network".
-  // DO NOT USE IN YOUR CODE: use GetStateProperty() with component parameter.
-  LIBWEAVE_DEPRECATED virtual const base::Value* GetStateProperty(
-      const std::string& name) const = 0;
-
-  // Sets value of the single property.
-  // |name| is full property name, including package name. e.g. "base.network".
-  // DO NOT USE IN YOUR CODE: use SetStateProperty() with component parameter.
-  LIBWEAVE_DEPRECATED virtual bool SetStateProperty(const std::string& name,
-                                                    const base::Value& value,
-                                                    ErrorPtr* error) = 0;
-
-  // Returns aggregated state properties across all registered packages.
-  // DO NOT USE IN YOUR CODE: use GetComponents() instead.
-  LIBWEAVE_DEPRECATED virtual const base::DictionaryValue& GetState() const = 0;
 };
 
 }  // namespace weave
diff --git a/src/component_manager.h b/src/component_manager.h
index 832b274..cea5569 100644
--- a/src/component_manager.h
+++ b/src/component_manager.h
@@ -209,17 +209,6 @@
   virtual std::string FindComponentWithTrait(
       const std::string& trait) const = 0;
 
-  // Support for legacy APIs. Setting command and state definitions.
-  // This translates into modifying a trait definition.
-  virtual bool AddLegacyCommandDefinitions(const base::DictionaryValue& dict,
-                                           ErrorPtr* error) = 0;
-  virtual bool AddLegacyStateDefinitions(const base::DictionaryValue& dict,
-                                         ErrorPtr* error) = 0;
-  // Returns device state for legacy APIs.
-  virtual const base::DictionaryValue& GetLegacyState() const = 0;
-  // Returns command definitions for legacy APIs.
-  virtual const base::DictionaryValue& GetLegacyCommandDefinitions() const = 0;
-
   DISALLOW_COPY_AND_ASSIGN(ComponentManager);
 };
 
diff --git a/src/component_manager_impl.cc b/src/component_manager_impl.cc
index 6e609a2..3ea1f46 100644
--- a/src/component_manager_impl.cc
+++ b/src/component_manager_impl.cc
@@ -506,140 +506,6 @@
   return std::string{};
 }
 
-bool ComponentManagerImpl::AddLegacyCommandDefinitions(
-    const base::DictionaryValue& dict,
-    ErrorPtr* error) {
-  bool result = true;
-  bool modified = false;
-  for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
-    const base::DictionaryValue* command_dict = nullptr;
-    if (!it.value().GetAsDictionary(&command_dict)) {
-      Error::AddToPrintf(error, FROM_HERE, errors::commands::kTypeMismatch,
-                         "Package '%s' must be an object", it.key().c_str());
-      result = false;
-      continue;
-    }
-    AddTraitToLegacyComponent(it.key());
-    for (base::DictionaryValue::Iterator it_def(*command_dict);
-         !it_def.IsAtEnd(); it_def.Advance()) {
-      std::string key = base::StringPrintf("%s.commands.%s", it.key().c_str(),
-                                           it_def.key().c_str());
-      if (traits_.GetDictionary(key, nullptr)) {
-        Error::AddToPrintf(error, FROM_HERE,
-                           errors::commands::kInvalidPropValue,
-                           "Redefining command '%s.%s'", it.key().c_str(),
-                           it_def.key().c_str());
-        result = false;
-        continue;
-      }
-      traits_.Set(key, it_def.value().DeepCopy());
-      modified = true;
-    }
-  }
-
-  if (modified) {
-    for (const auto& cb : on_trait_changed_)
-      cb.Run();
-  }
-  return result;
-}
-
-bool ComponentManagerImpl::AddLegacyStateDefinitions(
-    const base::DictionaryValue& dict,
-    ErrorPtr* error) {
-  bool result = true;
-  bool modified = false;
-  for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
-    const base::DictionaryValue* state_dict = nullptr;
-    if (!it.value().GetAsDictionary(&state_dict)) {
-      Error::AddToPrintf(error, FROM_HERE, errors::commands::kTypeMismatch,
-                         "Package '%s' must be an object", it.key().c_str());
-      result = false;
-      continue;
-    }
-    AddTraitToLegacyComponent(it.key());
-    for (base::DictionaryValue::Iterator it_def(*state_dict); !it_def.IsAtEnd();
-         it_def.Advance()) {
-      std::string key = base::StringPrintf("%s.state.%s", it.key().c_str(),
-                                           it_def.key().c_str());
-      if (traits_.GetDictionary(key, nullptr)) {
-        Error::AddToPrintf(error, FROM_HERE,
-                           errors::commands::kInvalidPropValue,
-                           "Redefining state property '%s.%s'",
-                           it.key().c_str(), it_def.key().c_str());
-        result = false;
-        continue;
-      }
-      traits_.Set(key, it_def.value().DeepCopy());
-      modified = true;
-    }
-  }
-
-  if (modified) {
-    for (const auto& cb : on_trait_changed_)
-      cb.Run();
-  }
-  return result;
-}
-
-const base::DictionaryValue& ComponentManagerImpl::GetLegacyState() const {
-  legacy_state_.Clear();
-  // Build state from components.
-  for (base::DictionaryValue::Iterator it(components_); !it.IsAtEnd();
-       it.Advance()) {
-    const base::DictionaryValue* component_dict = nullptr;
-    const base::DictionaryValue* component_state = nullptr;
-    if (it.value().GetAsDictionary(&component_dict) &&
-        component_dict->GetDictionary("state", &component_state)) {
-      legacy_state_.MergeDictionary(component_state);
-    }
-  }
-  return legacy_state_;
-}
-
-const base::DictionaryValue& ComponentManagerImpl::GetLegacyCommandDefinitions()
-    const {
-  legacy_command_defs_.Clear();
-  // Build commandDefs from traits.
-  for (base::DictionaryValue::Iterator it(traits_); !it.IsAtEnd();
-       it.Advance()) {
-    const base::DictionaryValue* trait_dict = nullptr;
-    const base::DictionaryValue* trait_commands = nullptr;
-    if (it.value().GetAsDictionary(&trait_dict) &&
-        trait_dict->GetDictionary("commands", &trait_commands)) {
-      base::DictionaryValue dict;
-      dict.Set(it.key(), trait_commands->DeepCopy());
-      legacy_command_defs_.MergeDictionary(&dict);
-    }
-  }
-  return legacy_command_defs_;
-}
-
-void ComponentManagerImpl::AddTraitToLegacyComponent(const std::string& trait) {
-  // First check if we already have a component supporting this trait.
-  if (!FindComponentWithTrait(trait).empty())
-    return;
-
-  // If not, add this trait to the first component available.
-  base::DictionaryValue* component = nullptr;
-  base::DictionaryValue::Iterator it(components_);
-  if (it.IsAtEnd()) {
-    // No components at all. Create a new one with dummy name.
-    // This normally wouldn't happen since libweave creates its own component
-    // at startup.
-    component = new base::DictionaryValue;
-    components_.Set("__weave__", component);
-  } else {
-    CHECK(components_.GetDictionary(it.key(), &component));
-  }
-  base::ListValue* traits = nullptr;
-  if (!component->GetList("traits", &traits)) {
-    traits = new base::ListValue;
-    component->Set("traits", traits);
-  }
-  traits->AppendString(trait);
-}
-
 base::DictionaryValue* ComponentManagerImpl::FindComponentGraftNode(
     const std::string& path,
     ErrorPtr* error) {
diff --git a/src/component_manager_impl.h b/src/component_manager_impl.h
index f3c5451..5b8201a 100644
--- a/src/component_manager_impl.h
+++ b/src/component_manager_impl.h
@@ -174,17 +174,6 @@
   // tree. No sub-components are searched.
   std::string FindComponentWithTrait(const std::string& trait) const override;
 
-  // Support for legacy APIs. Setting command and state definitions.
-  // This translates into modifying a trait definition.
-  bool AddLegacyCommandDefinitions(const base::DictionaryValue& dict,
-                                   ErrorPtr* error) override;
-  bool AddLegacyStateDefinitions(const base::DictionaryValue& dict,
-                                 ErrorPtr* error) override;
-  // Returns device state for legacy APIs.
-  const base::DictionaryValue& GetLegacyState() const override;
-  // Returns command definitions for legacy APIs.
-  const base::DictionaryValue& GetLegacyCommandDefinitions() const override;
-
  private:
   // A helper method to find a JSON element of component at |path| to add new
   // sub-components to.
@@ -193,12 +182,6 @@
   base::DictionaryValue* FindMutableComponent(const std::string& path,
                                               ErrorPtr* error);
 
-  // Legacy API support: Helper function to support state/command definitions.
-  // Adds the given trait to at least one component.
-  // Searches for available components and if none of them already supports this
-  // trait, it adds it to the first available component.
-  void AddTraitToLegacyComponent(const std::string& trait);
-
   // Helper method to find a sub-component given a root node and a relative path
   // from the root to the target component.
   static const base::DictionaryValue* FindComponentAt(
@@ -225,10 +208,6 @@
   uint32_t next_command_id_{0};
   std::map<std::string, std::unique_ptr<StateChangeQueue>> state_change_queues_;
 
-  // Legacy API support.
-  mutable base::DictionaryValue legacy_state_;         // Device state.
-  mutable base::DictionaryValue legacy_command_defs_;  // Command definitions.
-
   DISALLOW_COPY_AND_ASSIGN(ComponentManagerImpl);
 };
 
diff --git a/src/component_manager_unittest.cc b/src/component_manager_unittest.cc
index c56567c..291ace8 100644
--- a/src/component_manager_unittest.cc
+++ b/src/component_manager_unittest.cc
@@ -1262,223 +1262,6 @@
   EXPECT_EQ("", manager_.FindComponentWithTrait("trait4"));
 }
 
-TEST_F(ComponentManagerTest, AddLegacyCommandAndStateDefinitions) {
-  const char kCommandDefs1[] = R"({
-    "package1": {
-      "command1": {
-        "minimalRole": "user",
-        "parameters": {"height": {"type": "integer"}}
-      },
-      "command2": {
-        "minimalRole": "owner",
-        "parameters": {}
-      }
-    },
-    "package2": {
-      "command1": { "minimalRole": "user" },
-      "command2": { "minimalRole": "owner" }
-    }
-  })";
-  auto json = CreateDictionaryValue(kCommandDefs1);
-  EXPECT_TRUE(manager_.AddLegacyCommandDefinitions(*json, nullptr));
-  const char kExpected1[] = R"({
-    "package1": {
-      "commands": {
-        "command1": {
-          "minimalRole": "user",
-          "parameters": {"height": {"type": "integer"}}
-        },
-        "command2": {
-          "minimalRole": "owner",
-          "parameters": {}
-        }
-      }
-    },
-    "package2": {
-      "commands": {
-        "command1": { "minimalRole": "user" },
-        "command2": { "minimalRole": "owner" }
-      }
-    }
-  })";
-  EXPECT_JSON_EQ(kExpected1, manager_.GetTraits());
-  const char kExpectedComponents1[] = R"({
-    "__weave__": { "traits": ["package1", "package2"] }
-  })";
-  EXPECT_JSON_EQ(kExpectedComponents1, manager_.GetComponents());
-
-  const char kCommandDefs2[] = R"({
-    "package2": {
-      "command3": { "minimalRole": "user" }
-    },
-    "package3": {
-      "command1": { "minimalRole": "user" },
-      "command2": { "minimalRole": "owner" }
-    }
-  })";
-  json = CreateDictionaryValue(kCommandDefs2);
-  EXPECT_TRUE(manager_.AddLegacyCommandDefinitions(*json, nullptr));
-  const char kExpected2[] = R"({
-    "package1": {
-      "commands": {
-        "command1": {
-          "minimalRole": "user",
-          "parameters": {"height": {"type": "integer"}}
-        },
-        "command2": {
-          "minimalRole": "owner",
-          "parameters": {}
-        }
-      }
-    },
-    "package2": {
-      "commands": {
-        "command1": { "minimalRole": "user" },
-        "command2": { "minimalRole": "owner" },
-        "command3": { "minimalRole": "user" }
-      }
-    },
-    "package3": {
-      "commands": {
-        "command1": { "minimalRole": "user" },
-        "command2": { "minimalRole": "owner" }
-      }
-    }
-  })";
-  EXPECT_JSON_EQ(kExpected2, manager_.GetTraits());
-  const char kExpectedComponents2[] = R"({
-    "__weave__": { "traits": ["package1", "package2", "package3"] }
-  })";
-  EXPECT_JSON_EQ(kExpectedComponents2, manager_.GetComponents());
-
-  // Redefining existing commands.
-  EXPECT_FALSE(manager_.AddLegacyCommandDefinitions(*json, nullptr));
-
-  const char kStateDefs1[] = R"({
-    "package1": {
-      "prop1": { "type": "string" },
-      "prop2": { "type": "string" }
-    },
-    "package4": {
-      "prop3": { "type": "string" },
-      "prop4": { "type": "string" }
-    }
-  })";
-  json = CreateDictionaryValue(kStateDefs1);
-  EXPECT_TRUE(manager_.AddLegacyStateDefinitions(*json, nullptr));
-  const char kExpectedComponents3[] = R"({
-    "__weave__": { "traits": ["package1", "package2", "package3", "package4"] }
-  })";
-  EXPECT_JSON_EQ(kExpectedComponents3, manager_.GetComponents());
-
-  const char kExpected3[] = R"({
-    "package1": {
-      "commands": {
-        "command1": {
-          "minimalRole": "user",
-          "parameters": {"height": {"type": "integer"}}
-        },
-        "command2": {
-          "minimalRole": "owner",
-          "parameters": {}
-        }
-      },
-      "state": {
-        "prop1": { "type": "string" },
-        "prop2": { "type": "string" }
-      }
-    },
-    "package2": {
-      "commands": {
-        "command1": { "minimalRole": "user" },
-        "command2": { "minimalRole": "owner" },
-        "command3": { "minimalRole": "user" }
-      }
-    },
-    "package3": {
-      "commands": {
-        "command1": { "minimalRole": "user" },
-        "command2": { "minimalRole": "owner" }
-      }
-    },
-    "package4": {
-      "state": {
-        "prop3": { "type": "string" },
-        "prop4": { "type": "string" }
-      }
-    }
-  })";
-  EXPECT_JSON_EQ(kExpected3, manager_.GetTraits());
-  const char kExpectedComponents4[] = R"({
-    "__weave__": { "traits": ["package1", "package2", "package3", "package4"] }
-  })";
-  EXPECT_JSON_EQ(kExpectedComponents4, manager_.GetComponents());
-
-  // Redefining existing commands.
-  EXPECT_FALSE(manager_.AddLegacyStateDefinitions(*json, nullptr));
-
-  const char kExpected4[] = R"({
-    "package1": {
-      "command1": {
-        "minimalRole": "user",
-        "parameters": {"height": {"type": "integer"}}
-      },
-      "command2": {
-        "minimalRole": "owner",
-        "parameters": {}
-      }
-    },
-    "package2": {
-      "command1": { "minimalRole": "user" },
-      "command2": { "minimalRole": "owner" },
-      "command3": { "minimalRole": "user" }
-    },
-    "package3": {
-      "command1": { "minimalRole": "user" },
-      "command2": { "minimalRole": "owner" }
-    }
-  })";
-  EXPECT_JSON_EQ(kExpected4, manager_.GetLegacyCommandDefinitions());
-}
-
-TEST_F(ComponentManagerTest, GetLegacyState) {
-  const char kTraits[] = R"({
-    "trait1": {
-      "state": {
-        "prop1": { "type": "string" },
-        "prop2": { "type": "string" }
-      }
-    },
-    "trait2": {
-      "state": {
-        "prop3": { "type": "string" },
-        "prop4": { "type": "string" }
-      }
-    }
-  })";
-  auto traits = CreateDictionaryValue(kTraits);
-  ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
-  ASSERT_TRUE(manager_.AddComponent("", "comp1", {"trait1"}, nullptr));
-  ASSERT_TRUE(manager_.AddComponent("", "comp2", {"trait2"}, nullptr));
-
-  ASSERT_TRUE(manager_.SetStatePropertiesFromJson(
-      "comp1", R"({"trait1": {"prop1": "foo", "prop2": "bar"}})", nullptr));
-  ASSERT_TRUE(manager_.SetStatePropertiesFromJson(
-      "comp2", R"({"trait2": {"prop3": "baz", "prop4": "quux"}})", nullptr));
-
-  const char kExpected[] = R"({
-    "trait1": {
-      "prop1": "foo",
-      "prop2": "bar"
-    },
-    "trait2": {
-      "prop3": "baz",
-      "prop4": "quux"
-    }
-  })";
-  EXPECT_JSON_EQ(kExpected, manager_.GetLegacyState());
-}
-
 TEST_F(ComponentManagerTest, TestMockComponentManager) {
   // Check that all the virtual methods are mocked out.
   test::MockComponentManager mock;
diff --git a/src/device_manager.cc b/src/device_manager.cc
index aebda67..7e72b31 100644
--- a/src/device_manager.cc
+++ b/src/device_manager.cc
@@ -156,16 +156,6 @@
   component_manager_->AddCommandHandler(component, command_name, callback);
 }
 
-void DeviceManager::AddCommandDefinitionsFromJson(const std::string& json) {
-  auto dict = LoadJsonDict(json, nullptr);
-  CHECK(dict);
-  AddCommandDefinitions(*dict);
-}
-
-void DeviceManager::AddCommandDefinitions(const base::DictionaryValue& dict) {
-  CHECK(component_manager_->AddLegacyCommandDefinitions(dict, nullptr));
-}
-
 bool DeviceManager::AddCommand(const base::DictionaryValue& command,
                                std::string* id,
                                ErrorPtr* error) {
@@ -181,87 +171,10 @@
   return component_manager_->FindCommand(id);
 }
 
-void DeviceManager::AddCommandHandler(const std::string& command_name,
-                                      const CommandHandlerCallback& callback) {
-  if (command_name.empty())
-    return component_manager_->AddCommandHandler("", "", callback);
-
-  auto trait = SplitAtFirst(command_name, ".", true).first;
-  std::string component = component_manager_->FindComponentWithTrait(trait);
-  CHECK(!component.empty());
-  component_manager_->AddCommandHandler(component, command_name, callback);
-}
-
 void DeviceManager::AddStateChangedCallback(const base::Closure& callback) {
   component_manager_->AddStateChangedCallback(callback);
 }
 
-void DeviceManager::AddStateDefinitionsFromJson(const std::string& json) {
-  auto dict = LoadJsonDict(json, nullptr);
-  CHECK(dict);
-  AddStateDefinitions(*dict);
-}
-
-void DeviceManager::AddStateDefinitions(const base::DictionaryValue& dict) {
-  CHECK(component_manager_->AddLegacyStateDefinitions(dict, nullptr));
-}
-
-bool DeviceManager::SetStatePropertiesFromJson(const std::string& json,
-                                               ErrorPtr* error) {
-  auto dict = LoadJsonDict(json, error);
-  return dict && SetStateProperties(*dict, error);
-}
-
-bool DeviceManager::SetStateProperties(const base::DictionaryValue& dict,
-                                       ErrorPtr* error) {
-  for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
-    std::string component =
-        component_manager_->FindComponentWithTrait(it.key());
-    if (component.empty()) {
-      Error::AddToPrintf(error, FROM_HERE, "unrouted_state",
-                         "Unable to set property value because there is no "
-                         "component supporting "
-                         "trait '%s'",
-                         it.key().c_str());
-      return false;
-    }
-    base::DictionaryValue trait_state;
-    trait_state.Set(it.key(), it.value().DeepCopy());
-    if (!component_manager_->SetStateProperties(component, trait_state, error))
-      return false;
-  }
-  return true;
-}
-
-const base::Value* DeviceManager::GetStateProperty(
-    const std::string& name) const {
-  auto trait = SplitAtFirst(name, ".", true).first;
-  std::string component = component_manager_->FindComponentWithTrait(trait);
-  if (component.empty())
-    return nullptr;
-  return component_manager_->GetStateProperty(component, name, nullptr);
-}
-
-bool DeviceManager::SetStateProperty(const std::string& name,
-                                     const base::Value& value,
-                                     ErrorPtr* error) {
-  auto trait = SplitAtFirst(name, ".", true).first;
-  std::string component = component_manager_->FindComponentWithTrait(trait);
-  if (component.empty()) {
-    Error::AddToPrintf(
-        error, FROM_HERE, "unrouted_state",
-        "Unable set value of state property '%s' because there is no component "
-        "supporting trait '%s'",
-        name.c_str(), trait.c_str());
-    return false;
-  }
-  return component_manager_->SetStateProperty(component, name, value, error);
-}
-
-const base::DictionaryValue& DeviceManager::GetState() const {
-  return component_manager_->GetLegacyState();
-}
-
 void DeviceManager::Register(const RegistrationData& registration_data,
                              const DoneCallback& callback) {
   device_info_->RegisterDevice(registration_data, callback);
diff --git a/src/device_manager.h b/src/device_manager.h
index f0ad464..a089e7a 100644
--- a/src/device_manager.h
+++ b/src/device_manager.h
@@ -78,22 +78,6 @@
       const PairingBeginCallback& begin_callback,
       const PairingEndCallback& end_callback) override;
 
-  void AddCommandDefinitionsFromJson(const std::string& json) override;
-  void AddCommandDefinitions(const base::DictionaryValue& dict) override;
-  void AddCommandHandler(const std::string& command_name,
-                         const CommandHandlerCallback& callback) override;
-  void AddStateDefinitionsFromJson(const std::string& json) override;
-  void AddStateDefinitions(const base::DictionaryValue& dict) override;
-  bool SetStatePropertiesFromJson(const std::string& json,
-                                  ErrorPtr* error) override;
-  bool SetStateProperties(const base::DictionaryValue& dict,
-                          ErrorPtr* error) override;
-  const base::Value* GetStateProperty(const std::string& name) const override;
-  bool SetStateProperty(const std::string& name,
-                        const base::Value& value,
-                        ErrorPtr* error) override;
-  const base::DictionaryValue& GetState() const override;
-
   Config* GetConfig();
 
  private:
diff --git a/src/privet/cloud_delegate.cc b/src/privet/cloud_delegate.cc
index 0b4400f..f565687 100644
--- a/src/privet/cloud_delegate.cc
+++ b/src/privet/cloud_delegate.cc
@@ -151,14 +151,6 @@
     return device_->GetSettings().xmpp_endpoint;
   }
 
-  const base::DictionaryValue& GetLegacyCommandDef() const override {
-    return component_manager_->GetLegacyCommandDefinitions();
-  }
-
-  const base::DictionaryValue& GetLegacyState() const override {
-    return component_manager_->GetLegacyState();
-  }
-
   const base::DictionaryValue& GetComponents() const override {
     return component_manager_->GetComponents();
   }
diff --git a/src/privet/cloud_delegate.h b/src/privet/cloud_delegate.h
index 37ed723..43b8904 100644
--- a/src/privet/cloud_delegate.h
+++ b/src/privet/cloud_delegate.h
@@ -100,12 +100,6 @@
   virtual std::string GetServiceUrl() const = 0;
   virtual std::string GetXmppEndpoint() const = 0;
 
-  // Returns dictionary with device state (for legacy APIs).
-  virtual const base::DictionaryValue& GetLegacyState() const = 0;
-
-  // Returns dictionary with commands definitions (for legacy APIs).
-  virtual const base::DictionaryValue& GetLegacyCommandDef() const = 0;
-
   // Returns dictionary with component tree.
   virtual const base::DictionaryValue& GetComponents() const = 0;
 
diff --git a/src/privet/mock_delegates.h b/src/privet/mock_delegates.h
index 108e450..f04fb37 100644
--- a/src/privet/mock_delegates.h
+++ b/src/privet/mock_delegates.h
@@ -188,8 +188,6 @@
   MOCK_CONST_METHOD0(GetOAuthUrl, std::string());
   MOCK_CONST_METHOD0(GetServiceUrl, std::string());
   MOCK_CONST_METHOD0(GetXmppEndpoint, std::string());
-  MOCK_CONST_METHOD0(GetLegacyState, const base::DictionaryValue&());
-  MOCK_CONST_METHOD0(GetLegacyCommandDef, const base::DictionaryValue&());
   MOCK_CONST_METHOD0(GetComponents, const base::DictionaryValue&());
   MOCK_CONST_METHOD2(FindComponent,
                      const base::DictionaryValue*(const std::string& path,
@@ -229,9 +227,6 @@
     EXPECT_CALL(*this, GetSetupState()).WillRepeatedly(ReturnRef(setup_state_));
     EXPECT_CALL(*this, GetCloudId()).WillRepeatedly(Return("TestCloudId"));
     test_dict_.Set("test", new base::DictionaryValue);
-    EXPECT_CALL(*this, GetLegacyState()).WillRepeatedly(ReturnRef(test_dict_));
-    EXPECT_CALL(*this, GetLegacyCommandDef())
-        .WillRepeatedly(ReturnRef(test_dict_));
     EXPECT_CALL(*this, GetTraits()).WillRepeatedly(ReturnRef(test_dict_));
     EXPECT_CALL(*this, GetComponents()).WillRepeatedly(ReturnRef(test_dict_));
     EXPECT_CALL(*this, FindComponent(_, _)).Times(0);
diff --git a/src/privet/privet_handler.cc b/src/privet/privet_handler.cc
index 05b6e0a..8bfe753 100644
--- a/src/privet/privet_handler.cc
+++ b/src/privet/privet_handler.cc
@@ -421,10 +421,6 @@
                    AuthScope::kManager);
   AddSecureHandler("/privet/v3/setup/status", &PrivetHandler::HandleSetupStatus,
                    AuthScope::kManager);
-  AddSecureHandler("/privet/v3/state", &PrivetHandler::HandleState,
-                   AuthScope::kViewer);
-  AddSecureHandler("/privet/v3/commandDefs", &PrivetHandler::HandleCommandDefs,
-                   AuthScope::kViewer);
   AddSecureHandler("/privet/v3/commands/execute",
                    &PrivetHandler::HandleCommandsExecute, AuthScope::kViewer);
   AddSecureHandler("/privet/v3/commands/status",
@@ -875,16 +871,6 @@
   callback.Run(http::kOk, output);
 }
 
-void PrivetHandler::HandleState(const base::DictionaryValue& input,
-                                const UserInfo& user_info,
-                                const RequestCallback& callback) {
-  base::DictionaryValue output;
-  output.Set(kStateKey, cloud_->GetLegacyState().DeepCopy());
-  output.SetString(kFingerprintKey, std::to_string(state_fingerprint_));
-
-  callback.Run(http::kOk, output);
-}
-
 void PrivetHandler::HandleTraits(const base::DictionaryValue& input,
                                  const UserInfo& user_info,
                                  const RequestCallback& callback) {
@@ -931,18 +917,6 @@
   callback.Run(http::kOk, output);
 }
 
-void PrivetHandler::HandleCommandDefs(const base::DictionaryValue& input,
-                                      const UserInfo& user_info,
-                                      const RequestCallback& callback) {
-  base::DictionaryValue output;
-  output.Set(kCommandsKey, cloud_->GetLegacyCommandDef().DeepCopy());
-  // Use traits fingerprint since right now we treat traits and command defs
-  // as being equivalent.
-  output.SetString(kFingerprintKey, std::to_string(traits_fingerprint_));
-
-  callback.Run(http::kOk, output);
-}
-
 void PrivetHandler::HandleCommandsExecute(const base::DictionaryValue& input,
                                           const UserInfo& user_info,
                                           const RequestCallback& callback) {
diff --git a/src/privet/privet_handler_unittest.cc b/src/privet/privet_handler_unittest.cc
index eb9ab28..ecf4797 100644
--- a/src/privet/privet_handler_unittest.cc
+++ b/src/privet/privet_handler_unittest.cc
@@ -727,26 +727,6 @@
                                R"({"clientToken": "DerivedClientAuthToken"})"));
 }
 
-TEST_F(PrivetHandlerTestWithAuth, State) {
-  EXPECT_JSON_EQ(R"({"state": {"test": {}}, "fingerprint": "1"})",
-                 HandleRequest("/privet/v3/state", "{}"));
-
-  cloud_.NotifyOnStateChanged();
-
-  EXPECT_JSON_EQ(R"({"state": {"test": {}}, "fingerprint": "2"})",
-                 HandleRequest("/privet/v3/state", "{}"));
-}
-
-TEST_F(PrivetHandlerTestWithAuth, CommandsDefs) {
-  EXPECT_JSON_EQ(R"({"commands": {"test":{}}, "fingerprint": "1"})",
-                 HandleRequest("/privet/v3/commandDefs", "{}"));
-
-  cloud_.NotifyOnTraitDefsChanged();
-
-  EXPECT_JSON_EQ(R"({"commands": {"test":{}}, "fingerprint": "2"})",
-                 HandleRequest("/privet/v3/commandDefs", "{}"));
-}
-
 TEST_F(PrivetHandlerTestWithAuth, Traits) {
   EXPECT_JSON_EQ(R"({"traits": {"test": {}}, "fingerprint": "1"})",
                  HandleRequest("/privet/v3/traits", "{}"));
diff --git a/src/test/mock_component_manager.h b/src/test/mock_component_manager.h
index 1f470c2..2c1d695 100644
--- a/src/test/mock_component_manager.h
+++ b/src/test/mock_component_manager.h
@@ -97,13 +97,6 @@
                    const base::Callback<void(UpdateID)>& callback));
   MOCK_CONST_METHOD1(FindComponentWithTrait,
                      std::string(const std::string& trait));
-  MOCK_METHOD2(AddLegacyCommandDefinitions,
-               bool(const base::DictionaryValue& dict, ErrorPtr* error));
-  MOCK_METHOD2(AddLegacyStateDefinitions,
-               bool(const base::DictionaryValue& dict, ErrorPtr* error));
-  MOCK_CONST_METHOD0(GetLegacyState, const base::DictionaryValue&());
-  MOCK_CONST_METHOD0(GetLegacyCommandDefinitions,
-                     const base::DictionaryValue&());
 
  private:
   void AddCommand(std::unique_ptr<CommandInstance> command_instance) override {
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc
index 452ac78..3b28001 100644
--- a/src/weave_unittest.cc
+++ b/src/weave_unittest.cc
@@ -294,7 +294,6 @@
                   "/privet/v3/accessControl/confirm",
                   "/privet/v3/auth",
                   "/privet/v3/checkForUpdates",
-                  "/privet/v3/commandDefs",
                   "/privet/v3/commands/cancel",
                   "/privet/v3/commands/execute",
                   "/privet/v3/commands/list",
@@ -305,7 +304,6 @@
                   "/privet/v3/pairing/start",
                   "/privet/v3/setup/start",
                   "/privet/v3/setup/status",
-                  "/privet/v3/state",
                   "/privet/v3/traits",
                   // clang-format on
               }),