Home | History | Annotate | Download | only in extensions
      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_EXTENSION_INFO_MAP_H_
      6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_INFO_MAP_H_
      7 #pragma once
      8 
      9 #include <map>
     10 #include <string>
     11 
     12 #include "base/basictypes.h"
     13 #include "base/file_path.h"
     14 #include "base/memory/ref_counted.h"
     15 #include "chrome/common/extensions/extension.h"
     16 #include "chrome/common/extensions/extension_extent.h"
     17 #include "googleurl/src/gurl.h"
     18 
     19 class Extension;
     20 
     21 // Contains extension data that needs to be accessed on the IO thread. It can
     22 // be created/destroyed on any thread, but all other methods must be called on
     23 // the IO thread.
     24 //
     25 // TODO(mpcomplete): consider simplifying this class to return the StaticData
     26 // object itself, since most methods are simple property accessors.
     27 class ExtensionInfoMap : public base::RefCountedThreadSafe<ExtensionInfoMap> {
     28  public:
     29   ExtensionInfoMap();
     30   ~ExtensionInfoMap();
     31 
     32   // Callback for when new extensions are loaded.
     33   void AddExtension(const Extension* extension);
     34 
     35   // Callback for when an extension is unloaded.
     36   void RemoveExtension(const std::string& id,
     37                        const UnloadedExtensionInfo::Reason reason);
     38 
     39   // Gets the name for the specified extension.
     40   std::string GetNameForExtension(const std::string& id) const;
     41 
     42   // Gets the path to the directory for the specified extension.
     43   FilePath GetPathForExtension(const std::string& id) const;
     44 
     45   // Gets the path to the directory for the specified disabled extension.
     46   FilePath GetPathForDisabledExtension(const std::string& id) const;
     47 
     48   // Returns true if the specified extension exists and has a non-empty web
     49   // extent.
     50   bool ExtensionHasWebExtent(const std::string& id) const;
     51 
     52   // Returns true if the specified extension exists and can load in incognito
     53   // contexts.
     54   bool ExtensionCanLoadInIncognito(const std::string& id) const;
     55 
     56   // Returns an empty string if the extension with |id| doesn't have a default
     57   // locale.
     58   std::string GetDefaultLocaleForExtension(const std::string& id) const;
     59 
     60   // Gets the effective host permissions for the extension with |id|.
     61   ExtensionExtent
     62       GetEffectiveHostPermissionsForExtension(const std::string& id) const;
     63 
     64   // Determine whether a URL has access to the specified extension permission.
     65   bool CheckURLAccessToExtensionPermission(const GURL& url,
     66                                            const char* permission_name) const;
     67 
     68   // Returns true if the specified URL references the icon for an extension.
     69   bool URLIsForExtensionIcon(const GURL& url) const;
     70 
     71  private:
     72   // Map of extension info by extension id.
     73   typedef std::map<std::string, scoped_refptr<const Extension> > Map;
     74 
     75   Map extension_info_;
     76   Map disabled_extension_info_;
     77 };
     78 
     79 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_INFO_MAP_H_
     80