168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/bind.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/browser_process.h"
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile_metrics.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile_window.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profiles_state.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/browser/web_contents.h"
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/browser/web_ui.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window_registry.h"
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace options {
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace helper {
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)chrome::HostDesktopType GetDesktopType(content::WebUI* web_ui) {
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  DCHECK(web_ui);
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  content::WebContents* web_contents = web_ui->GetWebContents();
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (browser)
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return browser->host_desktop_type();
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  extensions::AppWindow* app_window =
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      extensions::AppWindowRegistry::Get(Profile::FromWebUI(web_ui))
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          ->GetAppWindowForRenderViewHost(web_contents->GetRenderViewHost());
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (app_window) {
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return chrome::GetHostDesktopTypeForNativeWindow(
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        app_window->GetNativeWindow());
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return chrome::GetActiveDesktop();
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void OpenNewWindowForProfile(chrome::HostDesktopType desktop_type,
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                             Profile* profile,
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                             Profile::CreateStatus status) {
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (status != Profile::CREATE_STATUS_INITIALIZED)
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return;
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  profiles::FindOrCreateNewWindowForProfile(
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    profile,
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    chrome::startup::IS_PROCESS_STARTUP,
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    chrome::startup::IS_FIRST_RUN,
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    desktop_type,
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    false);
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void DeleteProfileAtPath(base::FilePath file_path, content::WebUI* web_ui) {
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  DCHECK(web_ui);
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // This handler could have been called for a supervised user, for example
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // because the user fiddled with the web inspector. Silently return in this
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // case.
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (Profile::FromWebUI(web_ui)->IsSupervised())
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return;
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return;
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ProfileMetrics::LogProfileDeleteUser(ProfileMetrics::DELETE_PROFILE_SETTINGS);
6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  g_browser_process->profile_manager()->ScheduleProfileForDeletion(
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      file_path,
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      base::Bind(&OpenNewWindowForProfile, GetDesktopType(web_ui)));
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace helper
7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace options
72