OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/strings/pattern.h" |
6 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
7 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
8 #include "base/test/histogram_tester.h" | 9 #include "base/test/histogram_tester.h" |
9 #include "content/public/common/content_switches.h" | 10 #include "content/public/common/content_switches.h" |
10 #include "content/public/common/resource_type.h" | 11 #include "content/public/common/resource_type.h" |
11 #include "content/public/test/browser_test_utils.h" | 12 #include "content/public/test/browser_test_utils.h" |
12 #include "content/public/test/content_browser_test.h" | 13 #include "content/public/test/content_browser_test.h" |
13 #include "content/public/test/content_browser_test_utils.h" | 14 #include "content/public/test/content_browser_test_utils.h" |
14 #include "content/shell/browser/shell.h" | 15 #include "content/shell/browser/shell.h" |
15 #include "net/test/spawned_test_server/spawned_test_server.h" | 16 #include "net/test/spawned_test_server/spawned_test_server.h" |
(...skipping 22 matching lines...) Expand all Loading... |
38 // Since we assume exploited renderer process, it can bypass the same origin | 39 // Since we assume exploited renderer process, it can bypass the same origin |
39 // policy at will. Simulate that by passing the disable-web-security flag. | 40 // policy at will. Simulate that by passing the disable-web-security flag. |
40 command_line->AppendSwitch(switches::kDisableWebSecurity); | 41 command_line->AppendSwitch(switches::kDisableWebSecurity); |
41 } | 42 } |
42 | 43 |
43 void InspectHistograms(const base::HistogramTester& histograms, | 44 void InspectHistograms(const base::HistogramTester& histograms, |
44 bool should_be_blocked, | 45 bool should_be_blocked, |
45 const std::string& resource_name) { | 46 const std::string& resource_name) { |
46 std::string bucket; | 47 std::string bucket; |
47 int mime_type = 0; // Hardcoded because histogram enums mustn't change. | 48 int mime_type = 0; // Hardcoded because histogram enums mustn't change. |
48 if (MatchPattern(resource_name, "*.html")) { | 49 if (base::MatchPattern(resource_name, "*.html")) { |
49 bucket = "HTML"; | 50 bucket = "HTML"; |
50 mime_type = 0; | 51 mime_type = 0; |
51 } else if (MatchPattern(resource_name, "*.xml")) { | 52 } else if (base::MatchPattern(resource_name, "*.xml")) { |
52 bucket = "XML"; | 53 bucket = "XML"; |
53 mime_type = 1; | 54 mime_type = 1; |
54 } else if (MatchPattern(resource_name, "*.json")) { | 55 } else if (base::MatchPattern(resource_name, "*.json")) { |
55 bucket = "JSON"; | 56 bucket = "JSON"; |
56 mime_type = 2; | 57 mime_type = 2; |
57 } else if (MatchPattern(resource_name, "*.txt")) { | 58 } else if (base::MatchPattern(resource_name, "*.txt")) { |
58 bucket = "Plain"; | 59 bucket = "Plain"; |
59 mime_type = 3; | 60 mime_type = 3; |
60 if (MatchPattern(resource_name, "json*")) { | 61 if (base::MatchPattern(resource_name, "json*")) { |
61 bucket += ".JSON"; | 62 bucket += ".JSON"; |
62 } else if (MatchPattern(resource_name, "html*")) { | 63 } else if (base::MatchPattern(resource_name, "html*")) { |
63 bucket += ".HTML"; | 64 bucket += ".HTML"; |
64 } else if (MatchPattern(resource_name, "xml*")) { | 65 } else if (base::MatchPattern(resource_name, "xml*")) { |
65 bucket += ".XML"; | 66 bucket += ".XML"; |
66 } | 67 } |
67 } else { | 68 } else { |
68 FAIL(); | 69 FAIL(); |
69 } | 70 } |
70 FetchHistogramsFromChildProcesses(); | 71 FetchHistogramsFromChildProcesses(); |
71 | 72 |
72 // A few histograms are incremented unconditionally. | 73 // A few histograms are incremented unconditionally. |
73 histograms.ExpectUniqueSample("SiteIsolation.AllResponses", 1, 1); | 74 histograms.ExpectUniqueSample("SiteIsolation.AllResponses", 1, 1); |
74 histograms.ExpectTotalCount("SiteIsolation.XSD.DataLength", 1); | 75 histograms.ExpectTotalCount("SiteIsolation.XSD.DataLength", 1); |
75 histograms.ExpectUniqueSample("SiteIsolation.XSD.MimeType", mime_type, 1); | 76 histograms.ExpectUniqueSample("SiteIsolation.XSD.MimeType", mime_type, 1); |
76 | 77 |
77 // Inspect the appropriate conditionally-incremented histogram[s]. | 78 // Inspect the appropriate conditionally-incremented histogram[s]. |
78 std::set<std::string> expected_metrics; | 79 std::set<std::string> expected_metrics; |
79 std::string base_metric = "SiteIsolation.XSD." + bucket; | 80 std::string base_metric = "SiteIsolation.XSD." + bucket; |
80 base_metric += should_be_blocked ? ".Blocked" : ".NotBlocked"; | 81 base_metric += should_be_blocked ? ".Blocked" : ".NotBlocked"; |
81 expected_metrics.insert(base_metric); | 82 expected_metrics.insert(base_metric); |
82 if (should_be_blocked) { | 83 if (should_be_blocked) { |
83 expected_metrics.insert(base_metric + ".RenderableStatusCode"); | 84 expected_metrics.insert(base_metric + ".RenderableStatusCode"); |
84 } else if (MatchPattern(resource_name, "*js.*")) { | 85 } else if (base::MatchPattern(resource_name, "*js.*")) { |
85 expected_metrics.insert(base_metric + ".MaybeJS"); | 86 expected_metrics.insert(base_metric + ".MaybeJS"); |
86 } | 87 } |
87 | 88 |
88 for (std::string metric : expected_metrics) { | 89 for (std::string metric : expected_metrics) { |
89 if (MatchPattern(metric, "*.RenderableStatusCode")) { | 90 if (base::MatchPattern(metric, "*.RenderableStatusCode")) { |
90 histograms.ExpectUniqueSample(metric, RESOURCE_TYPE_XHR, 1); | 91 histograms.ExpectUniqueSample(metric, RESOURCE_TYPE_XHR, 1); |
91 } else { | 92 } else { |
92 histograms.ExpectUniqueSample(metric, 1, 1); | 93 histograms.ExpectUniqueSample(metric, 1, 1); |
93 } | 94 } |
94 } | 95 } |
95 | 96 |
96 // Make sure no other conditionally-incremented histograms were touched. | 97 // Make sure no other conditionally-incremented histograms were touched. |
97 const char* all_metrics[] = { | 98 const char* all_metrics[] = { |
98 "SiteIsolation.XSD.HTML.Blocked", | 99 "SiteIsolation.XSD.HTML.Blocked", |
99 "SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode", | 100 "SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode", |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 // length is different from what's described in "content-length" for such | 246 // length is different from what's described in "content-length" for such |
246 // different targets. | 247 // different targets. |
247 | 248 |
248 // TODO(nick): Split up these cases, and add positive assertions here about | 249 // TODO(nick): Split up these cases, and add positive assertions here about |
249 // what actually happens in these various resource-block cases. | 250 // what actually happens in these various resource-block cases. |
250 GURL foo("http://foo.com/files/cross_site_document_request_target.html"); | 251 GURL foo("http://foo.com/files/cross_site_document_request_target.html"); |
251 NavigateToURL(shell(), foo); | 252 NavigateToURL(shell(), foo); |
252 } | 253 } |
253 | 254 |
254 } // namespace content | 255 } // namespace content |
OLD | NEW |