Upstream version 11.39.250.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / settings_window_manager.cc
index f2a93ad..dbe176a 100644 (file)
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/settings_window_manager_observer.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
+#include "url/gurl.h"
 
 namespace chrome {
 
@@ -21,38 +23,65 @@ SettingsWindowManager* SettingsWindowManager::GetInstance() {
   return Singleton<SettingsWindowManager>::get();
 }
 
-void SettingsWindowManager::ShowForProfile(Profile* profile,
-                                           const std::string& sub_page) {
-  content::RecordAction(base::UserMetricsAction("ShowOptions"));
-  GURL gurl = chrome::GetSettingsUrl(sub_page);
+void SettingsWindowManager::AddObserver(
+    SettingsWindowManagerObserver* observer) {
+  observers_.AddObserver(observer);
+}
+
+void SettingsWindowManager::RemoveObserver(
+    SettingsWindowManagerObserver* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+void SettingsWindowManager::ShowChromePageForProfile(Profile* profile,
+                                                     const GURL& gurl) {
+  // Use the original (non off-the-record) profile for settings.
+  profile = profile->GetOriginalProfile();
   // Look for an existing browser window.
-  ProfileSessionMap::iterator iter = settings_session_map_.find(profile);
-  if (iter != settings_session_map_.end()) {
-    Browser* browser = chrome::FindBrowserWithID(iter->second);
-    if (browser) {
-      DCHECK(browser->profile() == profile);
-      const content::WebContents* web_contents =
-          browser->tab_strip_model()->GetWebContentsAt(0);
-      if (web_contents && web_contents->GetURL() == gurl) {
-        browser->window()->Show();
-        return;
-      }
-      NavigateParams params(browser, gurl,
-                            content::PAGE_TRANSITION_AUTO_BOOKMARK);
-      params.window_action = NavigateParams::SHOW_WINDOW;
-      params.user_gesture = true;
-      chrome::Navigate(&params);
+  Browser* browser = FindBrowserForProfile(profile);
+  if (browser) {
+    DCHECK(browser->profile() == profile);
+    const content::WebContents* web_contents =
+        browser->tab_strip_model()->GetWebContentsAt(0);
+    if (web_contents && web_contents->GetURL() == gurl) {
+      browser->window()->Show();
       return;
     }
+    NavigateParams params(browser, gurl,
+                          ui::PAGE_TRANSITION_AUTO_BOOKMARK);
+    params.window_action = NavigateParams::SHOW_WINDOW;
+    params.user_gesture = true;
+    chrome::Navigate(&params);
+    return;
   }
+
   // No existing browser window, create one.
-  NavigateParams params(profile, gurl, content::PAGE_TRANSITION_AUTO_BOOKMARK);
+  NavigateParams params(profile, gurl, ui::PAGE_TRANSITION_AUTO_BOOKMARK);
   params.disposition = NEW_POPUP;
+  params.trusted_source = true;
   params.window_action = NavigateParams::SHOW_WINDOW;
   params.user_gesture = true;
   params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
   chrome::Navigate(&params);
   settings_session_map_[profile] = params.browser->session_id().id();
+  DCHECK(params.browser->is_trusted_source());
+
+  FOR_EACH_OBSERVER(SettingsWindowManagerObserver,
+                    observers_, OnNewSettingsWindow(params.browser));
+}
+
+Browser* SettingsWindowManager::FindBrowserForProfile(Profile* profile) {
+  ProfileSessionMap::iterator iter = settings_session_map_.find(profile);
+  if (iter != settings_session_map_.end())
+    return chrome::FindBrowserWithID(iter->second);
+  return NULL;
+}
+
+bool SettingsWindowManager::IsSettingsBrowser(Browser* browser) const {
+  ProfileSessionMap::const_iterator iter =
+      settings_session_map_.find(browser->profile());
+  return (iter != settings_session_map_.end() &&
+          iter->second == browser->session_id().id());
 }
 
 SettingsWindowManager::SettingsWindowManager() {