OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/containers/hash_tables.h" | 6 #include "base/containers/hash_tables.h" |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "content/browser/dom_storage/dom_storage_context_wrapper.h" | 8 #include "content/browser/dom_storage/dom_storage_context_wrapper.h" |
9 #include "content/browser/dom_storage/session_storage_namespace_impl.h" | 9 #include "content/browser/dom_storage/session_storage_namespace_impl.h" |
10 #include "content/browser/frame_host/navigator.h" | 10 #include "content/browser/frame_host/navigator.h" |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 terminated.Wait(); | 189 terminated.Wait(); |
190 } | 190 } |
191 | 191 |
192 // This is a test for crbug.com/312016 attempting to create duplicate | 192 // This is a test for crbug.com/312016 attempting to create duplicate |
193 // RenderViewHosts. SetupForDuplicateHosts sets up this test case and leaves | 193 // RenderViewHosts. SetupForDuplicateHosts sets up this test case and leaves |
194 // it in a state with pending RenderViewHost. Before the commit of the new | 194 // it in a state with pending RenderViewHost. Before the commit of the new |
195 // pending RenderViewHost, this test case creates a new window through the new | 195 // pending RenderViewHost, this test case creates a new window through the new |
196 // process. | 196 // process. |
197 IN_PROC_BROWSER_TEST_F(SecurityExploitBrowserTest, | 197 IN_PROC_BROWSER_TEST_F(SecurityExploitBrowserTest, |
198 AttemptDuplicateRenderViewHost) { | 198 AttemptDuplicateRenderViewHost) { |
199 int duplicate_routing_id = MSG_ROUTING_NONE; | 199 int32_t duplicate_routing_id = MSG_ROUTING_NONE; |
200 RenderViewHostImpl* pending_rvh = | 200 RenderViewHostImpl* pending_rvh = |
201 PrepareToDuplicateHosts(shell(), &duplicate_routing_id); | 201 PrepareToDuplicateHosts(shell(), &duplicate_routing_id); |
202 EXPECT_NE(MSG_ROUTING_NONE, duplicate_routing_id); | 202 EXPECT_NE(MSG_ROUTING_NONE, duplicate_routing_id); |
203 | 203 |
204 // Since this test executes on the UI thread and hopping threads might cause | 204 // Since this test executes on the UI thread and hopping threads might cause |
205 // different timing in the test, let's simulate a CreateNewWindow call coming | 205 // different timing in the test, let's simulate a CreateNewWindow call coming |
206 // from the IO thread. | 206 // from the IO thread. |
207 ViewHostMsg_CreateWindow_Params params; | 207 ViewHostMsg_CreateWindow_Params params; |
208 DOMStorageContextWrapper* dom_storage_context = | 208 DOMStorageContextWrapper* dom_storage_context = |
209 static_cast<DOMStorageContextWrapper*>( | 209 static_cast<DOMStorageContextWrapper*>( |
210 BrowserContext::GetStoragePartition( | 210 BrowserContext::GetStoragePartition( |
211 shell()->web_contents()->GetBrowserContext(), | 211 shell()->web_contents()->GetBrowserContext(), |
212 pending_rvh->GetSiteInstance())->GetDOMStorageContext()); | 212 pending_rvh->GetSiteInstance())->GetDOMStorageContext()); |
213 scoped_refptr<SessionStorageNamespaceImpl> session_storage( | 213 scoped_refptr<SessionStorageNamespaceImpl> session_storage( |
214 new SessionStorageNamespaceImpl(dom_storage_context)); | 214 new SessionStorageNamespaceImpl(dom_storage_context)); |
215 // Cause a deliberate collision in routing ids. | 215 // Cause a deliberate collision in routing ids. |
216 int main_frame_routing_id = duplicate_routing_id + 1; | 216 int32_t main_frame_routing_id = duplicate_routing_id + 1; |
217 pending_rvh->CreateNewWindow(duplicate_routing_id, | 217 // TODO(avi): This should be made unique from the view routing ID once |
218 main_frame_routing_id, | 218 // RenderViewHostImpl has-a RenderWidgetHostImpl. https://crbug.com/545684 |
219 params, | 219 int32_t main_frame_widget_routing_id = duplicate_routing_id; |
| 220 pending_rvh->CreateNewWindow(duplicate_routing_id, main_frame_routing_id, |
| 221 main_frame_widget_routing_id, params, |
220 session_storage.get()); | 222 session_storage.get()); |
221 | 223 |
222 // If the above operation doesn't cause a crash, the test has succeeded! | 224 // If the above operation doesn't cause a crash, the test has succeeded! |
223 } | 225 } |
224 | 226 |
225 // This is a test for crbug.com/312016. It tries to create two RenderWidgetHosts | 227 // This is a test for crbug.com/312016. It tries to create two RenderWidgetHosts |
226 // with the same process and routing ids, which causes a collision. It is almost | 228 // with the same process and routing ids, which causes a collision. It is almost |
227 // identical to the AttemptDuplicateRenderViewHost test case. | 229 // identical to the AttemptDuplicateRenderViewHost test case. |
228 IN_PROC_BROWSER_TEST_F(SecurityExploitBrowserTest, | 230 IN_PROC_BROWSER_TEST_F(SecurityExploitBrowserTest, |
229 AttemptDuplicateRenderWidgetHost) { | 231 AttemptDuplicateRenderWidgetHost) { |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); | 429 RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); |
428 IPC::IpcSecurityTestUtil::PwnMessageReceived( | 430 IPC::IpcSecurityTestUtil::PwnMessageReceived( |
429 web_rfh->GetProcess()->GetChannel(), | 431 web_rfh->GetProcess()->GetChannel(), |
430 ResourceHostMsg_RequestResource(web_rfh->GetRoutingID(), 1, | 432 ResourceHostMsg_RequestResource(web_rfh->GetRoutingID(), 1, |
431 invalid_scheme_origin_msg)); | 433 invalid_scheme_origin_msg)); |
432 web_process_killed.Wait(); | 434 web_process_killed.Wait(); |
433 } | 435 } |
434 } | 436 } |
435 | 437 |
436 } // namespace content | 438 } // namespace content |
OLD | NEW |