1 // Copyright (c) 2014 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.
5 #include "chrome/browser/ui/settings_window_manager.h"
7 #include "chrome/browser/profiles/profile.h"
8 #include "chrome/browser/ui/browser_finder.h"
9 #include "chrome/browser/ui/browser_finder.h"
10 #include "chrome/browser/ui/browser_navigator.h"
11 #include "chrome/browser/ui/browser_window.h"
12 #include "chrome/browser/ui/chrome_pages.h"
13 #include "chrome/browser/ui/settings_window_manager_observer.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model.h"
15 #include "content/public/browser/user_metrics.h"
16 #include "content/public/browser/web_contents.h"
22 SettingsWindowManager
* SettingsWindowManager::GetInstance() {
23 return Singleton
<SettingsWindowManager
>::get();
26 void SettingsWindowManager::AddObserver(
27 SettingsWindowManagerObserver
* observer
) {
28 observers_
.AddObserver(observer
);
31 void SettingsWindowManager::RemoveObserver(
32 SettingsWindowManagerObserver
* observer
) {
33 observers_
.RemoveObserver(observer
);
36 void SettingsWindowManager::ShowChromePageForProfile(Profile
* profile
,
38 // Look for an existing browser window.
39 Browser
* browser
= FindBrowserForProfile(profile
);
41 DCHECK(browser
->profile() == profile
);
42 const content::WebContents
* web_contents
=
43 browser
->tab_strip_model()->GetWebContentsAt(0);
44 if (web_contents
&& web_contents
->GetURL() == gurl
) {
45 browser
->window()->Show();
48 NavigateParams
params(browser
, gurl
,
49 content::PAGE_TRANSITION_AUTO_BOOKMARK
);
50 params
.window_action
= NavigateParams::SHOW_WINDOW
;
51 params
.user_gesture
= true;
52 chrome::Navigate(¶ms
);
56 // No existing browser window, create one.
57 NavigateParams
params(profile
, gurl
, content::PAGE_TRANSITION_AUTO_BOOKMARK
);
58 params
.disposition
= NEW_POPUP
;
59 params
.trusted_source
= true;
60 params
.window_action
= NavigateParams::SHOW_WINDOW
;
61 params
.user_gesture
= true;
62 params
.path_behavior
= NavigateParams::IGNORE_AND_NAVIGATE
;
63 chrome::Navigate(¶ms
);
64 settings_session_map_
[profile
] = params
.browser
->session_id().id();
66 FOR_EACH_OBSERVER(SettingsWindowManagerObserver
,
67 observers_
, OnNewSettingsWindow(params
.browser
));
70 Browser
* SettingsWindowManager::FindBrowserForProfile(Profile
* profile
) {
71 ProfileSessionMap::iterator iter
= settings_session_map_
.find(profile
);
72 if (iter
!= settings_session_map_
.end())
73 return chrome::FindBrowserWithID(iter
->second
);
77 bool SettingsWindowManager::IsSettingsBrowser(Browser
* browser
) const {
78 ProfileSessionMap::const_iterator iter
=
79 settings_session_map_
.find(browser
->profile());
80 return (iter
!= settings_session_map_
.end() &&
81 iter
->second
== browser
->session_id().id());
84 SettingsWindowManager::SettingsWindowManager() {
87 SettingsWindowManager::~SettingsWindowManager() {