Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(601)

Unified Diff: extensions/renderer/api_test_base.cc

Issue 669303002: Add an extensions keep-alive client. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@keep-alive-service
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698