| Index: chrome/common/extensions/user_script.cc
|
| diff --git a/chrome/common/extensions/user_script.cc b/chrome/common/extensions/user_script.cc
|
| index df34e529114551555287fd7cffd219ee65df13fb..10d0b60eef0d06167703de1bec38604108cc5b4b 100644
|
| --- a/chrome/common/extensions/user_script.cc
|
| +++ b/chrome/common/extensions/user_script.cc
|
| @@ -7,21 +7,59 @@
|
| #include "base/pickle.h"
|
| #include "base/string_util.h"
|
|
|
| -bool UserScript::MatchesUrl(const GURL& url) const {
|
| - for (std::vector<std::string>::const_iterator glob = globs_.begin();
|
| - glob != globs_.end(); ++glob) {
|
| - if (MatchPattern(url.spec(), *glob))
|
| +namespace {
|
| +static bool UrlMatchesPatterns(const UserScript::PatternList* patterns,
|
| + const GURL& url) {
|
| + for (UserScript::PatternList::const_iterator pattern = patterns->begin();
|
| + pattern != patterns->end(); ++pattern) {
|
| + if (pattern->MatchesUrl(url))
|
| return true;
|
| }
|
|
|
| - for (PatternList::const_iterator pattern = url_patterns_.begin();
|
| - pattern != url_patterns_.end(); ++pattern) {
|
| - if (pattern->MatchesUrl(url))
|
| + return false;
|
| +}
|
| +
|
| +static bool UrlMatchesGlobs(const std::vector<std::string>* globs,
|
| + const GURL& url) {
|
| + for (std::vector<std::string>::const_iterator glob = globs->begin();
|
| + glob != globs->end(); ++glob) {
|
| + if (MatchPattern(url.spec(), *glob))
|
| return true;
|
| }
|
|
|
| return false;
|
| }
|
| +}
|
| +
|
| +const char UserScript::kFileExtension[] = ".user.js";
|
| +
|
| +bool UserScript::HasUserScriptFileExtension(const GURL& url) {
|
| + return EndsWith(url.ExtractFileName(), kFileExtension, false);
|
| +}
|
| +
|
| +bool UserScript::HasUserScriptFileExtension(const FilePath& path) {
|
| + static FilePath extension(FilePath().AppendASCII(kFileExtension));
|
| + return EndsWith(path.BaseName().value(), extension.value(), false);
|
| +}
|
| +
|
| +bool UserScript::MatchesUrl(const GURL& url) const {
|
| + if (url_patterns_.size() > 0) {
|
| + if (!UrlMatchesPatterns(&url_patterns_, url))
|
| + return false;
|
| + }
|
| +
|
| + if (globs_.size() > 0) {
|
| + if (!UrlMatchesGlobs(&globs_, url))
|
| + return false;
|
| + }
|
| +
|
| + if (exclude_globs_.size() > 0) {
|
| + if (UrlMatchesGlobs(&exclude_globs_, url))
|
| + return false;
|
| + }
|
| +
|
| + return true;
|
| +}
|
|
|
| void UserScript::File::Pickle(::Pickle* pickle) const {
|
| pickle->WriteString(url_.spec());
|
| @@ -43,10 +81,17 @@ void UserScript::Pickle(::Pickle* pickle) const {
|
| // Write the extension id.
|
| pickle->WriteString(extension_id());
|
|
|
| + // Write Greasemonkey emulation.
|
| + pickle->WriteBool(emulate_greasemonkey());
|
| +
|
| // Write globs.
|
| + std::vector<std::string>::const_iterator glob;
|
| pickle->WriteSize(globs_.size());
|
| - for (std::vector<std::string>::const_iterator glob = globs_.begin();
|
| - glob != globs_.end(); ++glob) {
|
| + for (glob = globs_.begin(); glob != globs_.end(); ++glob) {
|
| + pickle->WriteString(*glob);
|
| + }
|
| + pickle->WriteSize(exclude_globs_.size());
|
| + for (glob = exclude_globs_.begin(); glob != exclude_globs_.end(); ++glob) {
|
| pickle->WriteString(*glob);
|
| }
|
|
|
| @@ -82,10 +127,12 @@ void UserScript::Unpickle(const ::Pickle& pickle, void** iter) {
|
| // Read the extension ID.
|
| CHECK(pickle.ReadString(iter, &extension_id_));
|
|
|
| + // Read Greasemonkey emulation.
|
| + CHECK(pickle.ReadBool(iter, &emulate_greasemonkey_));
|
| +
|
| // Read globs.
|
| size_t num_globs = 0;
|
| CHECK(pickle.ReadSize(iter, &num_globs));
|
| -
|
| globs_.clear();
|
| for (size_t i = 0; i < num_globs; ++i) {
|
| std::string glob;
|
| @@ -93,6 +140,14 @@ void UserScript::Unpickle(const ::Pickle& pickle, void** iter) {
|
| globs_.push_back(glob);
|
| }
|
|
|
| + CHECK(pickle.ReadSize(iter, &num_globs));
|
| + exclude_globs_.clear();
|
| + for (size_t i = 0; i < num_globs; ++i) {
|
| + std::string glob;
|
| + CHECK(pickle.ReadString(iter, &glob));
|
| + exclude_globs_.push_back(glob);
|
| + }
|
| +
|
| // Read url patterns.
|
| size_t num_patterns = 0;
|
| CHECK(pickle.ReadSize(iter, &num_patterns));
|
|
|