Home | History | Annotate | Download | only in profiles
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/profiles/profile_window.h"
      6 
      7 #include "base/command_line.h"
      8 #include "base/files/file_path.h"
      9 #include "chrome/browser/browser_process.h"
     10 #include "chrome/browser/profiles/profile.h"
     11 #include "chrome/browser/profiles/profile_manager.h"
     12 #include "chrome/browser/ui/browser.h"
     13 #include "content/public/browser/browser_thread.h"
     14 #include "content/public/browser/user_metrics.h"
     15 
     16 #if !defined(OS_IOS)
     17 #include "chrome/browser/ui/browser_finder.h"
     18 #include "chrome/browser/ui/browser_window.h"
     19 #include "chrome/browser/ui/startup/startup_browser_creator.h"
     20 #endif  // !defined (OS_IOS)
     21 
     22 using content::BrowserThread;
     23 using content::UserMetricsAction;
     24 
     25 namespace {
     26 
     27 void OpenBrowserWindowForProfile(bool always_create,
     28                                  chrome::HostDesktopType desktop_type,
     29                                  Profile* profile,
     30                                  Profile::CreateStatus status) {
     31   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     32 
     33   if (status == Profile::CREATE_STATUS_INITIALIZED) {
     34     profiles::FindOrCreateNewWindowForProfile(
     35         profile,
     36         chrome::startup::IS_NOT_PROCESS_STARTUP,
     37         chrome::startup::IS_NOT_FIRST_RUN,
     38         desktop_type,
     39         always_create);
     40   }
     41 }
     42 
     43 }  // namespace
     44 
     45 namespace profiles {
     46 
     47 void FindOrCreateNewWindowForProfile(
     48     Profile* profile,
     49     chrome::startup::IsProcessStartup process_startup,
     50     chrome::startup::IsFirstRun is_first_run,
     51     chrome::HostDesktopType desktop_type,
     52     bool always_create) {
     53 #if defined(OS_IOS)
     54   NOTREACHED();
     55 #else
     56   DCHECK(profile);
     57 
     58   if (!always_create) {
     59     Browser* browser = chrome::FindTabbedBrowser(profile, false, desktop_type);
     60     if (browser) {
     61       browser->window()->Activate();
     62       return;
     63     }
     64   }
     65 
     66   content::RecordAction(UserMetricsAction("NewWindow"));
     67   CommandLine command_line(CommandLine::NO_PROGRAM);
     68   int return_code;
     69   StartupBrowserCreator browser_creator;
     70   browser_creator.LaunchBrowser(command_line, profile, base::FilePath(),
     71                                 process_startup, is_first_run, &return_code);
     72 #endif  // defined(OS_IOS)
     73 }
     74 
     75 void SwitchToProfile(
     76     const base::FilePath& path,
     77     chrome::HostDesktopType desktop_type,
     78     bool always_create) {
     79   g_browser_process->profile_manager()->CreateProfileAsync(
     80       path,
     81       base::Bind(&OpenBrowserWindowForProfile,
     82                  always_create,
     83                  desktop_type),
     84       string16(),
     85       string16(),
     86       std::string());
     87 }
     88 
     89 }  // namespace profiles
     90