Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2012 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_EXTERNAL_PROVIDER_INTERFACE_H_
      6 #define CHROME_BROWSER_EXTENSIONS_EXTERNAL_PROVIDER_INTERFACE_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/memory/linked_ptr.h"
     11 #include "chrome/common/extensions/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 Extension::IdIsValid(id)).
     31   class VisitorInterface {
     32    public:
     33     // Return true if the extension install will proceed.  Install will not
     34     // proceed if the extension is already installed from a higher priority
     35     // location.
     36     virtual bool OnExternalExtensionFileFound(
     37         const std::string& id,
     38         const base::Version* version,
     39         const base::FilePath& path,
     40         Manifest::Location location,
     41         int creation_flags,
     42         bool mark_acknowledged) = 0;
     43 
     44     // Return true if the extension install will proceed.  Install might not
     45     // proceed if the extension is already installed from a higher priority
     46     // location.
     47     virtual bool OnExternalExtensionUpdateUrlFound(
     48         const std::string& id,
     49         const GURL& update_url,
     50         Manifest::Location location) = 0;
     51 
     52     // Called after all the external extensions have been reported
     53     // through the above two methods. |provider| is a pointer to the
     54     // provider that is now ready (typically this), and the
     55     // implementation of OnExternalProviderReady() should be able to
     56     // safely assert that provider->IsReady().
     57     virtual void OnExternalProviderReady(
     58         const ExternalProviderInterface* provider) = 0;
     59 
     60    protected:
     61     virtual ~VisitorInterface() {}
     62   };
     63 
     64   virtual ~ExternalProviderInterface() {}
     65 
     66   // The visitor (ExtensionsService) calls this function before it goes away.
     67   virtual void ServiceShutdown() = 0;
     68 
     69   // Enumerate registered extensions, calling
     70   // OnExternalExtension(File|UpdateUrl)Found on the |visitor| object for each
     71   // registered extension found.
     72   virtual void VisitRegisteredExtension() = 0;
     73 
     74   // Test if this provider has an extension with id |id| registered.
     75   virtual bool HasExtension(const std::string& id) const = 0;
     76 
     77   // Gets details of an extension by its id.  Output params will be set only
     78   // if they are not NULL.  If an output parameter is not specified by the
     79   // provider type, it will not be changed.
     80   // This function is no longer used outside unit tests.
     81   virtual bool GetExtensionDetails(
     82       const std::string& id,
     83       Manifest::Location* location,
     84       scoped_ptr<base::Version>* version) const = 0;
     85 
     86   // Determines if this provider had loaded the list of external extensions
     87   // from its source.
     88   virtual bool IsReady() const = 0;
     89 };
     90 
     91 typedef std::vector<linked_ptr<ExternalProviderInterface> >
     92     ProviderCollection;
     93 
     94 }  // namespace extensions
     95 
     96 #endif  // CHROME_BROWSER_EXTENSIONS_EXTERNAL_PROVIDER_INTERFACE_H_
     97