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