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

Side by Side Diff: content/browser/frame_host/frame_tree_browsertest.cc

Issue 1475433002: Expose RenderFrameHost::GetLastCommittedOrigin(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Charlie's fixes. Created 5 years 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
« no previous file with comments | « no previous file | content/browser/frame_host/render_frame_host_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/frame_host/frame_tree.h" 5 #include "content/browser/frame_host/frame_tree.h"
6 #include "content/browser/frame_host/frame_tree_node.h" 6 #include "content/browser/frame_host/frame_tree_node.h"
7 #include "content/browser/renderer_host/render_view_host_impl.h" 7 #include "content/browser/renderer_host/render_view_host_impl.h"
8 #include "content/browser/web_contents/web_contents_impl.h" 8 #include "content/browser/web_contents/web_contents_impl.h"
9 #include "content/public/browser/notification_service.h" 9 #include "content/public/browser/notification_service.h"
10 #include "content/public/browser/notification_types.h" 10 #include "content/public/browser/notification_types.h"
11 #include "content/public/common/url_constants.h" 11 #include "content/public/common/url_constants.h"
12 #include "content/public/test/browser_test_utils.h" 12 #include "content/public/test/browser_test_utils.h"
13 #include "content/public/test/content_browser_test.h" 13 #include "content/public/test/content_browser_test.h"
14 #include "content/public/test/content_browser_test_utils.h" 14 #include "content/public/test/content_browser_test_utils.h"
15 #include "content/public/test/test_navigation_observer.h" 15 #include "content/public/test/test_navigation_observer.h"
16 #include "content/public/test/test_utils.h" 16 #include "content/public/test/test_utils.h"
17 #include "content/shell/browser/shell.h" 17 #include "content/shell/browser/shell.h"
18 #include "content/test/content_browser_test_utils_internal.h" 18 #include "content/test/content_browser_test_utils_internal.h"
19 #include "net/dns/mock_host_resolver.h" 19 #include "net/dns/mock_host_resolver.h"
20 #include "net/test/embedded_test_server/embedded_test_server.h" 20 #include "net/test/embedded_test_server/embedded_test_server.h"
21 #include "third_party/WebKit/public/web/WebSandboxFlags.h" 21 #include "third_party/WebKit/public/web/WebSandboxFlags.h"
22 #include "url/url_constants.h"
22 23
23 // For fine-grained suppression on flaky tests. 24 // For fine-grained suppression on flaky tests.
24 #if defined(OS_WIN) 25 #if defined(OS_WIN)
25 #include "base/win/windows_version.h" 26 #include "base/win/windows_version.h"
26 #endif 27 #endif
27 28
28 namespace content { 29 namespace content {
29 30
30 class FrameTreeBrowserTest : public ContentBrowserTest { 31 class FrameTreeBrowserTest : public ContentBrowserTest {
31 public: 32 public:
32 FrameTreeBrowserTest() {} 33 FrameTreeBrowserTest() {}
33 34
34 void SetUpOnMainThread() override { 35 void SetUpOnMainThread() override {
35 host_resolver()->AddRule("*", "127.0.0.1"); 36 host_resolver()->AddRule("*", "127.0.0.1");
36 ASSERT_TRUE(embedded_test_server()->Start()); 37 ASSERT_TRUE(embedded_test_server()->Start());
37 SetupCrossSiteRedirector(embedded_test_server()); 38 SetupCrossSiteRedirector(embedded_test_server());
38 } 39 }
39 40
41 protected:
42 std::string GetOriginFromRenderer(FrameTreeNode* node) {
43 std::string origin;
44 EXPECT_TRUE(ExecuteScriptAndExtractString(
45 node->current_frame_host(),
46 "window.domAutomationController.send(document.origin);", &origin));
47 return origin;
48 }
49
40 private: 50 private:
41 DISALLOW_COPY_AND_ASSIGN(FrameTreeBrowserTest); 51 DISALLOW_COPY_AND_ASSIGN(FrameTreeBrowserTest);
42 }; 52 };
43 53
44 // Ensures FrameTree correctly reflects page structure during navigations. 54 // Ensures FrameTree correctly reflects page structure during navigations.
45 IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, FrameTreeShape) { 55 IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, FrameTreeShape) {
46 GURL base_url = embedded_test_server()->GetURL("A.com", "/site_isolation/"); 56 GURL base_url = embedded_test_server()->GetURL("A.com", "/site_isolation/");
47 57
48 // Load doc without iframes. Verify FrameTree just has root. 58 // Load doc without iframes. Verify FrameTree just has root.
49 // Frame tree: 59 // Frame tree:
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 GURL http_url(embedded_test_server()->GetURL("/title1.html")); 208 GURL http_url(embedded_test_server()->GetURL("/title1.html"));
199 NavigateFrameToURL(root->child_at(0), http_url); 209 NavigateFrameToURL(root->child_at(0), http_url);
200 EXPECT_TRUE( 210 EXPECT_TRUE(
201 root->current_frame_host()->render_view_host()->IsRenderViewLive()); 211 root->current_frame_host()->render_view_host()->IsRenderViewLive());
202 EXPECT_TRUE(root->current_frame_host()->IsRenderFrameLive()); 212 EXPECT_TRUE(root->current_frame_host()->IsRenderFrameLive());
203 EXPECT_TRUE(root->child_at(0)->current_frame_host()->IsRenderFrameLive()); 213 EXPECT_TRUE(root->child_at(0)->current_frame_host()->IsRenderFrameLive());
204 } 214 }
205 215
206 // Ensure that origins are correctly set on navigations. 216 // Ensure that origins are correctly set on navigations.
207 IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, OriginSetOnNavigation) { 217 IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, OriginSetOnNavigation) {
208 GURL main_url(embedded_test_server()->GetURL("/frame_tree/top.html")); 218 GURL about_blank(url::kAboutBlankURL);
219 GURL main_url(
220 embedded_test_server()->GetURL("a.com", "/frame_tree/top.html"));
209 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 221 EXPECT_TRUE(NavigateToURL(shell(), main_url));
222 WebContents* contents = shell()->web_contents();
210 223
211 // It is safe to obtain the root frame tree node here, as it doesn't change. 224 // It is safe to obtain the root frame tree node here, as it doesn't change.
212 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 225 FrameTreeNode* root =
213 ->GetFrameTree()->root(); 226 static_cast<WebContentsImpl*>(contents)->GetFrameTree()->root();
214 227
215 // Extra '/' is added because the replicated origin is serialized in RFC 6454 228 // Extra '/' is added because the replicated origin is serialized in RFC 6454
216 // format, which dictates no trailing '/', whereas GURL::GetOrigin does put a 229 // format, which dictates no trailing '/', whereas GURL::GetOrigin does put a
217 // '/' at the end. 230 // '/' at the end.
218 EXPECT_EQ(root->current_origin().Serialize() + '/', 231 EXPECT_EQ(main_url.GetOrigin().spec(),
219 main_url.GetOrigin().spec()); 232 root->current_origin().Serialize() + '/');
233 EXPECT_EQ(
234 main_url.GetOrigin().spec(),
235 root->current_frame_host()->GetLastCommittedOrigin().Serialize() + '/');
220 236
221 GURL frame_url(embedded_test_server()->GetURL("/title1.html")); 237 // The iframe is inititially same-origin.
238 EXPECT_TRUE(
239 root->current_frame_host()->GetLastCommittedOrigin().IsSameOriginWith(
240 root->child_at(0)->current_frame_host()->GetLastCommittedOrigin()));
241 EXPECT_EQ(root->current_origin().Serialize(), GetOriginFromRenderer(root));
242 EXPECT_EQ(root->child_at(0)->current_origin().Serialize(),
243 GetOriginFromRenderer(root->child_at(0)));
244
245 // Navigate the iframe cross-origin.
246 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html"));
222 NavigateFrameToURL(root->child_at(0), frame_url); 247 NavigateFrameToURL(root->child_at(0), frame_url);
248 EXPECT_EQ(frame_url, root->child_at(0)->current_url());
249 EXPECT_EQ(frame_url.GetOrigin().spec(),
250 root->child_at(0)->current_origin().Serialize() + '/');
251 EXPECT_FALSE(
252 root->current_frame_host()->GetLastCommittedOrigin().IsSameOriginWith(
253 root->child_at(0)->current_frame_host()->GetLastCommittedOrigin()));
254 EXPECT_EQ(root->current_origin().Serialize(), GetOriginFromRenderer(root));
255 EXPECT_EQ(root->child_at(0)->current_origin().Serialize(),
256 GetOriginFromRenderer(root->child_at(0)));
223 257
224 EXPECT_EQ(root->child_at(0)->current_origin().Serialize() + '/', 258 // Parent-initiated about:blank navigation should inherit the parent's a.com
225 frame_url.GetOrigin().spec()); 259 // origin.
260 NavigateIframeToURL(contents, "1-1-id", about_blank);
261 EXPECT_EQ(about_blank, root->child_at(0)->current_url());
262 EXPECT_EQ(main_url.GetOrigin().spec(),
263 root->child_at(0)->current_origin().Serialize() + '/');
264 EXPECT_EQ(root->current_frame_host()->GetLastCommittedOrigin().Serialize(),
265 root->child_at(0)
266 ->current_frame_host()
267 ->GetLastCommittedOrigin()
268 .Serialize());
269 EXPECT_TRUE(
270 root->current_frame_host()->GetLastCommittedOrigin().IsSameOriginWith(
271 root->child_at(0)->current_frame_host()->GetLastCommittedOrigin()));
272 EXPECT_EQ(root->current_origin().Serialize(), GetOriginFromRenderer(root));
273 EXPECT_EQ(root->child_at(0)->current_origin().Serialize(),
274 GetOriginFromRenderer(root->child_at(0)));
226 275
227 GURL data_url("data:text/html,foo"); 276 GURL data_url("data:text/html,foo");
228 EXPECT_TRUE(NavigateToURL(shell(), data_url)); 277 EXPECT_TRUE(NavigateToURL(shell(), data_url));
229 278
230 // Navigating to a data URL should set a unique origin. This is represented 279 // Navigating to a data URL should set a unique origin. This is represented
231 // as "null" per RFC 6454. 280 // as "null" per RFC 6454.
232 EXPECT_EQ(root->current_origin().Serialize(), "null"); 281 EXPECT_EQ("null", root->current_origin().Serialize());
282 EXPECT_TRUE(contents->GetMainFrame()->GetLastCommittedOrigin().unique());
283 EXPECT_EQ("null", GetOriginFromRenderer(root));
233 284
234 // Re-navigating to a normal URL should update the origin. 285 // Re-navigating to a normal URL should update the origin.
235 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 286 EXPECT_TRUE(NavigateToURL(shell(), main_url));
236 EXPECT_EQ(root->current_origin().Serialize() + '/', 287 EXPECT_EQ(main_url.GetOrigin().spec(),
237 main_url.GetOrigin().spec()); 288 root->current_origin().Serialize() + '/');
289 EXPECT_EQ(
290 main_url.GetOrigin().spec(),
291 contents->GetMainFrame()->GetLastCommittedOrigin().Serialize() + '/');
292 EXPECT_FALSE(contents->GetMainFrame()->GetLastCommittedOrigin().unique());
293 EXPECT_EQ(root->current_origin().Serialize(), GetOriginFromRenderer(root));
238 } 294 }
239 295
240 // Ensure that sandbox flags are correctly set when child frames are created. 296 // Ensure that sandbox flags are correctly set when child frames are created.
241 IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, SandboxFlagsSetForChildFrames) { 297 IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, SandboxFlagsSetForChildFrames) {
242 GURL main_url(embedded_test_server()->GetURL("/sandboxed_frames.html")); 298 GURL main_url(embedded_test_server()->GetURL("/sandboxed_frames.html"));
243 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 299 EXPECT_TRUE(NavigateToURL(shell(), main_url));
244 300
245 // It is safe to obtain the root frame tree node here, as it doesn't change. 301 // It is safe to obtain the root frame tree node here, as it doesn't change.
246 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 302 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
247 ->GetFrameTree()->root(); 303 ->GetFrameTree()->root();
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 472
417 GURL data_url("data:text/html,foo"); 473 GURL data_url("data:text/html,foo");
418 NavigateFrameToURL(root->child_at(1), data_url); 474 NavigateFrameToURL(root->child_at(1), data_url);
419 475
420 // Navigating to a data URL should set a unique origin. This is represented 476 // Navigating to a data URL should set a unique origin. This is represented
421 // as "null" per RFC 6454. 477 // as "null" per RFC 6454.
422 EXPECT_EQ(root->child_at(1)->current_origin().Serialize(), "null"); 478 EXPECT_EQ(root->child_at(1)->current_origin().Serialize(), "null");
423 } 479 }
424 480
425 } // namespace content 481 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/frame_host/render_frame_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698