diff options
author | Vitaly Buka <vitalybuka@google.com> | 2016-01-23 03:27:38 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-01-23 03:27:38 +0000 |
commit | ef6a729070b2e37abd95990e61efdca97604b87a (patch) | |
tree | 74f0810ba2a4763edcc8e09dfb72fbc0cc88dc52 | |
parent | 414469b56aecbffbe5720a5531938e2624467801 (diff) | |
parent | 355ac651275cd4258b8699228460b7ed3f4f61fe (diff) | |
download | libweave-ef6a729070b2e37abd95990e61efdca97604b87a.tar.gz |
Merge remote-tracking branch \'weave/master\' into aosp-master am: 466cd165d1
am: 355ac65127
* commit '355ac651275cd4258b8699228460b7ed3f4f61fe':
AddTo will return AddToTypeProxy for convenience
Remove domain from weave::Error
Enforce printf format literals checking
provider/avahi_client: better error message
Change proxied Makefile dependencies to .h.
44 files changed, 350 insertions, 513 deletions
@@ -26,9 +26,9 @@ CFLAGS := \ -Wall \ -Werror \ -Wextra \ + -Wformat=2 \ -Wl,--exclude-libs,ALL \ -Wno-char-subscripts \ - -Wno-format-nonliteral \ -Wno-missing-field-initializers \ -Wno-unused-local-typedefs \ -Wno-unused-parameter \ @@ -84,8 +84,8 @@ include file_lists.mk third_party/third_party.mk examples/examples.mk tests.mk weave_obj_files := $(WEAVE_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# TODO(jacobmarble): There are too many libgtest.a deps in non-test targets. Fix. -$(weave_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +# TODO(jacobmarble): There are too many gtest/gmock deps in non-test targets. Fix. +$(weave_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< diff --git a/examples/daemon/ledflasher/ledflasher.cc b/examples/daemon/ledflasher/ledflasher.cc index 2e38d95..369b003 100644 --- a/examples/daemon/ledflasher/ledflasher.cc +++ b/examples/daemon/ledflasher/ledflasher.cc @@ -102,7 +102,7 @@ class LedFlasherHandler { return; } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } @@ -124,7 +124,7 @@ class LedFlasherHandler { return; } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } diff --git a/examples/daemon/light/light.cc b/examples/daemon/light/light.cc index 298fcaf..a78231f 100644 --- a/examples/daemon/light/light.cc +++ b/examples/daemon/light/light.cc @@ -215,7 +215,7 @@ class LightHandler { return; } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } @@ -241,7 +241,7 @@ class LightHandler { return; } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } @@ -275,7 +275,7 @@ class LightHandler { } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } diff --git a/examples/daemon/lock/lock.cc b/examples/daemon/lock/lock.cc index 0785c14..fcc6ad7 100644 --- a/examples/daemon/lock/lock.cc +++ b/examples/daemon/lock/lock.cc @@ -98,8 +98,8 @@ class LockHandler { if (!weave::StringToEnum(requested_state, &new_lock_status)) { // Invalid lock state was specified. weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", - "invalid_parameter_value", "Invalid parameters"); + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", + "Invalid parameters"); cmd->Abort(error.get(), nullptr); return; } @@ -114,7 +114,7 @@ class LockHandler { return; } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } diff --git a/examples/daemon/oven/oven.cc b/examples/daemon/oven/oven.cc index ff1c60b..daf1971 100644 --- a/examples/daemon/oven/oven.cc +++ b/examples/daemon/oven/oven.cc @@ -191,7 +191,7 @@ class OvenHandler { } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } @@ -215,7 +215,7 @@ class OvenHandler { } weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", "invalid_parameter_value", + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", "Invalid parameters"); cmd->Abort(error.get(), nullptr); } diff --git a/examples/daemon/sample/sample.cc b/examples/daemon/sample/sample.cc index f4ad3d9..7e58193 100644 --- a/examples/daemon/sample/sample.cc +++ b/examples/daemon/sample/sample.cc @@ -88,8 +88,8 @@ class SampleHandler { std::string name; if (!params.GetString("name", &name)) { weave::ErrorPtr error; - weave::Error::AddTo(&error, FROM_HERE, "example", - "invalid_parameter_value", "Name is missing"); + weave::Error::AddTo(&error, FROM_HERE, "invalid_parameter_value", + "Name is missing"); cmd->Abort(error.get(), nullptr); return; } diff --git a/examples/examples.mk b/examples/examples.mk index a25194c..06266a3 100644 --- a/examples/examples.mk +++ b/examples/examples.mk @@ -7,8 +7,7 @@ examples_provider_obj_files := $(EXAMPLES_PROVIDER_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libevent.a, but the headers files in third_party/include. -$(examples_provider_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libevent.a +$(examples_provider_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/event2/event.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< @@ -16,8 +15,7 @@ out/$(BUILD_MODE)/examples_provider.a : $(examples_provider_obj_files) rm -f $@ $(AR) crsT $@ $^ -# We don't need libevent.a, but the headers files in third_party/include. -out/$(BUILD_MODE)/examples/daemon/%.o : examples/daemon/%.cc third_party/lib/libevent.a +out/$(BUILD_MODE)/examples/daemon/%.o : examples/daemon/%.cc third_party/include/event2/event.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< diff --git a/examples/provider/avahi_client.cc b/examples/provider/avahi_client.cc index 18ad555..27fae10 100644 --- a/examples/provider/avahi_client.cc +++ b/examples/provider/avahi_client.cc @@ -35,7 +35,8 @@ AvahiClient::AvahiClient() { int ret = 0; client_.reset(avahi_client_new(avahi_threaded_poll_get(thread_pool_.get()), {}, nullptr, this, &ret)); - CHECK(client_) << avahi_strerror(ret); + CHECK(client_) << "failed to connect to avahi-daemon: " + << avahi_strerror(ret); avahi_threaded_poll_start(thread_pool_.get()); diff --git a/examples/provider/curl_http_client.cc b/examples/provider/curl_http_client.cc index de8b3dd..2b1fac3 100644 --- a/examples/provider/curl_http_client.cc +++ b/examples/provider/curl_http_client.cc @@ -109,7 +109,7 @@ SendRequestBlocking(CurlHttpClient::Method method, ErrorPtr error; if (res != CURLE_OK) { - Error::AddTo(&error, FROM_HERE, "curl", "curl_easy_perform_error", + Error::AddTo(&error, FROM_HERE, "curl_easy_perform_error", curl_easy_strerror(res)); return {nullptr, std::move(error)}; } diff --git a/examples/provider/event_http_client.cc b/examples/provider/event_http_client.cc index fbfc6d8..0346a67 100644 --- a/examples/provider/event_http_client.cc +++ b/examples/provider/event_http_client.cc @@ -60,7 +60,7 @@ void RequestDoneCallback(evhttp_request* req, void* ctx) { if (!req) { ErrorPtr error; auto err = EVUTIL_SOCKET_ERROR(); - Error::AddToPrintf(&error, FROM_HERE, "http_client", "request_failed", + Error::AddToPrintf(&error, FROM_HERE, "request_failed", "request failed: %s", evutil_socket_error_to_string(err)); state->task_runner_->PostDelayedTask( @@ -134,7 +134,7 @@ void EventHttpClient::SendRequest(Method method, if (res >= 0) return; ErrorPtr error; - Error::AddToPrintf(&error, FROM_HERE, "http_client", "request_failed", + Error::AddToPrintf(&error, FROM_HERE, "request_failed", "request failed: %s %s", EnumToString(method).c_str(), url.c_str()); task_runner_->PostDelayedTask( diff --git a/examples/provider/ssl_stream.cc b/examples/provider/ssl_stream.cc index eea28c0..8c1a756 100644 --- a/examples/provider/ssl_stream.cc +++ b/examples/provider/ssl_stream.cc @@ -21,7 +21,7 @@ void AddSslError(ErrorPtr* error, unsigned long ssl_error_code) { ERR_load_BIO_strings(); SSL_load_error_strings(); - Error::AddToPrintf(error, location, "ssl_stream", error_code, "%s: %s", + Error::AddToPrintf(error, location, error_code, "%s: %s", ERR_lib_error_string(ssl_error_code), ERR_reason_error_string(ssl_error_code)); } diff --git a/examples/provider/wifi_manager.cc b/examples/provider/wifi_manager.cc index ed6a9fd..cad882d 100644 --- a/examples/provider/wifi_manager.cc +++ b/examples/provider/wifi_manager.cc @@ -84,7 +84,7 @@ void WifiImpl::TryToConnect(const std::string& ssid, if (base::Time::Now() >= until) { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, "wifi", "timeout", + Error::AddTo(&error, FROM_HERE, "timeout", "Timeout connecting to WiFI network."); task_runner_->PostDelayedTask( FROM_HERE, base::Bind(callback, base::Passed(&error)), {}); @@ -105,7 +105,7 @@ void WifiImpl::Connect(const std::string& ssid, CHECK(!hostapd_started_); if (hostapd_started_) { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, "wifi", "busy", "Running Access Point."); + Error::AddTo(&error, FROM_HERE, "busy", "Running Access Point."); task_runner_->PostDelayedTask( FROM_HERE, base::Bind(callback, base::Passed(&error)), {}); return; diff --git a/include/weave/error.h b/include/weave/error.h index 14a85be..0cf8dc5 100644 --- a/include/weave/error.h +++ b/include/weave/error.h @@ -24,38 +24,48 @@ class LIBWEAVE_EXPORT Error final { public: ~Error() = default; + class AddToTypeProxy { + public: + operator bool() const { return false; } + + template <class T> + operator std::unique_ptr<T>() const { + return nullptr; + } + + template <class T> + operator T*() const { + return nullptr; + } + }; + // Creates an instance of Error class. static ErrorPtr Create(const tracked_objects::Location& location, - const std::string& domain, const std::string& code, const std::string& message); static ErrorPtr Create(const tracked_objects::Location& location, - const std::string& domain, const std::string& code, const std::string& message, ErrorPtr inner_error); // If |error| is not nullptr, creates another instance of Error class, // initializes it with specified arguments and adds it to the head of // the error chain pointed to by |error|. - static void AddTo(ErrorPtr* error, - const tracked_objects::Location& location, - const std::string& domain, - const std::string& code, - const std::string& message); + static AddToTypeProxy AddTo(ErrorPtr* error, + const tracked_objects::Location& location, + const std::string& code, + const std::string& message); // Same as the Error::AddTo above, but allows to pass in a printf-like // format string and optional parameters to format the error message. - static void AddToPrintf(ErrorPtr* error, - const tracked_objects::Location& location, - const std::string& domain, - const std::string& code, - const char* format, - ...) PRINTF_FORMAT(5, 6); + static AddToTypeProxy AddToPrintf(ErrorPtr* error, + const tracked_objects::Location& location, + const std::string& code, + const char* format, + ...) PRINTF_FORMAT(4, 5); // Clones error with all inner errors. ErrorPtr Clone() const; - // Returns the error domain, code and message - const std::string& GetDomain() const { return domain_; } + // Returns the error code and message const std::string& GetCode() const { return code_; } const std::string& GetMessage() const { return message_; } @@ -64,13 +74,9 @@ class LIBWEAVE_EXPORT Error final { return location_; } - // Checks if this or any of the inner errors in the chain has the specified - // error domain. - bool HasDomain(const std::string& domain) const; - // Checks if this or any of the inner errors in the chain matches the - // specified error domain and code. - bool HasError(const std::string& domain, const std::string& code) const; + // specified error code. + bool HasError(const std::string& code) const; // Gets a pointer to the inner error, if present. Returns nullptr otherwise. const Error* GetInnerError() const { return inner_error_.get(); } @@ -79,41 +85,27 @@ class LIBWEAVE_EXPORT Error final { // Returns itself if no inner error are available. const Error* GetFirstError() const; - // Finds an error object of particular domain in the error chain stating at - // |error_chain_start|. Returns the a pointer to the first matching error - // object found. - // Returns nullptr if no match is found. - // This method is safe to call on a nullptr |error_chain_start| in which case - // the result will also be nullptr. - static const Error* FindErrorOfDomain(const Error* error_chain_start, - const std::string& domain); - // Finds an error of particular domain with the given code in the error chain - // stating at |error_chain_start|. Returns the pointer to the first matching - // error object. + // Finds an error with the given code in the error chain stating at + // |error_chain_start|. Returns the pointer to the first matching error + // object. // Returns nullptr if no match is found or if |error_chain_start| is nullptr. static const Error* FindError(const Error* error_chain_start, - const std::string& domain, const std::string& code); protected: // Constructor is protected since this object is supposed to be // created via the Create factory methods. Error(const tracked_objects::Location& location, - const std::string& domain, const std::string& code, const std::string& message, ErrorPtr inner_error); Error(const tracked_objects::LocationSnapshot& location, - const std::string& domain, const std::string& code, const std::string& message, ErrorPtr inner_error); - // Error domain. The domain defines the scopes for error codes. - // Two errors with the same code but different domains are different errors. - std::string domain_; - // Error code. A unique error code identifier within the given domain. + // Error code. A unique error code identifier. std::string code_; // Human-readable error message. std::string message_; diff --git a/src/base_api_handler.cc b/src/base_api_handler.cc index 5562b6c..312e20b 100644 --- a/src/base_api_handler.cc +++ b/src/base_api_handler.cc @@ -143,8 +143,7 @@ void BaseApiHandler::UpdateBaseConfiguration( AuthScope auth_scope{AuthScope::kNone}; if (!StringToEnum(anonymous_access_role, &auth_scope)) { ErrorPtr error; - Error::AddToPrintf(&error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidPropValue, + Error::AddToPrintf(&error, FROM_HERE, errors::commands::kInvalidPropValue, "Invalid localAnonymousAccessMaxRole value '%s'", anonymous_access_role.c_str()); command->Abort(error.get(), nullptr); diff --git a/src/commands/cloud_command_proxy_unittest.cc b/src/commands/cloud_command_proxy_unittest.cc index 0e998ef..013769d 100644 --- a/src/commands/cloud_command_proxy_unittest.cc +++ b/src/commands/cloud_command_proxy_unittest.cc @@ -192,7 +192,7 @@ TEST_F(CloudCommandProxyTest, RetryFailed) { *CreateDictionaryValue("{'status': 'ready'}"), nullptr)); task_runner_.Run(); ErrorPtr error; - Error::AddTo(&error, FROM_HERE, "TEST", "TEST", "TEST"); + Error::AddTo(&error, FROM_HERE, "TEST", "TEST"); callback.Run(error->Clone()); task_runner_.Run(); EXPECT_GE(task_runner_.GetClock()->Now() - started, diff --git a/src/commands/command_instance.cc b/src/commands/command_instance.cc index da62887..fc9b0e7 100644 --- a/src/commands/command_instance.cc +++ b/src/commands/command_instance.cc @@ -37,11 +37,10 @@ const EnumToStringMap<Command::Origin>::Map kMapOrigin[] = { bool ReportInvalidStateTransition(ErrorPtr* error, Command::State from, Command::State to) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidState, - "State switch impossible: '%s' -> '%s'", - EnumToString(from).c_str(), EnumToString(to).c_str()); - return false; + return Error::AddToPrintf(error, FROM_HERE, errors::commands::kInvalidState, + "State switch impossible: '%s' -> '%s'", + EnumToString(from).c_str(), + EnumToString(to).c_str()); } } // namespace @@ -153,11 +152,9 @@ std::unique_ptr<base::DictionaryValue> GetCommandParameters( // Make sure the "parameters" property is actually an object. const base::DictionaryValue* params_dict = nullptr; if (!params_value->GetAsDictionary(¶ms_dict)) { - Error::AddToPrintf(error, FROM_HERE, errors::json::kDomain, - errors::json::kObjectExpected, - "Property '%s' must be a JSON object", - commands::attributes::kCommand_Parameters); - return params; + return Error::AddToPrintf(error, FROM_HERE, errors::json::kObjectExpected, + "Property '%s' must be a JSON object", + commands::attributes::kCommand_Parameters); } params.reset(params_dict->DeepCopy()); } else { @@ -182,11 +179,9 @@ std::unique_ptr<CommandInstance> CommandInstance::FromJson( // Get the command JSON object from the value. const base::DictionaryValue* json = nullptr; if (!value->GetAsDictionary(&json)) { - Error::AddTo(error, FROM_HERE, errors::json::kDomain, - errors::json::kObjectExpected, - "Command instance is not a JSON object"); command_id->clear(); - return instance; + return Error::AddTo(error, FROM_HERE, errors::json::kObjectExpected, + "Command instance is not a JSON object"); } // Get the command ID from 'id' property. @@ -196,17 +191,15 @@ std::unique_ptr<CommandInstance> CommandInstance::FromJson( // Get the command name from 'name' property. std::string command_name; if (!json->GetString(commands::attributes::kCommand_Name, &command_name)) { - Error::AddTo(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, "Command name is missing"); - return instance; + return Error::AddTo(error, FROM_HERE, errors::commands::kPropertyMissing, + "Command name is missing"); } auto parameters = GetCommandParameters(json, error); if (!parameters) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kCommandFailed, - "Failed to validate command '%s'", command_name.c_str()); - return instance; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kCommandFailed, + "Failed to validate command '%s'", command_name.c_str()); } instance.reset(new CommandInstance{command_name, origin, *parameters}); diff --git a/src/commands/command_instance_unittest.cc b/src/commands/command_instance_unittest.cc index 8d70b8b..803d5b4 100644 --- a/src/commands/command_instance_unittest.cc +++ b/src/commands/command_instance_unittest.cc @@ -143,7 +143,7 @@ TEST(CommandInstanceTest, ToJsonError) { instance->SetID("testId"); ErrorPtr error; - Error::AddTo(&error, FROM_HERE, "DOMAIN", "CODE", "MESSAGE"); + Error::AddTo(&error, FROM_HERE, "CODE", "MESSAGE"); instance->Abort(error.get(), nullptr); json->MergeDictionary(CreateDictionaryValue(R"({ diff --git a/src/commands/schema_constants.cc b/src/commands/schema_constants.cc index 34d6db8..732cf44 100644 --- a/src/commands/schema_constants.cc +++ b/src/commands/schema_constants.cc @@ -8,7 +8,6 @@ namespace weave { namespace errors { namespace commands { -const char kDomain[] = "command_schema"; const char kTypeMismatch[] = "type_mismatch"; const char kInvalidPropValue[] = "invalid_parameter_value"; diff --git a/src/commands/schema_constants.h b/src/commands/schema_constants.h index 9199480..360079a 100644 --- a/src/commands/schema_constants.h +++ b/src/commands/schema_constants.h @@ -9,8 +9,6 @@ namespace weave { namespace errors { namespace commands { -// Error domain for command schema description. -extern const char kDomain[]; // Common command definition error codes. extern const char kTypeMismatch[]; diff --git a/src/component_manager_impl.cc b/src/component_manager_impl.cc index 3f6ebf9..550775d 100644 --- a/src/component_manager_impl.cc +++ b/src/component_manager_impl.cc @@ -47,20 +47,17 @@ bool ComponentManagerImpl::AddComponent(const std::string& path, return false; } if (root->GetWithoutPathExpansion(name, nullptr)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidState, - "Component '%s' already exists at path '%s'", - name.c_str(), path.c_str()); - return false; + return Error::AddToPrintf(error, FROM_HERE, errors::commands::kInvalidState, + "Component '%s' already exists at path '%s'", + name.c_str(), path.c_str()); } // Check to make sure the declared traits are already defined. for (const std::string& trait : traits) { if (!FindTraitDefinition(trait)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidPropValue, - "Trait '%s' is undefined", trait.c_str()); - return false; + return Error::AddToPrintf(error, FROM_HERE, + errors::commands::kInvalidPropValue, + "Trait '%s' is undefined", trait.c_str()); } } std::unique_ptr<base::DictionaryValue> dict{new base::DictionaryValue}; @@ -110,11 +107,9 @@ bool ComponentManagerImpl::RemoveComponent(const std::string& path, } if (!root->RemoveWithoutPathExpansion(name, nullptr)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidState, - "Component '%s' does not exist at path '%s'", - name.c_str(), path.c_str()); - return false; + return Error::AddToPrintf(error, FROM_HERE, errors::commands::kInvalidState, + "Component '%s' does not exist at path '%s'", + name.c_str(), path.c_str()); } for (const auto& cb : on_componet_tree_changed_) @@ -135,20 +130,17 @@ bool ComponentManagerImpl::RemoveComponentArrayItem(const std::string& path, base::ListValue* array_value = nullptr; if (!root->GetListWithoutPathExpansion(name, &array_value)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidState, - "There is no component array named '%s' at path '%s'", - name.c_str(), path.c_str()); - return false; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kInvalidState, + "There is no component array named '%s' at path '%s'", name.c_str(), + path.c_str()); } if (!array_value->Remove(index, nullptr)) { - Error::AddToPrintf( - error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidState, + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kInvalidState, "Component array '%s' at path '%s' does not have an element %zu", name.c_str(), path.c_str(), index); - return false; } for (const auto& cb : on_componet_tree_changed_) @@ -170,8 +162,7 @@ bool ComponentManagerImpl::LoadTraits(const base::DictionaryValue& dict, // definition is exactly the same, or else this is an error. for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { if (it.value().GetType() != base::Value::TYPE_DICTIONARY) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kTypeMismatch, + Error::AddToPrintf(error, FROM_HERE, errors::commands::kTypeMismatch, "Trait '%s' must be an object", it.key().c_str()); result = false; break; @@ -179,8 +170,7 @@ bool ComponentManagerImpl::LoadTraits(const base::DictionaryValue& dict, const base::DictionaryValue* existing_def = nullptr; if (traits_.GetDictionary(it.key(), &existing_def)) { if (!existing_def->Equals(&it.value())) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kTypeMismatch, + Error::AddToPrintf(error, FROM_HERE, errors::commands::kTypeMismatch, "Trait '%s' cannot be redefined", it.key().c_str()); result = false; break; @@ -240,11 +230,10 @@ std::unique_ptr<CommandInstance> ComponentManagerImpl::ParseCommandInstance( return nullptr; if (role < minimal_role) { - Error::AddToPrintf( - error, FROM_HERE, errors::commands::kDomain, "access_denied", - "User role '%s' less than minimal: '%s'", EnumToString(role).c_str(), - EnumToString(minimal_role).c_str()); - return nullptr; + return Error::AddToPrintf(error, FROM_HERE, "access_denied", + "User role '%s' less than minimal: '%s'", + EnumToString(role).c_str(), + EnumToString(minimal_role).c_str()); } std::string component_path = command_instance->GetComponent(); @@ -255,12 +244,11 @@ std::unique_ptr<CommandInstance> ComponentManagerImpl::ParseCommandInstance( SplitAtFirst(command_instance->GetName(), ".", true).first; component_path = FindComponentWithTrait(trait_name); if (component_path.empty()) { - Error::AddToPrintf( - error, FROM_HERE, errors::commands::kDomain, "unrouted_command", + return Error::AddToPrintf( + error, FROM_HERE, "unrouted_command", "Unable route command '%s' because there is no component supporting" "trait '%s'", command_instance->GetName().c_str(), trait_name.c_str()); - return nullptr; } command_instance->SetComponent(component_path); } @@ -286,11 +274,9 @@ std::unique_ptr<CommandInstance> ComponentManagerImpl::ParseCommandInstance( } if (!trait_supported) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - "trait_not_supported", - "Component '%s' doesn't support trait '%s'", - component_path.c_str(), pair.first.c_str()); - return nullptr; + return Error::AddToPrintf(error, FROM_HERE, "trait_not_supported", + "Component '%s' doesn't support trait '%s'", + component_path.c_str(), pair.first.c_str()); } if (command_id.empty()) { @@ -361,11 +347,9 @@ bool ComponentManagerImpl::GetMinimalRole(const std::string& command_name, ErrorPtr* error) const { const base::DictionaryValue* command = FindCommandDefinition(command_name); if (!command) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidCommandName, - "Command definition for '%s' not found", - command_name.c_str()); - return false; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kInvalidCommandName, + "Command definition for '%s' not found", command_name.c_str()); } std::string value; // The JSON definition has been pre-validated already in LoadCommands, so @@ -423,25 +407,22 @@ const base::Value* ComponentManagerImpl::GetStateProperty( return nullptr; auto pair = SplitAtFirst(name, ".", true); if (pair.first.empty()) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "Empty state package in '%s'", name.c_str()); - return nullptr; + return Error::AddToPrintf(error, FROM_HERE, + errors::commands::kPropertyMissing, + "Empty state package in '%s'", name.c_str()); } if (pair.second.empty()) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "State property name not specified in '%s'", - name.c_str()); - return nullptr; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kPropertyMissing, + "State property name not specified in '%s'", name.c_str()); } std::string key = base::StringPrintf("state.%s", name.c_str()); const base::Value* value = nullptr; if (!component->Get(key, &value)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "State property '%s' not found in component '%s'", - name.c_str(), component_path.c_str()); + return Error::AddToPrintf(error, FROM_HERE, + errors::commands::kPropertyMissing, + "State property '%s' not found in component '%s'", + name.c_str(), component_path.c_str()); } return value; } @@ -453,17 +434,14 @@ bool ComponentManagerImpl::SetStateProperty(const std::string& component_path, base::DictionaryValue dict; auto pair = SplitAtFirst(name, ".", true); if (pair.first.empty()) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "Empty state package in '%s'", name.c_str()); - return false; + return Error::AddToPrintf(error, FROM_HERE, + errors::commands::kPropertyMissing, + "Empty state package in '%s'", name.c_str()); } if (pair.second.empty()) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "State property name not specified in '%s'", - name.c_str()); - return false; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kPropertyMissing, + "State property name not specified in '%s'", name.c_str()); } dict.Set(name, value.DeepCopy()); return SetStateProperties(component_path, dict, error); @@ -532,8 +510,7 @@ bool ComponentManagerImpl::AddLegacyCommandDefinitions( 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::kDomain, - errors::commands::kTypeMismatch, + Error::AddToPrintf(error, FROM_HERE, errors::commands::kTypeMismatch, "Package '%s' must be an object", it.key().c_str()); result = false; continue; @@ -544,7 +521,7 @@ bool ComponentManagerImpl::AddLegacyCommandDefinitions( 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::kDomain, + Error::AddToPrintf(error, FROM_HERE, errors::commands::kInvalidPropValue, "Redefining command '%s.%s'", it.key().c_str(), it_def.key().c_str()); @@ -571,8 +548,7 @@ bool ComponentManagerImpl::AddLegacyStateDefinitions( 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::kDomain, - errors::commands::kTypeMismatch, + Error::AddToPrintf(error, FROM_HERE, errors::commands::kTypeMismatch, "Package '%s' must be an object", it.key().c_str()); result = false; continue; @@ -583,7 +559,7 @@ bool ComponentManagerImpl::AddLegacyStateDefinitions( 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::kDomain, + Error::AddToPrintf(error, FROM_HERE, errors::commands::kInvalidPropValue, "Redefining state property '%s.%s'", it.key().c_str(), it_def.key().c_str()); @@ -689,28 +665,24 @@ const base::DictionaryValue* ComponentManagerImpl::FindComponentAt( auto element = SplitAtFirst(parts[i], "[", true); int array_index = -1; if (element.first.empty()) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "Empty path element at '%s'", root_path.c_str()); - return nullptr; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kPropertyMissing, + "Empty path element at '%s'", root_path.c_str()); } if (!element.second.empty()) { if (element.second.back() != ']') { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "Invalid array element syntax '%s'", - parts[i].c_str()); - return nullptr; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kPropertyMissing, + "Invalid array element syntax '%s'", parts[i].c_str()); } element.second.pop_back(); std::string index_str; base::TrimWhitespaceASCII(element.second, base::TrimPositions::TRIM_ALL, &index_str); if (!base::StringToInt(index_str, &array_index) || array_index < 0) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kInvalidPropValue, - "Invalid array index '%s'", element.second.c_str()); - return nullptr; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kInvalidPropValue, + "Invalid array index '%s'", element.second.c_str()); } } @@ -719,36 +691,32 @@ const base::DictionaryValue* ComponentManagerImpl::FindComponentAt( // points to the actual parent component. We need the root to point to // the 'components' element containing child sub-components instead. if (!root->GetDictionary("components", &root)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "Component '%s' does not exist at '%s'", - element.first.c_str(), root_path.c_str()); - return nullptr; + return Error::AddToPrintf(error, FROM_HERE, + errors::commands::kPropertyMissing, + "Component '%s' does not exist at '%s'", + element.first.c_str(), root_path.c_str()); } } const base::Value* value = nullptr; if (!root->GetWithoutPathExpansion(element.first, &value)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, + Error::AddToPrintf(error, FROM_HERE, errors::commands::kPropertyMissing, "Component '%s' does not exist at '%s'", element.first.c_str(), root_path.c_str()); return nullptr; } if (value->GetType() == base::Value::TYPE_LIST && array_index < 0) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kTypeMismatch, - "Element '%s.%s' is an array", root_path.c_str(), - element.first.c_str()); - return nullptr; + return Error::AddToPrintf(error, FROM_HERE, + errors::commands::kTypeMismatch, + "Element '%s.%s' is an array", + root_path.c_str(), element.first.c_str()); } if (value->GetType() == base::Value::TYPE_DICTIONARY && array_index >= 0) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kTypeMismatch, - "Element '%s.%s' is not an array", root_path.c_str(), - element.first.c_str()); - return nullptr; + return Error::AddToPrintf(error, FROM_HERE, + errors::commands::kTypeMismatch, + "Element '%s.%s' is not an array", + root_path.c_str(), element.first.c_str()); } if (value->GetType() == base::Value::TYPE_DICTIONARY) { @@ -759,12 +727,10 @@ const base::DictionaryValue* ComponentManagerImpl::FindComponentAt( const base::Value* component_value = nullptr; if (!component_array->Get(array_index, &component_value) || !component_value->GetAsDictionary(&root)) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "Element '%s.%s' does not contain item #%d", - root_path.c_str(), element.first.c_str(), - array_index); - return nullptr; + return Error::AddToPrintf( + error, FROM_HERE, errors::commands::kPropertyMissing, + "Element '%s.%s' does not contain item #%d", root_path.c_str(), + element.first.c_str(), array_index); } } if (!root_path.empty()) diff --git a/src/device_manager.cc b/src/device_manager.cc index 1158df7..04d7a6b 100644 --- a/src/device_manager.cc +++ b/src/device_manager.cc @@ -212,8 +212,7 @@ bool DeviceManager::SetStateProperties(const base::DictionaryValue& dict, std::string component = component_manager_->FindComponentWithTrait(it.key()); if (component.empty()) { - Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain, - "unrouted_state", + Error::AddToPrintf(error, FROM_HERE, "unrouted_state", "Unable to set property value because there is no " "component supporting " "trait '%s'", @@ -244,7 +243,7 @@ bool DeviceManager::SetStateProperty(const std::string& name, std::string component = component_manager_->FindComponentWithTrait(trait); if (component.empty()) { Error::AddToPrintf( - error, FROM_HERE, errors::commands::kDomain, "unrouted_state", + 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()); diff --git a/src/device_registration_info.cc b/src/device_registration_info.cc index c374527..7c20084 100644 --- a/src/device_registration_info.cc +++ b/src/device_registration_info.cc @@ -33,9 +33,6 @@ namespace weave { -const char kErrorDomainOAuth2[] = "oauth2"; -const char kErrorDomainGCD[] = "gcd"; -const char kErrorDomainGCDServer[] = "gcd_server"; const char kErrorAlreayRegistered[] = "already_registered"; namespace { @@ -55,8 +52,7 @@ const char kJustInCase[] = "just_in_case"; // Backup fetch when XMPP is live. using provider::HttpClient; inline void SetUnexpectedError(ErrorPtr* error) { - Error::AddTo(error, FROM_HERE, kErrorDomainGCD, "unexpected_response", - "Unexpected GCD error"); + Error::AddTo(error, FROM_HERE, "unexpected_response", "Unexpected GCD error"); } void ParseGCDError(const base::DictionaryValue* json, ErrorPtr* error) { @@ -79,8 +75,7 @@ void ParseGCDError(const base::DictionaryValue* json, ErrorPtr* error) { std::string error_code, error_message; if (error_object->GetString("reason", &error_code) && error_object->GetString("message", &error_message)) { - Error::AddTo(error, FROM_HERE, kErrorDomainGCDServer, error_code, - error_message); + Error::AddTo(error, FROM_HERE, error_code, error_message); } else { SetUnexpectedError(error); } @@ -201,10 +196,9 @@ std::unique_ptr<base::DictionaryValue> ParseJsonResponse( SplitAtFirst(response.GetContentType(), ";", true).first; if (content_type != http::kJson && content_type != http::kPlain) { - Error::AddTo( - error, FROM_HERE, errors::json::kDomain, "non_json_content_type", + return Error::AddTo( + error, FROM_HERE, "non_json_content_type", "Unexpected content type: \'" + response.GetContentType() + "\'"); - return std::unique_ptr<base::DictionaryValue>(); } const std::string& json = response.GetData(); @@ -212,17 +206,16 @@ std::unique_ptr<base::DictionaryValue> ParseJsonResponse( auto value = base::JSONReader::ReadAndReturnError(json, base::JSON_PARSE_RFC, nullptr, &error_message); if (!value) { - Error::AddToPrintf(error, FROM_HERE, errors::json::kDomain, - errors::json::kParseError, + Error::AddToPrintf(error, FROM_HERE, errors::json::kParseError, "Error '%s' occurred parsing JSON string '%s'", error_message.c_str(), json.c_str()); return std::unique_ptr<base::DictionaryValue>(); } base::DictionaryValue* dict_value = nullptr; if (!value->GetAsDictionary(&dict_value)) { - Error::AddToPrintf( - error, FROM_HERE, errors::json::kDomain, errors::json::kObjectExpected, - "Response is not a valid JSON object: '%s'", json.c_str()); + Error::AddToPrintf(error, FROM_HERE, errors::json::kObjectExpected, + "Response is not a valid JSON object: '%s'", + json.c_str()); return std::unique_ptr<base::DictionaryValue>(); } else { // |value| is now owned by |dict_value|, so release the scoped_ptr now. @@ -334,10 +327,11 @@ bool DeviceRegistrationInfo::VerifyRegistrationCredentials( VLOG(2) << "Device registration record " << ((have_credentials) ? "found" : "not found."); - if (!have_credentials) - Error::AddTo(error, FROM_HERE, kErrorDomainGCD, "device_not_registered", - "No valid device registration record found"); - return have_credentials; + if (!have_credentials) { + return Error::AddTo(error, FROM_HERE, "device_not_registered", + "No valid device registration record found"); + } + return true; } std::unique_ptr<base::DictionaryValue> @@ -358,9 +352,7 @@ DeviceRegistrationInfo::ParseOAuthResponse(const HttpClient::Response& response, if (!resp->GetString("error_description", &error_message)) { error_message = "Unexpected OAuth error"; } - Error::AddTo(error, FROM_HERE, kErrorDomainOAuth2, error_code, - error_message); - return std::unique_ptr<base::DictionaryValue>(); + return Error::AddTo(error, FROM_HERE, error_code, error_message); } return resp; } @@ -416,8 +408,8 @@ void DeviceRegistrationInfo::OnRefreshAccessTokenDone( !json->GetInteger("expires_in", &expires_in) || access_token_.empty() || expires_in <= 0) { LOG(ERROR) << "Access token unavailable."; - Error::AddTo(&error, FROM_HERE, kErrorDomainOAuth2, - "unexpected_server_response", "Access token unavailable"); + Error::AddTo(&error, FROM_HERE, "unexpected_server_response", + "Access token unavailable"); return callback.Run(std::move(error)); } access_token_expiration_ = @@ -526,8 +518,7 @@ void DeviceRegistrationInfo::RegisterDevice(const std::string& ticket_id, const DoneCallback& callback) { if (HaveRegistrationCredentials()) { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, errors::kErrorDomain, - kErrorAlreayRegistered, + Error::AddTo(&error, FROM_HERE, kErrorAlreayRegistered, "Unable to register already registered device"); return RegisterDeviceError(callback, std::move(error)); } @@ -595,7 +586,7 @@ void DeviceRegistrationInfo::RegisterDeviceOnTicketFinalized( !json_resp->GetString("robotAccountAuthorizationCode", &auth_code) || !json_resp->GetDictionary("deviceDraft", &device_draft_response) || !device_draft_response->GetString("id", &cloud_id)) { - Error::AddTo(&error, FROM_HERE, kErrorDomainGCD, "unexpected_response", + Error::AddTo(&error, FROM_HERE, "unexpected_response", "Device account missing in response"); return RegisterDeviceError(callback, std::move(error)); } @@ -630,7 +621,7 @@ void DeviceRegistrationInfo::RegisterDeviceOnAuthCodeSent( !json_resp->GetString("refresh_token", &refresh_token) || !json_resp->GetInteger("expires_in", &expires_in) || access_token_.empty() || refresh_token.empty() || expires_in <= 0) { - Error::AddTo(&error, FROM_HERE, kErrorDomainGCD, "unexpected_response", + Error::AddTo(&error, FROM_HERE, "unexpected_response", "Device access_token missing in response"); return RegisterDeviceError(callback, std::move(error)); } @@ -737,7 +728,7 @@ void DeviceRegistrationInfo::OnCloudRequestDone( if (!IsSuccessful(*response)) { ParseGCDError(json_resp.get(), &error); if (status_code == http::kForbidden && - error->HasError(kErrorDomainGCDServer, "rateLimitExceeded")) { + error->HasError("rateLimitExceeded")) { // If we exceeded server quota, retry the request later. return RetryCloudRequest(data); } @@ -770,13 +761,13 @@ void DeviceRegistrationInfo::OnAccessTokenRefreshed( } void DeviceRegistrationInfo::CheckAccessTokenError(ErrorPtr error) { - if (error && error->HasError(kErrorDomainOAuth2, "invalid_grant")) + if (error && error->HasError("invalid_grant")) RemoveCredentials(); } void DeviceRegistrationInfo::ConnectToCloud(ErrorPtr error) { if (error) { - if (error->HasError(kErrorDomainOAuth2, "invalid_grant")) + if (error->HasError("invalid_grant")) RemoveCredentials(); return; } @@ -844,9 +835,8 @@ bool DeviceRegistrationInfo::UpdateServiceConfig( const std::string& service_url, ErrorPtr* error) { if (HaveRegistrationCredentials()) { - Error::AddTo(error, FROM_HERE, errors::kErrorDomain, kErrorAlreayRegistered, - "Unable to change config for registered device"); - return false; + return Error::AddTo(error, FROM_HERE, kErrorAlreayRegistered, + "Unable to change config for registered device"); } Config::Transaction change{config_}; change.set_client_id(client_id); @@ -1012,7 +1002,7 @@ void DeviceRegistrationInfo::OnUpdateDeviceResourceDone( } void DeviceRegistrationInfo::OnUpdateDeviceResourceError(ErrorPtr error) { - if (error->HasError(kErrorDomainGCDServer, "invalid_last_update_time_ms")) { + if (error->HasError("invalid_last_update_time_ms")) { // If the server rejected our previous request, retrieve the latest // timestamp from the server and retry. VLOG(1) << "Getting the last device resource timestamp from server..."; diff --git a/src/device_registration_info.h b/src/device_registration_info.h index 4a1c925..f670b68 100644 --- a/src/device_registration_info.h +++ b/src/device_registration_info.h @@ -45,10 +45,6 @@ namespace privet { class AuthManager; } -extern const char kErrorDomainOAuth2[]; -extern const char kErrorDomainGCD[]; -extern const char kErrorDomainGCDServer[]; - // The DeviceRegistrationInfo class represents device registration information. class DeviceRegistrationInfo : public NotificationDelegate, public CloudCommandUpdateInterface { diff --git a/src/device_registration_info_unittest.cc b/src/device_registration_info_unittest.cc index 595d749..cd11ac9 100644 --- a/src/device_registration_info_unittest.cc +++ b/src/device_registration_info_unittest.cc @@ -309,7 +309,7 @@ TEST_F(DeviceRegistrationInfoTest, CheckAuthenticationFailure) { ErrorPtr error; EXPECT_FALSE(RefreshAccessToken(&error)); - EXPECT_TRUE(error->HasError(kErrorDomainOAuth2, "unable_to_authenticate")); + EXPECT_TRUE(error->HasError("unable_to_authenticate")); EXPECT_EQ(GcdState::kConnecting, GetGcdState()); } @@ -338,7 +338,7 @@ TEST_F(DeviceRegistrationInfoTest, CheckDeregistration) { ErrorPtr error; EXPECT_FALSE(RefreshAccessToken(&error)); - EXPECT_TRUE(error->HasError(kErrorDomainOAuth2, "invalid_grant")); + EXPECT_TRUE(error->HasError("invalid_grant")); EXPECT_EQ(GcdState::kInvalidCredentials, GetGcdState()); EXPECT_EQ(test_data::kCloudId, dev_reg_->GetSettings().cloud_id); } @@ -567,7 +567,7 @@ TEST_F(DeviceRegistrationInfoTest, ReRegisterDevice) { bool done = false; dev_reg_->RegisterDevice( test_data::kClaimTicketId, base::Bind([this, &done](ErrorPtr error) { - EXPECT_TRUE(error->HasError("weave", "already_registered")); + EXPECT_TRUE(error->HasError("already_registered")); done = true; task_runner_.Break(); EXPECT_EQ(GcdState::kConnecting, GetGcdState()); diff --git a/src/error.cc b/src/error.cc index 89071df..cb279c1 100644 --- a/src/error.cc +++ b/src/error.cc @@ -11,7 +11,6 @@ namespace weave { namespace { inline void LogError(const tracked_objects::Location& location, - const std::string& domain, const std::string& code, const std::string& message) { // Use logging::LogMessage() directly instead of LOG(ERROR) to substitute @@ -22,66 +21,60 @@ inline void LogError(const tracked_objects::Location& location, logging::LOG_ERROR) .stream() << location.function_name() << "(...): " - << "Domain=" << domain << ", Code=" << code << ", Message=" << message; + << "Code=" << code << ", Message=" << message; } } // anonymous namespace ErrorPtr Error::Create(const tracked_objects::Location& location, - const std::string& domain, const std::string& code, const std::string& message) { - return Create(location, domain, code, message, ErrorPtr()); + return Create(location, code, message, ErrorPtr()); } ErrorPtr Error::Create(const tracked_objects::Location& location, - const std::string& domain, const std::string& code, const std::string& message, ErrorPtr inner_error) { - LogError(location, domain, code, message); - return ErrorPtr( - new Error(location, domain, code, message, std::move(inner_error))); + LogError(location, code, message); + return ErrorPtr(new Error(location, code, message, std::move(inner_error))); } -void Error::AddTo(ErrorPtr* error, - const tracked_objects::Location& location, - const std::string& domain, - const std::string& code, - const std::string& message) { +Error::AddToTypeProxy Error::AddTo(ErrorPtr* error, + const tracked_objects::Location& location, + const std::string& code, + const std::string& message) { if (error) { - *error = Create(location, domain, code, message, std::move(*error)); + *error = Create(location, code, message, std::move(*error)); } else { // Create already logs the error, but if |error| is nullptr, // we still want to log the error... - LogError(location, domain, code, message); + LogError(location, code, message); } + return {}; } -void Error::AddToPrintf(ErrorPtr* error, - const tracked_objects::Location& location, - const std::string& domain, - const std::string& code, - const char* format, - ...) { +Error::AddToTypeProxy Error::AddToPrintf( + ErrorPtr* error, + const tracked_objects::Location& location, + const std::string& code, + const char* format, + ...) { va_list ap; va_start(ap, format); std::string message = base::StringPrintV(format, ap); va_end(ap); - AddTo(error, location, domain, code, message); + AddTo(error, location, code, message); + return {}; } ErrorPtr Error::Clone() const { ErrorPtr inner_error = inner_error_ ? inner_error_->Clone() : nullptr; return ErrorPtr( - new Error(location_, domain_, code_, message_, std::move(inner_error))); -} - -bool Error::HasDomain(const std::string& domain) const { - return FindErrorOfDomain(this, domain) != nullptr; + new Error(location_, code_, message_, std::move(inner_error))); } -bool Error::HasError(const std::string& domain, const std::string& code) const { - return FindError(this, domain, code) != nullptr; +bool Error::HasError(const std::string& code) const { + return FindError(this, code) != nullptr; } const Error* Error::GetFirstError() const { @@ -92,40 +85,25 @@ const Error* Error::GetFirstError() const { } Error::Error(const tracked_objects::Location& location, - const std::string& domain, const std::string& code, const std::string& message, ErrorPtr inner_error) - : Error{tracked_objects::LocationSnapshot{location}, domain, code, message, + : Error{tracked_objects::LocationSnapshot{location}, code, message, std::move(inner_error)} {} Error::Error(const tracked_objects::LocationSnapshot& location, - const std::string& domain, const std::string& code, const std::string& message, ErrorPtr inner_error) - : domain_(domain), - code_(code), + : code_(code), message_(message), location_(location), inner_error_(std::move(inner_error)) {} -const Error* Error::FindErrorOfDomain(const Error* error_chain_start, - const std::string& domain) { - while (error_chain_start) { - if (error_chain_start->GetDomain() == domain) - break; - error_chain_start = error_chain_start->GetInnerError(); - } - return error_chain_start; -} - const Error* Error::FindError(const Error* error_chain_start, - const std::string& domain, const std::string& code) { while (error_chain_start) { - if (error_chain_start->GetDomain() == domain && - error_chain_start->GetCode() == code) + if (error_chain_start->GetCode() == code) break; error_chain_start = error_chain_start->GetInnerError(); } diff --git a/src/error_unittest.cc b/src/error_unittest.cc index 85633de..0486e86 100644 --- a/src/error_unittest.cc +++ b/src/error_unittest.cc @@ -13,50 +13,37 @@ namespace { ErrorPtr GenerateNetworkError() { tracked_objects::Location loc("GenerateNetworkError", "error_unittest.cc", 15, ::tracked_objects::GetProgramCounter()); - return Error::Create(loc, "network", "not_found", "Resource not found"); + return Error::Create(loc, "not_found", "Resource not found"); } ErrorPtr GenerateHttpError() { ErrorPtr inner = GenerateNetworkError(); - return Error::Create(FROM_HERE, "HTTP", "404", "Not found", std::move(inner)); + return Error::Create(FROM_HERE, "404", "Not found", std::move(inner)); } } // namespace TEST(Error, Single) { ErrorPtr err = GenerateNetworkError(); - EXPECT_EQ("network", err->GetDomain()); EXPECT_EQ("not_found", err->GetCode()); EXPECT_EQ("Resource not found", err->GetMessage()); EXPECT_EQ("GenerateNetworkError", err->GetLocation().function_name); EXPECT_EQ("error_unittest.cc", err->GetLocation().file_name); EXPECT_EQ(15, err->GetLocation().line_number); EXPECT_EQ(nullptr, err->GetInnerError()); - EXPECT_TRUE(err->HasDomain("network")); - EXPECT_FALSE(err->HasDomain("HTTP")); - EXPECT_FALSE(err->HasDomain("foo")); - EXPECT_TRUE(err->HasError("network", "not_found")); - EXPECT_FALSE(err->HasError("network", "404")); - EXPECT_FALSE(err->HasError("HTTP", "404")); - EXPECT_FALSE(err->HasError("HTTP", "not_found")); - EXPECT_FALSE(err->HasError("foo", "bar")); + EXPECT_TRUE(err->HasError("not_found")); + EXPECT_FALSE(err->HasError("404")); + EXPECT_FALSE(err->HasError("bar")); } TEST(Error, Nested) { ErrorPtr err = GenerateHttpError(); - EXPECT_EQ("HTTP", err->GetDomain()); EXPECT_EQ("404", err->GetCode()); EXPECT_EQ("Not found", err->GetMessage()); EXPECT_NE(nullptr, err->GetInnerError()); - EXPECT_EQ("network", err->GetInnerError()->GetDomain()); - EXPECT_TRUE(err->HasDomain("network")); - EXPECT_TRUE(err->HasDomain("HTTP")); - EXPECT_FALSE(err->HasDomain("foo")); - EXPECT_TRUE(err->HasError("network", "not_found")); - EXPECT_FALSE(err->HasError("network", "404")); - EXPECT_TRUE(err->HasError("HTTP", "404")); - EXPECT_FALSE(err->HasError("HTTP", "not_found")); - EXPECT_FALSE(err->HasError("foo", "bar")); + EXPECT_TRUE(err->HasError("not_found")); + EXPECT_TRUE(err->HasError("404")); + EXPECT_FALSE(err->HasError("bar")); } TEST(Error, Clone) { @@ -66,7 +53,6 @@ TEST(Error, Clone) { const Error* error2 = clone.get(); while (error1 && error2) { EXPECT_NE(error1, error2); - EXPECT_EQ(error1->GetDomain(), error2->GetDomain()); EXPECT_EQ(error1->GetCode(), error2->GetCode()); EXPECT_EQ(error1->GetMessage(), error2->GetMessage()); EXPECT_EQ(error1->GetLocation().function_name, diff --git a/src/json_error_codes.cc b/src/json_error_codes.cc index 9bfaef0..647c0ba 100644 --- a/src/json_error_codes.cc +++ b/src/json_error_codes.cc @@ -8,7 +8,6 @@ namespace weave { namespace errors { namespace json { -const char kDomain[] = "json_parser"; const char kParseError[] = "json_parse_error"; const char kObjectExpected[] = "json_object_expected"; } // namespace json diff --git a/src/json_error_codes.h b/src/json_error_codes.h index 5d3f07b..551eaac 100644 --- a/src/json_error_codes.h +++ b/src/json_error_codes.h @@ -10,8 +10,6 @@ namespace weave { namespace errors { namespace json { -extern const char kDomain[]; - extern const char kParseError[]; extern const char kObjectExpected[]; } // namespace json diff --git a/src/privet/auth_manager.cc b/src/privet/auth_manager.cc index 8373a7e..66d04c4 100644 --- a/src/privet/auth_manager.cc +++ b/src/privet/auth_manager.cc @@ -65,15 +65,13 @@ bool CheckCaveatType(const UwMacaroonCaveat& caveat, ErrorPtr* error) { UwMacaroonCaveatType caveat_type{}; if (!uw_macaroon_caveat_get_type_(&caveat, &caveat_type)) { - Error::AddTo(error, FROM_HERE, errors::kDomain, kInvalidTokenError, - "Unable to get type"); - return false; + return Error::AddTo(error, FROM_HERE, kInvalidTokenError, + "Unable to get type"); } if (caveat_type != type) { - Error::AddTo(error, FROM_HERE, errors::kDomain, kInvalidTokenError, - "Unexpected caveat type"); - return false; + return Error::AddTo(error, FROM_HERE, kInvalidTokenError, + "Unexpected caveat type"); } return true; @@ -87,9 +85,8 @@ bool ReadCaveat(const UwMacaroonCaveat& caveat, return false; if (!uw_macaroon_caveat_get_value_uint_(&caveat, value)) { - Error::AddTo(error, FROM_HERE, errors::kDomain, kInvalidTokenError, - "Unable to read caveat"); - return false; + return Error::AddTo(error, FROM_HERE, kInvalidTokenError, + "Unable to read caveat"); } return true; @@ -105,9 +102,8 @@ bool ReadCaveat(const UwMacaroonCaveat& caveat, const uint8_t* start{nullptr}; size_t size{0}; if (!uw_macaroon_caveat_get_value_str_(&caveat, &start, &size)) { - Error::AddTo(error, FROM_HERE, errors::kDomain, kInvalidTokenError, - "Unable to read caveat"); - return false; + return Error::AddTo(error, FROM_HERE, kInvalidTokenError, + "Unable to read caveat"); } value->assign(reinterpret_cast<const char*>(start), size); @@ -147,9 +143,8 @@ bool LoadMacaroon(const std::vector<uint8_t>& token, buffer->resize(kMaxMacaroonSize); if (!uw_macaroon_load_(token.data(), token.size(), buffer->data(), buffer->size(), macaroon)) { - Error::AddTo(error, FROM_HERE, errors::kDomain, kInvalidTokenError, - "Invalid token format"); - return false; + return Error::AddTo(error, FROM_HERE, kInvalidTokenError, + "Invalid token format"); } return true; } @@ -159,9 +154,8 @@ bool VerifyMacaroon(const std::vector<uint8_t>& secret, ErrorPtr* error) { CHECK_EQ(kSha256OutputSize, secret.size()); if (!uw_macaroon_verify_(&macaroon, secret.data(), secret.size())) { - Error::AddTo(error, FROM_HERE, errors::kDomain, "invalid_signature", - "Invalid token signature"); - return false; + return Error::AddTo(error, FROM_HERE, "invalid_signature", + "Invalid token signature"); } return true; } @@ -275,23 +269,20 @@ bool AuthManager::ParseAccessToken(const std::vector<uint8_t>& token, &user_id, error) || !ReadCaveat(macaroon.caveats[2], kUwMacaroonCaveatTypeExpiration, &expiration, error)) { - Error::AddTo(error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthorization, "Invalid token"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidAuthorization, + "Invalid token"); } AuthScope auth_scope{FromMacaroonScope(scope)}; if (auth_scope == AuthScope::kNone) { - Error::AddTo(error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthorization, "Invalid token data"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidAuthorization, + "Invalid token data"); } base::Time time{base::Time::FromTimeT(expiration)}; if (time < clock_->Now()) { - Error::AddTo(error, FROM_HERE, errors::kDomain, - errors::kAuthorizationExpired, "Token is expired"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kAuthorizationExpired, + "Token is expired"); } if (user_info) @@ -307,9 +298,9 @@ std::vector<uint8_t> AuthManager::ClaimRootClientAuthToken( if (config_) { auto current = config_->GetSettings().root_client_token_owner; if (!IsClaimAllowed(current, owner)) { - Error::AddToPrintf( - error, FROM_HERE, errors::kDomain, errors::kAlreadyClaimed, - "Device already claimed by '%s'", EnumToString(current).c_str()); + Error::AddToPrintf(error, FROM_HERE, errors::kAlreadyClaimed, + "Device already claimed by '%s'", + EnumToString(current).c_str()); return {}; } }; @@ -333,9 +324,7 @@ bool AuthManager::ConfirmClientAuthToken(const std::vector<uint8_t>& token, return auth.first->IsValidAuthToken(token, nullptr); }); if (claim == pending_claims_.end()) { - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kNotFound, - "Unknown claim"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kNotFound, "Unknown claim"); } SetAuthSecret(claim->first->GetAuthSecret(), claim->second); @@ -363,9 +352,8 @@ bool AuthManager::IsValidAuthToken(const std::vector<uint8_t>& token, UwMacaroon macaroon{}; if (!LoadMacaroon(token, &buffer, &macaroon, error) || !VerifyMacaroon(auth_secret_, macaroon, error)) { - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kInvalidAuthCode, - "Invalid token"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidAuthCode, + "Invalid token"); } return true; } diff --git a/src/privet/cloud_delegate.cc b/src/privet/cloud_delegate.cc index 4bf47b3..5f31fee 100644 --- a/src/privet/cloud_delegate.cc +++ b/src/privet/cloud_delegate.cc @@ -32,7 +32,7 @@ const int kMaxDeviceRegistrationRetries = 100; // ~ 8 minutes @5s retries. CommandInstance* ReturnNotFound(const std::string& command_id, ErrorPtr* error) { - Error::AddToPrintf(error, FROM_HERE, errors::kDomain, errors::kNotFound, + Error::AddToPrintf(error, FROM_HERE, errors::kNotFound, "Command not found, ID='%s'", command_id.c_str()); return nullptr; } @@ -171,9 +171,8 @@ class CloudDelegateImpl : public CloudDelegate { UserRole role; std::string str_scope = EnumToString(user_info.scope()); if (!StringToEnum(str_scope, &role)) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, "Invalid role: '%s'", - str_scope.c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + "Invalid role: '%s'", str_scope.c_str()); return callback.Run({}, std::move(error)); } @@ -251,9 +250,9 @@ class CloudDelegateImpl : public CloudDelegate { connection_state_ = ConnectionState{ConnectionState::kOnline}; } else { ErrorPtr error; - Error::AddToPrintf( - &error, FROM_HERE, errors::kDomain, errors::kInvalidState, - "Unexpected registration status: %s", EnumToString(status).c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidState, + "Unexpected registration status: %s", + EnumToString(status).c_str()); connection_state_ = ConnectionState{std::move(error)}; } NotifyOnDeviceInfoChanged(); @@ -268,7 +267,7 @@ class CloudDelegateImpl : public CloudDelegate { ErrorPtr error; CHECK_GE(registation_retry_count_, 0); if (registation_retry_count_-- == 0) { - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState, + Error::AddTo(&error, FROM_HERE, errors::kInvalidState, "Failed to register device"); setup_state_ = SetupState{std::move(error)}; return; @@ -321,9 +320,8 @@ class CloudDelegateImpl : public CloudDelegate { return true; } - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kAccessDenied, - "Need to be owner of the command."); - return false; + return Error::AddTo(error, FROM_HERE, errors::kAccessDenied, + "Need to be owner of the command."); } provider::TaskRunner* task_runner_{nullptr}; diff --git a/src/privet/constants.cc b/src/privet/constants.cc index e1962bd..4278165 100644 --- a/src/privet/constants.cc +++ b/src/privet/constants.cc @@ -8,8 +8,6 @@ namespace weave { namespace privet { namespace errors { -const char kDomain[] = "privetd"; - const char kInvalidClientCommitment[] = "invalidClientCommitment"; const char kInvalidFormat[] = "invalidFormat"; const char kMissingAuthorization[] = "missingAuthorization"; diff --git a/src/privet/constants.h b/src/privet/constants.h index 2b001aa..67f993d 100644 --- a/src/privet/constants.h +++ b/src/privet/constants.h @@ -10,8 +10,6 @@ namespace privet { namespace errors { -extern const char kDomain[]; - extern const char kInvalidClientCommitment[]; extern const char kInvalidFormat[]; extern const char kMissingAuthorization[]; diff --git a/src/privet/privet_handler.cc b/src/privet/privet_handler.cc index db55861..e8b1c77 100644 --- a/src/privet/privet_handler.cc +++ b/src/privet/privet_handler.cc @@ -185,7 +185,7 @@ void ReturnError(const Error& error, const PrivetHandler::RequestCallback& callback) { int code = http::kInternalServerError; for (const auto& it : kReasonToCode) { - if (error.HasError(errors::kDomain, it.reason)) { + if (error.HasError(it.reason)) { code = it.code; break; } @@ -201,14 +201,12 @@ void OnCommandRequestSucceeded(const PrivetHandler::RequestCallback& callback, if (!error) return callback.Run(http::kOk, output); - if (error->HasError("gcd", "unknown_command")) { - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kNotFound, - "Unknown command ID"); + if (error->HasError("unknown_command")) { + Error::AddTo(&error, FROM_HERE, errors::kNotFound, "Unknown command ID"); return ReturnError(*error, callback); } - if (error->HasError("gcd", "access_denied")) { - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kAccessDenied, - error->GetMessage()); + if (error->HasError("access_denied")) { + Error::AddTo(&error, FROM_HERE, errors::kAccessDenied, error->GetMessage()); return ReturnError(*error, callback); } return ReturnError(*error, callback); @@ -471,26 +469,22 @@ void PrivetHandler::HandleRequest(const std::string& api, const RequestCallback& callback) { ErrorPtr error; if (!input) { - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidFormat, - "Malformed JSON"); + Error::AddTo(&error, FROM_HERE, errors::kInvalidFormat, "Malformed JSON"); return ReturnError(*error, callback); } auto handler = handlers_.find(api); if (handler == handlers_.end()) { - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kNotFound, - "Path not found"); + Error::AddTo(&error, FROM_HERE, errors::kNotFound, "Path not found"); return ReturnError(*error, callback); } if (auth_header.empty()) { - Error::AddTo(&error, FROM_HERE, errors::kDomain, - errors::kMissingAuthorization, + Error::AddTo(&error, FROM_HERE, errors::kMissingAuthorization, "Authorization header must not be empty"); return ReturnError(*error, callback); } std::string token = GetAuthTokenFromAuthHeader(auth_header); if (token.empty()) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthorization, + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidAuthorization, "Invalid authorization header: %s", auth_header.c_str()); return ReturnError(*error, callback); } @@ -501,8 +495,7 @@ void PrivetHandler::HandleRequest(const std::string& api, } if (handler->second.scope > user_info.scope()) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthorizationScope, + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidAuthorizationScope, "Scope '%s' does not allow '%s'", EnumToString(user_info.scope()).c_str(), api.c_str()); return ReturnError(*error, callback); @@ -590,9 +583,9 @@ void PrivetHandler::HandlePairingStart(const base::DictionaryValue& input, std::set<PairingType> modes = security_->GetPairingTypes(); if (!StringToEnum(pairing_str, &pairing) || modes.find(pairing) == modes.end()) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, kInvalidParamValueFormat, - kPairingKey, pairing_str.c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + kInvalidParamValueFormat, kPairingKey, + pairing_str.c_str()); return ReturnError(*error, callback); } @@ -600,9 +593,9 @@ void PrivetHandler::HandlePairingStart(const base::DictionaryValue& input, std::set<CryptoType> cryptos = security_->GetCryptoTypes(); if (!StringToEnum(crypto_str, &crypto) || cryptos.find(crypto) == cryptos.end()) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, kInvalidParamValueFormat, - kCryptoKey, crypto_str.c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + kInvalidParamValueFormat, kCryptoKey, + crypto_str.c_str()); return ReturnError(*error, callback); } @@ -663,9 +656,9 @@ void PrivetHandler::HandleAuth(const base::DictionaryValue& input, AuthType auth_type{}; if (!input.GetString(kAuthModeKey, &auth_code_type) || !StringToEnum(auth_code_type, &auth_type)) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthMode, kInvalidParamValueFormat, - kAuthModeKey, auth_code_type.c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidAuthMode, + kInvalidParamValueFormat, kAuthModeKey, + auth_code_type.c_str()); return ReturnError(*error, callback); } @@ -676,8 +669,7 @@ void PrivetHandler::HandleAuth(const base::DictionaryValue& input, input.GetString(kAuthRequestedScopeKey, &requested_scope); if (requested_scope != kAuthScopeAutoValue) { if (!StringToEnum(requested_scope, &desired_scope)) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidRequestedScope, + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidRequestedScope, kInvalidParamValueFormat, kAuthRequestedScopeKey, requested_scope.c_str()); return ReturnError(*error, callback); @@ -701,8 +693,8 @@ void PrivetHandler::HandleAuth(const base::DictionaryValue& input, } if (access_token_scope < acceptable_scope) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kAccessDenied, "Scope '%s' is not allowed", + Error::AddToPrintf(&error, FROM_HERE, errors::kAccessDenied, + "Scope '%s' is not allowed", EnumToString(access_token_scope).c_str()); return ReturnError(*error, callback); } @@ -737,9 +729,9 @@ void PrivetHandler::HandleAccessControlConfirm( std::string token; if (!input.GetString(kAuthClientTokenKey, &token)) { - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, kInvalidParamValueFormat, - kAuthClientTokenKey, token.c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + kInvalidParamValueFormat, kAuthClientTokenKey, + token.c_str()); return ReturnError(*error, callback); } @@ -771,16 +763,15 @@ void PrivetHandler::HandleSetupStart(const base::DictionaryValue& input, if (input.GetDictionary(kWifiKey, &wifi)) { if (!wifi_ || wifi_->GetTypes().empty()) { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, errors::kDomain, - errors::kSetupUnavailable, "WiFi setup unavailable"); + Error::AddTo(&error, FROM_HERE, errors::kSetupUnavailable, + "WiFi setup unavailable"); return ReturnError(*error, callback); } wifi->GetString(kSetupStartSsidKey, &ssid); if (ssid.empty()) { ErrorPtr error; - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, kInvalidParamValueFormat, - kSetupStartSsidKey, ""); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + kInvalidParamValueFormat, kSetupStartSsidKey, ""); return ReturnError(*error, callback); } wifi->GetString(kSetupStartPassKey, &passphrase); @@ -790,17 +781,15 @@ void PrivetHandler::HandleSetupStart(const base::DictionaryValue& input, if (input.GetDictionary(kGcdKey, ®istration)) { if (user_info.scope() < AuthScope::kOwner) { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthorizationScope, + Error::AddTo(&error, FROM_HERE, errors::kInvalidAuthorizationScope, "Only owner can register device"); return ReturnError(*error, callback); } registration->GetString(kSetupStartTicketIdKey, &ticket); if (ticket.empty()) { ErrorPtr error; - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, kInvalidParamValueFormat, - kSetupStartTicketIdKey, ""); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + kInvalidParamValueFormat, kSetupStartTicketIdKey, ""); return ReturnError(*error, callback); } registration->GetString(kSetupStartUserKey, &user); @@ -932,9 +921,8 @@ void PrivetHandler::HandleCommandsStatus(const base::DictionaryValue& input, std::string id; if (!input.GetString(kCommandsIdKey, &id)) { ErrorPtr error; - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, kInvalidParamValueFormat, - kCommandsIdKey, id.c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + kInvalidParamValueFormat, kCommandsIdKey, id.c_str()); return ReturnError(*error, callback); } cloud_->GetCommand(id, user_info, @@ -954,9 +942,8 @@ void PrivetHandler::HandleCommandsCancel(const base::DictionaryValue& input, std::string id; if (!input.GetString(kCommandsIdKey, &id)) { ErrorPtr error; - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kInvalidParams, kInvalidParamValueFormat, - kCommandsIdKey, id.c_str()); + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidParams, + kInvalidParamValueFormat, kCommandsIdKey, id.c_str()); return ReturnError(*error, callback); } cloud_->CancelCommand(id, user_info, diff --git a/src/privet/privet_handler_unittest.cc b/src/privet/privet_handler_unittest.cc index 6d6a289..fa79e77 100644 --- a/src/privet/privet_handler_unittest.cc +++ b/src/privet/privet_handler_unittest.cc @@ -136,7 +136,7 @@ class PrivetHandlerTest : public testing::Test { .WillRepeatedly(ReturnRef(gcd_disabled_state_)); auto set_error = [](const std::string&, const std::string&, ErrorPtr* error) { - Error::AddTo(error, FROM_HERE, errors::kDomain, "setupUnavailable", ""); + Error::AddTo(error, FROM_HERE, "setupUnavailable", ""); }; EXPECT_CALL(cloud_, Setup(_, _, _)) .WillRepeatedly(DoAll(Invoke(set_error), Return(false))); @@ -197,11 +197,9 @@ TEST_F(PrivetHandlerTest, InvalidAuth) { TEST_F(PrivetHandlerTest, ExpiredAuth) { auth_header_ = "Privet 123"; EXPECT_CALL(security_, ParseAccessToken(_, _, _)) - .WillRepeatedly(DoAll(WithArgs<2>(Invoke([](ErrorPtr* error) { - Error::AddTo(error, FROM_HERE, errors::kDomain, - "authorizationExpired", ""); - })), - Return(false))); + .WillRepeatedly(WithArgs<2>(Invoke([](ErrorPtr* error) { + return Error::AddTo(error, FROM_HERE, "authorizationExpired", ""); + }))); EXPECT_PRED2(IsEqualError, CodeWithReason(403, "authorizationExpired"), HandleRequest("/privet/info", "{}")); } @@ -379,10 +377,10 @@ TEST_F(PrivetHandlerTest, AuthErrorAccessDenied) { TEST_F(PrivetHandlerTest, AuthErrorInvalidAuthCode) { auto set_error = [](ErrorPtr* error) { - Error::AddTo(error, FROM_HERE, errors::kDomain, "invalidAuthCode", ""); + return Error::AddTo(error, FROM_HERE, "invalidAuthCode", ""); }; EXPECT_CALL(security_, CreateAccessToken(_, "testToken", _, _, _, _, _)) - .WillRepeatedly(DoAll(WithArgs<6>(Invoke(set_error)), Return(false))); + .WillRepeatedly(WithArgs<6>(Invoke(set_error))); const char kInput[] = R"({ 'mode': 'pairing', 'requestedScope': 'user', @@ -511,7 +509,7 @@ TEST_F(PrivetHandlerSetupTest, StatusWifi) { TEST_F(PrivetHandlerSetupTest, StatusWifiError) { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, "test", "invalidPassphrase", ""); + Error::AddTo(&error, FROM_HERE, "invalidPassphrase", ""); wifi_.setup_state_ = SetupState{std::move(error)}; const char kExpected[] = R"({ @@ -541,7 +539,7 @@ TEST_F(PrivetHandlerSetupTest, StatusGcd) { TEST_F(PrivetHandlerSetupTest, StatusGcdError) { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, "test", "invalidTicket", ""); + Error::AddTo(&error, FROM_HERE, "invalidTicket", ""); cloud_.setup_state_ = SetupState{std::move(error)}; const char kExpected[] = R"({ @@ -601,10 +599,9 @@ TEST_F(PrivetHandlerSetupTest, WifiSetup) { } })"; auto set_error = [](const std::string&, const std::string&, ErrorPtr* error) { - Error::AddTo(error, FROM_HERE, errors::kDomain, "deviceBusy", ""); + return Error::AddTo(error, FROM_HERE, "deviceBusy", ""); }; - EXPECT_CALL(wifi_, ConfigureCredentials(_, _, _)) - .WillOnce(DoAll(Invoke(set_error), Return(false))); + EXPECT_CALL(wifi_, ConfigureCredentials(_, _, _)).WillOnce(Invoke(set_error)); EXPECT_PRED2(IsEqualError, CodeWithReason(503, "deviceBusy"), HandleRequest("/privet/v3/setup/start", kInput)); @@ -641,10 +638,9 @@ TEST_F(PrivetHandlerSetupTest, GcdSetup) { })"; auto set_error = [](const std::string&, const std::string&, ErrorPtr* error) { - Error::AddTo(error, FROM_HERE, errors::kDomain, "deviceBusy", ""); + return Error::AddTo(error, FROM_HERE, "deviceBusy", ""); }; - EXPECT_CALL(cloud_, Setup(_, _, _)) - .WillOnce(DoAll(Invoke(set_error), Return(false))); + EXPECT_CALL(cloud_, Setup(_, _, _)).WillOnce(Invoke(set_error)); EXPECT_PRED2(IsEqualError, CodeWithReason(503, "deviceBusy"), HandleRequest("/privet/v3/setup/start", kInput)); @@ -857,8 +853,7 @@ TEST_F(PrivetHandlerTestWithAuth, ComponentsWithFiltersAndPaths) { "{'path':'comp1.comp2', 'filter':['traits', 'components']}")); auto error_handler = [](ErrorPtr* error) -> const base::DictionaryValue* { - Error::AddTo(error, FROM_HERE, errors::kDomain, "componentNotFound", ""); - return nullptr; + return Error::AddTo(error, FROM_HERE, "componentNotFound", ""); }; EXPECT_CALL(cloud_, FindComponent("comp7", _)) .WillOnce(WithArgs<1>(Invoke(error_handler))); @@ -899,7 +894,7 @@ TEST_F(PrivetHandlerTestWithAuth, CommandsStatus) { HandleRequest("/privet/v3/commands/status", kInput)); ErrorPtr error; - Error::AddTo(&error, FROM_HERE, errors::kDomain, "notFound", ""); + Error::AddTo(&error, FROM_HERE, "notFound", ""); EXPECT_CALL(cloud_, GetCommand(_, _, _)) .WillOnce(WithArgs<2>( Invoke([&error](const CloudDelegate::CommandDoneCallback& callback) { @@ -924,7 +919,7 @@ TEST_F(PrivetHandlerTestWithAuth, CommandsCancel) { HandleRequest("/privet/v3/commands/cancel", "{'id': '8'}")); ErrorPtr error; - Error::AddTo(&error, FROM_HERE, errors::kDomain, "notFound", ""); + Error::AddTo(&error, FROM_HERE, "notFound", ""); EXPECT_CALL(cloud_, CancelCommand(_, _, _)) .WillOnce(WithArgs<2>( Invoke([&error](const CloudDelegate::CommandDoneCallback& callback) { diff --git a/src/privet/security_manager.cc b/src/privet/security_manager.cc index 2a3dc08..358876d 100644 --- a/src/privet/security_manager.cc +++ b/src/privet/security_manager.cc @@ -51,9 +51,8 @@ class Spakep224Exchanger : public SecurityManager::KeyExchanger { case crypto::P224EncryptedKeyExchange::kResultPending: return true; case crypto::P224EncryptedKeyExchange::kResultFailed: - Error::AddTo(error, FROM_HERE, errors::kDomain, - errors::kInvalidClientCommitment, spake_.error()); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidClientCommitment, + spake_.error()); default: LOG(FATAL) << "SecurityManager uses only one round trip"; } @@ -139,9 +138,8 @@ bool SecurityManager::CreateAccessTokenImpl( base::TimeDelta* access_token_ttl, ErrorPtr* error) { auto disabled_mode = [](ErrorPtr* error) { - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kInvalidAuthMode, - "Mode is not available"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidAuthMode, + "Mode is not available"); }; switch (auth_type) { @@ -154,9 +152,8 @@ bool SecurityManager::CreateAccessTokenImpl( if (!IsPairingAuthSupported()) return disabled_mode(error); if (!IsValidPairingCode(auth_code)) { - Error::AddTo(error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthCode, "Invalid authCode"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidAuthCode, + "Invalid authCode"); } return CreateAccessTokenImpl(auth_type, desired_scope, access_token, access_token_scope, access_token_ttl); @@ -170,9 +167,8 @@ bool SecurityManager::CreateAccessTokenImpl( error); } - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kInvalidAuthMode, - "Unsupported auth mode"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidAuthMode, + "Unsupported auth mode"); } bool SecurityManager::CreateAccessToken(AuthType auth_type, @@ -185,8 +181,7 @@ bool SecurityManager::CreateAccessToken(AuthType auth_type, std::vector<uint8_t> auth_decoded; if (auth_type != AuthType::kAnonymous && !Base64Decode(auth_code, &auth_decoded)) { - Error::AddToPrintf(error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthorization, + Error::AddToPrintf(error, FROM_HERE, errors::kInvalidAuthorization, "Invalid auth_code encoding: %s", auth_code.c_str()); return false; } @@ -209,8 +204,7 @@ bool SecurityManager::ParseAccessToken(const std::string& token, ErrorPtr* error) const { std::vector<uint8_t> decoded; if (!Base64Decode(token, &decoded)) { - Error::AddToPrintf(error, FROM_HERE, errors::kDomain, - errors::kInvalidAuthorization, + Error::AddToPrintf(error, FROM_HERE, errors::kInvalidAuthorization, "Invalid token encoding: %s", token.c_str()); return false; } @@ -252,8 +246,7 @@ bool SecurityManager::ConfirmClientAuthToken(const std::string& token, ErrorPtr* error) { std::vector<uint8_t> token_decoded; if (!Base64Decode(token, &token_decoded)) { - Error::AddToPrintf(error, FROM_HERE, errors::kDomain, - errors::kInvalidFormat, + Error::AddToPrintf(error, FROM_HERE, errors::kInvalidFormat, "Invalid auth token string: '%s'", token.c_str()); return false; } @@ -293,9 +286,8 @@ bool SecurityManager::StartPairing(PairingType mode, const auto& pairing_modes = GetSettings().pairing_modes; if (std::find(pairing_modes.begin(), pairing_modes.end(), mode) == pairing_modes.end()) { - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kInvalidParams, - "Pairing mode is not enabled"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidParams, + "Pairing mode is not enabled"); } std::string code; @@ -308,9 +300,8 @@ bool SecurityManager::StartPairing(PairingType mode, code = base::StringPrintf("%04i", base::RandInt(0, 9999)); break; default: - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kInvalidParams, - "Unsupported pairing mode"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidParams, + "Unsupported pairing mode"); } std::unique_ptr<KeyExchanger> spake; @@ -325,9 +316,8 @@ bool SecurityManager::StartPairing(PairingType mode, } // Fall through... default: - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kInvalidParams, - "Unsupported crypto"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kInvalidParams, + "Unsupported crypto"); } // Allow only a single session at a time for now. @@ -368,27 +358,25 @@ bool SecurityManager::ConfirmPairing(const std::string& session_id, ErrorPtr* error) { auto session = pending_sessions_.find(session_id); if (session == pending_sessions_.end()) { - Error::AddToPrintf(error, FROM_HERE, errors::kDomain, - errors::kUnknownSession, "Unknown session id: '%s'", - session_id.c_str()); + Error::AddToPrintf(error, FROM_HERE, errors::kUnknownSession, + "Unknown session id: '%s'", session_id.c_str()); return false; } std::vector<uint8_t> commitment; if (!Base64Decode(client_commitment, &commitment)) { ClosePendingSession(session_id); - Error::AddToPrintf( - error, FROM_HERE, errors::kDomain, errors::kInvalidFormat, - "Invalid commitment string: '%s'", client_commitment.c_str()); + Error::AddToPrintf(error, FROM_HERE, errors::kInvalidFormat, + "Invalid commitment string: '%s'", + client_commitment.c_str()); return false; } if (!session->second->ProcessMessage( std::string(commitment.begin(), commitment.end()), error)) { ClosePendingSession(session_id); - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kCommitmentMismatch, - "Pairing code or crypto implementation mismatch"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kCommitmentMismatch, + "Pairing code or crypto implementation mismatch"); } const std::string& key = session->second->GetKey(); @@ -422,7 +410,7 @@ bool SecurityManager::CancelPairing(const std::string& session_id, CHECK(!confirmed || !pending); if (confirmed || pending) return true; - Error::AddToPrintf(error, FROM_HERE, errors::kDomain, errors::kUnknownSession, + Error::AddToPrintf(error, FROM_HERE, errors::kUnknownSession, "Unknown session id: '%s'", session_id.c_str()); return false; } @@ -444,9 +432,8 @@ bool SecurityManager::CheckIfPairingAllowed(ErrorPtr* error) { return true; if (block_pairing_until_ > auth_manager_->Now()) { - Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kDeviceBusy, - "Too many pairing attempts"); - return false; + return Error::AddTo(error, FROM_HERE, errors::kDeviceBusy, + "Too many pairing attempts"); } if (++pairing_attemts_ >= kMaxAllowedPairingAttemts) { diff --git a/src/privet/wifi_bootstrap_manager.cc b/src/privet/wifi_bootstrap_manager.cc index 086e21c..566da80 100644 --- a/src/privet/wifi_bootstrap_manager.cc +++ b/src/privet/wifi_bootstrap_manager.cc @@ -211,7 +211,7 @@ std::set<WifiType> WifiBootstrapManager::GetTypes() const { void WifiBootstrapManager::OnConnectDone(const std::string& ssid, ErrorPtr error) { if (error) { - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState, + Error::AddTo(&error, FROM_HERE, errors::kInvalidState, "Failed to connect to provided network"); setup_state_ = SetupState{std::move(error)}; return StartBootstrapping(); @@ -226,7 +226,7 @@ void WifiBootstrapManager::OnConnectDone(const std::string& ssid, void WifiBootstrapManager::OnConnectTimeout() { ErrorPtr error; - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState, + Error::AddTo(&error, FROM_HERE, errors::kInvalidState, "Timeout connecting to provided network"); setup_state_ = SetupState{std::move(error)}; return StartBootstrapping(); @@ -265,7 +265,7 @@ void WifiBootstrapManager::UpdateConnectionState() { case Network::State::kError: { // TODO(wiley) Pull error information from somewhere. ErrorPtr error; - Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState, + Error::AddTo(&error, FROM_HERE, errors::kInvalidState, "Unknown WiFi error"); connection_state_ = ConnectionState{std::move(error)}; return; @@ -278,7 +278,7 @@ void WifiBootstrapManager::UpdateConnectionState() { return; } ErrorPtr error; - Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, errors::kInvalidState, + Error::AddToPrintf(&error, FROM_HERE, errors::kInvalidState, "Unknown network state: %s", EnumToString(service_state).c_str()); connection_state_ = ConnectionState{std::move(error)}; diff --git a/src/utils.cc b/src/utils.cc index 24ce1ca..28828d7 100644 --- a/src/utils.cc +++ b/src/utils.cc @@ -29,7 +29,6 @@ const char kErrorMessageKey[] = "message"; } // anonymous namespace namespace errors { -const char kErrorDomain[] = "weave"; const char kSchemaError[] = "schema_error"; const char kInvalidCategoryError[] = "invalid_category"; const char kInvalidPackageError[] = "invalid_package"; @@ -43,8 +42,7 @@ std::unique_ptr<base::DictionaryValue> LoadJsonDict( auto value = base::JSONReader::ReadAndReturnError( json_string, base::JSON_PARSE_RFC, nullptr, &error_message); if (!value) { - Error::AddToPrintf(error, FROM_HERE, errors::json::kDomain, - errors::json::kParseError, + Error::AddToPrintf(error, FROM_HERE, errors::json::kParseError, "Error parsing JSON string '%s' (%zu): %s", LimitString(json_string, kMaxStrLen).c_str(), json_string.size(), error_message.c_str()); @@ -52,8 +50,7 @@ std::unique_ptr<base::DictionaryValue> LoadJsonDict( } base::DictionaryValue* dict_value = nullptr; if (!value->GetAsDictionary(&dict_value)) { - Error::AddToPrintf(error, FROM_HERE, errors::json::kDomain, - errors::json::kObjectExpected, + Error::AddToPrintf(error, FROM_HERE, errors::json::kObjectExpected, "JSON string '%s' is not a JSON object", LimitString(json_string, kMaxStrLen).c_str()); return result; diff --git a/src/utils.h b/src/utils.h index bd69e94..99d7bda 100644 --- a/src/utils.h +++ b/src/utils.h @@ -14,7 +14,6 @@ namespace weave { namespace errors { -extern const char kErrorDomain[]; extern const char kSchemaError[]; extern const char kInvalidCategoryError[]; extern const char kInvalidPackageError[]; diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc index b106aab..5bef931 100644 --- a/src/weave_unittest.cc +++ b/src/weave_unittest.cc @@ -435,13 +435,12 @@ TEST_F(WeaveBasicTest, Register) { EXPECT_TRUE(done); done = false; - device_->Register( - "TICKET_ID2", base::Bind([this, &done](ErrorPtr error) { - EXPECT_TRUE(error->HasError("weave", "already_registered")); - done = true; - task_runner_.Break(); - EXPECT_EQ("CLOUD_ID", device_->GetSettings().cloud_id); - })); + device_->Register("TICKET_ID2", base::Bind([this, &done](ErrorPtr error) { + EXPECT_TRUE(error->HasError("already_registered")); + done = true; + task_runner_.Break(); + EXPECT_EQ("CLOUD_ID", device_->GetSettings().cloud_id); + })); task_runner_.Run(); EXPECT_TRUE(done); } @@ -15,8 +15,7 @@ endif weave_test_obj_files := $(WEAVE_TEST_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libgtest.a, but the headers files in third_party/include. -$(weave_test_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +$(weave_test_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< @@ -25,8 +24,7 @@ out/$(BUILD_MODE)/libweave-test.a : $(weave_test_obj_files) weave_unittest_obj_files := $(WEAVE_UNITTEST_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libgtest.a, but the headers files in third_party/include. -$(weave_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +$(weave_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< @@ -41,8 +39,7 @@ test : out/$(BUILD_MODE)/libweave_testrunner weave_exports_unittest_obj_files := $(WEAVE_EXPORTS_UNITTEST_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libgtest.a, but the headers files in third_party/include. -$(weave_exports_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +$(weave_exports_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< diff --git a/third_party/chromium/base/compiler_specific.h b/third_party/chromium/base/compiler_specific.h index 339e9b7..79b7fa8 100644 --- a/third_party/chromium/base/compiler_specific.h +++ b/third_party/chromium/base/compiler_specific.h @@ -135,7 +135,7 @@ // |dots_param| is the one-based index of the "..." parameter. // For v*printf functions (which take a va_list), pass 0 for dots_param. // (This is undocumented but matches what the system C headers do.) -#if defined(COMPILER_GCC) +#if defined(COMPILER_GCC) || defined(__clang__) #define PRINTF_FORMAT(format_param, dots_param) \ __attribute__((format(printf, format_param, dots_param))) #else diff --git a/third_party/chromium/base/strings/stringprintf.cc b/third_party/chromium/base/strings/stringprintf.cc index 8147ed3..c3ef88c 100644 --- a/third_party/chromium/base/strings/stringprintf.cc +++ b/third_party/chromium/base/strings/stringprintf.cc @@ -27,7 +27,10 @@ inline int vsnprintfT(char* buffer, size_t buf_size, const char* format, va_list argptr) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" return base::vsnprintf(buffer, buf_size, format, argptr); +#pragma GCC diagnostic pop } // Templatized backend for StringPrintF/StringAppendF. This does not finalize diff --git a/third_party/chromium/base/strings/stringprintf_unittest.cc b/third_party/chromium/base/strings/stringprintf_unittest.cc index e70499d..7e9b13c 100644 --- a/third_party/chromium/base/strings/stringprintf_unittest.cc +++ b/third_party/chromium/base/strings/stringprintf_unittest.cc @@ -22,7 +22,10 @@ namespace { static void StringAppendVTestHelper(std::string* out, const char* format, ...) { va_list ap; va_start(ap, format); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" StringAppendV(out, format, ap); +#pragma GCC diagnostic pop va_end(ap); } diff --git a/third_party/third_party.mk b/third_party/third_party.mk index 91e4cf4..c3e1cf0 100644 --- a/third_party/third_party.mk +++ b/third_party/third_party.mk @@ -7,29 +7,25 @@ third_party_chromium_base_obj_files := $(THIRD_PARTY_CHROMIUM_BASE_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libgtest.a, but the headers files in third_party/include. -$(third_party_chromium_base_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +$(third_party_chromium_base_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< third_party_chromium_base_unittest_obj_files := $(THIRD_PARTY_CHROMIUM_BASE_UNITTEST_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libgtest.a, but the headers files in third_party/include. -$(third_party_chromium_base_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +$(third_party_chromium_base_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< third_party_chromium_crypto_obj_files := $(THIRD_PARTY_CHROMIUM_CRYPTO_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libgtest.a, but the headers files in third_party/include. -$(third_party_chromium_crypto_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +$(third_party_chromium_crypto_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< third_party_chromium_crypto_unittest_obj_files := $(THIRD_PARTY_CHROMIUM_CRYPTO_UNITTEST_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) -# We don't need libgtest.a, but the headers files in third_party/include. -$(third_party_chromium_crypto_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/lib/libgtest.a +$(third_party_chromium_crypto_unittest_obj_files) : out/$(BUILD_MODE)/%.o : %.cc third_party/include/gtest/gtest.h mkdir -p $(dir $@) $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< @@ -54,7 +50,7 @@ $(third_party_libuweave_obj_files) : out/$(BUILD_MODE)/%.o : %.c ### # libgtest and libgmock (third_party, downloaded on build) -third_party/lib/libgtest.a : +third_party/include/gtest/gtest.h : @echo Downloading and building libgtest and libgmock... third_party/get_gtest.sh @echo Finished downloading and building libgtest and libgmock. @@ -67,7 +63,7 @@ clean-gtest : ### # libevent (third_party, downloaded on build) -third_party/lib/libevent.a : +third_party/include/event2/event.h : @echo Downloading and building libevent... DISABLE_LIBEVENT_TEST=1 third_party/get_libevent.sh @echo Finished downloading and building libevent. |