diff --git a/libweave/examples/ubuntu/bluez_client.cc b/libweave/examples/ubuntu/bluez_client.cc
index d1f6558..bb376d4 100644
--- a/libweave/examples/ubuntu/bluez_client.cc
+++ b/libweave/examples/ubuntu/bluez_client.cc
@@ -7,8 +7,8 @@
 namespace weave {
 namespace examples {
 
-BluetoothImpl::BluetoothImpl() {};
-BluetoothImpl::~BluetoothImpl() {};
+BluetoothImpl::BluetoothImpl() {}
+BluetoothImpl::~BluetoothImpl() {}
 
 }  // namespace examples
 }  // namespace weave
diff --git a/libweave/examples/ubuntu/event_http_server.cc b/libweave/examples/ubuntu/event_http_server.cc
index 03d0972..3fefac7 100644
--- a/libweave/examples/ubuntu/event_http_server.cc
+++ b/libweave/examples/ubuntu/event_http_server.cc
@@ -35,11 +35,10 @@
   MemoryReadStream(const std::vector<uint8_t>& data, TaskRunner* task_runner)
       : data_{data}, task_runner_{task_runner} {}
 
-  void Read(
-      void* buffer,
-      size_t size_to_read,
-      const base::Callback<void(size_t)>& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override {
+  void Read(void* buffer,
+            size_t size_to_read,
+            const base::Callback<void(size_t)>& success_callback,
+            const base::Callback<void(const Error*)>& error_callback) override {
     CHECK_LE(read_position_, data_.size());
     size_t size_read = std::min(size_to_read, data_.size() - read_position_);
     if (size_read > 0)
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 00f9b86..ff936d7 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -22,14 +22,15 @@
              << "\t-h,--help                    Show this help message\n"
              << "\t-b,--bootstrapping           Force WiFi bootstrapping\n"
              << "\t--disable_security           Disable privet security\n"
-             << "\t--registration_ticket=TICKET Register device with the given ticket\n";
+             << "\t--registration_ticket=TICKET Register device with the given "
+                "ticket\n";
 }
 
 class CommandHandler {
  public:
   explicit CommandHandler(weave::Device* device) {
-    device->GetCommands()->AddOnCommandAddedCallback(
-        base::Bind(&CommandHandler::OnNewCommand, weak_ptr_factory_.GetWeakPtr()));
+    device->GetCommands()->AddOnCommandAddedCallback(base::Bind(
+        &CommandHandler::OnNewCommand, weak_ptr_factory_.GetWeakPtr()));
   }
 
  private:
@@ -39,9 +40,8 @@
       std::string name;
       cmd->GetParameters()->GetString("_name", &name);
       if (name.empty()) {
-        name = cmd->GetOrigin() == weave::CommandOrigin::kCloud
-            ? "cloud user"
-            : "local user";
+        name = cmd->GetOrigin() == weave::CommandOrigin::kCloud ? "cloud user"
+                                                                : "local user";
       }
       LOG(INFO) << "vendor _greeter._greet command: in progress";
       cmd->SetProgress(base::DictionaryValue{}, nullptr);
@@ -58,7 +58,6 @@
 };
 }
 
-
 int main(int argc, char** argv) {
   bool force_bootstrapping = false;
   bool disable_security = false;
@@ -72,13 +71,13 @@
       force_bootstrapping = true;
     } else if (arg == "--disable_security") {
       disable_security = true;
-    } else if  (arg.find("--registration_ticket") != std::string::npos) {
+    } else if (arg.find("--registration_ticket") != std::string::npos) {
       auto pos = arg.find("=");
       if (pos == std::string::npos) {
         ShowUsage(argv[0]);
         return 1;
       }
-      registration_ticket = arg.substr(pos+1);
+      registration_ticket = arg.substr(pos + 1);
     } else {
       ShowUsage(argv[0]);
       return 1;
@@ -107,7 +106,8 @@
 
   if (!registration_ticket.empty()) {
     weave::ErrorPtr error;
-    auto device_id = device->GetCloud()->RegisterDevice(registration_ticket, &error);
+    auto device_id =
+        device->GetCloud()->RegisterDevice(registration_ticket, &error);
     if (error != nullptr) {
       LOG(ERROR) << "Fail to register device: " << error->GetMessage();
     } else {
diff --git a/libweave/examples/ubuntu/ssl_stream.cc b/libweave/examples/ubuntu/ssl_stream.cc
index fde4c00..85ffae5 100644
--- a/libweave/examples/ubuntu/ssl_stream.cc
+++ b/libweave/examples/ubuntu/ssl_stream.cc
@@ -20,11 +20,10 @@
   success_callback.Run();
 }
 
-void SSLStream::Read(
-    void* buffer,
-    size_t size_to_read,
-    const base::Callback<void(size_t)>& success_callback,
-    const base::Callback<void(const Error*)>& error_callback) {
+void SSLStream::Read(void* buffer,
+                     size_t size_to_read,
+                     const base::Callback<void(size_t)>& success_callback,
+                     const base::Callback<void(const Error*)>& error_callback) {
   int res = SSL_read(ssl_.get(), buffer, size_to_read);
   if (res > 0) {
     task_runner_->PostDelayedTask(
@@ -40,8 +39,8 @@
   if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) {
     task_runner_->PostDelayedTask(
         FROM_HERE,
-        base::Bind(&SSLStream::Read, weak_ptr_factory_.GetWeakPtr(),
-                   buffer, size_to_read, success_callback, error_callback),
+        base::Bind(&SSLStream::Read, weak_ptr_factory_.GetWeakPtr(), buffer,
+                   size_to_read, success_callback, error_callback),
         base::TimeDelta::FromSeconds(1));
     return;
   }
@@ -78,8 +77,8 @@
 
     task_runner_->PostDelayedTask(
         FROM_HERE,
-        base::Bind(&SSLStream::Write, weak_ptr_factory_.GetWeakPtr(),
-                   buffer, size_to_write, success_callback, error_callback),
+        base::Bind(&SSLStream::Write, weak_ptr_factory_.GetWeakPtr(), buffer,
+                   size_to_write, success_callback, error_callback),
         base::TimeDelta::FromSeconds(1));
 
     return;
@@ -90,8 +89,8 @@
   if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) {
     task_runner_->PostDelayedTask(
         FROM_HERE,
-        base::Bind(&SSLStream::Write, weak_ptr_factory_.GetWeakPtr(),
-                   buffer, size_to_write, success_callback, error_callback),
+        base::Bind(&SSLStream::Write, weak_ptr_factory_.GetWeakPtr(), buffer,
+                   size_to_write, success_callback, error_callback),
         base::TimeDelta::FromSeconds(1));
     return;
   }
diff --git a/libweave/examples/ubuntu/ssl_stream.h b/libweave/examples/ubuntu/ssl_stream.h
index 64c69a0..9c0d604 100644
--- a/libweave/examples/ubuntu/ssl_stream.h
+++ b/libweave/examples/ubuntu/ssl_stream.h
@@ -22,17 +22,15 @@
 
   ~SSLStream() override;
 
-  void Read(
-      void* buffer,
-      size_t size_to_read,
-      const base::Callback<void(size_t)>& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override;
+  void Read(void* buffer,
+            size_t size_to_read,
+            const base::Callback<void(size_t)>& success_callback,
+            const base::Callback<void(const Error*)>& error_callback) override;
 
-  void Write(
-      const void* buffer,
-      size_t size_to_write,
-      const base::Closure& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override;
+  void Write(const void* buffer,
+             size_t size_to_write,
+             const base::Closure& success_callback,
+             const base::Callback<void(const Error*)>& error_callback) override;
 
   void CancelPendingOperations() override;
 
diff --git a/libweave/include/weave/test/unittest_utils.h b/libweave/include/weave/test/unittest_utils.h
index 95c808f..ff8cd2a 100644
--- a/libweave/include/weave/test/unittest_utils.h
+++ b/libweave/include/weave/test/unittest_utils.h
@@ -32,8 +32,8 @@
 }  // namespace test
 }  // namespace weave
 
-#define EXPECT_JSON_EQ(expected, actual)       \
-  EXPECT_PRED2(weave::test::IsEqualValue, \
-               *weave::test::CreateValue(expected), actual)
+#define EXPECT_JSON_EQ(expected, actual)                                       \
+  EXPECT_PRED2(weave::test::IsEqualValue, *weave::test::CreateValue(expected), \
+               actual)
 
 #endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_UNITTEST_UTILS_H_
diff --git a/libweave/src/commands/command_definition_unittest.cc b/libweave/src/commands/command_definition_unittest.cc
index 458a84e..8f40502 100644
--- a/libweave/src/commands/command_definition_unittest.cc
+++ b/libweave/src/commands/command_definition_unittest.cc
@@ -78,8 +78,8 @@
   const ObjectSchema* param_ptr = params.get();
   const ObjectSchema* progress_ptr = progress.get();
   const ObjectSchema* results_ptr = results.get();
-  CommandDefinition def{
-      "powerd", std::move(params), std::move(progress), std::move(results)};
+  CommandDefinition def{"powerd", std::move(params), std::move(progress),
+                        std::move(results)};
   EXPECT_EQ("powerd", def.GetCategory());
   EXPECT_EQ(param_ptr, def.GetParameters());
   EXPECT_EQ(progress_ptr, def.GetProgress());
diff --git a/libweave/src/commands/command_dictionary.cc b/libweave/src/commands/command_dictionary.cc
index c1238dc..85b06fb 100644
--- a/libweave/src/commands/command_dictionary.cc
+++ b/libweave/src/commands/command_dictionary.cc
@@ -141,11 +141,9 @@
         }
       }
 
-      std::unique_ptr<CommandDefinition> command_def{
-          new CommandDefinition{category,
-                                std::move(parameters_schema),
-                                std::move(progress_schema),
-                                std::move(results_schema)}};
+      std::unique_ptr<CommandDefinition> command_def{new CommandDefinition{
+          category, std::move(parameters_schema), std::move(progress_schema),
+          std::move(results_schema)}};
       command_def->SetVisibility(visibility);
       command_def->SetMinimalRole(minimal_role);
       new_defs.emplace(full_command_name, std::move(command_def));
diff --git a/libweave/src/commands/command_dictionary_unittest.cc b/libweave/src/commands/command_dictionary_unittest.cc
index 230da29..a307184 100644
--- a/libweave/src/commands/command_dictionary_unittest.cc
+++ b/libweave/src/commands/command_dictionary_unittest.cc
@@ -360,9 +360,9 @@
   })";
   EXPECT_JSON_EQ(expected, *json);
 
-  json = dict.GetCommandsAsJson([](const CommandDefinition* def) {
-    return def->GetVisibility().local;
-  }, false, nullptr);
+  json = dict.GetCommandsAsJson(
+      [](const CommandDefinition* def) { return def->GetVisibility().local; },
+      false, nullptr);
   ASSERT_NE(nullptr, json.get());
   expected = R"({
     'test': {
@@ -374,9 +374,9 @@
   })";
   EXPECT_JSON_EQ(expected, *json);
 
-  json = dict.GetCommandsAsJson([](const CommandDefinition* def) {
-    return def->GetVisibility().cloud;
-  }, false, nullptr);
+  json = dict.GetCommandsAsJson(
+      [](const CommandDefinition* def) { return def->GetVisibility().cloud; },
+      false, nullptr);
   ASSERT_NE(nullptr, json.get());
   expected = R"({
     'test': {
@@ -388,9 +388,11 @@
   })";
   EXPECT_JSON_EQ(expected, *json);
 
-  json = dict.GetCommandsAsJson([](const CommandDefinition* def) {
-    return def->GetVisibility().local && def->GetVisibility().cloud;
-  }, false, nullptr);
+  json = dict.GetCommandsAsJson(
+      [](const CommandDefinition* def) {
+        return def->GetVisibility().local && def->GetVisibility().cloud;
+      },
+      false, nullptr);
   ASSERT_NE(nullptr, json.get());
   expected = R"({
     'test': {
diff --git a/libweave/src/commands/command_instance_unittest.cc b/libweave/src/commands/command_instance_unittest.cc
index 49dd1b7..78932b0 100644
--- a/libweave/src/commands/command_instance_unittest.cc
+++ b/libweave/src/commands/command_instance_unittest.cc
@@ -223,9 +223,9 @@
   })").get());
 
   auto converted = instance->ToJson();
-  EXPECT_PRED2([](const base::Value& val1, const base::Value& val2) {
-    return val1.Equals(&val2);
-  }, *json, *converted);
+  EXPECT_PRED2([](const base::Value& val1,
+                  const base::Value& val2) { return val1.Equals(&val2); },
+               *json, *converted);
 }
 
 }  // namespace weave
diff --git a/libweave/src/commands/command_queue_unittest.cc b/libweave/src/commands/command_queue_unittest.cc
index 84eeb3d..f0abfe2 100644
--- a/libweave/src/commands/command_queue_unittest.cc
+++ b/libweave/src/commands/command_queue_unittest.cc
@@ -39,8 +39,7 @@
   CommandQueue queue_;
 
  private:
-  CommandDefinition command_definition_{"powerd",
-                                        ObjectSchema::Create(),
+  CommandDefinition command_definition_{"powerd", ObjectSchema::Create(),
                                         ObjectSchema::Create(),
                                         ObjectSchema::Create()};
 };
diff --git a/libweave/src/commands/object_schema.cc b/libweave/src/commands/object_schema.cc
index 3d697ed..23d13f2 100644
--- a/libweave/src/commands/object_schema.cc
+++ b/libweave/src/commands/object_schema.cc
@@ -275,13 +275,10 @@
 }  // anonymous namespace
 
 template <>
-EnumToStringMap<base::Value::Type>::EnumToStringMap()
-    : EnumToStringMap(kMap) {}
+EnumToStringMap<base::Value::Type>::EnumToStringMap() : EnumToStringMap(kMap) {}
 
-ObjectSchema::ObjectSchema() {
-}
-ObjectSchema::~ObjectSchema() {
-}
+ObjectSchema::ObjectSchema() {}
+ObjectSchema::~ObjectSchema() {}
 
 std::unique_ptr<ObjectSchema> ObjectSchema::Clone() const {
   std::unique_ptr<ObjectSchema> cloned{new ObjectSchema};
diff --git a/libweave/src/commands/object_schema_unittest.cc b/libweave/src/commands/object_schema_unittest.cc
index b8a623e..65179a9 100644
--- a/libweave/src/commands/object_schema_unittest.cc
+++ b/libweave/src/commands/object_schema_unittest.cc
@@ -605,12 +605,11 @@
   EXPECT_JSON_EQ(expected, *prop3.ToJson(true, false));
 
   ObjectPropType prop4;
-  ASSERT_TRUE(
-      prop4.FromJson(CreateDictionaryValue(
-                         "{'additionalProperties':true,"
-                         "'default':{'expires':3,'password':'abracadabra'}}")
-                         .get(),
-                     &prop2, nullptr));
+  ASSERT_TRUE(prop4.FromJson(
+      CreateDictionaryValue("{'additionalProperties':true,"
+                            "'default':{'expires':3,'password':'abracadabra'}}")
+          .get(),
+      &prop2, nullptr));
   expected = R"({
     'additionalProperties': true,
     'default': {
@@ -661,12 +660,11 @@
   EXPECT_EQ(ValueType::Int, prop->GetType());
 
   ObjectPropType prop2;
-  ASSERT_TRUE(
-      prop2.FromJson(CreateDictionaryValue(
-                         "{'properties':{'name':'string','age':'integer'},"
-                         "'default':{'name':'Bob','age':33}}")
-                         .get(),
-                     nullptr, nullptr));
+  ASSERT_TRUE(prop2.FromJson(
+      CreateDictionaryValue("{'properties':{'name':'string','age':'integer'},"
+                            "'default':{'name':'Bob','age':33}}")
+          .get(),
+      nullptr, nullptr));
   ASSERT_NE(nullptr, prop2.GetDefaultValue());
   const ObjectValue* defval = prop2.GetDefaultValue()->GetObject();
   ASSERT_NE(nullptr, defval);
@@ -677,11 +675,12 @@
 
 TEST(CommandSchema, ObjectPropType_Validate) {
   ObjectPropType prop;
-  prop.FromJson(CreateDictionaryValue(
-                    "{'properties':{'expires':'integer',"
-                    "'password':{'maxLength':100,'minLength':6}},"
-                    "'required':['expires','password']}").get(),
-                nullptr, nullptr);
+  prop.FromJson(
+      CreateDictionaryValue("{'properties':{'expires':'integer',"
+                            "'password':{'maxLength':100,'minLength':6}},"
+                            "'required':['expires','password']}")
+          .get(),
+      nullptr, nullptr);
   ErrorPtr error;
   EXPECT_TRUE(ValidateValue(
       prop, *CreateValue("{'expires':10,'password':'abcdef'}"), &error));
@@ -1476,8 +1475,8 @@
                  *prop.ToJson(true, true));
 
   IntPropType prop2;
-  EXPECT_TRUE(prop2.FromJson(CreateDictionaryValue("{}").get(), &prop,
-                             nullptr));
+  EXPECT_TRUE(
+      prop2.FromJson(CreateDictionaryValue("{}").get(), &prop, nullptr));
   EXPECT_TRUE(prop2.IsRequired());
 
   EXPECT_TRUE(prop2.FromJson(
@@ -1643,8 +1642,8 @@
     },
     'required':['param1','param3']
   })";
-  ASSERT_TRUE(prop.FromJson(CreateDictionaryValue(schema_str).get(), nullptr,
-                            nullptr));
+  ASSERT_TRUE(
+      prop.FromJson(CreateDictionaryValue(schema_str).get(), nullptr, nullptr));
 
   auto val_json = R"({
     'param1':10,
@@ -1684,8 +1683,8 @@
     },
     'required':['param1','param3']
   })";
-  ASSERT_TRUE(prop.FromJson(CreateDictionaryValue(schema_str).get(), nullptr,
-                            nullptr));
+  ASSERT_TRUE(
+      prop.FromJson(CreateDictionaryValue(schema_str).get(), nullptr, nullptr));
 
   auto val_json = "{'param2':20}";
   ErrorPtr error;
diff --git a/libweave/src/commands/prop_constraints.cc b/libweave/src/commands/prop_constraints.cc
index babba85..cedf3bb 100644
--- a/libweave/src/commands/prop_constraints.cc
+++ b/libweave/src/commands/prop_constraints.cc
@@ -28,8 +28,7 @@
 }  // anonymous namespace
 
 // Constraint ----------------------------------------------------------------
-Constraint::~Constraint() {
-}
+Constraint::~Constraint() {}
 
 bool Constraint::ReportErrorLessThan(ErrorPtr* error,
                                      const std::string& val,
@@ -73,10 +72,8 @@
 // ConstraintStringLength -----------------------------------------------------
 ConstraintStringLength::ConstraintStringLength(
     const InheritableAttribute<int>& limit)
-    : limit_(limit) {
-}
-ConstraintStringLength::ConstraintStringLength(int limit) : limit_(limit) {
-}
+    : limit_(limit) {}
+ConstraintStringLength::ConstraintStringLength(int limit) : limit_(limit) {}
 
 bool ConstraintStringLength::HasOverriddenAttributes() const {
   return !limit_.is_inherited;
@@ -89,11 +86,9 @@
 // ConstraintStringLengthMin --------------------------------------------------
 ConstraintStringLengthMin::ConstraintStringLengthMin(
     const InheritableAttribute<int>& limit)
-    : ConstraintStringLength(limit) {
-}
+    : ConstraintStringLength(limit) {}
 ConstraintStringLengthMin::ConstraintStringLengthMin(int limit)
-    : ConstraintStringLength(limit) {
-}
+    : ConstraintStringLength(limit) {}
 
 bool ConstraintStringLengthMin::Validate(const PropValue& value,
                                          ErrorPtr* error) const {
@@ -129,11 +124,9 @@
 // ConstraintStringLengthMax --------------------------------------------------
 ConstraintStringLengthMax::ConstraintStringLengthMax(
     const InheritableAttribute<int>& limit)
-    : ConstraintStringLength(limit) {
-}
+    : ConstraintStringLength(limit) {}
 ConstraintStringLengthMax::ConstraintStringLengthMax(int limit)
-    : ConstraintStringLength(limit) {
-}
+    : ConstraintStringLength(limit) {}
 
 bool ConstraintStringLengthMax::Validate(const PropValue& value,
                                          ErrorPtr* error) const {
diff --git a/libweave/src/commands/prop_types.cc b/libweave/src/commands/prop_types.cc
index d946675..af08ef0 100644
--- a/libweave/src/commands/prop_types.cc
+++ b/libweave/src/commands/prop_types.cc
@@ -19,11 +19,9 @@
 namespace weave {
 
 // PropType -------------------------------------------------------------------
-PropType::PropType() {
-}
+PropType::PropType() {}
 
-PropType::~PropType() {
-}
+PropType::~PropType() {}
 
 std::string PropType::GetTypeAsString() const {
   return GetTypeStringFromType(GetType());
@@ -138,10 +136,8 @@
   // "default") to the list of "processed" keys so we do not complain about them
   // when we check for unknown/unexpected keys below.
   std::set<std::string> processed_keys{
-      commands::attributes::kType,
-      commands::attributes::kDisplayName,
-      commands::attributes::kDefault,
-      commands::attributes::kIsRequired,
+      commands::attributes::kType, commands::attributes::kDisplayName,
+      commands::attributes::kDefault, commands::attributes::kIsRequired,
   };
   if (!ObjectSchemaFromJson(value, base_schema, &processed_keys, error))
     return false;
@@ -241,12 +237,9 @@
 
 const PropType::TypeMap& PropType::GetTypeMap() {
   static TypeMap map = {
-      {ValueType::Int, "integer"},
-      {ValueType::Double, "number"},
-      {ValueType::String, "string"},
-      {ValueType::Boolean, "boolean"},
-      {ValueType::Object, "object"},
-      {ValueType::Array, "array"},
+      {ValueType::Int, "integer"},   {ValueType::Double, "number"},
+      {ValueType::String, "string"}, {ValueType::Boolean, "boolean"},
+      {ValueType::Object, "object"}, {ValueType::Array, "array"},
   };
   return map;
 }
@@ -452,8 +445,7 @@
 // ObjectPropType -------------------------------------------------------------
 
 ObjectPropType::ObjectPropType()
-    : object_schema_{ObjectSchema::Create(), false} {
-}
+    : object_schema_{ObjectSchema::Create(), false} {}
 
 bool ObjectPropType::HasOverriddenAttributes() const {
   return PropType::HasOverriddenAttributes() || !object_schema_.is_inherited;
@@ -582,8 +574,7 @@
 
 // ArrayPropType -------------------------------------------------------------
 
-ArrayPropType::ArrayPropType() {
-}
+ArrayPropType::ArrayPropType() {}
 
 bool ArrayPropType::HasOverriddenAttributes() const {
   return PropType::HasOverriddenAttributes() || !item_type_.is_inherited;
diff --git a/libweave/src/commands/prop_values.cc b/libweave/src/commands/prop_values.cc
index cc70948..4d92921 100644
--- a/libweave/src/commands/prop_values.cc
+++ b/libweave/src/commands/prop_values.cc
@@ -12,7 +12,6 @@
 
 PropValue::PropValue(const PropValue& other) : PropValue{*other.type_} {}
 
-PropValue::~PropValue() {
-}
+PropValue::~PropValue() {}
 
 }  // namespace weave
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index 9135cfa..bb1dffb 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -99,8 +99,7 @@
   cb.Run();
 }
 
-void IgnoreCloudResult(const base::DictionaryValue&) {
-}
+void IgnoreCloudResult(const base::DictionaryValue&) {}
 
 void IgnoreCloudResultWithCallback(const base::Closure& cb,
                                    const base::DictionaryValue&) {
@@ -286,8 +285,7 @@
     return;  // Assume we're in test
   task_runner_->PostDelayedTask(
       FROM_HERE,
-      base::Bind(&DeviceRegistrationInfo::ConnectToCloud, AsWeakPtr()),
-      delay);
+      base::Bind(&DeviceRegistrationInfo::ConnectToCloud, AsWeakPtr()), delay);
 }
 
 bool DeviceRegistrationInfo::HaveRegistrationCredentials() const {
@@ -1263,9 +1261,9 @@
 void DeviceRegistrationInfo::OnPermanentFailure() {
   LOG(ERROR) << "Failed to establish notification channel.";
   notification_channel_starting_ = false;
-  RefreshAccessToken(base::Bind(&base::DoNothing),
-                     base::Bind(&DeviceRegistrationInfo::CheckAccessTokenError,
-                                AsWeakPtr()));
+  RefreshAccessToken(
+      base::Bind(&base::DoNothing),
+      base::Bind(&DeviceRegistrationInfo::CheckAccessTokenError, AsWeakPtr()));
 }
 
 void DeviceRegistrationInfo::OnCommandCreated(
diff --git a/libweave/src/notification/xml_node.cc b/libweave/src/notification/xml_node.cc
index f8b6c52..443ac51 100644
--- a/libweave/src/notification/xml_node.cc
+++ b/libweave/src/notification/xml_node.cc
@@ -12,8 +12,7 @@
 
 XmlNode::XmlNode(const std::string& name,
                  std::map<std::string, std::string> attributes)
-    : name_{name}, attributes_{std::move(attributes)} {
-}
+    : name_{name}, attributes_{std::move(attributes)} {}
 
 const std::string& XmlNode::name() const {
   return name_;
diff --git a/libweave/src/notification/xmpp_channel.cc b/libweave/src/notification/xmpp_channel.cc
index ec4cc52..124c7b6 100644
--- a/libweave/src/notification/xmpp_channel.cc
+++ b/libweave/src/notification/xmpp_channel.cc
@@ -283,7 +283,8 @@
 void XmppChannel::CreateSslSocket() {
   CHECK(!stream_);
   state_ = XmppState::kConnecting;
-  LOG(INFO) << "Starting XMPP connection to " << kDefaultXmppHost << ":" << kDefaultXmppPort;
+  LOG(INFO) << "Starting XMPP connection to " << kDefaultXmppHost << ":"
+            << kDefaultXmppPort;
 
   network_->OpenSslSocket(
       kDefaultXmppHost, kDefaultXmppPort,
diff --git a/libweave/src/notification/xmpp_channel_unittest.cc b/libweave/src/notification/xmpp_channel_unittest.cc
index a034217..1f5961f 100644
--- a/libweave/src/notification/xmpp_channel_unittest.cc
+++ b/libweave/src/notification/xmpp_channel_unittest.cc
@@ -93,11 +93,10 @@
     read_data_ += data;
   }
 
-  void Read(
-      void* buffer,
-      size_t size_to_read,
-      const base::Callback<void(size_t)>& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override {
+  void Read(void* buffer,
+            size_t size_to_read,
+            const base::Callback<void(size_t)>& success_callback,
+            const base::Callback<void(const Error*)>& error_callback) override {
     if (read_data_.empty()) {
       task_runner_->PostDelayedTask(
           FROM_HERE,
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 9f16ce5..7d01088 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -26,8 +26,8 @@
 
 namespace {
 
-const BackoffEntry::Policy register_backoff_policy =
-    { 0, 1000, 2.0, 0.2, 5000, -1, false };
+const BackoffEntry::Policy register_backoff_policy = {0,    1000, 2.0,  0.2,
+                                                      5000, -1,   false};
 
 const int kMaxDeviceRegistrationTimeMinutes = 5;
 
@@ -139,9 +139,9 @@
     base::Time deadline = base::Time::Now();
     deadline += base::TimeDelta::FromMinutes(kMaxDeviceRegistrationTimeMinutes);
     task_runner_->PostDelayedTask(
-        FROM_HERE, base::Bind(&CloudDelegateImpl::CallManagerRegisterDevice,
-                              setup_weak_factory_.GetWeakPtr(), ticket_id,
-                              deadline),
+        FROM_HERE,
+        base::Bind(&CloudDelegateImpl::CallManagerRegisterDevice,
+                   setup_weak_factory_.GetWeakPtr(), ticket_id, deadline),
         {});
     // Return true because we initiated setup.
     return true;
@@ -285,8 +285,8 @@
                                  const base::Time& deadline) {
     ErrorPtr error;
     if (base::Time::Now() > deadline) {
-      Error::AddTo(&error, FROM_HERE, errors::kDomain,
-                   errors::kInvalidState, "Failed to register device");
+      Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState,
+                   "Failed to register device");
       setup_state_ = SetupState{std::move(error)};
       return;
     }
@@ -302,7 +302,7 @@
     task_runner_->PostDelayedTask(
         FROM_HERE,
         base::Bind(&CloudDelegateImpl::CallManagerRegisterDevice,
-                    setup_weak_factory_.GetWeakPtr(), ticket_id, deadline),
+                   setup_weak_factory_.GetWeakPtr(), ticket_id, deadline),
         backoff_entry_.GetTimeUntilRelease());
   }
 
@@ -372,11 +372,9 @@
 
 }  // namespace
 
-CloudDelegate::CloudDelegate() {
-}
+CloudDelegate::CloudDelegate() {}
 
-CloudDelegate::~CloudDelegate() {
-}
+CloudDelegate::~CloudDelegate() {}
 
 // static
 std::unique_ptr<CloudDelegate> CloudDelegate::CreateDefault(
diff --git a/libweave/src/privet/device_delegate.cc b/libweave/src/privet/device_delegate.cc
index 6315339..58340a5 100644
--- a/libweave/src/privet/device_delegate.cc
+++ b/libweave/src/privet/device_delegate.cc
@@ -40,11 +40,9 @@
 
 }  // namespace
 
-DeviceDelegate::DeviceDelegate() {
-}
+DeviceDelegate::DeviceDelegate() {}
 
-DeviceDelegate::~DeviceDelegate() {
-}
+DeviceDelegate::~DeviceDelegate() {}
 
 // static
 std::unique_ptr<DeviceDelegate> DeviceDelegate::CreateDefault() {
diff --git a/libweave/src/privet/mock_delegates.h b/libweave/src/privet/mock_delegates.h
index 552640e..930d838 100644
--- a/libweave/src/privet/mock_delegates.h
+++ b/libweave/src/privet/mock_delegates.h
@@ -89,10 +89,8 @@
 
     EXPECT_CALL(*this, GetPairingTypes())
         .WillRepeatedly(Return(std::set<PairingType>{
-            PairingType::kPinCode,
-            PairingType::kEmbeddedCode,
-            PairingType::kUltrasound32,
-            PairingType::kAudible32,
+            PairingType::kPinCode, PairingType::kEmbeddedCode,
+            PairingType::kUltrasound32, PairingType::kAudible32,
         }));
 
     EXPECT_CALL(*this, GetCryptoTypes())
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 0e1b2e0..63cb9b0 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -174,8 +174,7 @@
     std::unique_ptr<base::DictionaryValue> inner{ErrorInfoToJson(*it)};
     tracked_objects::Location location{it->GetLocation().function_name.c_str(),
                                        it->GetLocation().file_name.c_str(),
-                                       it->GetLocation().line_number,
-                                       nullptr};
+                                       it->GetLocation().line_number, nullptr};
     inner->SetString(kErrorDebugInfoKey, location.ToString());
     errors->Append(inner.release());
   }
@@ -394,8 +393,7 @@
              AuthScope::kViewer);
 }
 
-PrivetHandler::~PrivetHandler() {
-}
+PrivetHandler::~PrivetHandler() {}
 
 void PrivetHandler::OnCommandDefsChanged() {
   ++command_defs_fingerprint_;
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 4363d5a..feaab2c 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -29,11 +29,9 @@
 namespace weave {
 namespace privet {
 
-Manager::Manager() {
-}
+Manager::Manager() {}
 
-Manager::~Manager() {
-}
+Manager::~Manager() {}
 
 void Manager::Start(const Device::Options& options,
                     TaskRunner* task_runner,
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index dc076b5..1cb3cd4 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -114,8 +114,7 @@
   StartBootstrapping();
 }
 
-void WifiBootstrapManager::EndConnecting() {
-}
+void WifiBootstrapManager::EndConnecting() {}
 
 void WifiBootstrapManager::StartMonitoring() {
   VLOG(1) << "Monitoring connectivity.";
@@ -139,8 +138,7 @@
   }
 }
 
-void WifiBootstrapManager::EndMonitoring() {
-}
+void WifiBootstrapManager::EndMonitoring() {}
 
 void WifiBootstrapManager::UpdateState(State new_state) {
   VLOG(3) << "Switching state from " << static_cast<int>(state_) << " to "
diff --git a/libweave/src/states/state_package.cc b/libweave/src/states/state_package.cc
index 2a9ce95..c2e18dc 100644
--- a/libweave/src/states/state_package.cc
+++ b/libweave/src/states/state_package.cc
@@ -14,8 +14,7 @@
 
 namespace weave {
 
-StatePackage::StatePackage(const std::string& name) : name_(name) {
-}
+StatePackage::StatePackage(const std::string& name) : name_(name) {}
 
 bool StatePackage::AddSchemaFromJson(const base::DictionaryValue* json,
                                      ErrorPtr* error) {
