Chromium Code Reviews| Index: chrome/browser/browser.cc |
| =================================================================== |
| --- chrome/browser/browser.cc (revision 8370) |
| +++ chrome/browser/browser.cc (working copy) |
| @@ -163,7 +163,8 @@ |
| is_attempting_to_close_browser_(false), |
| override_maximized_(false), |
| method_factory_(this), |
| - idle_task_(new BrowserIdleTimer) { |
| + idle_task_(new BrowserIdleTimer), |
| + open_new_windows_in_default_browser_(false) { |
| tabstrip_model_.AddObserver(this); |
| NotificationService::current()->AddObserver( |
| @@ -1109,7 +1110,7 @@ |
| case IDC_NEW_WINDOW_PROFILE_5: |
| case IDC_NEW_WINDOW_PROFILE_6: |
| case IDC_NEW_WINDOW_PROFILE_7: |
| - case IDC_NEW_WINDOW_PROFILE_8: |
| + case IDC_NEW_WINDOW_PROFILE_8: |
| NewProfileWindowByIndex(id - IDC_NEW_WINDOW_PROFILE_0); break; |
| case IDC_CLOSE_WINDOW: CloseWindow(); break; |
| case IDC_NEW_TAB: NewTab(); break; |
| @@ -1649,12 +1650,14 @@ |
| DCHECK(disposition != SAVE_TO_DISK); // No code for this yet |
| // If this is an application we can only have one tab so we need to process |
| - // this in tabbed browser window. |
| - if (tabstrip_model_.count() > 0 && |
| + // this in tabbed browser window. The new window will act as an intermediary |
| + // to launch urls in the default browser. |
| + if (tabstrip_model_.count() > 0 && // A launched application has count of 1. |
| disposition != NEW_WINDOW && disposition != NEW_POPUP && |
| type_ != TYPE_NORMAL) { |
| Browser* b = GetOrCreateTabbedBrowser(); |
| DCHECK(b); |
| + b->set_open_new_windows_in_default_browser(true); |
|
Mark Larson
2009/01/23 07:02:33
When does this get unset?
|
| PageTransition::Type transition = PageTransition::LINK; |
| // If we were called from an "installed webapp" we want to emulate the code |
| // that is run from browser_init.cc for links from external applications. |
| @@ -1664,7 +1667,13 @@ |
| if (type_ == TYPE_APP) |
| transition = PageTransition::START_PAGE; |
| b->tabstrip_model()->AddTabContents(new_contents, -1, transition, true); |
| - b->window()->Show(); |
| + |
| + // All new windows from an "installed webapp" which must have their own |
| + // tabs will be launched in the default browser. At this moment the |
| + // url is inaccessbile and so we do not show the window until the url is |
| + // reported to the TabConentsDelegate. |
| + if (type_ != TYPE_APP) |
| + b->window()->Show(); |
| return; |
| } |
| @@ -1774,6 +1783,10 @@ |
| return type_ == TYPE_APP; |
| } |
| +bool Browser::ShouldOpenURLInDefaultBrowser() const { |
| + return open_new_windows_in_default_browser_; |
| +} |
| + |
| void Browser::ConvertContentsToApplication(TabContents* contents) { |
| WebContents* web_contents = contents->AsWebContents(); |
| if (!web_contents || !web_contents->web_app()) { |
| @@ -2420,3 +2433,4 @@ |
| } |
| #endif // OS_WIN |
| + |