content_browser_test_utils.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/content_browser_test_utils.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/browser/web_contents/web_contents_impl.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_paths.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_navigation_observer.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_utils.h" 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell.h" 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell_javascript_dialog_manager.h" 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "net/base/filename_util.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetTestFilePath(const char* dir, const char* file) { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(DIR_TEST_DATA, &path); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return path.Append(base::FilePath().AppendASCII(dir).Append( 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(file))); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetTestUrl(const char* dir, const char* file) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return net::FilePathToFileURL(GetTestFilePath(dir, file)); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NavigateToURLBlockUntilNavigationsComplete(Shell* window, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int number_of_navigations) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForLoadStop(window->web_contents()); 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestNavigationObserver same_tab_observer(window->web_contents(), 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) number_of_navigations); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->LoadURL(url); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) same_tab_observer.Wait(); 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid LoadDataWithBaseURL(Shell* window, const GURL& url, 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const std::string data, const GURL& base_url) { 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WaitForLoadStop(window->web_contents()); 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch TestNavigationObserver same_tab_observer(window->web_contents(), 1); 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch window->LoadDataWithBaseURL(url, data, base_url); 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch same_tab_observer.Wait(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NavigateToURL(Shell* window, const GURL& url) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateToURLBlockUntilNavigationsComplete(window, url, 1); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WaitForAppModalDialog(Shell* window) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellJavaScriptDialogManager* dialog_manager= 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<ShellJavaScriptDialogManager*>( 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->GetJavaScriptDialogManager()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MessageLoopRunner> runner = new MessageLoopRunner(); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dialog_manager->set_dialog_request_callback(runner->QuitClosure()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runner->Run(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellAddedObserver::ShellAddedObserver() 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : shell_(NULL) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::SetShellCreatedCallback( 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ShellAddedObserver::ShellCreated, base::Unretained(this))); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellAddedObserver::~ShellAddedObserver() { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Shell* ShellAddedObserver::GetShell() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (shell_) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shell_; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runner_ = new MessageLoopRunner(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runner_->Run(); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shell_; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellAddedObserver::ShellCreated(Shell* shell) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!shell_); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shell_ = shell; 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (runner_.get()) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runner_->QuitClosure().Run(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class RenderViewCreatedObserver : public WebContentsObserver { 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RenderViewCreatedObserver(WebContents* web_contents) 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : WebContentsObserver(web_contents), 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view_created_called_(false) { 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // WebContentsObserver: 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void RenderViewCreated(RenderViewHost* rvh) OVERRIDE { 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view_created_called_ = true; 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool render_view_created_called_; 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)WebContentsAddedObserver::WebContentsAddedObserver() 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : web_contents_created_callback_( 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind( 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &WebContentsAddedObserver::WebContentsCreated, 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Unretained(this))), 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_contents_(NULL) { 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContentsImpl::AddCreatedCallback(web_contents_created_callback_); 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)WebContentsAddedObserver::~WebContentsAddedObserver() { 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContentsImpl::RemoveCreatedCallback(web_contents_created_callback_); 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void WebContentsAddedObserver::WebContentsCreated(WebContents* web_contents) { 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(!web_contents_); 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_contents_ = web_contents; 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) child_observer_.reset(new RenderViewCreatedObserver(web_contents)); 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (runner_.get()) 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) runner_->QuitClosure().Run(); 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)WebContents* WebContentsAddedObserver::GetWebContents() { 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (web_contents_) 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return web_contents_; 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) runner_ = new MessageLoopRunner(); 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) runner_->Run(); 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return web_contents_; 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool WebContentsAddedObserver::RenderViewCreatedCalled() { 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (child_observer_) 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return child_observer_->render_view_created_called_; 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 149