OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/files/file_path.h" | 6 #include "base/files/file_path.h" |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "base/test/histogram_tester.h" | 8 #include "base/test/histogram_tester.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "content/browser/frame_host/cross_site_transferring_request.h" | 10 #include "content/browser/frame_host/cross_site_transferring_request.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "content/public/browser/render_process_host.h" | 25 #include "content/public/browser/render_process_host.h" |
26 #include "content/public/browser/render_widget_host_iterator.h" | 26 #include "content/public/browser/render_widget_host_iterator.h" |
27 #include "content/public/browser/web_contents_delegate.h" | 27 #include "content/public/browser/web_contents_delegate.h" |
28 #include "content/public/browser/web_contents_observer.h" | 28 #include "content/public/browser/web_contents_observer.h" |
29 #include "content/public/browser/web_ui_controller.h" | 29 #include "content/public/browser/web_ui_controller.h" |
30 #include "content/public/common/bindings_policy.h" | 30 #include "content/public/common/bindings_policy.h" |
31 #include "content/public/common/content_switches.h" | 31 #include "content/public/common/content_switches.h" |
32 #include "content/public/common/javascript_message_type.h" | 32 #include "content/public/common/javascript_message_type.h" |
33 #include "content/public/common/url_constants.h" | 33 #include "content/public/common/url_constants.h" |
34 #include "content/public/common/url_utils.h" | 34 #include "content/public/common/url_utils.h" |
| 35 #include "content/public/test/browser_test_utils.h" |
35 #include "content/public/test/mock_render_process_host.h" | 36 #include "content/public/test/mock_render_process_host.h" |
36 #include "content/public/test/test_notification_tracker.h" | 37 #include "content/public/test/test_notification_tracker.h" |
37 #include "content/test/test_content_browser_client.h" | 38 #include "content/test/test_content_browser_client.h" |
38 #include "content/test/test_content_client.h" | 39 #include "content/test/test_content_client.h" |
39 #include "content/test/test_render_frame_host.h" | 40 #include "content/test/test_render_frame_host.h" |
40 #include "content/test/test_render_view_host.h" | 41 #include "content/test/test_render_view_host.h" |
41 #include "content/test/test_web_contents.h" | 42 #include "content/test/test_web_contents.h" |
42 #include "net/base/load_flags.h" | 43 #include "net/base/load_flags.h" |
43 #include "testing/gtest/include/gtest/gtest.h" | 44 #include "testing/gtest/include/gtest/gtest.h" |
44 #include "third_party/WebKit/public/web/WebSandboxFlags.h" | 45 #include "third_party/WebKit/public/web/WebSandboxFlags.h" |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 } | 114 } |
114 | 115 |
115 bool is_closed() { return close_called_; } | 116 bool is_closed() { return close_called_; } |
116 | 117 |
117 private: | 118 private: |
118 DISALLOW_COPY_AND_ASSIGN(CloseWebContentsDelegate); | 119 DISALLOW_COPY_AND_ASSIGN(CloseWebContentsDelegate); |
119 | 120 |
120 bool close_called_; | 121 bool close_called_; |
121 }; | 122 }; |
122 | 123 |
123 // This observer keeps track of the last deleted RenderViewHost to avoid | |
124 // accessing it and causing use-after-free condition. | |
125 class RenderViewHostDeletedObserver : public WebContentsObserver { | |
126 public: | |
127 RenderViewHostDeletedObserver(RenderViewHost* rvh) | |
128 : WebContentsObserver(WebContents::FromRenderViewHost(rvh)), | |
129 process_id_(rvh->GetProcess()->GetID()), | |
130 routing_id_(rvh->GetRoutingID()), | |
131 deleted_(false) { | |
132 } | |
133 | |
134 void RenderViewDeleted(RenderViewHost* render_view_host) override { | |
135 if (render_view_host->GetProcess()->GetID() == process_id_ && | |
136 render_view_host->GetRoutingID() == routing_id_) { | |
137 deleted_ = true; | |
138 } | |
139 } | |
140 | |
141 bool deleted() { | |
142 return deleted_; | |
143 } | |
144 | |
145 private: | |
146 int process_id_; | |
147 int routing_id_; | |
148 bool deleted_; | |
149 | |
150 DISALLOW_COPY_AND_ASSIGN(RenderViewHostDeletedObserver); | |
151 }; | |
152 | |
153 // This observer keeps track of the last created RenderFrameHost to allow tests | 124 // This observer keeps track of the last created RenderFrameHost to allow tests |
154 // to ensure that no RenderFrameHost objects are created when not expected. | 125 // to ensure that no RenderFrameHost objects are created when not expected. |
155 class RenderFrameHostCreatedObserver : public WebContentsObserver { | 126 class RenderFrameHostCreatedObserver : public WebContentsObserver { |
156 public: | 127 public: |
157 RenderFrameHostCreatedObserver(WebContents* web_contents) | 128 RenderFrameHostCreatedObserver(WebContents* web_contents) |
158 : WebContentsObserver(web_contents), | 129 : WebContentsObserver(web_contents), |
159 created_(false) { | 130 created_(false) { |
160 } | 131 } |
161 | 132 |
162 void RenderFrameCreated(RenderFrameHost* render_frame_host) override { | 133 void RenderFrameCreated(RenderFrameHost* render_frame_host) override { |
163 created_ = true; | 134 created_ = true; |
164 } | 135 } |
165 | 136 |
166 bool created() { | 137 bool created() { |
167 return created_; | 138 return created_; |
168 } | 139 } |
169 | 140 |
170 private: | 141 private: |
171 bool created_; | 142 bool created_; |
172 | 143 |
173 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostCreatedObserver); | 144 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostCreatedObserver); |
174 }; | 145 }; |
175 | 146 |
176 // This observer keeps track of the last deleted RenderFrameHost to avoid | |
177 // accessing it and causing use-after-free condition. | |
178 class RenderFrameHostDeletedObserver : public WebContentsObserver { | |
179 public: | |
180 RenderFrameHostDeletedObserver(RenderFrameHost* rfh) | |
181 : WebContentsObserver(WebContents::FromRenderFrameHost(rfh)), | |
182 process_id_(rfh->GetProcess()->GetID()), | |
183 routing_id_(rfh->GetRoutingID()), | |
184 deleted_(false) { | |
185 } | |
186 | |
187 void RenderFrameDeleted(RenderFrameHost* render_frame_host) override { | |
188 if (render_frame_host->GetProcess()->GetID() == process_id_ && | |
189 render_frame_host->GetRoutingID() == routing_id_) { | |
190 deleted_ = true; | |
191 } | |
192 } | |
193 | |
194 bool deleted() { | |
195 return deleted_; | |
196 } | |
197 | |
198 private: | |
199 int process_id_; | |
200 int routing_id_; | |
201 bool deleted_; | |
202 | |
203 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostDeletedObserver); | |
204 }; | |
205 | |
206 // This WebContents observer keep track of its RVH change. | 147 // This WebContents observer keep track of its RVH change. |
207 class RenderViewHostChangedObserver : public WebContentsObserver { | 148 class RenderViewHostChangedObserver : public WebContentsObserver { |
208 public: | 149 public: |
209 RenderViewHostChangedObserver(WebContents* web_contents) | 150 RenderViewHostChangedObserver(WebContents* web_contents) |
210 : WebContentsObserver(web_contents), host_changed_(false) {} | 151 : WebContentsObserver(web_contents), host_changed_(false) {} |
211 | 152 |
212 // WebContentsObserver. | 153 // WebContentsObserver. |
213 void RenderViewHostChanged(RenderViewHost* old_host, | 154 void RenderViewHostChanged(RenderViewHost* old_host, |
214 RenderViewHost* new_host) override { | 155 RenderViewHost* new_host) override { |
215 host_changed_ = true; | 156 host_changed_ = true; |
(...skipping 1932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2148 EXPECT_FALSE(contents2->GetMainFrame()->IsRenderFrameLive()); | 2089 EXPECT_FALSE(contents2->GetMainFrame()->IsRenderFrameLive()); |
2149 contents2->NavigateAndCommit(kUrl3); | 2090 contents2->NavigateAndCommit(kUrl3); |
2150 EXPECT_TRUE(contents2->GetMainFrame()->IsRenderFrameLive()); | 2091 EXPECT_TRUE(contents2->GetMainFrame()->IsRenderFrameLive()); |
2151 EXPECT_NE(nullptr, | 2092 EXPECT_NE(nullptr, |
2152 iframe->GetRenderFrameProxyHost(contents1->GetSiteInstance())); | 2093 iframe->GetRenderFrameProxyHost(contents1->GetSiteInstance())); |
2153 EXPECT_EQ(nullptr, | 2094 EXPECT_EQ(nullptr, |
2154 iframe->GetRenderFrameProxyHost(contents2->GetSiteInstance())); | 2095 iframe->GetRenderFrameProxyHost(contents2->GetSiteInstance())); |
2155 } | 2096 } |
2156 | 2097 |
2157 } // namespace content | 2098 } // namespace content |
OLD | NEW |