129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch// found in the LICENSE file.
429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "chrome/browser/chromeos/login/easy_unlock/short_lived_user_context.h"
629b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "base/bind.h"
829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "base/location.h"
929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "base/task_runner.h"
1029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "chrome/common/extensions/extension_constants.h"
1129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "chromeos/login/auth/user_context.h"
1229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
1329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdochnamespace chromeos {
1429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
1529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdochnamespace {
1629b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
1729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch// The number of minutes that the user context will be stored.
1829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdochconst int64 kUserContextTimeToLiveMinutes = 10;
1929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
2029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch}  // namespace
2129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
2229b820f8d84e3bc97d62552e54923c42407f2f29Ben MurdochShortLivedUserContext::ShortLivedUserContext(
2329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    const UserContext& user_context,
2429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    apps::AppLifetimeMonitor* app_lifetime_monitor,
2529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    base::TaskRunner* task_runner)
2629b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    : user_context_(new UserContext(user_context)),
2729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch      app_lifetime_monitor_(app_lifetime_monitor),
2829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch      weak_ptr_factory_(this) {
2929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch  app_lifetime_monitor_->AddObserver(this);
3029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
3129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch  task_runner->PostDelayedTask(
3229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch      FROM_HERE,
3329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch      base::Bind(&ShortLivedUserContext::Reset, weak_ptr_factory_.GetWeakPtr()),
3429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch      base::TimeDelta::FromMinutes(kUserContextTimeToLiveMinutes));
3529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch}
3629b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
3729b820f8d84e3bc97d62552e54923c42407f2f29Ben MurdochShortLivedUserContext::~ShortLivedUserContext() {
3829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch  Reset();
3929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch}
4029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
4129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdochvoid ShortLivedUserContext::Reset() {
4229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch  if (user_context_.get()) {
4329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    user_context_->ClearSecrets();
4429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    user_context_.reset();
4529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    app_lifetime_monitor_->RemoveObserver(this);
4629b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch  }
4729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch}
4829b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
4929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdochvoid ShortLivedUserContext::OnAppDeactivated(Profile* profile,
5029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch                                             const std::string& app_id) {
5129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch  if (app_id == extension_misc::kEasyUnlockAppId)
5229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch    Reset();
5329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch}
5429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch
5529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch}  // namespace chromeos
56