options_handlers_helper.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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 "apps/shell_window.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "apps/shell_window_registry.h"
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/bind.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/browser_process.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile_metrics.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile_window.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profiles_state.h"
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h"
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/browser/web_contents.h"
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/browser/web_ui.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)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  apps::ShellWindow* shell_window =
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      apps::ShellWindowRegistry::Get(Profile::FromWebUI(web_ui))->
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          GetShellWindowForRenderViewHost(web_contents->GetRenderViewHost());
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (shell_window) {
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return chrome::GetHostDesktopTypeForNativeWindow(
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shell_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);
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // This handler could have been called in managed mode, for example because
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // the user fiddled with the web inspector. Silently return in this case.
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (Profile::FromWebUI(web_ui)->IsManaged())
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return;
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return;
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ProfileMetrics::LogProfileDeleteUser(ProfileMetrics::PROFILE_DELETED);
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  g_browser_process->profile_manager()->ScheduleProfileForDeletion(
6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      file_path,
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      base::Bind(&OpenNewWindowForProfile, GetDesktopType(web_ui)));
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace helper
7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace options
7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
73