Revert 113071 - Revert 113047 - Make ExtensionService use ExtensionSet.

ExtensionManagementApiBrowserTest.LaunchApp fixed by r113141.

Make ExtensionSet iterate like a set instead of a map.

BUG=104091
TEST=existing tests

Review URL: http://codereview.chromium.org/8733004

[email protected]
Review URL: http://codereview.chromium.org/8789018

[email protected]
Review URL: http://codereview.chromium.org/8822021

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113233 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/common/extensions/extension_set.h b/chrome/common/extensions/extension_set.h
index 5ca0344..34075570 100644
--- a/chrome/common/extensions/extension_set.h
+++ b/chrome/common/extensions/extension_set.h
@@ -6,9 +6,9 @@
 #define CHROME_COMMON_EXTENSIONS_EXTENSION_SET_H_
 #pragma once
 
+#include <iterator>
 #include <map>
 #include <string>
-#include <vector>
 
 #include "base/gtest_prod_util.h"
 #include "base/memory/ref_counted.h"
@@ -44,17 +44,39 @@
  public:
   typedef std::pair<FilePath, std::string> ExtensionPathAndDefaultLocale;
   typedef std::map<std::string, scoped_refptr<const Extension> > ExtensionMap;
-  typedef ExtensionMap::const_iterator const_iterator;
+
+  // Iteration over the values of the map (given that it's an ExtensionSet,
+  // it should iterate like a set iterator).
+  class const_iterator :
+      public std::iterator<std::input_iterator_tag,
+                           scoped_refptr<const Extension> > {
+   public:
+    const_iterator() {}
+    explicit const_iterator(ExtensionMap::const_iterator it) :
+        it_(it) {}
+    const_iterator& operator++() {
+      ++it_;
+      return *this;
+    }
+    const scoped_refptr<const Extension> operator*() {
+      return it_->second;
+    }
+    bool operator!=(const const_iterator& other) { return it_ != other.it_; }
+    bool operator==(const const_iterator& other) { return it_ == other.it_; }
+
+   private:
+    ExtensionMap::const_iterator it_;
+  };
 
   ExtensionSet();
   ~ExtensionSet();
 
-  // Gets the number of extensions contained.
   size_t size() const;
+  bool is_empty() const;
 
   // Iteration support.
-  const_iterator begin() const { return extensions_.begin(); }
-  const_iterator end() const { return extensions_.end(); }
+  const_iterator begin() const { return const_iterator(extensions_.begin()); }
+  const_iterator end() const { return const_iterator(extensions_.end()); }
 
   // Returns true if the set contains the specified extension.
   bool Contains(const std::string& id) const;
@@ -66,9 +88,12 @@
   // Removes the specified extension.
   void Remove(const std::string& id);
 
+  // Removes all extensions.
+  void Clear();
+
   // Returns the extension ID, or empty if none. This includes web URLs that
   // are part of an extension's web extent.
-  std::string GetIdByURL(const ExtensionURLInfo& info) const;
+  std::string GetIDByURL(const ExtensionURLInfo& info) const;
 
   // Returns the Extension, or NULL if none.  This includes web URLs that are
   // part of an extension's web extent.