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

Side by Side Diff: content/browser/site_per_process_browsertest.cc

Issue 2655463006: PlzNavigate: Enforce 'frame-src' CSP on the browser. (Closed)
Patch Set: Addressed comments @alexmos. Created 3 years, 9 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/site_per_process_browsertest.h" 5 #include "content/browser/site_per_process_browsertest.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 2298 matching lines...) Expand 10 before | Expand all | Expand 10 after
2309 " B = http://b.com/", 2309 " B = http://b.com/",
2310 DepictFrameTree(root)); 2310 DepictFrameTree(root));
2311 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 2311 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
2312 child->current_frame_host()->GetSiteInstance()); 2312 child->current_frame_host()->GetSiteInstance());
2313 } 2313 }
2314 2314
2315 // The FrameTreeNode should update its URL (so that we don't affect other uses 2315 // The FrameTreeNode should update its URL (so that we don't affect other uses
2316 // of the API), but the frame's last_successful_url shouldn't change and the 2316 // of the API), but the frame's last_successful_url shouldn't change and the
2317 // origin should be empty. 2317 // origin should be empty.
2318 // PlzNavigate: We have switched RenderFrameHosts for the subframe, so the 2318 // PlzNavigate: We have switched RenderFrameHosts for the subframe, so the
2319 // last succesful url should be empty (since the frame only loaded an error 2319 // last successful url should be empty (since the frame only loaded an error
2320 // page). 2320 // page).
2321 if (IsBrowserSideNavigationEnabled()) 2321 if (IsBrowserSideNavigationEnabled())
2322 EXPECT_EQ(GURL(), child->current_frame_host()->last_successful_url()); 2322 EXPECT_EQ(GURL(), child->current_frame_host()->last_successful_url());
2323 else 2323 else
2324 EXPECT_EQ(url_a, child->current_frame_host()->last_successful_url()); 2324 EXPECT_EQ(url_a, child->current_frame_host()->last_successful_url());
2325 EXPECT_EQ(url_b, child->current_url()); 2325 EXPECT_EQ(url_b, child->current_url());
2326 EXPECT_EQ("null", child->current_origin().Serialize()); 2326 EXPECT_EQ("null", child->current_origin().Serialize());
2327 2327
2328 // Try again after re-enabling host resolution. 2328 // Try again after re-enabling host resolution.
2329 host_resolver()->AddRule("*", "127.0.0.1"); 2329 host_resolver()->AddRule("*", "127.0.0.1");
(...skipping 4831 matching lines...) Expand 10 before | Expand all | Expand 10 after
7161 7161
7162 // The blocked frame should still fire a load event in its parent's process. 7162 // The blocked frame should still fire a load event in its parent's process.
7163 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 7163 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
7164 7164
7165 // Check that the current RenderFrameHost has stopped loading. 7165 // Check that the current RenderFrameHost has stopped loading.
7166 if (root->child_at(0)->current_frame_host()->is_loading()) { 7166 if (root->child_at(0)->current_frame_host()->is_loading()) {
7167 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; 7167 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything";
7168 load_observer.Wait(); 7168 load_observer.Wait();
7169 } 7169 }
7170 7170
7171 // The blocked frame should stay at the old location. 7171 if (IsBrowserSideNavigationEnabled()) {
7172 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); 7172 // We have switched RenderFrameHosts for the subframe, so the last
7173 // successful url should be empty (since the frame only loaded an error
7174 // page).
7175 EXPECT_EQ(GURL(),
7176 root->child_at(0)->current_frame_host()->last_successful_url());
7173 7177
7174 // The blocked frame should keep the old title. 7178 // The blocked frame should go to an error page. Errors currently commit
7175 std::string frame_title; 7179 // with the URL of the blocked page.
7176 EXPECT_TRUE(ExecuteScriptAndExtractString( 7180 EXPECT_EQ(blocked_url, root->child_at(0)->current_url());
7177 root->child_at(0), "domAutomationController.send(document.title)", 7181
7178 &frame_title)); 7182 // The page should get the title of an error page (i.e "") and not the
7179 EXPECT_EQ("Title Of Awesomeness", frame_title); 7183 // title of the blocked page.
7184 std::string frame_title;
7185 EXPECT_TRUE(ExecuteScriptAndExtractString(
7186 root->child_at(0), "domAutomationController.send(document.title)",
7187 &frame_title));
7188 EXPECT_EQ("", frame_title);
7189 } else {
7190 // The last successful url shouldn't be the blocked url.
7191 EXPECT_EQ(old_subframe_url,
7192 root->child_at(0)->current_frame_host()->last_successful_url());
7193
7194 // The blocked frame should stay at the old location.
7195 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url());
7196
7197 // The blocked frame should keep the old title.
7198 std::string frame_title;
7199 EXPECT_TRUE(ExecuteScriptAndExtractString(
7200 root->child_at(0), "domAutomationController.send(document.title)",
7201 &frame_title));
7202 EXPECT_EQ("Title Of Awesomeness", frame_title);
7203 }
7180 7204
7181 // Navigate to a URL without CSP. 7205 // Navigate to a URL without CSP.
7182 EXPECT_TRUE(NavigateToURL( 7206 EXPECT_TRUE(NavigateToURL(
7183 shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); 7207 shell(), embedded_test_server()->GetURL("a.com", "/title1.html")));
7184 7208
7185 // Verify that the frame's CSP got correctly reset to an empty set. 7209 // Verify that the frame's CSP got correctly reset to an empty set.
7186 EXPECT_EQ(0u, 7210 EXPECT_EQ(0u,
7187 root->current_replication_state().accumulated_csp_headers.size()); 7211 root->current_replication_state().accumulated_csp_headers.size());
7188 } 7212 }
7189 7213
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
7236 7260
7237 // The blocked frame should still fire a load event in its parent's process. 7261 // The blocked frame should still fire a load event in its parent's process.
7238 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 7262 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
7239 7263
7240 // Check that the current RenderFrameHost has stopped loading. 7264 // Check that the current RenderFrameHost has stopped loading.
7241 if (root->child_at(0)->current_frame_host()->is_loading()) { 7265 if (root->child_at(0)->current_frame_host()->is_loading()) {
7242 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; 7266 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything";
7243 load_observer2.Wait(); 7267 load_observer2.Wait();
7244 } 7268 }
7245 7269
7246 // The blocked frame should stay at the old location. 7270 if (IsBrowserSideNavigationEnabled()) {
7247 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url()); 7271 // We have switched RenderFrameHosts for the subframe, so the last
7272 // successful url should be empty (since the frame only loaded an error
7273 // page).
7274 EXPECT_EQ(GURL(),
7275 root->child_at(0)->current_frame_host()->last_successful_url());
7248 7276
7249 // The blocked frame should keep the old title. 7277 // The blocked frame should go to an error page. Errors currently commit
7250 std::string frame_title; 7278 // with the URL of the blocked page.
7251 EXPECT_TRUE(ExecuteScriptAndExtractString( 7279 EXPECT_EQ(blocked_url, root->child_at(0)->current_url());
7252 root->child_at(0), "domAutomationController.send(document.title)", 7280
7253 &frame_title)); 7281 // The page should get the title of an error page (i.e "") and not the
7254 EXPECT_EQ("Title Of Awesomeness", frame_title); 7282 // title of the blocked page.
7283 std::string frame_title;
7284 EXPECT_TRUE(ExecuteScriptAndExtractString(
7285 root->child_at(0), "domAutomationController.send(document.title)",
7286 &frame_title));
7287 EXPECT_EQ("", frame_title);
7288 } else {
7289 // The last successful url shouldn't be the blocked url.
7290 EXPECT_EQ(old_subframe_url,
7291 root->child_at(0)->current_frame_host()->last_successful_url());
7292
7293 // The blocked frame should stay at the old location.
7294 EXPECT_EQ(old_subframe_url, root->child_at(0)->current_url());
7295
7296 // The blocked frame should keep the old title.
7297 std::string frame_title;
7298 EXPECT_TRUE(ExecuteScriptAndExtractString(
7299 root->child_at(0), "domAutomationController.send(document.title)",
7300 &frame_title));
7301 EXPECT_EQ("Title Of Awesomeness", frame_title);
7302 }
7255 } 7303 }
7256 7304
7257 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src. 7305 // Test that a cross-origin frame's navigation can be blocked by CSP frame-src.
7258 // In this version of a test, CSP is inherited by srcdoc iframe from a parent 7306 // In this version of a test, CSP is inherited by srcdoc iframe from a parent
7259 // that declared CSP via HTTP headers. Cross-origin frame navigating to a 7307 // that declared CSP via HTTP headers. Cross-origin frame navigating to a
7260 // blocked location is a child of the srcdoc iframe. 7308 // blocked location is a child of the srcdoc iframe.
7261 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 7309 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
7262 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) { 7310 CrossSiteIframeBlockedByCSPInheritedBySrcDocParent) {
7263 GURL main_url( 7311 GURL main_url(
7264 embedded_test_server()->GetURL("a.com", "/frame-src-self-and-b.html")); 7312 embedded_test_server()->GetURL("a.com", "/frame-src-self-and-b.html"));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
7305 7353
7306 // The blocked frame should still fire a load event in its parent's process. 7354 // The blocked frame should still fire a load event in its parent's process.
7307 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 7355 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
7308 7356
7309 // Check that the current RenderFrameHost has stopped loading. 7357 // Check that the current RenderFrameHost has stopped loading.
7310 if (navigating_frame->current_frame_host()->is_loading()) { 7358 if (navigating_frame->current_frame_host()->is_loading()) {
7311 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything"; 7359 ADD_FAILURE() << "Blocked RenderFrameHost shouldn't be loading anything";
7312 load_observer2.Wait(); 7360 load_observer2.Wait();
7313 } 7361 }
7314 7362
7315 // The blocked frame should stay at the old location. 7363 if (IsBrowserSideNavigationEnabled()) {
7316 EXPECT_EQ(old_subframe_url, navigating_frame->current_url()); 7364 // We have switched RenderFrameHosts for the subframe, so the last
7365 // successful url should be empty (since the frame only loaded an error
7366 // page).
7367 EXPECT_EQ(GURL(),
7368 navigating_frame->current_frame_host()->last_successful_url());
7317 7369
7318 // The blocked frame should keep the old title. 7370 // The blocked frame should go to an error page. Errors currently commit
7319 std::string frame_title; 7371 // with the URL of the blocked page.
7320 EXPECT_TRUE(ExecuteScriptAndExtractString( 7372 EXPECT_EQ(blocked_url, navigating_frame->current_url());
7321 navigating_frame, "domAutomationController.send(document.title)", 7373
7322 &frame_title)); 7374 // The page should get the title of an error page (i.e "") and not the
7323 EXPECT_EQ("Title Of Awesomeness", frame_title); 7375 // title of the blocked page.
7376 std::string frame_title;
7377 EXPECT_TRUE(ExecuteScriptAndExtractString(
7378 navigating_frame, "domAutomationController.send(document.title)",
7379 &frame_title));
7380 EXPECT_EQ("", frame_title);
7381 } else {
7382 // The last successful url shouldn't be the blocked url.
7383 EXPECT_EQ(old_subframe_url,
7384 navigating_frame->current_frame_host()->last_successful_url());
7385
7386 // The blocked frame should stay at the old location.
7387 EXPECT_EQ(old_subframe_url, navigating_frame->current_url());
7388
7389 // The blocked frame should keep the old title.
7390 std::string frame_title;
7391 EXPECT_TRUE(ExecuteScriptAndExtractString(
7392 navigating_frame, "domAutomationController.send(document.title)",
7393 &frame_title));
7394 EXPECT_EQ("Title Of Awesomeness", frame_title);
7395 }
7324 7396
7325 // Navigate the subframe to a URL without CSP. 7397 // Navigate the subframe to a URL without CSP.
7326 NavigateFrameToURL(srcdoc_frame, 7398 NavigateFrameToURL(srcdoc_frame,
7327 embedded_test_server()->GetURL("a.com", "/title1.html")); 7399 embedded_test_server()->GetURL("a.com", "/title1.html"));
7328 7400
7329 // Verify that the frame's CSP got correctly reset to an empty set. 7401 // Verify that the frame's CSP got correctly reset to an empty set.
7330 EXPECT_EQ( 7402 EXPECT_EQ(
7331 0u, 7403 0u,
7332 srcdoc_frame->current_replication_state().accumulated_csp_headers.size()); 7404 srcdoc_frame->current_replication_state().accumulated_csp_headers.size());
7333 } 7405 }
(...skipping 2209 matching lines...) Expand 10 before | Expand all | Expand 10 after
9543 for (size_t index = 0; index < frames_.size(); ++index) { 9615 for (size_t index = 0; index < frames_.size(); ++index) {
9544 std::string text = base::StringPrintf("text%zu", index); 9616 std::string text = base::StringPrintf("text%zu", index);
9545 FocusInputInFrame(frames_[index]); 9617 FocusInputInFrame(frames_[index]);
9546 CommitText(text.c_str()); 9618 CommitText(text.c_str());
9547 selection_observer.WaitForSelectedText(text); 9619 selection_observer.WaitForSelectedText(text);
9548 } 9620 }
9549 } 9621 }
9550 #endif // OS_ANDROID 9622 #endif // OS_ANDROID
9551 9623
9552 } // namespace content 9624 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698