Index: mojo/application/public/cpp/lib/app_lifetime_helper.cc |
diff --git a/mojo/application/public/cpp/lib/app_lifetime_helper.cc b/mojo/application/public/cpp/lib/app_lifetime_helper.cc |
index 4d12339138056b4b39172699a7ca41074b9d816c..c3ed08534c9d897ffa88f4bb5c7ec4a80e4e8e91 100644 |
--- a/mojo/application/public/cpp/lib/app_lifetime_helper.cc |
+++ b/mojo/application/public/cpp/lib/app_lifetime_helper.cc |
@@ -12,8 +12,10 @@ namespace mojo { |
AppRefCount::AppRefCount( |
AppLifetimeHelper* app_lifetime_helper, |
+ base::TimeDelta release_delay, |
scoped_refptr<base::SingleThreadTaskRunner> app_task_runner) |
: app_lifetime_helper_(app_lifetime_helper), |
+ release_delay_(release_delay), |
app_task_runner_(app_task_runner) { |
} |
@@ -27,6 +29,14 @@ AppRefCount::~AppRefCount() { |
} |
#endif |
+ if (!release_delay_.is_zero()) { |
+ app_task_runner_->PostDelayedTask( |
+ FROM_HERE, base::Bind(&AppLifetimeHelper::Release, |
+ base::Unretained(app_lifetime_helper_)), |
+ release_delay_); |
+ return; |
+ } |
+ |
if (app_task_runner_->BelongsToCurrentThread()) { |
app_lifetime_helper_->Release(); |
return; |
@@ -59,8 +69,8 @@ scoped_ptr<AppRefCount> AppRefCount::Clone() { |
} |
#endif |
- return make_scoped_ptr(new AppRefCount( |
- app_lifetime_helper_, app_task_runner_)); |
+ return make_scoped_ptr( |
+ new AppRefCount(app_lifetime_helper_, release_delay_, app_task_runner_)); |
} |
AppLifetimeHelper::AppLifetimeHelper(ApplicationImpl* app) |
@@ -71,9 +81,14 @@ AppLifetimeHelper::~AppLifetimeHelper() { |
} |
scoped_ptr<AppRefCount> AppLifetimeHelper::CreateAppRefCount() { |
+ return CreateAppRefCount(base::TimeDelta()); |
+} |
+ |
+scoped_ptr<AppRefCount> AppLifetimeHelper::CreateAppRefCount( |
+ base::TimeDelta release_delay) { |
AddRef(); |
return make_scoped_ptr(new AppRefCount( |
- this, base::MessageLoop::current()->task_runner())); |
+ this, release_delay, base::MessageLoop::current()->task_runner())); |
} |
void AppLifetimeHelper::AddRef() { |