Add AccessBlackListManager::AddEntryAddedCallback

Auth manager will listen to this and reset access code on event.

BUG:27300728
Change-Id: Idab52425fc5d1b8b7f34af3b9403cb6a37f6b709
Reviewed-on: https://weave-review.googlesource.com/2705
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/access_api_handler_unittest.cc b/src/access_api_handler_unittest.cc
index 3e7f5d7..3c22eaa 100644
--- a/src/access_api_handler_unittest.cc
+++ b/src/access_api_handler_unittest.cc
@@ -24,6 +24,7 @@
 
 class MockAccessBlackListManager : public AccessBlackListManager {
  public:
+  MOCK_METHOD1(AddEntryAddedCallback, void(const base::Closure&));
   MOCK_METHOD4(Block,
                void(const std::vector<uint8_t>&,
                     const std::vector<uint8_t>&,
diff --git a/src/access_black_list_manager.h b/src/access_black_list_manager.h
index b56226a..1184f16 100644
--- a/src/access_black_list_manager.h
+++ b/src/access_black_list_manager.h
@@ -26,6 +26,7 @@
   };
   virtual ~AccessBlackListManager() = default;
 
+  virtual void AddEntryAddedCallback(const base::Closure& callback) = 0;
   virtual void Block(const std::vector<uint8_t>& user_id,
                      const std::vector<uint8_t>& app_id,
                      const base::Time& expiration,
diff --git a/src/access_black_list_manager_impl.cc b/src/access_black_list_manager_impl.cc
index 992a680..a57ca36 100644
--- a/src/access_black_list_manager_impl.cc
+++ b/src/access_black_list_manager_impl.cc
@@ -86,6 +86,11 @@
   }
 }
 
+void AccessBlackListManagerImpl::AddEntryAddedCallback(
+    const base::Closure& callback) {
+  on_entry_added_callbacks_.push_back(callback);
+}
+
 void AccessBlackListManagerImpl::Block(const std::vector<uint8_t>& user_id,
                                        const std::vector<uint8_t>& app_id,
                                        const base::Time& expiration,
@@ -110,8 +115,12 @@
     }
     return;
   }
+
   auto& value = entries_[std::make_pair(user_id, app_id)];
   value = std::max(value, expiration);
+  for (const auto& cb : on_entry_added_callbacks_)
+    cb.Run();
+
   Save(callback);
 }
 
diff --git a/src/access_black_list_manager_impl.h b/src/access_black_list_manager_impl.h
index 1c175db..646d748 100644
--- a/src/access_black_list_manager_impl.h
+++ b/src/access_black_list_manager_impl.h
@@ -24,6 +24,7 @@
                                       base::Clock* clock = nullptr);
 
   // AccessBlackListManager implementation.
+  void AddEntryAddedCallback(const base::Closure& callback) override;
   void Block(const std::vector<uint8_t>& user_id,
              const std::vector<uint8_t>& app_id,
              const base::Time& expiration,
@@ -49,6 +50,7 @@
   provider::ConfigStore* store_{nullptr};
   std::map<std::pair<std::vector<uint8_t>, std::vector<uint8_t>>, base::Time>
       entries_;
+  std::vector<base::Closure> on_entry_added_callbacks_;
 
   DISALLOW_COPY_AND_ASSIGN(AccessBlackListManagerImpl);
 };
diff --git a/src/access_black_list_manager_impl_unittest.cc b/src/access_black_list_manager_impl_unittest.cc
index fd9f226..0e7c0e0 100644
--- a/src/access_black_list_manager_impl_unittest.cc
+++ b/src/access_black_list_manager_impl_unittest.cc
@@ -66,6 +66,9 @@
 }
 
 TEST_F(AccessBlackListManagerImplTest, Block) {
+  bool callback_called = false;
+  manager_->AddEntryAddedCallback(
+      base::Bind([&callback_called]() { callback_called = true; }));
   EXPECT_CALL(config_store_, SaveSettings("black_list", _, _))
       .WillOnce(testing::WithArgs<1, 2>(testing::Invoke(
           [](const std::string& json, const DoneCallback& callback) {
@@ -83,6 +86,7 @@
               callback.Run(nullptr);
           })));
   manager_->Block({7, 7, 7}, {8, 8, 8}, base::Time::FromTimeT(1419990000), {});
+  EXPECT_TRUE(callback_called);
 }
 
 TEST_F(AccessBlackListManagerImplTest, BlockExpired) {