// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_EXTENSIONS_APP_DATA_MIGRATOR_H_
#define CHROME_BROWSER_EXTENSIONS_APP_DATA_MIGRATOR_H_

#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"

class Profile;

namespace extensions {
class Extension;
class ExtensionRegistry;

// This class migrates legacy packaged app data in the general storage
// partition to an isolated storage partition. This happens when a legacy
// packaged app is upgraded to a platform app. See http://crbug.com/302577
class AppDataMigrator {
 public:
  AppDataMigrator(Profile* profile, ExtensionRegistry* registry);
  ~AppDataMigrator();

  static bool NeedsMigration(const Extension* old, const Extension* extension);

  void DoMigrationAndReply(const Extension* old,
                           const Extension* extension,
                           const base::Closure& reply);

 private:
  Profile* profile_;
  ExtensionRegistry* registry_;
  base::WeakPtrFactory<AppDataMigrator> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(AppDataMigrator);
};

}  // namespace extensions

#endif  // CHROME_BROWSER_EXTENSIONS_APP_DATA_MIGRATOR_H_
