Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: extensions/common/user_script_unittest.cc

Issue 2227193002: Make UserScript non-copyable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: uplaod with base Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/memory/ptr_util.h"
9 #include "base/pickle.h" 10 #include "base/pickle.h"
10 #include "extensions/common/user_script.h" 11 #include "extensions/common/user_script.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 #include "url/gurl.h" 13 #include "url/gurl.h"
13 14
14 namespace extensions { 15 namespace extensions {
15 16
16 static const int kAllSchemes = 17 static const int kAllSchemes =
17 URLPattern::SCHEME_HTTP | 18 URLPattern::SCHEME_HTTP |
18 URLPattern::SCHEME_HTTPS | 19 URLPattern::SCHEME_HTTPS |
19 URLPattern::SCHEME_FILE | 20 URLPattern::SCHEME_FILE |
20 URLPattern::SCHEME_FTP | 21 URLPattern::SCHEME_FTP |
21 URLPattern::SCHEME_CHROMEUI; 22 URLPattern::SCHEME_CHROMEUI;
22 23
23 TEST(ExtensionUserScriptTest, Glob_HostString) { 24 TEST(ExtensionUserScriptTest, Glob_HostString) {
24 UserScript script; 25 ScriptMetadata script;
25 script.add_glob("*mail.google.com*"); 26 script.add_glob("*mail.google.com*");
26 script.add_glob("*mail.yahoo.com*"); 27 script.add_glob("*mail.yahoo.com*");
27 script.add_glob("*mail.msn.com*"); 28 script.add_glob("*mail.msn.com*");
28 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com"))); 29 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com")));
29 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com/foo"))); 30 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com/foo")));
30 EXPECT_TRUE(script.MatchesURL(GURL("https://mail.google.com/foo"))); 31 EXPECT_TRUE(script.MatchesURL(GURL("https://mail.google.com/foo")));
31 EXPECT_TRUE(script.MatchesURL(GURL("ftp://mail.google.com/foo"))); 32 EXPECT_TRUE(script.MatchesURL(GURL("ftp://mail.google.com/foo")));
32 EXPECT_TRUE(script.MatchesURL(GURL("http://woo.mail.google.com/foo"))); 33 EXPECT_TRUE(script.MatchesURL(GURL("http://woo.mail.google.com/foo")));
33 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.yahoo.com/bar"))); 34 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.yahoo.com/bar")));
34 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.msn.com/baz"))); 35 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.msn.com/baz")));
35 EXPECT_FALSE(script.MatchesURL(GURL("http://www.hotmail.com"))); 36 EXPECT_FALSE(script.MatchesURL(GURL("http://www.hotmail.com")));
36 37
37 script.add_exclude_glob("*foo*"); 38 script.add_exclude_glob("*foo*");
38 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com"))); 39 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com")));
39 EXPECT_FALSE(script.MatchesURL(GURL("http://mail.google.com/foo"))); 40 EXPECT_FALSE(script.MatchesURL(GURL("http://mail.google.com/foo")));
40 } 41 }
41 42
42 TEST(ExtensionUserScriptTest, Glob_TrailingSlash) { 43 TEST(ExtensionUserScriptTest, Glob_TrailingSlash) {
43 UserScript script; 44 ScriptMetadata script;
44 script.add_glob("*mail.google.com/"); 45 script.add_glob("*mail.google.com/");
45 // GURL normalizes the URL to have a trailing "/" 46 // GURL normalizes the URL to have a trailing "/"
46 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com"))); 47 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com")));
47 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com/"))); 48 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com/")));
48 EXPECT_FALSE(script.MatchesURL(GURL("http://mail.google.com/foo"))); 49 EXPECT_FALSE(script.MatchesURL(GURL("http://mail.google.com/foo")));
49 } 50 }
50 51
51 TEST(ExtensionUserScriptTest, Glob_TrailingSlashStar) { 52 TEST(ExtensionUserScriptTest, Glob_TrailingSlashStar) {
52 UserScript script; 53 ScriptMetadata script;
53 script.add_glob("http://mail.google.com/*"); 54 script.add_glob("http://mail.google.com/*");
54 // GURL normalizes the URL to have a trailing "/" 55 // GURL normalizes the URL to have a trailing "/"
55 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com"))); 56 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com")));
56 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com/foo"))); 57 EXPECT_TRUE(script.MatchesURL(GURL("http://mail.google.com/foo")));
57 EXPECT_FALSE(script.MatchesURL(GURL("https://mail.google.com/foo"))); 58 EXPECT_FALSE(script.MatchesURL(GURL("https://mail.google.com/foo")));
58 } 59 }
59 60
60 TEST(ExtensionUserScriptTest, Glob_Star) { 61 TEST(ExtensionUserScriptTest, Glob_Star) {
61 UserScript script; 62 ScriptMetadata script;
62 script.add_glob("*"); 63 script.add_glob("*");
63 EXPECT_TRUE(script.MatchesURL(GURL("http://foo.com/bar"))); 64 EXPECT_TRUE(script.MatchesURL(GURL("http://foo.com/bar")));
64 EXPECT_TRUE(script.MatchesURL(GURL("http://hot.com/dog"))); 65 EXPECT_TRUE(script.MatchesURL(GURL("http://hot.com/dog")));
65 EXPECT_TRUE(script.MatchesURL(GURL("https://hot.com/dog"))); 66 EXPECT_TRUE(script.MatchesURL(GURL("https://hot.com/dog")));
66 EXPECT_TRUE(script.MatchesURL(GURL("file:///foo/bar"))); 67 EXPECT_TRUE(script.MatchesURL(GURL("file:///foo/bar")));
67 EXPECT_TRUE(script.MatchesURL(GURL("file://localhost/foo/bar"))); 68 EXPECT_TRUE(script.MatchesURL(GURL("file://localhost/foo/bar")));
68 } 69 }
69 70
70 TEST(ExtensionUserScriptTest, Glob_StringAnywhere) { 71 TEST(ExtensionUserScriptTest, Glob_StringAnywhere) {
71 UserScript script; 72 ScriptMetadata script;
72 script.add_glob("*foo*"); 73 script.add_glob("*foo*");
73 EXPECT_TRUE(script.MatchesURL(GURL("http://foo.com/bar"))); 74 EXPECT_TRUE(script.MatchesURL(GURL("http://foo.com/bar")));
74 EXPECT_TRUE(script.MatchesURL(GURL("http://baz.org/foo/bar"))); 75 EXPECT_TRUE(script.MatchesURL(GURL("http://baz.org/foo/bar")));
75 EXPECT_FALSE(script.MatchesURL(GURL("http://baz.org"))); 76 EXPECT_FALSE(script.MatchesURL(GURL("http://baz.org")));
76 } 77 }
77 78
78 TEST(ExtensionUserScriptTest, UrlPattern) { 79 TEST(ExtensionUserScriptTest, UrlPattern) {
79 URLPattern pattern(kAllSchemes); 80 URLPattern pattern(kAllSchemes);
80 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/foo*")); 81 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/foo*"));
81 82
82 UserScript script; 83 ScriptMetadata script;
83 script.add_url_pattern(pattern); 84 script.add_url_pattern(pattern);
84 EXPECT_TRUE(script.MatchesURL(GURL("http://monkey.com/foobar"))); 85 EXPECT_TRUE(script.MatchesURL(GURL("http://monkey.com/foobar")));
85 EXPECT_FALSE(script.MatchesURL(GURL("http://monkey.com/hotdog"))); 86 EXPECT_FALSE(script.MatchesURL(GURL("http://monkey.com/hotdog")));
86 87
87 // NOTE: URLPattern is tested more extensively in url_pattern_unittest.cc. 88 // NOTE: URLPattern is tested more extensively in url_pattern_unittest.cc.
88 } 89 }
89 90
90 TEST(ExtensionUserScriptTest, ExcludeUrlPattern) { 91 TEST(ExtensionUserScriptTest, ExcludeUrlPattern) {
91 UserScript script; 92 ScriptMetadata script;
92 93
93 URLPattern pattern(kAllSchemes); 94 URLPattern pattern(kAllSchemes);
94 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.nytimes.com/*")); 95 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.nytimes.com/*"));
95 script.add_url_pattern(pattern); 96 script.add_url_pattern(pattern);
96 97
97 URLPattern exclude(kAllSchemes); 98 URLPattern exclude(kAllSchemes);
98 ASSERT_EQ(URLPattern::PARSE_SUCCESS, exclude.Parse("*://*/*business*")); 99 ASSERT_EQ(URLPattern::PARSE_SUCCESS, exclude.Parse("*://*/*business*"));
99 script.add_exclude_url_pattern(exclude); 100 script.add_exclude_url_pattern(exclude);
100 101
101 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com/health"))); 102 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com/health")));
102 EXPECT_FALSE(script.MatchesURL(GURL("http://www.nytimes.com/business"))); 103 EXPECT_FALSE(script.MatchesURL(GURL("http://www.nytimes.com/business")));
103 EXPECT_TRUE(script.MatchesURL(GURL("http://business.nytimes.com"))); 104 EXPECT_TRUE(script.MatchesURL(GURL("http://business.nytimes.com")));
104 } 105 }
105 106
106 TEST(ExtensionUserScriptTest, UrlPatternAndIncludeGlobs) { 107 TEST(ExtensionUserScriptTest, UrlPatternAndIncludeGlobs) {
107 UserScript script; 108 ScriptMetadata script;
108 109
109 URLPattern pattern(kAllSchemes); 110 URLPattern pattern(kAllSchemes);
110 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.nytimes.com/*")); 111 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.nytimes.com/*"));
111 script.add_url_pattern(pattern); 112 script.add_url_pattern(pattern);
112 113
113 script.add_glob("*nytimes.com/???s/*"); 114 script.add_glob("*nytimes.com/???s/*");
114 115
115 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com/arts/1.html"))); 116 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com/arts/1.html")));
116 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com/jobs/1.html"))); 117 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com/jobs/1.html")));
117 EXPECT_FALSE(script.MatchesURL(GURL("http://www.nytimes.com/sports/1.html"))); 118 EXPECT_FALSE(script.MatchesURL(GURL("http://www.nytimes.com/sports/1.html")));
118 } 119 }
119 120
120 TEST(ExtensionUserScriptTest, UrlPatternAndExcludeGlobs) { 121 TEST(ExtensionUserScriptTest, UrlPatternAndExcludeGlobs) {
121 UserScript script; 122 ScriptMetadata script;
122 123
123 URLPattern pattern(kAllSchemes); 124 URLPattern pattern(kAllSchemes);
124 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.nytimes.com/*")); 125 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.nytimes.com/*"));
125 script.add_url_pattern(pattern); 126 script.add_url_pattern(pattern);
126 127
127 script.add_exclude_glob("*science*"); 128 script.add_exclude_glob("*science*");
128 129
129 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com"))); 130 EXPECT_TRUE(script.MatchesURL(GURL("http://www.nytimes.com")));
130 EXPECT_FALSE(script.MatchesURL(GURL("http://science.nytimes.com"))); 131 EXPECT_FALSE(script.MatchesURL(GURL("http://science.nytimes.com")));
131 EXPECT_FALSE(script.MatchesURL(GURL("http://www.nytimes.com/science"))); 132 EXPECT_FALSE(script.MatchesURL(GURL("http://www.nytimes.com/science")));
132 } 133 }
133 134
134 TEST(ExtensionUserScriptTest, UrlPatternGlobInteraction) { 135 TEST(ExtensionUserScriptTest, UrlPatternGlobInteraction) {
135 // If there are both, match intersection(union(globs), union(urlpatterns)). 136 // If there are both, match intersection(union(globs), union(urlpatterns)).
136 UserScript script; 137 ScriptMetadata script;
137 138
138 URLPattern pattern(kAllSchemes); 139 URLPattern pattern(kAllSchemes);
139 ASSERT_EQ(URLPattern::PARSE_SUCCESS, 140 ASSERT_EQ(URLPattern::PARSE_SUCCESS,
140 pattern.Parse("http://www.google.com/*")); 141 pattern.Parse("http://www.google.com/*"));
141 script.add_url_pattern(pattern); 142 script.add_url_pattern(pattern);
142 143
143 script.add_glob("*bar*"); 144 script.add_glob("*bar*");
144 145
145 // No match, because it doesn't match the glob. 146 // No match, because it doesn't match the glob.
146 EXPECT_FALSE(script.MatchesURL(GURL("http://www.google.com/foo"))); 147 EXPECT_FALSE(script.MatchesURL(GURL("http://www.google.com/foo")));
(...skipping 18 matching lines...) Expand all
165 TEST(ExtensionUserScriptTest, Pickle) { 166 TEST(ExtensionUserScriptTest, Pickle) {
166 URLPattern pattern1(kAllSchemes); 167 URLPattern pattern1(kAllSchemes);
167 URLPattern pattern2(kAllSchemes); 168 URLPattern pattern2(kAllSchemes);
168 URLPattern exclude1(kAllSchemes); 169 URLPattern exclude1(kAllSchemes);
169 URLPattern exclude2(kAllSchemes); 170 URLPattern exclude2(kAllSchemes);
170 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern1.Parse("http://*/foo*")); 171 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern1.Parse("http://*/foo*"));
171 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern2.Parse("http://bar/baz*")); 172 ASSERT_EQ(URLPattern::PARSE_SUCCESS, pattern2.Parse("http://bar/baz*"));
172 ASSERT_EQ(URLPattern::PARSE_SUCCESS, exclude1.Parse("*://*/*bar")); 173 ASSERT_EQ(URLPattern::PARSE_SUCCESS, exclude1.Parse("*://*/*bar"));
173 ASSERT_EQ(URLPattern::PARSE_SUCCESS, exclude2.Parse("https://*/*")); 174 ASSERT_EQ(URLPattern::PARSE_SUCCESS, exclude2.Parse("https://*/*"));
174 175
175 UserScript script1; 176 ScriptMetadata script1;
176 script1.js_scripts().push_back(UserScript::File( 177 script1.js_scripts().push_back(base::WrapUnique(
177 base::FilePath(FILE_PATH_LITERAL("c:\\foo\\")), 178 new UserScriptFileInfo(base::FilePath(FILE_PATH_LITERAL("c:\\foo\\")),
178 base::FilePath(FILE_PATH_LITERAL("foo.user.js")), 179 base::FilePath(FILE_PATH_LITERAL("foo.user.js")),
179 GURL("chrome-extension://abc/foo.user.js"))); 180 GURL("chrome-extension://abc/foo.user.js"))));
180 script1.css_scripts().push_back(UserScript::File( 181 script1.css_scripts().push_back(base::WrapUnique(
181 base::FilePath(FILE_PATH_LITERAL("c:\\foo\\")), 182 new UserScriptFileInfo(base::FilePath(FILE_PATH_LITERAL("c:\\foo\\")),
182 base::FilePath(FILE_PATH_LITERAL("foo.user.css")), 183 base::FilePath(FILE_PATH_LITERAL("foo.user.css")),
183 GURL("chrome-extension://abc/foo.user.css"))); 184 GURL("chrome-extension://abc/foo.user.css"))));
184 script1.css_scripts().push_back(UserScript::File( 185 script1.css_scripts().push_back(base::WrapUnique(
185 base::FilePath(FILE_PATH_LITERAL("c:\\foo\\")), 186 new UserScriptFileInfo(base::FilePath(FILE_PATH_LITERAL("c:\\foo\\")),
186 base::FilePath(FILE_PATH_LITERAL("foo2.user.css")), 187 base::FilePath(FILE_PATH_LITERAL("foo2.user.css")),
187 GURL("chrome-extension://abc/foo2.user.css"))); 188 GURL("chrome-extension://abc/foo2.user.css"))));
188 script1.set_run_location(UserScript::DOCUMENT_START); 189 script1.set_run_location(UserScript::DOCUMENT_START);
189 190
190 script1.add_url_pattern(pattern1); 191 script1.add_url_pattern(pattern1);
191 script1.add_url_pattern(pattern2); 192 script1.add_url_pattern(pattern2);
192 script1.add_exclude_url_pattern(exclude1); 193 script1.add_exclude_url_pattern(exclude1);
193 script1.add_exclude_url_pattern(exclude2); 194 script1.add_exclude_url_pattern(exclude2);
194 195
195 const int64_t kId = 12; 196 const int64_t kId = 12;
196 script1.set_id(kId); 197 script1.set_id(kId);
197 const std::string kExtensionId = "foo"; 198 const std::string kExtensionId = "foo";
198 HostID id(HostID::EXTENSIONS, kExtensionId); 199 HostID id(HostID::EXTENSIONS, kExtensionId);
199 script1.set_host_id(id); 200 script1.set_host_id(id);
200 201
201 base::Pickle pickle; 202 base::Pickle pickle;
202 script1.Pickle(&pickle); 203 // Pickle script.
204 {
205 // Only browser/ side (BrowserUserScript) and renderer/ side
206 // (RendererUserScript) implementation of user script is (de)serializable,
207 // ScriptMetadata is common/, so pickle it manually.
208 static_cast<UserScriptInfo*>(&script1)->Pickle(&pickle);
209 static_cast<UserScriptFiles<UserScriptFileInfo>*>(&script1)->PickleFiles(
210 &pickle);
211 }
203 212
204 base::PickleIterator iter(pickle); 213 base::PickleIterator iter(pickle);
205 UserScript script2; 214 ScriptMetadata script2;
206 script2.Unpickle(pickle, &iter); 215 {
216 // Same as Pickle step above, unpickle this manually.
217 static_cast<UserScriptInfo*>(&script2)->Unpickle(pickle, &iter);
218 static_cast<UserScriptFiles<UserScriptFileInfo>*>(&script2)->UnpickleFiles(
219 pickle, &iter);
220 }
207 221
208 EXPECT_EQ(1U, script2.js_scripts().size()); 222 EXPECT_EQ(1U, script2.js_scripts().size());
209 EXPECT_EQ(script1.js_scripts()[0].url(), script2.js_scripts()[0].url()); 223 EXPECT_EQ(script1.js_scripts()[0]->url(), script2.js_scripts()[0]->url());
210 224
211 EXPECT_EQ(2U, script2.css_scripts().size()); 225 EXPECT_EQ(2U, script2.css_scripts().size());
212 for (size_t i = 0; i < script2.js_scripts().size(); ++i) { 226 for (size_t i = 0; i < script2.js_scripts().size(); ++i) {
213 EXPECT_EQ(script1.css_scripts()[i].url(), script2.css_scripts()[i].url()); 227 EXPECT_EQ(script1.css_scripts()[i]->url(), script2.css_scripts()[i]->url());
214 } 228 }
215 229
216 ASSERT_EQ(script1.globs().size(), script2.globs().size()); 230 ASSERT_EQ(script1.globs().size(), script2.globs().size());
217 for (size_t i = 0; i < script1.globs().size(); ++i) { 231 for (size_t i = 0; i < script1.globs().size(); ++i) {
218 EXPECT_EQ(script1.globs()[i], script2.globs()[i]); 232 EXPECT_EQ(script1.globs()[i], script2.globs()[i]);
219 } 233 }
220 234
221 ASSERT_EQ(script1.url_patterns(), script2.url_patterns()); 235 ASSERT_EQ(script1.url_patterns(), script2.url_patterns());
222 ASSERT_EQ(script1.exclude_url_patterns(), script2.exclude_url_patterns()); 236 ASSERT_EQ(script1.exclude_url_patterns(), script2.exclude_url_patterns());
223 237
224 EXPECT_EQ(kExtensionId, script2.extension_id()); 238 EXPECT_EQ(kExtensionId, script2.extension_id());
225 EXPECT_EQ(kId, script2.id()); 239 EXPECT_EQ(kId, script2.id());
226 } 240 }
227 241
228 TEST(ExtensionUserScriptTest, Defaults) { 242 TEST(ExtensionUserScriptTest, Defaults) {
229 UserScript script; 243 ScriptMetadata script;
230 ASSERT_EQ(UserScript::DOCUMENT_IDLE, script.run_location()); 244 ASSERT_EQ(UserScript::DOCUMENT_IDLE, script.run_location());
231 } 245 }
232 246
233 } // namespace extensions 247 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698