15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef EXTENSIONS_COMMMON_URL_PATTERN_SET_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define EXTENSIONS_COMMMON_URL_PATTERN_SET_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/url_pattern.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListValue; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents the set of URLs an extension uses for web content. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLPatternSet { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::set<URLPattern>::const_iterator const_iterator; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::set<URLPattern>::iterator iterator; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears |out| and populates the set with |set1| - |set2|. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateDifference(const URLPatternSet& set1, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const URLPatternSet& set2, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet* out); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears |out| and populates the set with the intersection of |set1| 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and |set2|. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateIntersection(const URLPatternSet& set1, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const URLPatternSet& set2, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet* out); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears |out| and populates the set with the union of |set1| and |set2|. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateUnion(const URLPatternSet& set1, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const URLPatternSet& set2, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet* out); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears |out| and populates it with the union of all sets in |sets|. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void CreateUnion(const std::vector<URLPatternSet>& sets, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet* out); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet(const URLPatternSet& rhs); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit URLPatternSet(const std::set<URLPattern>& patterns); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~URLPatternSet(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet& operator=(const URLPatternSet& rhs); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator==(const URLPatternSet& rhs) const; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_empty() const; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size() const; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<URLPattern>& patterns() const { return patterns_; } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const_iterator begin() const { return patterns_.begin(); } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const_iterator end() const { return patterns_.end(); } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a pattern to the set. Returns true if a new pattern was inserted, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false if the pattern was already in the set. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool AddPattern(const URLPattern& pattern); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds all patterns from |set| into this. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddPatterns(const URLPatternSet& set); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearPatterns(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if every URL that matches |set| is matched by this. In other 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // words, if every pattern in |set| is encompassed by a pattern in this. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Contains(const URLPatternSet& set) const; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) // Returns true if any pattern in this set encompasses |pattern|. 765e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) bool ContainsPattern(const URLPattern& pattern) const; 775e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test if the extent contains a URL. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool MatchesURL(const GURL& url) const; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool MatchesSecurityOrigin(const GURL& origin) const; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if there is a single URL that would be in two extents. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool OverlapsWith(const URLPatternSet& other) const; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts to and from Value for serialization to preferences. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ListValue> ToValue() const; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Populate(const base::ListValue& value, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int valid_schemes, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_file_access, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* error); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Populate(const std::vector<std::string>& patterns, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int valid_schemes, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_file_access, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* error); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The list of URL patterns that comprise the extent. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<URLPattern> patterns_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // EXTENSIONS_COMMMON_URL_PATTERN_SET_H_ 106