• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_EXTENSIONS_PENDING_EXTENSION_INFO_H_
6 #define CHROME_BROWSER_EXTENSIONS_PENDING_EXTENSION_INFO_H_
7 #pragma once
8 
9 #include "chrome/common/extensions/extension.h"
10 
11 class GURL;
12 
13 // A pending extension is an extension that hasn't been installed yet
14 // and is intended to be installed in the next auto-update cycle.  The
15 // update URL of a pending extension may be blank, in which case a
16 // default one is assumed.
17 // TODO(skerner): Make this class an implementation detail of
18 // PendingExtensionManager, and remove all other users.
19 class PendingExtensionInfo {
20  public:
21   typedef bool (*ShouldAllowInstallPredicate)(const Extension&);
22 
23   PendingExtensionInfo(
24       const GURL& update_url,
25       ShouldAllowInstallPredicate should_allow_install,
26       bool is_from_sync,
27       bool install_silently,
28       bool enable_on_install,
29       bool enable_incognito_on_install,
30       Extension::Location install_source);
31 
32   // Required for STL container membership.  Should not be used directly.
33   PendingExtensionInfo();
34 
update_url()35   const GURL& update_url() const { return update_url_; }
36 
37   // ShouldAllowInstall() returns the result of running constructor argument
38   // |should_allow_install| on an extension. After an extension is unpacked,
39   // this function is run. If it returns true, the extension is installed.
40   // If not, the extension is discarded. This allows creators of
41   // PendingExtensionInfo objects to ensure that extensions meet some criteria
42   // that can only be tested once the extension is unpacked.
ShouldAllowInstall(const Extension & extension)43   bool ShouldAllowInstall(const Extension& extension) const {
44     return should_allow_install_(extension);
45   }
is_from_sync()46   bool is_from_sync() const { return is_from_sync_; }
install_silently()47   bool install_silently() const { return install_silently_; }
enable_on_install()48   bool enable_on_install() const { return enable_on_install_; }
enable_incognito_on_install()49   bool enable_incognito_on_install() const {
50     return enable_incognito_on_install_;
51   }
install_source()52   Extension::Location install_source() const { return install_source_; }
53 
54  private:
55   GURL update_url_;
56 
57   // When the extension is about to be installed, this function is
58   // called.  If this function returns true, the install proceeds.  If
59   // this function returns false, the install is aborted.
60   ShouldAllowInstallPredicate should_allow_install_;
61 
62   bool is_from_sync_;  // This update check was initiated from sync.
63   bool install_silently_;
64   bool enable_on_install_;
65   bool enable_incognito_on_install_;
66   Extension::Location install_source_;
67 
68   FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, AddPendingExtensionFromSync);
69 };
70 
71 #endif  // CHROME_BROWSER_EXTENSIONS_PENDING_EXTENSION_INFO_H_
72