diff --git a/buffet/privet/cloud_delegate.cc b/buffet/privet/cloud_delegate.cc
index 5de432e..5003c9d 100644
--- a/buffet/privet/cloud_delegate.cc
+++ b/buffet/privet/cloud_delegate.cc
@@ -38,12 +38,10 @@
   CloudDelegateImpl(const scoped_refptr<dbus::Bus>& bus,
                     bool is_gcd_setup_enabled)
       : object_manager_{bus}, is_gcd_setup_enabled_(is_gcd_setup_enabled) {
-    object_manager_.SetManagerAddedCallback(
-        base::Bind(&CloudDelegateImpl::OnManagerAdded,
-                   weak_factory_.GetWeakPtr()));
-    object_manager_.SetManagerRemovedCallback(
-        base::Bind(&CloudDelegateImpl::OnManagerRemoved,
-                   weak_factory_.GetWeakPtr()));
+    object_manager_.SetManagerAddedCallback(base::Bind(
+        &CloudDelegateImpl::OnManagerAdded, weak_factory_.GetWeakPtr()));
+    object_manager_.SetManagerRemovedCallback(base::Bind(
+        &CloudDelegateImpl::OnManagerRemoved, weak_factory_.GetWeakPtr()));
     object_manager_.SetCommandRemovedCallback(base::Bind(
         &CloudDelegateImpl::OnCommandRemoved, weak_factory_.GetWeakPtr()));
   }
diff --git a/buffet/privet/dbus_manager.cc b/buffet/privet/dbus_manager.cc
index a336a19..c6aa416 100644
--- a/buffet/privet/dbus_manager.cc
+++ b/buffet/privet/dbus_manager.cc
@@ -32,9 +32,9 @@
                          WifiBootstrapManager* wifi_bootstrap_manager,
                          CloudDelegate* cloud_delegate,
                          SecurityManager* security_manager)
-  : dbus_object_{new DBusObject{object_manager,
-                                object_manager->GetBus(),
-                                ManagerAdaptor::GetObjectPath()}} {
+    : dbus_object_{new DBusObject{object_manager,
+                                  object_manager->GetBus(),
+                                  ManagerAdaptor::GetObjectPath()}} {
   if (wifi_bootstrap_manager) {
     wifi_bootstrap_manager->RegisterStateListener(
         base::Bind(&DBusManager::UpdateWiFiBootstrapState,
@@ -43,10 +43,8 @@
     UpdateWiFiBootstrapState(WifiBootstrapManager::kDisabled);
   }
   security_manager->RegisterPairingListeners(
-      base::Bind(&DBusManager::OnPairingStart,
-                 weak_ptr_factory_.GetWeakPtr()),
-      base::Bind(&DBusManager::OnPairingEnd,
-                 weak_ptr_factory_.GetWeakPtr()));
+      base::Bind(&DBusManager::OnPairingStart, weak_ptr_factory_.GetWeakPtr()),
+      base::Bind(&DBusManager::OnPairingEnd, weak_ptr_factory_.GetWeakPtr()));
   // TODO(wiley) Watch for appropriate state variables from |cloud_delegate|.
 }
 
diff --git a/buffet/privet/device_delegate.cc b/buffet/privet/device_delegate.cc
index 2953284..8670696 100644
--- a/buffet/privet/device_delegate.cc
+++ b/buffet/privet/device_delegate.cc
@@ -28,13 +28,9 @@
     return base::Time::Now() - start_time_;
   }
 
-  void SetHttpPort(uint16_t port) override {
-    http_port_ = port;
-  }
+  void SetHttpPort(uint16_t port) override { http_port_ = port; }
 
-  void SetHttpsPort(uint16_t port) override {
-    https_port_ = port;
-  }
+  void SetHttpsPort(uint16_t port) override { https_port_ = port; }
 
  private:
   uint16_t http_port_{0};
diff --git a/buffet/privet/main.cc b/buffet/privet/main.cc
index a590776..f449f4d 100644
--- a/buffet/privet/main.cc
+++ b/buffet/privet/main.cc
@@ -122,24 +122,20 @@
     peerd_client_.reset(new PeerdClient(bus_, device_.get(), cloud_.get(),
                                         wifi_bootstrap_manager_.get()));
 
-    privet_handler_.reset(new PrivetHandler(cloud_.get(), device_.get(),
-                                            security_.get(),
-                                            wifi_bootstrap_manager_.get(),
-                                            peerd_client_.get()));
+    privet_handler_.reset(
+        new PrivetHandler(cloud_.get(), device_.get(), security_.get(),
+                          wifi_bootstrap_manager_.get(), peerd_client_.get()));
 
-    web_server_.OnProtocolHandlerConnected(
-        base::Bind(&Daemon::OnProtocolHandlerConnected,
-                   weak_ptr_factory_.GetWeakPtr()));
+    web_server_.OnProtocolHandlerConnected(base::Bind(
+        &Daemon::OnProtocolHandlerConnected, weak_ptr_factory_.GetWeakPtr()));
     web_server_.OnProtocolHandlerDisconnected(
         base::Bind(&Daemon::OnProtocolHandlerDisconnected,
                    weak_ptr_factory_.GetWeakPtr()));
 
-    web_server_.Connect(
-        bus_,
-        kServiceName,
-        sequencer->GetHandler("Server::Connect failed.", true),
-        base::Bind(&base::DoNothing),
-        base::Bind(&base::DoNothing));
+    web_server_.Connect(bus_, kServiceName,
+                        sequencer->GetHandler("Server::Connect failed.", true),
+                        base::Bind(&base::DoNothing),
+                        base::Bind(&base::DoNothing));
 
     web_server_.GetDefaultHttpHandler()->AddHandlerCallback(
         "/privet/", "",
@@ -222,9 +218,7 @@
       peerd_client_->Update();
   }
 
-  void OnConnectivityChanged(bool online) {
-    OnChanged();
-  }
+  void OnConnectivityChanged(bool online) { OnChanged(); }
 
   void OnProtocolHandlerConnected(ProtocolHandler* protocol_handler) {
     if (protocol_handler->GetName() == ProtocolHandler::kHttp) {
diff --git a/buffet/privet/openssl_utils.cc b/buffet/privet/openssl_utils.cc
index 17cc16f..bcaf422 100644
--- a/buffet/privet/openssl_utils.cc
+++ b/buffet/privet/openssl_utils.cc
@@ -17,8 +17,8 @@
                           const chromeos::Blob& data) {
   chromeos::Blob mac(kSha256OutputSize);
   uint32_t len = 0;
-  CHECK(HMAC(EVP_sha256(), key.data(), key.size(), data.data(),
-             data.size(), mac.data(), &len));
+  CHECK(HMAC(EVP_sha256(), key.data(), key.size(), data.data(), data.size(),
+             mac.data(), &len));
   CHECK_EQ(len, kSha256OutputSize);
   return mac;
 }
diff --git a/buffet/privet/peerd_client.cc b/buffet/privet/peerd_client.cc
index 76f88ce..b052ab1 100644
--- a/buffet/privet/peerd_client.cc
+++ b/buffet/privet/peerd_client.cc
@@ -75,15 +75,13 @@
 void PeerdClient::OnNewPeer(PeerProxy* peer) {
   if (!peer || peer->GetObjectPath().value() != kSelfPath)
     return;
-  peer->SetPropertyChangedCallback(
-      base::Bind(&PeerdClient::OnPeerPropertyChanged,
-                 weak_ptr_factory_.GetWeakPtr()));
+  peer->SetPropertyChangedCallback(base::Bind(
+      &PeerdClient::OnPeerPropertyChanged, weak_ptr_factory_.GetWeakPtr()));
   OnPeerPropertyChanged(peer, PeerProxy::UUIDName());
 }
 
-void PeerdClient::OnPeerPropertyChanged(
-    PeerProxy* peer,
-    const std::string& property_name) {
+void PeerdClient::OnPeerPropertyChanged(PeerProxy* peer,
+                                        const std::string& property_name) {
   if (property_name != PeerProxy::UUIDName() ||
       peer->GetObjectPath().value() != kSelfPath)
     return;
diff --git a/buffet/privet/privet_handler_unittest.cc b/buffet/privet/privet_handler_unittest.cc
index e2dcfd3..bf883bf 100644
--- a/buffet/privet/privet_handler_unittest.cc
+++ b/buffet/privet/privet_handler_unittest.cc
@@ -161,9 +161,9 @@
         .WillRepeatedly(ReturnRef(gcd_disabled_state_));
     auto set_error =
         [](const std::string&, const std::string&, chromeos::ErrorPtr* error) {
-          chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain,
-                                 "setupUnavailable", "");
-        };
+      chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain,
+                             "setupUnavailable", "");
+    };
     EXPECT_CALL(cloud_, Setup(_, _, _))
         .WillRepeatedly(DoAll(Invoke(set_error), Return(false)));
   }
@@ -446,8 +446,8 @@
     'scope': 'owner',
     'tokenType': 'Privet'
   })";
-  EXPECT_PRED2(
-      IsEqualJson, kExpected, HandleRequest("/privet/v3/auth", kInput));
+  EXPECT_PRED2(IsEqualJson, kExpected,
+               HandleRequest("/privet/v3/auth", kInput));
 }
 
 class PrivetHandlerSetupTest : public PrivetHandlerTest {
@@ -463,8 +463,8 @@
 
 TEST_F(PrivetHandlerSetupTest, StatusEmpty) {
   SetNoWifiAndGcd();
-  EXPECT_PRED2(
-      IsEqualJson, "{}", HandleRequest("/privet/v3/setup/status", "{}"));
+  EXPECT_PRED2(IsEqualJson, "{}",
+               HandleRequest("/privet/v3/setup/status", "{}"));
 }
 
 TEST_F(PrivetHandlerSetupTest, StatusWifi) {
@@ -476,8 +476,8 @@
         'status': 'success'
      }
   })";
-  EXPECT_PRED2(
-      IsEqualJson, kExpected, HandleRequest("/privet/v3/setup/status", "{}"));
+  EXPECT_PRED2(IsEqualJson, kExpected,
+               HandleRequest("/privet/v3/setup/status", "{}"));
 }
 
 TEST_F(PrivetHandlerSetupTest, StatusWifiError) {
@@ -493,8 +493,8 @@
         }
      }
   })";
-  EXPECT_PRED2(
-      IsEqualJson, kExpected, HandleRequest("/privet/v3/setup/status", "{}"));
+  EXPECT_PRED2(IsEqualJson, kExpected,
+               HandleRequest("/privet/v3/setup/status", "{}"));
 }
 
 TEST_F(PrivetHandlerSetupTest, StatusGcd) {
@@ -506,8 +506,8 @@
         'status': 'success'
      }
   })";
-  EXPECT_PRED2(
-      IsEqualJson, kExpected, HandleRequest("/privet/v3/setup/status", "{}"));
+  EXPECT_PRED2(IsEqualJson, kExpected,
+               HandleRequest("/privet/v3/setup/status", "{}"));
 }
 
 TEST_F(PrivetHandlerSetupTest, StatusGcdError) {
@@ -523,8 +523,8 @@
         }
      }
   })";
-  EXPECT_PRED2(
-      IsEqualJson, kExpected, HandleRequest("/privet/v3/setup/status", "{}"));
+  EXPECT_PRED2(IsEqualJson, kExpected,
+               HandleRequest("/privet/v3/setup/status", "{}"));
 }
 
 TEST_F(PrivetHandlerSetupTest, SetupNameDescriptionLocation) {
@@ -570,8 +570,8 @@
       'passphrase': 'testPass'
     }
   })";
-  auto set_error = [](const std::string&, const std::string&,
-                      chromeos::ErrorPtr* error) {
+  auto set_error =
+      [](const std::string&, const std::string&, chromeos::ErrorPtr* error) {
     chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain, "deviceBusy", "");
   };
   EXPECT_CALL(wifi_, ConfigureCredentials(_, _, _))
@@ -612,8 +612,8 @@
     }
   })";
 
-  auto set_error = [](const std::string&, const std::string&,
-                      chromeos::ErrorPtr* error) {
+  auto set_error =
+      [](const std::string&, const std::string&, chromeos::ErrorPtr* error) {
     chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain, "deviceBusy", "");
   };
   EXPECT_CALL(cloud_, Setup(_, _, _))
diff --git a/buffet/privet/privetd_conf_parser_unittest.cc b/buffet/privet/privetd_conf_parser_unittest.cc
index 8060dd7..5dfde4c 100644
--- a/buffet/privet/privetd_conf_parser_unittest.cc
+++ b/buffet/privet/privetd_conf_parser_unittest.cc
@@ -59,9 +59,8 @@
     }
     string blob{Join("\n", file_pieces)};
     int expected_len = blob.length();
-    CHECK(expected_len == base::WriteFile(temp_file_,
-                                          blob.c_str(),
-                                          expected_len));
+    CHECK(expected_len ==
+          base::WriteFile(temp_file_, blob.c_str(), expected_len));
     CHECK(store->Load(temp_file_));
   }
 
diff --git a/buffet/privet/security_manager.cc b/buffet/privet/security_manager.cc
index 5dc3b0c..fd94d78 100644
--- a/buffet/privet/security_manager.cc
+++ b/buffet/privet/security_manager.cc
@@ -374,7 +374,7 @@
     const PairingEndListener& on_end) {
   CHECK(on_start_.is_null() && on_end_.is_null());
   on_start_ = on_start;
-  on_end_  = on_end;
+  on_end_ = on_end;
 }
 
 bool SecurityManager::CheckIfPairingAllowed(chromeos::ErrorPtr* error) {
diff --git a/buffet/privet/shill_client.cc b/buffet/privet/shill_client.cc
index 335d568..0a1b2e2 100644
--- a/buffet/privet/shill_client.cc
+++ b/buffet/privet/shill_client.cc
@@ -27,7 +27,8 @@
 
 namespace {
 
-void IgnoreDetachEvent() { }
+void IgnoreDetachEvent() {
+}
 
 bool GetStateForService(ServiceProxy* service, string* state) {
   CHECK(service) << "|service| was nullptr in GetStateForService()";
@@ -106,9 +107,8 @@
                  weak_factory_.GetWeakPtr()));
   auto owner_changed_cb = base::Bind(&ShillClient::OnShillServiceOwnerChange,
                                      weak_factory_.GetWeakPtr());
-  bus_->GetObjectProxy(
-      shill::kFlimflamServiceName,
-      ObjectPath{"/"})->SetNameOwnerChangedCallback(owner_changed_cb);
+  bus_->GetObjectProxy(shill::kFlimflamServiceName, ObjectPath{"/"})
+      ->SetNameOwnerChangedCallback(owner_changed_cb);
 }
 
 void ShillClient::Init() {
@@ -141,8 +141,7 @@
   service_properties[shill::kSaveCredentialsProperty] = Any{true};
   service_properties[shill::kAutoConnectProperty] = Any{true};
   ObjectPath service_path;
-  if (!manager_proxy_.ConfigureService(service_properties,
-                                       &service_path,
+  if (!manager_proxy_.ConfigureService(service_properties, &service_path,
                                        error)) {
     return false;
   }
@@ -153,11 +152,9 @@
   on_connect_success_.Reset(on_success);
   connecting_service_->RegisterPropertyChangedSignalHandler(
       base::Bind(&ShillClient::OnServicePropertyChange,
-                 weak_factory_.GetWeakPtr(),
-                 service_path),
+                 weak_factory_.GetWeakPtr(), service_path),
       base::Bind(&ShillClient::OnServicePropertyChangeRegistration,
-                 weak_factory_.GetWeakPtr(),
-                 service_path));
+                 weak_factory_.GetWeakPtr(), service_path));
   return true;
 }
 
@@ -248,11 +245,9 @@
     }
     device->RegisterPropertyChangedSignalHandler(
         base::Bind(&ShillClient::OnDevicePropertyChange,
-                   weak_factory_.GetWeakPtr(),
-                   device_path),
+                   weak_factory_.GetWeakPtr(), device_path),
         base::Bind(&ShillClient::OnDevicePropertyChangeRegistration,
-                   weak_factory_.GetWeakPtr(),
-                   device_path));
+                   weak_factory_.GetWeakPtr(), device_path));
     VLOG(3) << "Creating device proxy at " << device_path.value();
     devices_[device_path].device = std::move(device);
   }
@@ -287,8 +282,7 @@
     LOG(WARNING) << "Failed to get device's selected service?";
     return;
   }
-  OnDevicePropertyChange(device_path,
-                         shill::kSelectedServiceProperty,
+  OnDevicePropertyChange(device_path, shill::kSelectedServiceProperty,
                          prop_it->second);
 }
 
@@ -311,8 +305,8 @@
                << " selected invalid service path.";
     return;
   }
-  VLOG(3) << "Device at " << it->first.value()
-          << " has selected service at " << service_path.value();
+  VLOG(3) << "Device at " << it->first.value() << " has selected service at "
+          << service_path.value();
   bool removed_old_service{false};
   if (device_state.selected_service) {
     if (device_state.selected_service->GetObjectPath() == service_path) {
@@ -324,8 +318,7 @@
   }
   std::shared_ptr<ServiceProxy> new_service;
   const bool reuse_connecting_service =
-      service_path.value() != "/" &&
-      connecting_service_ &&
+      service_path.value() != "/" && connecting_service_ &&
       connecting_service_->GetObjectPath() == service_path;
   if (reuse_connecting_service) {
     new_service = connecting_service_;
@@ -345,11 +338,9 @@
     new_service.reset(new ServiceProxy{bus_, service_path});
     new_service->RegisterPropertyChangedSignalHandler(
         base::Bind(&ShillClient::OnServicePropertyChange,
-                   weak_factory_.GetWeakPtr(),
-                   service_path),
+                   weak_factory_.GetWeakPtr(), service_path),
         base::Bind(&ShillClient::OnServicePropertyChangeRegistration,
-                   weak_factory_.GetWeakPtr(),
-                   service_path));
+                   weak_factory_.GetWeakPtr(), service_path));
   }
   device_state.selected_service = new_service;
   if (reuse_connecting_service || removed_old_service) {
@@ -389,13 +380,11 @@
   // values.
   auto it = properties.find(shill::kStateProperty);
   if (it != properties.end()) {
-    OnServicePropertyChange(path, shill::kStateProperty,
-                            it->second);
+    OnServicePropertyChange(path, shill::kStateProperty, it->second);
   }
   it = properties.find(shill::kSignalStrengthProperty);
   if (it != properties.end()) {
-    OnServicePropertyChange(path, shill::kSignalStrengthProperty,
-                            it->second);
+    OnServicePropertyChange(path, shill::kSignalStrengthProperty, it->second);
   }
 }
 
@@ -414,8 +403,8 @@
     OnStateChangeForSelectedService(service_path, state);
     OnStateChangeForConnectingService(service_path, state);
   } else if (property_name == shill::kSignalStrengthProperty) {
-    OnStrengthChangeForConnectingService(
-        service_path, property_value.TryGet<uint8_t>());
+    OnStrengthChangeForConnectingService(service_path,
+                                         property_value.TryGet<uint8_t>());
   }
 }
 
@@ -437,8 +426,7 @@
     uint8_t signal_strength) {
   if (!connecting_service_ ||
       connecting_service_->GetObjectPath() != service_path ||
-      signal_strength <= 0 ||
-      have_called_connect_) {
+      signal_strength <= 0 || have_called_connect_) {
     return;
   }
   VLOG(1) << "Connecting service has signal. Calling Connect().";
@@ -486,9 +474,8 @@
     // underway.  Therefore, call our callbacks later, when we're in a good
     // state.
     base::MessageLoop::current()->PostTask(
-        FROM_HERE,
-        base::Bind(&ShillClient::NotifyConnectivityListeners,
-                   weak_factory_.GetWeakPtr(), AmOnline()));
+        FROM_HERE, base::Bind(&ShillClient::NotifyConnectivityListeners,
+                              weak_factory_.GetWeakPtr(), AmOnline()));
   }
 }
 
diff --git a/buffet/privet/shill_client.h b/buffet/privet/shill_client.h
index d8e6959..6839b15 100644
--- a/buffet/privet/shill_client.h
+++ b/buffet/privet/shill_client.h
@@ -41,7 +41,6 @@
               const std::set<std::string>& device_whitelist);
   ~ShillClient() = default;
 
-
   void Init();
   void RegisterConnectivityListener(const ConnectivityListener& listener);
   // Causes shill to attempt to connect to the given network with the given
diff --git a/buffet/privet/wifi_bootstrap_manager.cc b/buffet/privet/wifi_bootstrap_manager.cc
index 6c2bc4f..fc3117c 100644
--- a/buffet/privet/wifi_bootstrap_manager.cc
+++ b/buffet/privet/wifi_bootstrap_manager.cc
@@ -283,10 +283,10 @@
       return;
   }
   chromeos::ErrorPtr error;
-  chromeos::Error::AddToPrintf(
-      &error, FROM_HERE, errors::kDomain, errors::kInvalidState,
-      "Unknown state returned from ShillClient: %s",
-      ServiceStateToString(service_state).c_str());
+  chromeos::Error::AddToPrintf(&error, FROM_HERE, errors::kDomain,
+                               errors::kInvalidState,
+                               "Unknown state returned from ShillClient: %s",
+                               ServiceStateToString(service_state).c_str());
   connection_state_ = ConnectionState{std::move(error)};
 }
 
