Index: extensions/renderer/api_test_base.cc |
diff --git a/extensions/renderer/api_test_base.cc b/extensions/renderer/api_test_base.cc |
index 7e3dd7ba8079aab7f1fe4a215aa42ee97fa381dc..8242d4ffb9cd62c8e50c896050e6917ebfcfd6a5 100644 |
--- a/extensions/renderer/api_test_base.cc |
+++ b/extensions/renderer/api_test_base.cc |
@@ -101,6 +101,52 @@ ApiTestBase::ApiTestBase() { |
ApiTestBase::~ApiTestBase() { |
} |
+class KeepAliveCounter::Instance : public mojo::InterfaceImpl<KeepAlive> { |
+ public: |
+ Instance(KeepAliveCounter* counter); |
+ ~Instance() override; |
+ |
+ private: |
+ KeepAliveCounter* counter_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(Instance); |
+}; |
+ |
+KeepAliveCounter::KeepAliveCounter() : keep_alives_(0), keep_alive_ends_(0) { |
+} |
+ |
+void KeepAliveCounter::CreateKeepAlive( |
+ mojo::InterfaceRequest<KeepAlive> request) { |
+ keep_alives_++; |
+ mojo::BindToRequest(new Instance(this), &request); |
+} |
+ |
+void KeepAliveCounter::WaitUntilKeepAlivesFinish() { |
+ base::RunLoop run_loop; |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(&KeepAliveCounter::PollKeepAlives, |
+ base::Unretained(this), run_loop.QuitClosure())); |
+ run_loop.Run(); |
+} |
+ |
+void KeepAliveCounter::PollKeepAlives(const base::Closure& quit_closure) { |
+ if (keep_alives_ == keep_alive_ends_) { |
+ quit_closure.Run(); |
+ return; |
+ } |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(&KeepAliveCounter::PollKeepAlives, |
+ base::Unretained(this), quit_closure)); |
+} |
+ |
+KeepAliveCounter::Instance::Instance(KeepAliveCounter* counter) |
+ : counter_(counter) { |
+} |
+ |
+KeepAliveCounter::Instance::~Instance() { |
+ counter_->keep_alive_ends_++; |
+} |
+ |
void ApiTestBase::SetUp() { |
ModuleSystemTest::SetUp(); |
InitializeEnvironment(); |
@@ -163,6 +209,9 @@ void ApiTestBase::RegisterModules() { |
->AddBuiltinModule(env()->isolate(), |
"content/public/renderer/service_provider", |
service_provider.ToV8()); |
+ service_provider_->AddService( |
+ base::Bind(&KeepAliveCounter::CreateKeepAlive, |
+ base::Unretained(&keep_alive_counter_))); |
} |
void ApiTestBase::InitializeEnvironment() { |
@@ -197,6 +246,7 @@ void ApiTestBase::RunTest(const std::string& file_name, |
FROM_HERE, |
base::Bind(&ApiTestBase::RunPromisesAgain, base::Unretained(this))); |
run_loop.Run(); |
+ keep_alive_counter_.WaitUntilKeepAlivesFinish(); |
} |
void ApiTestBase::RunTestInner(const std::string& test_name, |