Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Side by Side Diff: chrome/browser/extensions/extension_tab_util.cc

Issue 2685333005: ash: fix regression where ctrl+n put new window on wrong desktop (Closed)
Patch Set: We have both kinds of compile fixes: mac and windows Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_tab_util.h" 5 #include "chrome/browser/extensions/extension_tab_util.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 } 88 }
89 } 89 }
90 90
91 if (error_message) 91 if (error_message)
92 *error_message = ErrorUtils::FormatErrorMessage( 92 *error_message = ErrorUtils::FormatErrorMessage(
93 keys::kWindowNotFoundError, base::IntToString(window_id)); 93 keys::kWindowNotFoundError, base::IntToString(window_id));
94 94
95 return NULL; 95 return NULL;
96 } 96 }
97 97
98 Browser* CreateBrowser(Profile* profile, int window_id, std::string* error) { 98 Browser* CreateBrowser(Profile* profile,
99 Browser::CreateParams params(Browser::TYPE_TABBED, profile); 99 int window_id,
100 bool user_gesture,
101 std::string* error) {
102 Browser::CreateParams params(Browser::TYPE_TABBED, profile, user_gesture);
100 Browser* browser = new Browser(params); 103 Browser* browser = new Browser(params);
101 browser->window()->Show(); 104 browser->window()->Show();
102 return browser; 105 return browser;
103 } 106 }
104 107
105 // Use this function for reporting a tab id to an extension. It will 108 // Use this function for reporting a tab id to an extension. It will
106 // take care of setting the id to TAB_ID_NONE if necessary (for 109 // take care of setting the id to TAB_ID_NONE if necessary (for
107 // example with devtools). 110 // example with devtools).
108 int GetTabIdForExtensions(const WebContents* web_contents) { 111 int GetTabIdForExtensions(const WebContents* web_contents) {
109 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 112 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
110 if (browser && !ExtensionTabUtil::BrowserSupportsTabs(browser)) 113 if (browser && !ExtensionTabUtil::BrowserSupportsTabs(browser))
111 return -1; 114 return -1;
112 return SessionTabHelper::IdForTab(web_contents); 115 return SessionTabHelper::IdForTab(web_contents);
113 } 116 }
114 117
115 } // namespace 118 } // namespace
116 119
117 ExtensionTabUtil::OpenTabParams::OpenTabParams() 120 ExtensionTabUtil::OpenTabParams::OpenTabParams()
118 : create_browser_if_needed(false) { 121 : create_browser_if_needed(false) {
119 } 122 }
120 123
121 ExtensionTabUtil::OpenTabParams::~OpenTabParams() { 124 ExtensionTabUtil::OpenTabParams::~OpenTabParams() {
122 } 125 }
123 126
124 // Opens a new tab for a given extension. Returns NULL and sets |error| if an 127 // Opens a new tab for a given extension. Returns NULL and sets |error| if an
125 // error occurs. 128 // error occurs.
126 base::DictionaryValue* ExtensionTabUtil::OpenTab( 129 base::DictionaryValue* ExtensionTabUtil::OpenTab(
127 UIThreadExtensionFunction* function, 130 UIThreadExtensionFunction* function,
128 const OpenTabParams& params, 131 const OpenTabParams& params,
132 bool user_gesture,
129 std::string* error) { 133 std::string* error) {
130 ChromeExtensionFunctionDetails chrome_details(function); 134 ChromeExtensionFunctionDetails chrome_details(function);
131 Profile* profile = chrome_details.GetProfile(); 135 Profile* profile = chrome_details.GetProfile();
132 // windowId defaults to "current" window. 136 // windowId defaults to "current" window.
133 int window_id = extension_misc::kCurrentWindowId; 137 int window_id = extension_misc::kCurrentWindowId;
134 if (params.window_id.get()) 138 if (params.window_id.get())
135 window_id = *params.window_id; 139 window_id = *params.window_id;
136 140
137 Browser* browser = GetBrowserFromWindowID(chrome_details, window_id, error); 141 Browser* browser = GetBrowserFromWindowID(chrome_details, window_id, error);
138 if (!browser) { 142 if (!browser) {
139 if (!params.create_browser_if_needed) { 143 if (!params.create_browser_if_needed) {
140 return NULL; 144 return NULL;
141 } 145 }
142 browser = CreateBrowser(profile, window_id, error); 146 browser = CreateBrowser(profile, window_id, user_gesture, error);
143 if (!browser) 147 if (!browser)
144 return NULL; 148 return NULL;
145 } 149 }
146 150
147 // Ensure the selected browser is tabbed. 151 // Ensure the selected browser is tabbed.
148 if (!browser->is_type_tabbed() && browser->IsAttemptingToCloseBrowser()) 152 if (!browser->is_type_tabbed() && browser->IsAttemptingToCloseBrowser())
149 browser = chrome::FindTabbedBrowser(profile, function->include_incognito()); 153 browser = chrome::FindTabbedBrowser(profile, function->include_incognito());
150 if (!browser || !browser->window()) { 154 if (!browser || !browser->window()) {
151 if (error) 155 if (error)
152 *error = keys::kNoCurrentWindowError; 156 *error = keys::kNoCurrentWindowError;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 212
209 // We can't load extension URLs into incognito windows unless the extension 213 // We can't load extension URLs into incognito windows unless the extension
210 // uses split mode. Special case to fall back to a tabbed window. 214 // uses split mode. Special case to fall back to a tabbed window.
211 if (url.SchemeIs(kExtensionScheme) && 215 if (url.SchemeIs(kExtensionScheme) &&
212 !IncognitoInfo::IsSplitMode(function->extension()) && 216 !IncognitoInfo::IsSplitMode(function->extension()) &&
213 browser->profile()->IsOffTheRecord()) { 217 browser->profile()->IsOffTheRecord()) {
214 Profile* profile = browser->profile()->GetOriginalProfile(); 218 Profile* profile = browser->profile()->GetOriginalProfile();
215 219
216 browser = chrome::FindTabbedBrowser(profile, false); 220 browser = chrome::FindTabbedBrowser(profile, false);
217 if (!browser) { 221 if (!browser) {
218 browser = 222 Browser::CreateParams params =
219 new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile)); 223 Browser::CreateParams(Browser::TYPE_TABBED, profile, user_gesture);
224 browser = new Browser(params);
220 browser->window()->Show(); 225 browser->window()->Show();
221 } 226 }
222 } 227 }
223 228
224 // If index is specified, honor the value, but keep it bound to 229 // If index is specified, honor the value, but keep it bound to
225 // -1 <= index <= tab_strip->count() where -1 invokes the default behavior. 230 // -1 <= index <= tab_strip->count() where -1 invokes the default behavior.
226 int index = -1; 231 int index = -1;
227 if (params.index.get()) 232 if (params.index.get())
228 index = *params.index; 233 index = *params.index;
229 234
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 581
577 void ExtensionTabUtil::CreateTab(WebContents* web_contents, 582 void ExtensionTabUtil::CreateTab(WebContents* web_contents,
578 const std::string& extension_id, 583 const std::string& extension_id,
579 WindowOpenDisposition disposition, 584 WindowOpenDisposition disposition,
580 const gfx::Rect& initial_rect, 585 const gfx::Rect& initial_rect,
581 bool user_gesture) { 586 bool user_gesture) {
582 Profile* profile = 587 Profile* profile =
583 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 588 Profile::FromBrowserContext(web_contents->GetBrowserContext());
584 Browser* browser = chrome::FindTabbedBrowser(profile, false); 589 Browser* browser = chrome::FindTabbedBrowser(profile, false);
585 const bool browser_created = !browser; 590 const bool browser_created = !browser;
586 if (!browser) 591 if (!browser) {
587 browser = new Browser(Browser::CreateParams(profile)); 592 Browser::CreateParams params = Browser::CreateParams(profile, user_gesture);
593 browser = new Browser(params);
594 }
588 chrome::NavigateParams params(browser, web_contents); 595 chrome::NavigateParams params(browser, web_contents);
589 596
590 // The extension_app_id parameter ends up as app_name in the Browser 597 // The extension_app_id parameter ends up as app_name in the Browser
591 // which causes the Browser to return true for is_app(). This affects 598 // which causes the Browser to return true for is_app(). This affects
592 // among other things, whether the location bar gets displayed. 599 // among other things, whether the location bar gets displayed.
593 // TODO(mpcomplete): This seems wrong. What if the extension content is hosted 600 // TODO(mpcomplete): This seems wrong. What if the extension content is hosted
594 // in a tab? 601 // in a tab?
595 if (disposition == WindowOpenDisposition::NEW_POPUP) 602 if (disposition == WindowOpenDisposition::NEW_POPUP)
596 params.extension_app_id = extension_id; 603 params.extension_app_id = extension_id;
597 604
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 chrome::ShowSingletonTabOverwritingNTP(browser, params); 674 chrome::ShowSingletonTabOverwritingNTP(browser, params);
668 return true; 675 return true;
669 } 676 }
670 677
671 // static 678 // static
672 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) { 679 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) {
673 return browser && browser->tab_strip_model() && !browser->is_devtools(); 680 return browser && browser->tab_strip_model() && !browser->is_devtools();
674 } 681 }
675 682
676 } // namespace extensions 683 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698