| 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,
|
|
|