Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / extensions / browser / external_provider_interface.h
1 // Copyright 2013 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 EXTENSIONS_BROWSER_EXTERNAL_PROVIDER_INTERFACE_H_
6 #define EXTENSIONS_BROWSER_EXTERNAL_PROVIDER_INTERFACE_H_
7
8 #include <vector>
9
10 #include "base/memory/linked_ptr.h"
11 #include "extensions/common/manifest.h"
12
13 class GURL;
14
15 namespace base {
16 class FilePath;
17 class Version;
18 }
19
20 namespace extensions {
21
22 // This class is an abstract class for implementing external extensions
23 // providers.
24 class ExternalProviderInterface {
25  public:
26   // ExternalProvider uses this interface to communicate back to the
27   // caller what extensions are registered, and which |id|, |version| and |path|
28   // they have. See also VisitRegisteredExtension below. Ownership of |version|
29   // is not transferred to the visitor.  Callers of the methods below must
30   // ensure that |id| is a valid extension id (use
31   // crx_file::id_util::IdIsValid(id)).
32   class VisitorInterface {
33    public:
34     // Return true if the extension install will proceed.  Install will not
35     // proceed if the extension is already installed from a higher priority
36     // location.
37     virtual bool OnExternalExtensionFileFound(
38         const std::string& id,
39         const base::Version* version,
40         const base::FilePath& path,
41         Manifest::Location location,
42         int creation_flags,
43         bool mark_acknowledged) = 0;
44
45     // Return true if the extension install will proceed.  Install might not
46     // proceed if the extension is already installed from a higher priority
47     // location.
48     virtual bool OnExternalExtensionUpdateUrlFound(
49         const std::string& id,
50         const std::string& install_parameter,
51         const GURL& update_url,
52         Manifest::Location location,
53         int creation_flags,
54         bool mark_acknowledged) = 0;
55
56     // Called after all the external extensions have been reported
57     // through the above two methods. |provider| is a pointer to the
58     // provider that is now ready (typically this), and the
59     // implementation of OnExternalProviderReady() should be able to
60     // safely assert that provider->IsReady().
61     virtual void OnExternalProviderReady(
62         const ExternalProviderInterface* provider) = 0;
63
64    protected:
65     virtual ~VisitorInterface() {}
66   };
67
68   virtual ~ExternalProviderInterface() {}
69
70   // The visitor (ExtensionsService) calls this function before it goes away.
71   virtual void ServiceShutdown() = 0;
72
73   // Enumerate registered extensions, calling
74   // OnExternalExtension(File|UpdateUrl)Found on the |visitor| object for each
75   // registered extension found.
76   virtual void VisitRegisteredExtension() = 0;
77
78   // Test if this provider has an extension with id |id| registered.
79   virtual bool HasExtension(const std::string& id) const = 0;
80
81   // Gets details of an extension by its id.  Output params will be set only
82   // if they are not NULL.  If an output parameter is not specified by the
83   // provider type, it will not be changed.
84   // This function is no longer used outside unit tests.
85   virtual bool GetExtensionDetails(
86       const std::string& id,
87       Manifest::Location* location,
88       scoped_ptr<base::Version>* version) const = 0;
89
90   // Determines if this provider had loaded the list of external extensions
91   // from its source.
92   virtual bool IsReady() const = 0;
93 };
94
95 typedef std::vector<linked_ptr<ExternalProviderInterface> >
96     ProviderCollection;
97
98 }  // namespace extensions
99
100 #endif  // EXTENSIONS_BROWSER_EXTERNAL_PROVIDER_INTERFACE_H_