// Copyright 2013 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_PRINCIPALS_PRIVATE_PRINCIPALS_PRIVATE_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_PRINCIPALS_PRIVATE_PRINCIPALS_PRIVATE_API_H_

#include "chrome/browser/extensions/extension_function.h"

// WARNING: chrome.principalsPrivate is a set of experimental APIs for the new
// profile management flows. Every new API must extend
// PrincipalsPrivateExtensionFunction which is guarded with a flag check
// for "new-profile-management".

namespace extensions {

class PrincipalsPrivateExtensionFunction : public SyncExtensionFunction {
 public:
  PrincipalsPrivateExtensionFunction() {}

 protected:
  virtual ~PrincipalsPrivateExtensionFunction() {}

  // ExtensionFunction:
  // Checks for the flag "new-profile-management", if set calls
  // RunImplSafe which must be overriden by subclasses.
  virtual bool RunImpl() OVERRIDE FINAL;

 private:
  virtual bool RunImplSafe() = 0;
};

class PrincipalsPrivateSignOutFunction
    : public PrincipalsPrivateExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("principalsPrivate.signOut",
                             PRINCIPALSPRIVATE_SIGNOUT);
  PrincipalsPrivateSignOutFunction() {}

 protected:
  virtual ~PrincipalsPrivateSignOutFunction() {}

 private:
  // PrincipalsPrivateExtensionFunction
  virtual bool RunImplSafe() OVERRIDE;

  DISALLOW_COPY_AND_ASSIGN(PrincipalsPrivateSignOutFunction);
};

class PrincipalsPrivateShowAvatarBubbleFunction
    : public PrincipalsPrivateExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("principalsPrivate.showAvatarBubble",
                             PRINCIPALSPRIVATE_SHOWAVATARBUBBLE);
  PrincipalsPrivateShowAvatarBubbleFunction() {}

 protected:
  virtual ~PrincipalsPrivateShowAvatarBubbleFunction() {}

 private:
  // PrincipalsPrivateExtensionFunction
  virtual bool RunImplSafe() OVERRIDE;

  DISALLOW_COPY_AND_ASSIGN(PrincipalsPrivateShowAvatarBubbleFunction);
};

}  // namespace extensions

#endif  // CHROME_BROWSER_EXTENSIONS_API_PRINCIPALS_PRIVATE_PRINCIPALS_PRIVATE_API_H_

