1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_EXTENSIONS_DELEGATE_IMPL_H_
6 #define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_EXTENSIONS_DELEGATE_IMPL_H_
7 
8 #include "extensions/browser/supervised_user_extensions_delegate.h"
9 
10 namespace content {
11 class BrowserContext;
12 }
13 
14 class ParentPermissionDialog;
15 
16 namespace extensions {
17 
18 class SupervisedUserExtensionsDelegateImpl
19     : public extensions::SupervisedUserExtensionsDelegate {
20  public:
21   SupervisedUserExtensionsDelegateImpl();
22   ~SupervisedUserExtensionsDelegateImpl() override;
23 
24   // extensions::SupervisedUserExtensionsDelegate overrides
25   bool IsChild(content::BrowserContext* context) const override;
26   bool IsExtensionAllowedByParent(
27       const extensions::Extension& extension,
28       content::BrowserContext* context) const override;
29   void PromptForParentPermissionOrShowError(
30       const extensions::Extension& extension,
31       content::BrowserContext* browser_context,
32       content::WebContents* web_contents,
33       ParentPermissionDialogDoneCallback parent_permission_callback,
34       base::OnceClosure error_callback) override;
35 
36  private:
37   // Returns true if |context| represents a supervised child account who may
38   // install extensions with parent permission.
39   bool CanInstallExtensions(content::BrowserContext* context) const;
40 
41   // Shows a parent permission dialog for |extension| and call |done_callback|
42   // when it completes.
43   void ShowParentPermissionDialogForExtension(
44       const extensions::Extension& extension,
45       content::BrowserContext* context,
46       content::WebContents* contents,
47       extensions::SupervisedUserExtensionsDelegate::
48           ParentPermissionDialogDoneCallback done_callback);
49 
50   // Shows a dialog indicating that |extension| has been blocked and call
51   // |done_callback| when it completes.
52   void ShowExtensionEnableBlockedByParentDialogForExtension(
53       const extensions::Extension& extension,
54       content::WebContents* contents,
55       base::OnceClosure done_callback);
56 
57   std::unique_ptr<ParentPermissionDialog> parent_permission_dialog_;
58 };
59 
60 }  // namespace extensions
61 
62 #endif  // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_EXTENSIONS_DELEGATE_IMPL_H_
63