1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file.
4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/cocoa/browser_test_helper.h"
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
7dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenBrowserTestHelper::BrowserTestHelper()
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    : ui_thread_(BrowserThread::UI, &message_loop_),
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      file_thread_(new BrowserThread(BrowserThread::FILE, &message_loop_)),
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      io_thread_(new BrowserThread(BrowserThread::IO, &message_loop_)) {
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  profile_.reset(new TestingProfile());
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  profile_->CreateBookmarkModel(true);
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  profile_->BlockUntilBookmarkModelLoaded();
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // TODO(shess): These are needed in case someone creates a browser
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // window off of browser_.  pkasting indicates that other
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // platforms use a stub |BrowserWindow| and thus don't need to do
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // this.
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // http://crbug.com/39725
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  profile_->CreateAutocompleteClassifier();
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  profile_->CreateTemplateURLModel();
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  browser_.reset(new Browser(Browser::TYPE_NORMAL, profile_.get()));
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
26dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenBrowserTestHelper::~BrowserTestHelper() {
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Delete the testing profile on the UI thread. But first release the
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // browser, since it may trigger accesses to the profile upon destruction.
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  browser_.reset();
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  message_loop_.DeleteSoon(FROM_HERE, profile_.release());
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Make sure any pending tasks run before we destroy other threads.
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  message_loop_.RunAllPending();
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Drop any new tasks for the IO and FILE threads.
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  io_thread_.reset();
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  file_thread_.reset();
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  message_loop_.RunAllPending();
40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
42dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTestingProfile* BrowserTestHelper::profile() const {
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  return profile_.get();
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
46dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenBrowserWindow* BrowserTestHelper::CreateBrowserWindow() {
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  browser_->InitBrowserWindow();
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  return browser_->window();
49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid BrowserTestHelper::CloseBrowserWindow() {
52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Check to make sure a window was actually created.
53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  DCHECK(browser_->window());
54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  browser_->CloseAllTabs();
55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  browser_->CloseWindow();
56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // |browser_| will be deleted by its BrowserWindowController.
57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ignore_result(browser_.release());
58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
59