blob: 247a74f69d58972e772c56e270a7809788794325 [file] [log] [blame]
[email protected]b9535422012-02-09 01:47:591// Copyright (c) 2012 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
[email protected]46fb9442011-12-09 17:57:475#include <set>
initial.commit09911bf2008-07-26 23:55:296#include <string>
7
8#include "base/basictypes.h"
[email protected]57999812013-02-24 05:40:529#include "base/files/file_path.h"
[email protected]e54edc32010-09-28 01:09:1910#include "base/platform_file.h"
[email protected]b9535422012-02-09 01:47:5911#include "content/browser/child_process_security_policy_impl.h"
[email protected]a1d29162011-10-14 17:14:0312#include "content/public/common/url_constants.h"
[email protected]c6681f32012-06-05 14:43:0113#include "content/test/test_content_browser_client.h"
initial.commit09911bf2008-07-26 23:55:2914#include "testing/gtest/include/gtest/gtest.h"
[email protected]707e1c42013-07-09 21:18:5815#include "url/gurl.h"
[email protected]9f104312013-07-23 23:18:1916#include "webkit/browser/fileapi/file_permission_policy.h"
17#include "webkit/browser/fileapi/file_system_url.h"
[email protected]b78c188fa62013-07-23 18:04:4518#include "webkit/browser/fileapi/isolated_context.h"
[email protected]9f104312013-07-23 23:18:1919#include "webkit/common/fileapi/file_system_types.h"
initial.commit09911bf2008-07-26 23:55:2920
[email protected]46488322012-10-30 03:22:2021namespace content {
[email protected]46fb9442011-12-09 17:57:4722namespace {
23
24const int kRendererID = 42;
25const int kWorkerRendererID = kRendererID + 1;
26
[email protected]f0ecca4522013-01-07 21:50:5627#if defined(FILE_PATH_USES_DRIVE_LETTERS)
28#define TEST_PATH(x) FILE_PATH_LITERAL("c:") FILE_PATH_LITERAL(x)
29#else
30#define TEST_PATH(x) FILE_PATH_LITERAL(x)
31#endif
32
[email protected]46fb9442011-12-09 17:57:4733class ChildProcessSecurityPolicyTestBrowserClient
[email protected]46488322012-10-30 03:22:2034 : public TestContentBrowserClient {
[email protected]46fb9442011-12-09 17:57:4735 public:
36 ChildProcessSecurityPolicyTestBrowserClient() {}
37
[email protected]c3e35892013-02-12 02:08:0138 virtual bool IsHandledURL(const GURL& url) OVERRIDE {
[email protected]46fb9442011-12-09 17:57:4739 return schemes_.find(url.scheme()) != schemes_.end();
[email protected]e3539402011-07-19 09:31:0840 }
41
[email protected]46fb9442011-12-09 17:57:4742 void ClearSchemes() {
43 schemes_.clear();
initial.commit09911bf2008-07-26 23:55:2944 }
[email protected]46fb9442011-12-09 17:57:4745
46 void AddScheme(const std::string& scheme) {
47 schemes_.insert(scheme);
48 }
49
50 private:
51 std::set<std::string> schemes_;
initial.commit09911bf2008-07-26 23:55:2952};
53
[email protected]46fb9442011-12-09 17:57:4754} // namespace
55
56class ChildProcessSecurityPolicyTest : public testing::Test {
57 public:
58 ChildProcessSecurityPolicyTest() : old_browser_client_(NULL) {
59 }
60
61 virtual void SetUp() {
[email protected]eabbfb12013-04-05 23:28:3562 old_browser_client_ = SetBrowserClientForTesting(&test_browser_client_);
[email protected]46fb9442011-12-09 17:57:4763
64 // Claim to always handle chrome:// URLs because the CPSP's notion of
65 // allowing WebUI bindings is hard-wired to this particular scheme.
[email protected]e0f35c92013-05-08 16:04:3466 test_browser_client_.AddScheme(chrome::kChromeUIScheme);
67
68 // Claim to always handle file:// URLs like the browser would.
69 // net::URLRequest::IsHandledURL() no longer claims support for default
70 // protocols as this is the responsibility of the browser (which is
71 // responsible for adding the appropriate ProtocolHandler).
72 test_browser_client_.AddScheme(chrome::kFileScheme);
[email protected]46fb9442011-12-09 17:57:4773 }
74
75 virtual void TearDown() {
76 test_browser_client_.ClearSchemes();
[email protected]eabbfb12013-04-05 23:28:3577 SetBrowserClientForTesting(old_browser_client_);
[email protected]46fb9442011-12-09 17:57:4778 }
79
80 protected:
81 void RegisterTestScheme(const std::string& scheme) {
82 test_browser_client_.AddScheme(scheme);
83 }
84
[email protected]bfcf1e92013-07-11 04:37:2585 void GrantPermissionsForFile(ChildProcessSecurityPolicyImpl* p,
86 int child_id,
87 const base::FilePath& file,
88 int permissions) {
89 p->GrantPermissionsForFile(child_id, file, permissions);
90 }
91
[email protected]46fb9442011-12-09 17:57:4792 private:
93 ChildProcessSecurityPolicyTestBrowserClient test_browser_client_;
[email protected]46488322012-10-30 03:22:2094 ContentBrowserClient* old_browser_client_;
[email protected]46fb9442011-12-09 17:57:4795};
initial.commit09911bf2008-07-26 23:55:2996
[email protected]9f104312013-07-23 23:18:1997
[email protected]f58ddcf2009-05-18 22:22:0698TEST_F(ChildProcessSecurityPolicyTest, IsWebSafeSchemeTest) {
[email protected]b9535422012-02-09 01:47:5999 ChildProcessSecurityPolicyImpl* p =
100 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29101
[email protected]e9a82042013-09-15 03:38:29102 EXPECT_TRUE(p->IsWebSafeScheme(kHttpScheme));
[email protected]4654bfe2013-08-26 03:36:58103 EXPECT_TRUE(p->IsWebSafeScheme(kHttpsScheme));
[email protected]e0d481582009-09-15 21:06:25104 EXPECT_TRUE(p->IsWebSafeScheme(chrome::kFtpScheme));
105 EXPECT_TRUE(p->IsWebSafeScheme(chrome::kDataScheme));
initial.commit09911bf2008-07-26 23:55:29106 EXPECT_TRUE(p->IsWebSafeScheme("feed"));
[email protected]039c7b0b22011-03-04 23:15:42107 EXPECT_TRUE(p->IsWebSafeScheme(chrome::kBlobScheme));
108 EXPECT_TRUE(p->IsWebSafeScheme(chrome::kFileSystemScheme));
initial.commit09911bf2008-07-26 23:55:29109
110 EXPECT_FALSE(p->IsWebSafeScheme("registered-web-safe-scheme"));
111 p->RegisterWebSafeScheme("registered-web-safe-scheme");
112 EXPECT_TRUE(p->IsWebSafeScheme("registered-web-safe-scheme"));
[email protected]89f550b2011-06-08 18:34:03113
114 EXPECT_FALSE(p->IsWebSafeScheme(chrome::kChromeUIScheme));
initial.commit09911bf2008-07-26 23:55:29115}
116
[email protected]f58ddcf2009-05-18 22:22:06117TEST_F(ChildProcessSecurityPolicyTest, IsPseudoSchemeTest) {
[email protected]b9535422012-02-09 01:47:59118 ChildProcessSecurityPolicyImpl* p =
119 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29120
[email protected]e0d481582009-09-15 21:06:25121 EXPECT_TRUE(p->IsPseudoScheme(chrome::kAboutScheme));
[email protected]44b05812013-08-19 07:59:35122 EXPECT_TRUE(p->IsPseudoScheme(kJavaScriptScheme));
[email protected]dbdda5402013-05-30 22:13:48123 EXPECT_TRUE(p->IsPseudoScheme(kViewSourceScheme));
initial.commit09911bf2008-07-26 23:55:29124
[email protected]419a0572011-04-18 22:21:46125 EXPECT_FALSE(p->IsPseudoScheme("registered-pseudo-scheme"));
126 p->RegisterPseudoScheme("registered-pseudo-scheme");
127 EXPECT_TRUE(p->IsPseudoScheme("registered-pseudo-scheme"));
[email protected]89f550b2011-06-08 18:34:03128
129 EXPECT_FALSE(p->IsPseudoScheme(chrome::kChromeUIScheme));
[email protected]419a0572011-04-18 22:21:46130}
131
[email protected]f58ddcf2009-05-18 22:22:06132TEST_F(ChildProcessSecurityPolicyTest, StandardSchemesTest) {
[email protected]b9535422012-02-09 01:47:59133 ChildProcessSecurityPolicyImpl* p =
134 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29135
136 p->Add(kRendererID);
137
138 // Safe
139 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("http://www.google.com/")));
140 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("https://www.paypal.com/")));
141 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("ftp://ftp.gnu.org/")));
142 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("data:text/html,<b>Hi</b>")));
143 EXPECT_TRUE(p->CanRequestURL(kRendererID,
144 GURL("view-source:http://www.google.com/")));
[email protected]039c7b0b22011-03-04 23:15:42145 EXPECT_TRUE(p->CanRequestURL(
146 kRendererID, GURL("filesystem:http://localhost/temporary/a.gif")));
initial.commit09911bf2008-07-26 23:55:29147
148 // Dangerous
149 EXPECT_FALSE(p->CanRequestURL(kRendererID,
150 GURL("file:///etc/passwd")));
151 EXPECT_FALSE(p->CanRequestURL(kRendererID,
[email protected]60e448982009-05-06 04:21:16152 GURL("chrome://foo/bar")));
initial.commit09911bf2008-07-26 23:55:29153
154 p->Remove(kRendererID);
155}
156
[email protected]f58ddcf2009-05-18 22:22:06157TEST_F(ChildProcessSecurityPolicyTest, AboutTest) {
[email protected]b9535422012-02-09 01:47:59158 ChildProcessSecurityPolicyImpl* p =
159 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29160
161 p->Add(kRendererID);
162
163 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("about:blank")));
164 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("about:BlAnK")));
165 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("aBouT:BlAnK")));
166 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("aBouT:blank")));
167
[email protected]ed3456f2009-02-26 20:24:48168 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("about:memory")));
169 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("about:crash")));
170 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("about:cache")));
171 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("about:hang")));
initial.commit09911bf2008-07-26 23:55:29172
173 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("aBoUt:memory")));
174 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("about:CrASh")));
175 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("abOuT:cAChe")));
176
[email protected]8bf1048012012-02-08 01:22:18177 // Requests for about: pages should be denied.
178 p->GrantRequestURL(kRendererID, GURL("about:crash"));
179 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("about:crash")));
initial.commit09911bf2008-07-26 23:55:29180
[email protected]89f550b2011-06-08 18:34:03181 // These requests for chrome:// pages should be granted.
[email protected]e068c2d2012-10-23 16:45:18182 GURL chrome_url("chrome://foo");
183 p->GrantRequestURL(kRendererID, chrome_url);
184 EXPECT_TRUE(p->CanRequestURL(kRendererID, chrome_url));
[email protected]89f550b2011-06-08 18:34:03185
initial.commit09911bf2008-07-26 23:55:29186 p->Remove(kRendererID);
187}
188
[email protected]f58ddcf2009-05-18 22:22:06189TEST_F(ChildProcessSecurityPolicyTest, JavaScriptTest) {
[email protected]b9535422012-02-09 01:47:59190 ChildProcessSecurityPolicyImpl* p =
191 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29192
193 p->Add(kRendererID);
194
195 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("javascript:alert('xss')")));
196 p->GrantRequestURL(kRendererID, GURL("javascript:alert('xss')"));
197 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("javascript:alert('xss')")));
198
199 p->Remove(kRendererID);
200}
201
[email protected]f58ddcf2009-05-18 22:22:06202TEST_F(ChildProcessSecurityPolicyTest, RegisterWebSafeSchemeTest) {
[email protected]b9535422012-02-09 01:47:59203 ChildProcessSecurityPolicyImpl* p =
204 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29205
206 p->Add(kRendererID);
207
208 // Currently, "asdf" is destined for ShellExecute, so it is allowed.
209 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("asdf:rockers")));
210
[email protected]46fb9442011-12-09 17:57:47211 // Once we register "asdf", we default to deny.
212 RegisterTestScheme("asdf");
initial.commit09911bf2008-07-26 23:55:29213 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("asdf:rockers")));
214
215 // We can allow new schemes by adding them to the whitelist.
216 p->RegisterWebSafeScheme("asdf");
217 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("asdf:rockers")));
218
219 // Cleanup.
initial.commit09911bf2008-07-26 23:55:29220 p->Remove(kRendererID);
221}
222
[email protected]f58ddcf2009-05-18 22:22:06223TEST_F(ChildProcessSecurityPolicyTest, CanServiceCommandsTest) {
[email protected]b9535422012-02-09 01:47:59224 ChildProcessSecurityPolicyImpl* p =
225 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29226
227 p->Add(kRendererID);
228
229 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("file:///etc/passwd")));
230 p->GrantRequestURL(kRendererID, GURL("file:///etc/passwd"));
231 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("file:///etc/passwd")));
232
233 // We should forget our state if we repeat a renderer id.
234 p->Remove(kRendererID);
235 p->Add(kRendererID);
236 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("file:///etc/passwd")));
237 p->Remove(kRendererID);
238}
239
[email protected]f58ddcf2009-05-18 22:22:06240TEST_F(ChildProcessSecurityPolicyTest, ViewSource) {
[email protected]b9535422012-02-09 01:47:59241 ChildProcessSecurityPolicyImpl* p =
242 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29243
244 p->Add(kRendererID);
245
246 // View source is determined by the embedded scheme.
247 EXPECT_TRUE(p->CanRequestURL(kRendererID,
248 GURL("view-source:http://www.google.com/")));
249 EXPECT_FALSE(p->CanRequestURL(kRendererID,
250 GURL("view-source:file:///etc/passwd")));
251 EXPECT_FALSE(p->CanRequestURL(kRendererID, GURL("file:///etc/passwd")));
[email protected]690d0a9172010-01-06 00:19:36252 EXPECT_FALSE(p->CanRequestURL(
253 kRendererID, GURL("view-source:view-source:http://www.google.com/")));
initial.commit09911bf2008-07-26 23:55:29254
255 p->GrantRequestURL(kRendererID, GURL("view-source:file:///etc/passwd"));
256 // View source needs to be able to request the embedded scheme.
257 EXPECT_TRUE(p->CanRequestURL(kRendererID,
258 GURL("view-source:file:///etc/passwd")));
259 EXPECT_TRUE(p->CanRequestURL(kRendererID, GURL("file:///etc/passwd")));
260
261 p->Remove(kRendererID);
262}
263
[email protected]dc67e1c32012-06-08 00:10:40264TEST_F(ChildProcessSecurityPolicyTest, SpecificFile) {
265 ChildProcessSecurityPolicyImpl* p =
266 ChildProcessSecurityPolicyImpl::GetInstance();
267
268 p->Add(kRendererID);
269
270 GURL icon_url("file:///tmp/foo.png");
271 GURL sensitive_url("file:///etc/passwd");
272 EXPECT_FALSE(p->CanRequestURL(kRendererID, icon_url));
273 EXPECT_FALSE(p->CanRequestURL(kRendererID, sensitive_url));
274
275 p->GrantRequestSpecificFileURL(kRendererID, icon_url);
276 EXPECT_TRUE(p->CanRequestURL(kRendererID, icon_url));
277 EXPECT_FALSE(p->CanRequestURL(kRendererID, sensitive_url));
278
279 p->GrantRequestURL(kRendererID, icon_url);
280 EXPECT_TRUE(p->CanRequestURL(kRendererID, icon_url));
281 EXPECT_TRUE(p->CanRequestURL(kRendererID, sensitive_url));
282
283 p->Remove(kRendererID);
284}
285
[email protected]b78c188fa62013-07-23 18:04:45286TEST_F(ChildProcessSecurityPolicyTest, FileSystemGrantsTest) {
287 ChildProcessSecurityPolicyImpl* p =
288 ChildProcessSecurityPolicyImpl::GetInstance();
289
290 p->Add(kRendererID);
291 std::string read_id = fileapi::IsolatedContext::GetInstance()->
292 RegisterFileSystemForVirtualPath(fileapi::kFileSystemTypeTest,
293 "read_filesystem",
294 base::FilePath());
295 std::string read_write_id = fileapi::IsolatedContext::GetInstance()->
296 RegisterFileSystemForVirtualPath(fileapi::kFileSystemTypeTest,
297 "read_write_filesystem",
298 base::FilePath());
299 std::string copy_into_id = fileapi::IsolatedContext::GetInstance()->
300 RegisterFileSystemForVirtualPath(fileapi::kFileSystemTypeTest,
301 "copy_into_filesystem",
302 base::FilePath());
303
304 // Test initially having no permissions.
305 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, read_id));
306 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, read_id));
307 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_id));
308
309 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, read_write_id));
310 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, read_write_id));
311 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_write_id));
312
313 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, copy_into_id));
314 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, copy_into_id));
315 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, copy_into_id));
316
317 // Testing varying combinations of grants and checks.
318 p->GrantReadFileSystem(kRendererID, read_id);
319 EXPECT_TRUE(p->CanReadFileSystem(kRendererID, read_id));
320 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, read_id));
321 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_id));
322
323 p->GrantReadFileSystem(kRendererID, read_write_id);
324 p->GrantWriteFileSystem(kRendererID, read_write_id);
325 EXPECT_TRUE(p->CanReadFileSystem(kRendererID, read_write_id));
326 EXPECT_TRUE(p->CanReadWriteFileSystem(kRendererID, read_write_id));
327 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_write_id));
328
329 p->GrantCopyIntoFileSystem(kRendererID, copy_into_id);
330 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, copy_into_id));
331 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, copy_into_id));
332 EXPECT_TRUE(p->CanCopyIntoFileSystem(kRendererID, copy_into_id));
333
334 // Test revoke permissions on renderer ID removal.
335 p->Remove(kRendererID);
336 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, read_id));
337 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, read_id));
338 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_id));
339
340 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, read_write_id));
341 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, read_write_id));
342 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_write_id));
343
344 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, copy_into_id));
345 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, copy_into_id));
346 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, copy_into_id));
347
348 // Test having no permissions upon re-adding same renderer ID.
349 p->Add(kRendererID);
350 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, read_id));
351 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, read_id));
352 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_id));
353
354 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, read_write_id));
355 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, read_write_id));
356 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, read_write_id));
357
358 EXPECT_FALSE(p->CanReadFileSystem(kRendererID, copy_into_id));
359 EXPECT_FALSE(p->CanReadWriteFileSystem(kRendererID, copy_into_id));
360 EXPECT_FALSE(p->CanCopyIntoFileSystem(kRendererID, copy_into_id));
361
362 // Cleanup.
363 p->Remove(kRendererID);
364 fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(read_id);
365 fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(read_write_id);
366 fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(copy_into_id);
367}
368
[email protected]9f104312013-07-23 23:18:19369TEST_F(ChildProcessSecurityPolicyTest, FilePermissionGrantingAndRevoking) {
[email protected]b9535422012-02-09 01:47:59370 ChildProcessSecurityPolicyImpl* p =
371 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29372
[email protected]9f104312013-07-23 23:18:19373 p->RegisterFileSystemPermissionPolicy(
374 fileapi::kFileSystemTypeTest,
375 fileapi::FILE_PERMISSION_USE_FILE_PERMISSION);
376
initial.commit09911bf2008-07-26 23:55:29377 p->Add(kRendererID);
[email protected]9f104312013-07-23 23:18:19378 base::FilePath file(TEST_PATH("/dir/testfile"));
379 file = file.NormalizePathSeparators();
380 fileapi::FileSystemURL url = fileapi::FileSystemURL::CreateForTest(
381 GURL("http://foo/"), fileapi::kFileSystemTypeTest, file);
initial.commit09911bf2008-07-26 23:55:29382
[email protected]9f104312013-07-23 23:18:19383 // Test initially having no permissions.
384 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
385 EXPECT_FALSE(p->CanWriteFile(kRendererID, file));
386 EXPECT_FALSE(p->CanCreateFile(kRendererID, file));
387 EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file));
388 EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url));
389 EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url));
390 EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url));
391 EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url));
initial.commit09911bf2008-07-26 23:55:29392
[email protected]9f104312013-07-23 23:18:19393 // Testing every combination of permissions granting and revoking.
394 p->GrantReadFile(kRendererID, file);
395 EXPECT_TRUE(p->CanReadFile(kRendererID, file));
396 EXPECT_FALSE(p->CanWriteFile(kRendererID, file));
397 EXPECT_FALSE(p->CanCreateFile(kRendererID, file));
398 EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file));
399 EXPECT_TRUE(p->CanReadFileSystemFile(kRendererID, url));
400 EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url));
401 EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url));
402 EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url));
403 p->RevokeAllPermissionsForFile(kRendererID, file);
404 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
405 EXPECT_FALSE(p->CanWriteFile(kRendererID, file));
406 EXPECT_FALSE(p->CanCreateFile(kRendererID, file));
407 EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file));
408 EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url));
409 EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url));
410 EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url));
411 EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url));
412
413 p->GrantCreateReadWriteFile(kRendererID, file);
414 EXPECT_TRUE(p->CanReadFile(kRendererID, file));
415 EXPECT_TRUE(p->CanWriteFile(kRendererID, file));
416 EXPECT_TRUE(p->CanCreateFile(kRendererID, file));
417 EXPECT_TRUE(p->CanCreateWriteFile(kRendererID, file));
418 EXPECT_TRUE(p->CanReadFileSystemFile(kRendererID, url));
419 EXPECT_TRUE(p->CanWriteFileSystemFile(kRendererID, url));
420 EXPECT_TRUE(p->CanCreateFileSystemFile(kRendererID, url));
421 EXPECT_TRUE(p->CanCreateWriteFileSystemFile(kRendererID, url));
422 p->RevokeAllPermissionsForFile(kRendererID, file);
423 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
424 EXPECT_FALSE(p->CanWriteFile(kRendererID, file));
425 EXPECT_FALSE(p->CanCreateFile(kRendererID, file));
426 EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file));
427 EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url));
428 EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url));
429 EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url));
430 EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url));
431
432 p->GrantCreateWriteFile(kRendererID, file);
433 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
434 EXPECT_TRUE(p->CanWriteFile(kRendererID, file));
435 EXPECT_TRUE(p->CanCreateFile(kRendererID, file));
436 EXPECT_TRUE(p->CanCreateWriteFile(kRendererID, file));
437 EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url));
438 EXPECT_TRUE(p->CanWriteFileSystemFile(kRendererID, url));
439 EXPECT_TRUE(p->CanCreateFileSystemFile(kRendererID, url));
440 EXPECT_TRUE(p->CanCreateWriteFileSystemFile(kRendererID, url));
441 p->RevokeAllPermissionsForFile(kRendererID, file);
442 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
443 EXPECT_FALSE(p->CanWriteFile(kRendererID, file));
444 EXPECT_FALSE(p->CanCreateFile(kRendererID, file));
445 EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file));
446 EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url));
447 EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url));
448 EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url));
449 EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url));
450
451 // Test revoke permissions on renderer ID removal.
452 p->GrantCreateReadWriteFile(kRendererID, file);
453 EXPECT_TRUE(p->CanReadFile(kRendererID, file));
454 EXPECT_TRUE(p->CanWriteFile(kRendererID, file));
455 EXPECT_TRUE(p->CanCreateFile(kRendererID, file));
456 EXPECT_TRUE(p->CanCreateWriteFile(kRendererID, file));
457 EXPECT_TRUE(p->CanReadFileSystemFile(kRendererID, url));
458 EXPECT_TRUE(p->CanWriteFileSystemFile(kRendererID, url));
459 EXPECT_TRUE(p->CanCreateFileSystemFile(kRendererID, url));
460 EXPECT_TRUE(p->CanCreateWriteFileSystemFile(kRendererID, url));
initial.commit09911bf2008-07-26 23:55:29461 p->Remove(kRendererID);
[email protected]9f104312013-07-23 23:18:19462 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
463 EXPECT_FALSE(p->CanWriteFile(kRendererID, file));
464 EXPECT_FALSE(p->CanCreateFile(kRendererID, file));
465 EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file));
466 EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url));
467 EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url));
468 EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url));
469 EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url));
470
471 // Test having no permissions upon re-adding same renderer ID.
initial.commit09911bf2008-07-26 23:55:29472 p->Add(kRendererID);
[email protected]9f104312013-07-23 23:18:19473 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
474 EXPECT_FALSE(p->CanWriteFile(kRendererID, file));
475 EXPECT_FALSE(p->CanCreateFile(kRendererID, file));
476 EXPECT_FALSE(p->CanCreateWriteFile(kRendererID, file));
477 EXPECT_FALSE(p->CanReadFileSystemFile(kRendererID, url));
478 EXPECT_FALSE(p->CanWriteFileSystemFile(kRendererID, url));
479 EXPECT_FALSE(p->CanCreateFileSystemFile(kRendererID, url));
480 EXPECT_FALSE(p->CanCreateWriteFileSystemFile(kRendererID, url));
initial.commit09911bf2008-07-26 23:55:29481
[email protected]9f104312013-07-23 23:18:19482 // Cleanup.
initial.commit09911bf2008-07-26 23:55:29483 p->Remove(kRendererID);
484}
485
[email protected]600ea402011-04-12 00:01:51486TEST_F(ChildProcessSecurityPolicyTest, CanReadDirectories) {
[email protected]b9535422012-02-09 01:47:59487 ChildProcessSecurityPolicyImpl* p =
488 ChildProcessSecurityPolicyImpl::GetInstance();
[email protected]600ea402011-04-12 00:01:51489
490 p->Add(kRendererID);
491
[email protected]2dec8ec2013-02-07 19:20:34492 EXPECT_FALSE(p->CanReadDirectory(kRendererID,
493 base::FilePath(TEST_PATH("/etc/"))));
494 p->GrantReadDirectory(kRendererID,
495 base::FilePath(TEST_PATH("/etc/")));
496 EXPECT_TRUE(p->CanReadDirectory(kRendererID,
497 base::FilePath(TEST_PATH("/etc/"))));
498 EXPECT_TRUE(p->CanReadFile(kRendererID,
499 base::FilePath(TEST_PATH("/etc/passwd"))));
[email protected]600ea402011-04-12 00:01:51500
501 p->Remove(kRendererID);
502 p->Add(kRendererID);
503
[email protected]2dec8ec2013-02-07 19:20:34504 EXPECT_FALSE(p->CanReadDirectory(kRendererID,
505 base::FilePath(TEST_PATH("/etc/"))));
506 EXPECT_FALSE(p->CanReadFile(kRendererID,
507 base::FilePath(TEST_PATH("/etc/passwd"))));
[email protected]600ea402011-04-12 00:01:51508
509 // Just granting read permission as a file doesn't imply reading as a
510 // directory.
[email protected]2dec8ec2013-02-07 19:20:34511 p->GrantReadFile(kRendererID, base::FilePath(TEST_PATH("/etc/")));
512 EXPECT_TRUE(p->CanReadFile(kRendererID,
513 base::FilePath(TEST_PATH("/etc/passwd"))));
514 EXPECT_FALSE(p->CanReadDirectory(kRendererID,
515 base::FilePath(TEST_PATH("/etc/"))));
[email protected]600ea402011-04-12 00:01:51516
517 p->Remove(kRendererID);
518}
519
[email protected]e54edc32010-09-28 01:09:19520TEST_F(ChildProcessSecurityPolicyTest, FilePermissions) {
[email protected]c42de732013-02-16 06:26:31521 base::FilePath granted_file = base::FilePath(TEST_PATH("/home/joe"));
522 base::FilePath sibling_file = base::FilePath(TEST_PATH("/home/bob"));
523 base::FilePath child_file = base::FilePath(TEST_PATH("/home/joe/file"));
524 base::FilePath parent_file = base::FilePath(TEST_PATH("/home"));
525 base::FilePath parent_slash_file = base::FilePath(TEST_PATH("/home/"));
526 base::FilePath child_traversal1 =
527 base::FilePath(TEST_PATH("/home/joe/././file"));
528 base::FilePath child_traversal2 = base::FilePath(
[email protected]f0ecca4522013-01-07 21:50:56529 TEST_PATH("/home/joe/file/../otherfile"));
[email protected]2dec8ec2013-02-07 19:20:34530 base::FilePath evil_traversal1 =
[email protected]023ad6ab2013-02-17 05:07:23531 base::FilePath(TEST_PATH("/home/joe/../../etc/passwd"));
[email protected]c42de732013-02-16 06:26:31532 base::FilePath evil_traversal2 = base::FilePath(
[email protected]f0ecca4522013-01-07 21:50:56533 TEST_PATH("/home/joe/./.././../etc/passwd"));
[email protected]c42de732013-02-16 06:26:31534 base::FilePath self_traversal =
535 base::FilePath(TEST_PATH("/home/joe/../joe/file"));
536 base::FilePath relative_file = base::FilePath(FILE_PATH_LITERAL("home/joe"));
[email protected]80838412012-11-20 01:53:59537
[email protected]b9535422012-02-09 01:47:59538 ChildProcessSecurityPolicyImpl* p =
539 ChildProcessSecurityPolicyImpl::GetInstance();
[email protected]e54edc32010-09-28 01:09:19540
541 // Grant permissions for a file.
542 p->Add(kRendererID);
[email protected]80838412012-11-20 01:53:59543 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19544 base::PLATFORM_FILE_OPEN));
545
[email protected]bfcf1e92013-07-11 04:37:25546 GrantPermissionsForFile(p, kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19547 base::PLATFORM_FILE_OPEN |
[email protected]b2f2308d2011-05-23 22:00:04548 base::PLATFORM_FILE_OPEN_TRUNCATED |
[email protected]e54edc32010-09-28 01:09:19549 base::PLATFORM_FILE_READ |
[email protected]b2f2308d2011-05-23 22:00:04550 base::PLATFORM_FILE_WRITE);
[email protected]80838412012-11-20 01:53:59551 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19552 base::PLATFORM_FILE_OPEN |
[email protected]b2f2308d2011-05-23 22:00:04553 base::PLATFORM_FILE_OPEN_TRUNCATED |
[email protected]e54edc32010-09-28 01:09:19554 base::PLATFORM_FILE_READ |
[email protected]b2f2308d2011-05-23 22:00:04555 base::PLATFORM_FILE_WRITE));
[email protected]80838412012-11-20 01:53:59556 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19557 base::PLATFORM_FILE_OPEN |
558 base::PLATFORM_FILE_READ));
[email protected]80838412012-11-20 01:53:59559 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19560 base::PLATFORM_FILE_CREATE));
[email protected]f0ecca4522013-01-07 21:50:56561 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, 0));
[email protected]80838412012-11-20 01:53:59562 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19563 base::PLATFORM_FILE_CREATE |
[email protected]b2f2308d2011-05-23 22:00:04564 base::PLATFORM_FILE_OPEN_TRUNCATED |
[email protected]e54edc32010-09-28 01:09:19565 base::PLATFORM_FILE_READ |
[email protected]b2f2308d2011-05-23 22:00:04566 base::PLATFORM_FILE_WRITE));
[email protected]80838412012-11-20 01:53:59567 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, sibling_file,
568 base::PLATFORM_FILE_OPEN |
569 base::PLATFORM_FILE_READ));
570 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, parent_file,
571 base::PLATFORM_FILE_OPEN |
572 base::PLATFORM_FILE_READ));
573 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, child_file,
574 base::PLATFORM_FILE_OPEN |
575 base::PLATFORM_FILE_READ));
576 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, child_traversal1,
577 base::PLATFORM_FILE_OPEN |
578 base::PLATFORM_FILE_READ));
579 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, child_traversal2,
580 base::PLATFORM_FILE_OPEN |
581 base::PLATFORM_FILE_READ));
582 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, evil_traversal1,
583 base::PLATFORM_FILE_OPEN |
584 base::PLATFORM_FILE_READ));
585 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, evil_traversal2,
586 base::PLATFORM_FILE_OPEN |
587 base::PLATFORM_FILE_READ));
588 // CPSP doesn't allow this case for the sake of simplicity.
589 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, self_traversal,
590 base::PLATFORM_FILE_OPEN |
591 base::PLATFORM_FILE_READ));
[email protected]e54edc32010-09-28 01:09:19592 p->Remove(kRendererID);
593
594 // Grant permissions for the directory the file is in.
595 p->Add(kRendererID);
[email protected]80838412012-11-20 01:53:59596 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19597 base::PLATFORM_FILE_OPEN));
[email protected]bfcf1e92013-07-11 04:37:25598 GrantPermissionsForFile(p, kRendererID, parent_file,
[email protected]e54edc32010-09-28 01:09:19599 base::PLATFORM_FILE_OPEN |
600 base::PLATFORM_FILE_READ);
[email protected]80838412012-11-20 01:53:59601 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19602 base::PLATFORM_FILE_OPEN));
[email protected]80838412012-11-20 01:53:59603 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19604 base::PLATFORM_FILE_READ |
605 base::PLATFORM_FILE_WRITE));
606 p->Remove(kRendererID);
607
608 // Grant permissions for the directory the file is in (with trailing '/').
609 p->Add(kRendererID);
[email protected]80838412012-11-20 01:53:59610 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19611 base::PLATFORM_FILE_OPEN));
[email protected]bfcf1e92013-07-11 04:37:25612 GrantPermissionsForFile(p, kRendererID, parent_slash_file,
[email protected]e54edc32010-09-28 01:09:19613 base::PLATFORM_FILE_OPEN |
614 base::PLATFORM_FILE_READ);
[email protected]80838412012-11-20 01:53:59615 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19616 base::PLATFORM_FILE_OPEN));
[email protected]80838412012-11-20 01:53:59617 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19618 base::PLATFORM_FILE_READ |
619 base::PLATFORM_FILE_WRITE));
620
621 // Grant permissions for the file (should overwrite the permissions granted
622 // for the directory).
[email protected]bfcf1e92013-07-11 04:37:25623 GrantPermissionsForFile(p, kRendererID, granted_file,
[email protected]80838412012-11-20 01:53:59624 base::PLATFORM_FILE_TEMPORARY);
625 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19626 base::PLATFORM_FILE_OPEN));
[email protected]80838412012-11-20 01:53:59627 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]e54edc32010-09-28 01:09:19628 base::PLATFORM_FILE_TEMPORARY));
[email protected]77930fe2010-10-01 22:45:34629
630 // Revoke all permissions for the file (it should inherit its permissions
631 // from the directory again).
[email protected]80838412012-11-20 01:53:59632 p->RevokeAllPermissionsForFile(kRendererID, granted_file);
633 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]77930fe2010-10-01 22:45:34634 base::PLATFORM_FILE_OPEN |
635 base::PLATFORM_FILE_READ));
[email protected]80838412012-11-20 01:53:59636 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]77930fe2010-10-01 22:45:34637 base::PLATFORM_FILE_TEMPORARY));
[email protected]e54edc32010-09-28 01:09:19638 p->Remove(kRendererID);
[email protected]cee64fd32011-05-02 18:59:07639
640 // Grant file permissions for the file to main thread renderer process,
641 // make sure its worker thread renderer process inherits those.
642 p->Add(kRendererID);
[email protected]bfcf1e92013-07-11 04:37:25643 GrantPermissionsForFile(p, kRendererID, granted_file,
[email protected]80838412012-11-20 01:53:59644 base::PLATFORM_FILE_OPEN |
645 base::PLATFORM_FILE_READ);
646 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]cee64fd32011-05-02 18:59:07647 base::PLATFORM_FILE_OPEN |
648 base::PLATFORM_FILE_READ));
[email protected]80838412012-11-20 01:53:59649 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file,
[email protected]cee64fd32011-05-02 18:59:07650 base::PLATFORM_FILE_WRITE));
651 p->AddWorker(kWorkerRendererID, kRendererID);
[email protected]80838412012-11-20 01:53:59652 EXPECT_TRUE(p->HasPermissionsForFile(kWorkerRendererID, granted_file,
[email protected]cee64fd32011-05-02 18:59:07653 base::PLATFORM_FILE_OPEN |
654 base::PLATFORM_FILE_READ));
[email protected]80838412012-11-20 01:53:59655 EXPECT_FALSE(p->HasPermissionsForFile(kWorkerRendererID, granted_file,
[email protected]cee64fd32011-05-02 18:59:07656 base::PLATFORM_FILE_WRITE));
657 p->Remove(kRendererID);
[email protected]80838412012-11-20 01:53:59658 EXPECT_FALSE(p->HasPermissionsForFile(kWorkerRendererID, granted_file,
[email protected]cee64fd32011-05-02 18:59:07659 base::PLATFORM_FILE_OPEN |
660 base::PLATFORM_FILE_READ));
661 p->Remove(kWorkerRendererID);
[email protected]f0ecca4522013-01-07 21:50:56662
663 p->Add(kRendererID);
[email protected]bfcf1e92013-07-11 04:37:25664 GrantPermissionsForFile(p, kRendererID, relative_file,
[email protected]f0ecca4522013-01-07 21:50:56665 base::PLATFORM_FILE_OPEN);
666 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, relative_file,
667 base::PLATFORM_FILE_OPEN));
668 p->Remove(kRendererID);
[email protected]e54edc32010-09-28 01:09:19669}
670
[email protected]c50008512011-02-03 01:17:27671TEST_F(ChildProcessSecurityPolicyTest, CanServiceWebUIBindings) {
[email protected]b9535422012-02-09 01:47:59672 ChildProcessSecurityPolicyImpl* p =
673 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29674
[email protected]60e448982009-05-06 04:21:16675 GURL url("chrome://thumb/http://www.google.com/");
initial.commit09911bf2008-07-26 23:55:29676
677 p->Add(kRendererID);
678
[email protected]c50008512011-02-03 01:17:27679 EXPECT_FALSE(p->HasWebUIBindings(kRendererID));
initial.commit09911bf2008-07-26 23:55:29680 EXPECT_FALSE(p->CanRequestURL(kRendererID, url));
[email protected]c50008512011-02-03 01:17:27681 p->GrantWebUIBindings(kRendererID);
682 EXPECT_TRUE(p->HasWebUIBindings(kRendererID));
initial.commit09911bf2008-07-26 23:55:29683 EXPECT_TRUE(p->CanRequestURL(kRendererID, url));
684
685 p->Remove(kRendererID);
686}
687
[email protected]f58ddcf2009-05-18 22:22:06688TEST_F(ChildProcessSecurityPolicyTest, RemoveRace) {
[email protected]b9535422012-02-09 01:47:59689 ChildProcessSecurityPolicyImpl* p =
690 ChildProcessSecurityPolicyImpl::GetInstance();
initial.commit09911bf2008-07-26 23:55:29691
692 GURL url("file:///etc/passwd");
[email protected]2dec8ec2013-02-07 19:20:34693 base::FilePath file(TEST_PATH("/etc/passwd"));
initial.commit09911bf2008-07-26 23:55:29694
695 p->Add(kRendererID);
696
697 p->GrantRequestURL(kRendererID, url);
[email protected]e54edc32010-09-28 01:09:19698 p->GrantReadFile(kRendererID, file);
[email protected]c50008512011-02-03 01:17:27699 p->GrantWebUIBindings(kRendererID);
initial.commit09911bf2008-07-26 23:55:29700
701 EXPECT_TRUE(p->CanRequestURL(kRendererID, url));
[email protected]e54edc32010-09-28 01:09:19702 EXPECT_TRUE(p->CanReadFile(kRendererID, file));
[email protected]c50008512011-02-03 01:17:27703 EXPECT_TRUE(p->HasWebUIBindings(kRendererID));
initial.commit09911bf2008-07-26 23:55:29704
705 p->Remove(kRendererID);
706
707 // Renderers are added and removed on the UI thread, but the policy can be
[email protected]580522632009-08-17 21:55:55708 // queried on the IO thread. The ChildProcessSecurityPolicy needs to be
709 // prepared to answer policy questions about renderers who no longer exist.
initial.commit09911bf2008-07-26 23:55:29710
711 // In this case, we default to secure behavior.
712 EXPECT_FALSE(p->CanRequestURL(kRendererID, url));
[email protected]e54edc32010-09-28 01:09:19713 EXPECT_FALSE(p->CanReadFile(kRendererID, file));
[email protected]c50008512011-02-03 01:17:27714 EXPECT_FALSE(p->HasWebUIBindings(kRendererID));
initial.commit09911bf2008-07-26 23:55:29715}
[email protected]46488322012-10-30 03:22:20716
717} // namespace content