// 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_API_DEVELOPER_PRIVATE_SHOW_PERMISSIONS_DIALOG_HELPER_H_
#define CHROME_BROWSER_EXTENSIONS_API_DEVELOPER_PRIVATE_SHOW_PERMISSIONS_DIALOG_HELPER_H_

#include "base/bind.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/extensions/extension_install_prompt.h"

class Profile;

namespace content {
class BrowserContext;
class WebContents;
}

namespace extensions {
class Extension;

// Helper class to handle showing a permissions dialog for an extension. Will
// show either the newer AppInfo-style permissions dialog, or the traditional,
// install-prompt style dialog.
class ShowPermissionsDialogHelper {
 public:
  static void Show(content::BrowserContext* browser_context,
                   content::WebContents* web_contents,
                   const Extension* extension,
                   bool from_webui,
                   const base::Closure& on_complete);

 private:
  ShowPermissionsDialogHelper(Profile* profile,
                              const base::Closure& on_complete);
  ~ShowPermissionsDialogHelper();  // Manages its own lifetime.

  // Shows the old-style (not AppInfo) permissions dialog.
  void ShowPermissionsDialog(content::WebContents* web_contents,
                             const Extension* extension);

  void OnInstallPromptDone(ExtensionInstallPrompt::Result result);

  scoped_ptr<ExtensionInstallPrompt> prompt_;

  Profile* profile_;

  base::Closure on_complete_;

  std::string extension_id_;

  DISALLOW_COPY_AND_ASSIGN(ShowPermissionsDialogHelper);
};

}  // namespace extensions

#endif  // CHROME_BROWSER_EXTENSIONS_API_DEVELOPER_PRIVATE_SHOW_PERMISSIONS_DIALOG_HELPER_H_