web_contents_impl_browsertest.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/frame_host/navigation_entry_impl.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/browser/web_contents/web_contents_impl.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/load_notification_details.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_controller.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_details.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_types.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/browser/render_widget_host_view.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/browser/web_contents_view.h" 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/content_paths.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/test/content_browser_test.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/test/content_browser_test_utils.h" 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/dns/mock_host_resolver.h" 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void ResizeWebContentsView(Shell* shell, const gfx::Size& size, 29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool set_start_page) { 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Shell::SizeTo is not implemented on Aura; WebContentsView::SizeContents 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // works on Win and ChromeOS but not Linux - we need to resize the shell 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // window on Linux because if we don't, the next layout of the unchanged shell 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // window will resize WebContentsView back to the previous size. 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // SizeContents is a hack and should not be relied on. 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#if defined(TOOLKIT_GTK) || defined(OS_MACOSX) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shell->SizeTo(size); 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // If |set_start_page| is true, start with blank page to make sure resize 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // takes effect. 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (set_start_page) 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NavigateToURL(shell, GURL("about://blank")); 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#else 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) shell->web_contents()->GetView()->SizeContents(size); 43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif // defined(TOOLKIT_GTK) || defined(OS_MACOSX) 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebContentsImplBrowserTest : public ContentBrowserTest { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebContentsImplBrowserTest() {} 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebContentsImplBrowserTest); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Keeps track of data from LoadNotificationDetails so we can later verify that 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// they are correct, after the LoadNotificationDetails object is deleted. 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class LoadStopNotificationObserver : public WindowedNotificationObserver { 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadStopNotificationObserver(NavigationController* controller) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : WindowedNotificationObserver(NOTIFICATION_LOAD_STOP, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Source<NavigationController>(controller)), 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) session_index_(-1), 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller_(NULL) { 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Observe(int type, 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const NotificationSource& source, 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const NotificationDetails& details) OVERRIDE { 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (type == NOTIFICATION_LOAD_STOP) { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Details<LoadNotificationDetails> load_details(details); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_ = load_details->url; 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) session_index_ = load_details->session_index; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller_ = load_details->controller; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WindowedNotificationObserver::Observe(type, source, details); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL url_; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int session_index_; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NavigationController* controller_; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Starts a new navigation as soon as the current one commits, but does not 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// wait for it to complete. This allows us to observe DidStopLoading while 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// a pending entry is present. 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class NavigateOnCommitObserver : public WebContentsObserver { 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NavigateOnCommitObserver(Shell* shell, GURL url) 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : WebContentsObserver(shell->web_contents()), 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shell_(shell), 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url_(url), 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) done_(false) { 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // WebContentsObserver: 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void NavigationEntryCommitted( 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const LoadCommittedDetails& load_details) OVERRIDE { 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!done_) { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) done_ = true; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shell_->LoadURL(url_); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Shell* shell_; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL url_; 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool done_; 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class RenderViewSizeDelegate : public WebContentsDelegate { 108424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public: 109424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void set_size_insets(const gfx::Size& size_insets) { 110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size_insets_ = size_insets; 111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 112424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 113424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // WebContentsDelegate: 114424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual gfx::Size GetSizeForNewRenderView( 115424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const WebContents* web_contents) const OVERRIDE { 116424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size size(web_contents->GetView()->GetContainerSize()); 117424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size.Enlarge(size_insets_.width(), size_insets_.height()); 118424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return size; 119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 121424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private: 122424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size size_insets_; 123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class RenderViewSizeObserver : public WebContentsObserver { 126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public: 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RenderViewSizeObserver(Shell* shell, const gfx::Size& wcv_new_size) 128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) : WebContentsObserver(shell->web_contents()), 129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) shell_(shell), 130424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) wcv_new_size_(wcv_new_size) { 131424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // WebContentsObserver: 134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void RenderViewCreated(RenderViewHost* rvh) OVERRIDE { 135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) rwhv_create_size_ = rvh->GetView()->GetViewBounds().size(); 136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DidStartNavigationToPendingEntry( 139424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const GURL& url, 140424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NavigationController::ReloadType reload_type) OVERRIDE { 141424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ResizeWebContentsView(shell_, wcv_new_size_, false); 142424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 143424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 144424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size rwhv_create_size() const { return rwhv_create_size_; } 145424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 146424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private: 147424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Shell* shell_; // Weak ptr. 148424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size wcv_new_size_; 149424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size rwhv_create_size_; 150424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 151424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 15268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// See: http://crbug.com/298193 15368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_WIN) 15468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define MAYBE_DidStopLoadingDetails DISABLED_DidStopLoadingDetails 15568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#else 15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define MAYBE_DidStopLoadingDetails DidStopLoadingDetails 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test that DidStopLoading includes the correct URL in the details. 16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) MAYBE_DidStopLoadingDetails) { 16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadStopNotificationObserver load_observer( 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &shell()->web_contents()->GetController()); 16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) load_observer.Wait(); 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("/title1.html", load_observer.url_.path()); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, load_observer.session_index_); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(&shell()->web_contents()->GetController(), 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) load_observer.controller_); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// See: http://crbug.com/298193 17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#if defined(OS_WIN) 17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define MAYBE_DidStopLoadingDetailsWithPending \ 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DISABLED_DidStopLoadingDetailsWithPending 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#else 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define MAYBE_DidStopLoadingDetailsWithPending DidStopLoadingDetailsWithPending 18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test that DidStopLoading includes the correct URL in the details when a 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// pending entry is present. 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, 18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) MAYBE_DidStopLoadingDetailsWithPending) { 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Listen for the first load to stop. 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoadStopNotificationObserver load_observer( 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &shell()->web_contents()->GetController()); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Start a new pending navigation as soon as the first load commits. 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // We will hear a DidStopLoading from the first load as the new load 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // is started. 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NavigateOnCommitObserver commit_observer( 19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) shell(), embedded_test_server()->GetURL("/title2.html")); 19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) load_observer.Wait(); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ("/title1.html", load_observer.url_.path()); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, load_observer.session_index_); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(&shell()->web_contents()->GetController(), 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) load_observer.controller_); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that a renderer-initiated navigation to an invalid URL does not leave 20658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// around a pending entry that could be used in a URL spoof. We test this in 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// a browser test because our unit test framework incorrectly calls 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// DidStartProvisionalLoadForFrame for in-page navigations. 20958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// See http://crbug.com/280512. 21058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ClearNonVisiblePendingOnFail) { 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); 21558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Navigate to an invalid URL and make sure it doesn't leave a pending entry. 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LoadStopNotificationObserver load_observer1( 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &shell()->web_contents()->GetController()); 21958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(ExecuteScript(shell()->web_contents(), 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "window.location.href=\"nonexistent:12121\";")); 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) load_observer1.Wait(); 22258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(shell()->web_contents()->GetController().GetPendingEntry()); 22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LoadStopNotificationObserver load_observer2( 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &shell()->web_contents()->GetController()); 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(ExecuteScript(shell()->web_contents(), 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "window.location.href=\"#foo\";")); 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) load_observer2.Wait(); 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(embedded_test_server()->GetURL("/title1.html#foo"), 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) shell()->web_contents()->GetVisibleURL()); 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TODO(shrikant): enable this for Windows when issue with 23458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// force-compositing-mode is resolved (http://crbug.com/281726). 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// For TOOLKIT_GTK failure, see http://crbug.com/351234. 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_ANDROID) || defined(TOOLKIT_GTK) 237424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define MAYBE_GetSizeForNewRenderView DISABLED_GetSizeForNewRenderView 238424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#else 239424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define MAYBE_GetSizeForNewRenderView GetSizeForNewRenderView 240424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif 241424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Test that RenderViewHost is created and updated at the size specified by 242424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// WebContentsDelegate::GetSizeForNewRenderView(). 243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, 244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) MAYBE_GetSizeForNewRenderView) { 245d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 246d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Create a new server with a different site. 247d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) net::SpawnedTestServer https_server( 248d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) net::SpawnedTestServer::TYPE_HTTPS, 249d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 250d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("content/test/data"))); 251d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(https_server.Start()); 252d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 253424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<RenderViewSizeDelegate> delegate(new RenderViewSizeDelegate()); 254424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) shell()->web_contents()->SetDelegate(delegate.get()); 255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ASSERT_TRUE(shell()->web_contents()->GetDelegate() == delegate.get()); 256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 257424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // When no size is set, RenderWidgetHostView adopts the size of 258a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // WebContentsView. 259d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NavigateToURL(shell(), embedded_test_server()->GetURL("/title2.html")); 260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(shell()->web_contents()->GetView()->GetContainerSize(), 261424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) shell()->web_contents()->GetRenderWidgetHostView()->GetViewBounds(). 262424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size()); 263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // When a size is set, RenderWidgetHostView and WebContentsView honor this 265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // size. 266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size size(300, 300); 267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size size_insets(10, 15); 268424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ResizeWebContentsView(shell(), size, true); 269424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) delegate->set_size_insets(size_insets); 270d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NavigateToURL(shell(), https_server.GetURL("/")); 271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size.Enlarge(size_insets.width(), size_insets.height()); 272424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(size, 273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) shell()->web_contents()->GetRenderWidgetHostView()->GetViewBounds(). 274424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size()); 275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The web_contents size is set by the embedder, and should not depend on the 276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // rwhv size. The behavior is correct on OSX, but incorrect on other 277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // platforms. 278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size exp_wcv_size(300, 300); 279a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(OS_MACOSX) 280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) exp_wcv_size.Enlarge(size_insets.width(), size_insets.height()); 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(exp_wcv_size, 284a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) shell()->web_contents()->GetView()->GetContainerSize()); 285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // If WebContentsView is resized after RenderWidgetHostView is created but 287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // before pending navigation entry is committed, both RenderWidgetHostView and 288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // WebContentsView use the new size of WebContentsView. 289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size init_size(200, 200); 290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Size new_size(100, 100); 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_insets = gfx::Size(20, 30); 292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ResizeWebContentsView(shell(), init_size, true); 293424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) delegate->set_size_insets(size_insets); 294424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RenderViewSizeObserver observer(shell(), new_size); 295d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); 296424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // RenderWidgetHostView is created at specified size. 297424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) init_size.Enlarge(size_insets.width(), size_insets.height()); 298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(init_size, observer.rwhv_create_size()); 299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Once again, the behavior is correct on OSX. The embedder explicitly sets 301a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// the size to (100,100) during navigation. Both the wcv and the rwhv should 302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// take on that size. 303a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(OS_MACOSX) 304424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new_size.Enlarge(size_insets.width(), size_insets.height()); 305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size actual_size = shell()->web_contents()->GetRenderWidgetHostView()-> 307a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetViewBounds().size(); 308a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(new_size, actual_size); 310424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(new_size, shell()->web_contents()->GetView()->GetContainerSize()); 311424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 312424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, OpenURLSubframe) { 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 315a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Navigate with FrameTreeNode ID 4. 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL url("http://foo"); 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OpenURLParams params(url, Referrer(), 4, CURRENT_TAB, PAGE_TRANSITION_LINK, 318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true); 319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shell()->web_contents()->OpenURL(params); 320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure the NavigationEntry ends up with the FrameTreeNode ID. 322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NavigationController* controller = &shell()->web_contents()->GetController(); 323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(controller->GetPendingEntry()); 324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(4, NavigationEntryImpl::FromNavigationEntry( 325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) controller->GetPendingEntry())->frame_tree_node_id()); 326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 328a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Observer class to track the creation of RenderFrameHost objects. It is used 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// in subsequent tests. 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class RenderFrameCreatedObserver : public WebContentsObserver { 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 332a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameCreatedObserver(Shell* shell) 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : WebContentsObserver(shell->web_contents()), 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) last_rfh_(NULL) { 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE { 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LOG(ERROR) << "RFCreated: " << render_frame_host; 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) last_rfh_ = render_frame_host; 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameHost* last_rfh() const { return last_rfh_; } 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameHost* last_rfh_; 346a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 347a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RenderFrameCreatedObserver); 348a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Test that creation of new RenderFrameHost objects sends the correct object 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// to the WebContentObservers. See http://crbug.com/347339. 352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameCreatedCorrectProcessForObservers) { 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string foo_com("foo.com"); 355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GURL::Replacements replace_host; 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::HostPortPair foo_host_port; 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GURL cross_site_url; 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Setup the server to allow serving separate sites, so we can perform 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // cross-process navigation. 361a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) host_resolver()->AddRule("*", "127.0.0.1"); 362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) foo_host_port = test_server()->host_port_pair(); 365a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) foo_host_port.set_host(foo_com); 366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GURL initial_url(test_server()->GetURL("/title1.html")); 368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cross_site_url = test_server()->GetURL("/title2.html"); 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) replace_host.SetHostStr(foo_com); 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cross_site_url = cross_site_url.ReplaceComponents(replace_host); 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Navigate to the initial URL and capture the RenderFrameHost for later 374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // comparison. 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NavigateToURL(shell(), initial_url); 376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameHost* orig_rfh = shell()->web_contents()->GetMainFrame(); 377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Install the observer and navigate cross-site. 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderFrameCreatedObserver observer(shell()); 380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NavigateToURL(shell(), cross_site_url); 381a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The observer should've seen a RenderFrameCreated call for the new frame 383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // and not the old one. 384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_NE(observer.last_rfh(), orig_rfh); 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(observer.last_rfh(), shell()->web_contents()->GetMainFrame()); 386a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace content 389