diff options
-rw-r--r-- | chrome/browser/extensions/user_script_master.cc | 25 | ||||
-rw-r--r-- | chrome/browser/extensions/user_script_master_unittest.cc | 19 |
2 files changed, 34 insertions, 10 deletions
diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc index 528f1b9..d142e0a 100644 --- a/chrome/browser/extensions/user_script_master.cc +++ b/chrome/browser/extensions/user_script_master.cc @@ -26,11 +26,16 @@ static bool GetDeclarationValue(const base::StringPiece& line, const base::StringPiece& prefix, std::string* value) { - if (!line.starts_with(prefix)) + base::StringPiece::size_type index = line.find(prefix); + if (index == base::StringPiece::npos) + return false; + + std::string temp(line.data() + index + prefix.length(), + line.length() - index - prefix.length()); + + if (temp.size() == 0 || !IsWhitespace(temp[0])) return false; - std::string temp(line.data() + prefix.length(), - line.length() - prefix.length()); TrimWhitespaceASCII(temp, TRIM_ALL, value); return true; } @@ -56,13 +61,13 @@ bool UserScriptMaster::ScriptReloader::ParseMetadataHeader( static const base::StringPiece kUserScriptBegin("// ==UserScript=="); static const base::StringPiece kUserScriptEng("// ==/UserScript=="); - static const base::StringPiece kNamespaceDeclaration("// @namespace "); - static const base::StringPiece kNameDeclaration("// @name "); - static const base::StringPiece kDescriptionDeclaration("// @description "); - static const base::StringPiece kIncludeDeclaration("// @include "); - static const base::StringPiece kExcludeDeclaration("// @exclude "); - static const base::StringPiece kMatchDeclaration("// @match "); - static const base::StringPiece kRunAtDeclaration("// @run-at "); + static const base::StringPiece kNamespaceDeclaration("// @namespace"); + static const base::StringPiece kNameDeclaration("// @name"); + static const base::StringPiece kDescriptionDeclaration("// @description"); + static const base::StringPiece kIncludeDeclaration("// @include"); + static const base::StringPiece kExcludeDeclaration("// @exclude"); + static const base::StringPiece kMatchDeclaration("// @match"); + static const base::StringPiece kRunAtDeclaration("// @run-at"); static const base::StringPiece kRunAtDocumentStartValue("document-start"); static const base::StringPiece kRunAtDocumentEndValue("document-end"); diff --git a/chrome/browser/extensions/user_script_master_unittest.cc b/chrome/browser/extensions/user_script_master_unittest.cc index 562f4cf..ef5ac2f 100644 --- a/chrome/browser/extensions/user_script_master_unittest.cc +++ b/chrome/browser/extensions/user_script_master_unittest.cc @@ -240,3 +240,22 @@ TEST_F(UserScriptMasterTest, Parse7) { EXPECT_EQ("http://*.mail.google.com/*", script.url_patterns()[0].GetAsString()); } + +TEST_F(UserScriptMasterTest, Parse8) { + // Greasemonkey allows there to be any leading text before the comment marker. + const std::string text( + "// ==UserScript==\n" + "adsasdfasf// @name hello\n" + " // @description\twiggity woo\n" + "\t// @match \t http://mail.yahoo.com/*\n" + "// ==/UserScript==\n"); + + UserScript script; + EXPECT_TRUE(UserScriptMaster::ScriptReloader::ParseMetadataHeader( + text, &script)); + ASSERT_EQ("hello", script.name()); + ASSERT_EQ("wiggity woo", script.description()); + ASSERT_EQ(1U, script.url_patterns().size()); + EXPECT_EQ("http://mail.yahoo.com/*", + script.url_patterns()[0].GetAsString()); +} |