OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/navigation_handle_impl.h" | 5 #include "content/browser/frame_host/navigation_handle_impl.h" |
6 #include "content/browser/web_contents/web_contents_impl.h" | 6 #include "content/browser/web_contents/web_contents_impl.h" |
7 #include "content/public/browser/web_contents.h" | 7 #include "content/public/browser/web_contents.h" |
8 #include "content/public/browser/web_contents_observer.h" | 8 #include "content/public/browser/web_contents_observer.h" |
9 #include "content/public/common/request_context_type.h" | 9 #include "content/public/common/request_context_type.h" |
10 #include "content/public/test/browser_test_utils.h" | 10 #include "content/public/test/browser_test_utils.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 NavigationHandleObserver(WebContents* web_contents, | 29 NavigationHandleObserver(WebContents* web_contents, |
30 const GURL& expected_start_url) | 30 const GURL& expected_start_url) |
31 : WebContentsObserver(web_contents), | 31 : WebContentsObserver(web_contents), |
32 handle_(nullptr), | 32 handle_(nullptr), |
33 has_committed_(false), | 33 has_committed_(false), |
34 is_error_(false), | 34 is_error_(false), |
35 is_main_frame_(false), | 35 is_main_frame_(false), |
36 is_parent_main_frame_(false), | 36 is_parent_main_frame_(false), |
37 is_renderer_initiated_(true), | 37 is_renderer_initiated_(true), |
38 is_same_page_(false), | 38 is_same_page_(false), |
| 39 is_srcdoc_(false), |
39 was_redirected_(false), | 40 was_redirected_(false), |
40 frame_tree_node_id_(-1), | 41 frame_tree_node_id_(-1), |
41 page_transition_(ui::PAGE_TRANSITION_LINK), | 42 page_transition_(ui::PAGE_TRANSITION_LINK), |
42 expected_start_url_(expected_start_url) {} | 43 expected_start_url_(expected_start_url) {} |
43 | 44 |
44 void DidStartNavigation(NavigationHandle* navigation_handle) override { | 45 void DidStartNavigation(NavigationHandle* navigation_handle) override { |
45 if (handle_ || navigation_handle->GetURL() != expected_start_url_) | 46 if (handle_ || navigation_handle->GetURL() != expected_start_url_) |
46 return; | 47 return; |
47 | 48 |
48 handle_ = navigation_handle; | 49 handle_ = navigation_handle; |
49 has_committed_ = false; | 50 has_committed_ = false; |
50 is_error_ = false; | 51 is_error_ = false; |
51 page_transition_ = ui::PAGE_TRANSITION_LINK; | 52 page_transition_ = ui::PAGE_TRANSITION_LINK; |
52 last_committed_url_ = GURL(); | 53 last_committed_url_ = GURL(); |
53 | 54 |
54 is_main_frame_ = navigation_handle->IsInMainFrame(); | 55 is_main_frame_ = navigation_handle->IsInMainFrame(); |
55 is_parent_main_frame_ = navigation_handle->IsParentMainFrame(); | 56 is_parent_main_frame_ = navigation_handle->IsParentMainFrame(); |
56 is_renderer_initiated_ = navigation_handle->IsRendererInitiated(); | 57 is_renderer_initiated_ = navigation_handle->IsRendererInitiated(); |
57 is_same_page_ = navigation_handle->IsSamePage(); | 58 is_same_page_ = navigation_handle->IsSamePage(); |
| 59 is_srcdoc_ = navigation_handle->IsSrcdoc(); |
58 was_redirected_ = navigation_handle->WasServerRedirect(); | 60 was_redirected_ = navigation_handle->WasServerRedirect(); |
59 frame_tree_node_id_ = navigation_handle->GetFrameTreeNodeId(); | 61 frame_tree_node_id_ = navigation_handle->GetFrameTreeNodeId(); |
60 } | 62 } |
61 | 63 |
62 void DidFinishNavigation(NavigationHandle* navigation_handle) override { | 64 void DidFinishNavigation(NavigationHandle* navigation_handle) override { |
63 if (navigation_handle != handle_) | 65 if (navigation_handle != handle_) |
64 return; | 66 return; |
65 | 67 |
66 DCHECK_EQ(is_main_frame_, navigation_handle->IsInMainFrame()); | 68 DCHECK_EQ(is_main_frame_, navigation_handle->IsInMainFrame()); |
67 DCHECK_EQ(is_parent_main_frame_, navigation_handle->IsParentMainFrame()); | 69 DCHECK_EQ(is_parent_main_frame_, navigation_handle->IsParentMainFrame()); |
68 DCHECK_EQ(is_same_page_, navigation_handle->IsSamePage()); | 70 DCHECK_EQ(is_same_page_, navigation_handle->IsSamePage()); |
69 DCHECK_EQ(is_renderer_initiated_, navigation_handle->IsRendererInitiated()); | 71 DCHECK_EQ(is_renderer_initiated_, navigation_handle->IsRendererInitiated()); |
| 72 DCHECK_EQ(is_srcdoc_, navigation_handle->IsSrcdoc()); |
70 DCHECK_EQ(frame_tree_node_id_, navigation_handle->GetFrameTreeNodeId()); | 73 DCHECK_EQ(frame_tree_node_id_, navigation_handle->GetFrameTreeNodeId()); |
71 | 74 |
72 was_redirected_ = navigation_handle->WasServerRedirect(); | 75 was_redirected_ = navigation_handle->WasServerRedirect(); |
73 | 76 |
74 if (navigation_handle->HasCommitted()) { | 77 if (navigation_handle->HasCommitted()) { |
75 has_committed_ = true; | 78 has_committed_ = true; |
76 if (!navigation_handle->IsErrorPage()) { | 79 if (!navigation_handle->IsErrorPage()) { |
77 page_transition_ = navigation_handle->GetPageTransition(); | 80 page_transition_ = navigation_handle->GetPageTransition(); |
78 last_committed_url_ = navigation_handle->GetURL(); | 81 last_committed_url_ = navigation_handle->GetURL(); |
79 } else { | 82 } else { |
80 is_error_ = true; | 83 is_error_ = true; |
81 } | 84 } |
82 } else { | 85 } else { |
83 has_committed_ = false; | 86 has_committed_ = false; |
84 is_error_ = true; | 87 is_error_ = true; |
85 } | 88 } |
86 | 89 |
87 handle_ = nullptr; | 90 handle_ = nullptr; |
88 } | 91 } |
89 | 92 |
90 bool has_committed() { return has_committed_; } | 93 bool has_committed() { return has_committed_; } |
91 bool is_error() { return is_error_; } | 94 bool is_error() { return is_error_; } |
92 bool is_main_frame() { return is_main_frame_; } | 95 bool is_main_frame() { return is_main_frame_; } |
93 bool is_parent_main_frame() { return is_parent_main_frame_; } | 96 bool is_parent_main_frame() { return is_parent_main_frame_; } |
94 bool is_renderer_initiated() { return is_renderer_initiated_; } | 97 bool is_renderer_initiated() { return is_renderer_initiated_; } |
95 bool is_same_page() { return is_same_page_; } | 98 bool is_same_page() { return is_same_page_; } |
| 99 bool is_srcdoc() { return is_srcdoc_; } |
96 bool was_redirected() { return was_redirected_; } | 100 bool was_redirected() { return was_redirected_; } |
97 int frame_tree_node_id() { return frame_tree_node_id_; } | 101 int frame_tree_node_id() { return frame_tree_node_id_; } |
98 | 102 |
99 const GURL& last_committed_url() { return last_committed_url_; } | 103 const GURL& last_committed_url() { return last_committed_url_; } |
100 | 104 |
101 ui::PageTransition page_transition() { return page_transition_; } | 105 ui::PageTransition page_transition() { return page_transition_; } |
102 | 106 |
103 private: | 107 private: |
104 // A reference to the NavigationHandle so this class will track only | 108 // A reference to the NavigationHandle so this class will track only |
105 // one navigation at a time. It is set at DidStartNavigation and cleared | 109 // one navigation at a time. It is set at DidStartNavigation and cleared |
106 // at DidFinishNavigation before the NavigationHandle is destroyed. | 110 // at DidFinishNavigation before the NavigationHandle is destroyed. |
107 NavigationHandle* handle_; | 111 NavigationHandle* handle_; |
108 bool has_committed_; | 112 bool has_committed_; |
109 bool is_error_; | 113 bool is_error_; |
110 bool is_main_frame_; | 114 bool is_main_frame_; |
111 bool is_parent_main_frame_; | 115 bool is_parent_main_frame_; |
112 bool is_renderer_initiated_; | 116 bool is_renderer_initiated_; |
113 bool is_same_page_; | 117 bool is_same_page_; |
| 118 bool is_srcdoc_; |
114 bool was_redirected_; | 119 bool was_redirected_; |
115 int frame_tree_node_id_; | 120 int frame_tree_node_id_; |
116 ui::PageTransition page_transition_; | 121 ui::PageTransition page_transition_; |
117 GURL expected_start_url_; | 122 GURL expected_start_url_; |
118 GURL last_committed_url_; | 123 GURL last_committed_url_; |
119 }; | 124 }; |
120 | 125 |
121 // A test NavigationThrottle that will return pre-determined checks and run | 126 // A test NavigationThrottle that will return pre-determined checks and run |
122 // callbacks when the various NavigationThrottle methods are called. It is | 127 // callbacks when the various NavigationThrottle methods are called. It is |
123 // not instantiated directly but through a TestNavigationThrottleInstaller. | 128 // not instantiated directly but through a TestNavigationThrottleInstaller. |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 embedded_test_server()->GetURL("a.com", "/bar")); | 497 embedded_test_server()->GetURL("a.com", "/bar")); |
493 EXPECT_TRUE(ExecuteScript(root->child_at(0), | 498 EXPECT_TRUE(ExecuteScript(root->child_at(0), |
494 "window.history.pushState({}, '', 'bar');")); | 499 "window.history.pushState({}, '', 'bar');")); |
495 | 500 |
496 EXPECT_TRUE(observer.has_committed()); | 501 EXPECT_TRUE(observer.has_committed()); |
497 EXPECT_FALSE(observer.is_error()); | 502 EXPECT_FALSE(observer.is_error()); |
498 EXPECT_TRUE(observer.is_renderer_initiated()); | 503 EXPECT_TRUE(observer.is_renderer_initiated()); |
499 } | 504 } |
500 } | 505 } |
501 | 506 |
502 // Ensure that methods on NavigationHandle behave correctly with an iframe that | 507 // Ensure that the IsSrcdoc() method on NavigationHandle behaves correctly. |
503 // navigates to its srcdoc attribute. | |
504 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, VerifySrcdoc) { | 508 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, VerifySrcdoc) { |
505 GURL url(embedded_test_server()->GetURL( | 509 GURL url(embedded_test_server()->GetURL( |
506 "/frame_tree/page_with_srcdoc_frame.html")); | 510 "/frame_tree/page_with_srcdoc_frame.html")); |
507 NavigationHandleObserver observer(shell()->web_contents(), | 511 NavigationHandleObserver observer(shell()->web_contents(), |
508 GURL(kAboutSrcDocURL)); | 512 GURL(url::kAboutBlankURL)); |
509 | 513 |
510 EXPECT_TRUE(NavigateToURL(shell(), url)); | 514 EXPECT_TRUE(NavigateToURL(shell(), url)); |
511 | 515 |
512 EXPECT_TRUE(observer.has_committed()); | 516 EXPECT_TRUE(observer.has_committed()); |
513 EXPECT_FALSE(observer.is_error()); | 517 EXPECT_FALSE(observer.is_error()); |
514 EXPECT_EQ(GURL(kAboutSrcDocURL), observer.last_committed_url()); | 518 EXPECT_TRUE(observer.is_srcdoc()); |
515 } | 519 } |
516 | 520 |
517 // Ensure that the IsSamePage() method on NavigationHandle behaves correctly. | 521 // Ensure that the IsSamePage() method on NavigationHandle behaves correctly. |
518 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, VerifySamePage) { | 522 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, VerifySamePage) { |
519 GURL url(embedded_test_server()->GetURL( | 523 GURL url(embedded_test_server()->GetURL( |
520 "a.com", "/cross_site_iframe_factory.html?a(a())")); | 524 "a.com", "/cross_site_iframe_factory.html?a(a())")); |
521 EXPECT_TRUE(NavigateToURL(shell(), url)); | 525 EXPECT_TRUE(NavigateToURL(shell(), url)); |
522 | 526 |
523 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 527 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) |
524 ->GetFrameTree() | 528 ->GetFrameTree() |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 IN_PROC_BROWSER_TEST_F(NavigationHandleImplHttpsUpgradeBrowserTest, | 902 IN_PROC_BROWSER_TEST_F(NavigationHandleImplHttpsUpgradeBrowserTest, |
899 StartUrlIsHttpsUpgradedCrossSite) { | 903 StartUrlIsHttpsUpgradedCrossSite) { |
900 GURL start_url( | 904 GURL start_url( |
901 embedded_test_server()->GetURL("/https_upgrade_cross_site.html")); | 905 embedded_test_server()->GetURL("/https_upgrade_cross_site.html")); |
902 GURL cross_site_iframe_secure_url("https://other.com/title1.html"); | 906 GURL cross_site_iframe_secure_url("https://other.com/title1.html"); |
903 | 907 |
904 CheckHttpsUpgradedIframeNavigation(start_url, cross_site_iframe_secure_url); | 908 CheckHttpsUpgradedIframeNavigation(start_url, cross_site_iframe_secure_url); |
905 } | 909 } |
906 | 910 |
907 } // namespace content | 911 } // namespace content |
OLD | NEW |